历史上的今天
返回首页

历史上的今天

今天是:2025年01月16日(星期四)

正在发生

2020年01月16日 | AVR单片机对电子时钟的设计

2020-01-16 来源:eefocus

#include

#include

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

#definextal8

#defineCSPA5

#defineSIDPA6

#defineSCLKPA7

AVR单片机对电子时钟的设计

#defineSet_CS()DDRA|=(1《#defineSet_SID()DDRA|=(1《#defineSet_SCLK()DDRA|=(1《

#defineClr_CS()DDRA|=(1《#defineClr_SID()DDRA|=(1《#defineClr_SCLK()DDRA|=(1《

#defineHH2//定义时为2

#defineMM1//定义分为1

#defineSS0//定义秒为0

volatileunsignedcharTIme_h_m_s[3]={0,0,0};//时间的时分秒存贮单元

volaTIleunsignedcharflash_sign=0x00;

//====================================================================

//函数声明

voidDelay(uintms);//延时子程序

voidSerial_W_1byte_to_LCD(ucharRS,ucharW_data);

voidSerial_send_cmd(ucharsend_cmd);

voidSerial_send_data(ucharsend_data);

voidWrite_8bits(ucharW_bits);

voidLCD_Init(void);

voidSerial_send_string_to_xy(ucharrow,ucharcol,uchar*p);

voidDisplay_cLOCk1(ucharrow,ucharcol,uchar*TIme);

/*=============================================================

功能:TIMER2溢出中断函数

=================================================================*/

SIGNAL(SIG_OUTPUT_COMPARE2)//_VECTOR(3)

{

statICunsignedcharhalf_second;

if((++half_second)》=2)

{

if((++Time_h_m_s[SS])》=60)

{

Time_h_m_s[SS]=0;

if((++Time_h_m_s[MM])》=60)

{

Time_h_m_s[MM]=0;

if((++Time_h_m_s[HH])》=24)

Time_h_m_s[HH]=0;

}

}

half_second=0x00;

}

flash_sign&=0x01;

flash_sign^=0x01;//置位闪动标志位(该位为0时闪动)

}

/*******************************************************************

函数名:Port_init

入口参数:无

出口参数:无

建立日期:2008年05月09日

修改日期:

函数作用:MCU端口初始化函数

说明:

********************************************************************/

voidPort_init(void)

{

DDRC=~(1《PORTC=0x00;

ASSR|=(1TCCR2|=(1《OCR2=63;

}

/*******************************************************************

函数名:Serial_send_string

入口参数:*p_send_data

出口参数:无

建立日期:2008年05月09日

修改日期:

函数作用:发送字符串子函数

说明:

********************************************************************/

voidSerial_send_string(uchar*p_send_data)

{

uchar*p_temp;

p_temp=p_send_data;

while(*p_temp!=0)

{

Serial_send_data(*p_temp++);

}

}

//========================

/********************************************************************

函数名:Serial_send_string_to_xy

入口参数:row,col,*p

出口参数:无

建立日期:2008年04月13日

修改日期:

函数作用:

说明:

********************************************************************/

voidSerial_send_string_to_xy(ucharrow,ucharcol,uchar*p)

{

switch(row)

{

case0:Serial_send_cmd(0x80+col);

break;

case1:Serial_send_cmd(0x90+col);

break;

case2:Serial_send_cmd(0x88+col);

break;

case3:Serial_send_cmd(0x98+col);

break;

default:break;

}

while(*p!=0)

{

Serial_send_data(*p++);//写数据到RAM

}

}

/********************************************************************/

intmain(void)

{

PORTA=0XFF;//

DDRA=0XFF;//PA口全部设为输出模式

Port_init();

Clr_CS();

Clr_SID();

Clr_SCLK();

LCD_Init();

Delay(10);

LCD_Init();//初始化两边是关键,否则液晶上电重起将不能显示

sei();//开总中断

while(1)

{

asm(“nop”);

asm(“nop”);

Serial_send_cmd(0x30);//基本指令集,,绘图显示OFF

//Serial_send_cmd(0x01);//清除显示

Serial_send_string_to_xy(0,0,“现在时间:”);

Display_clock1(1,3,Time_h_m_s);

}

}

/*******************************************************************

函数名:LCD_Init

入口参数:无

出口参数:无

建立日期:2008年05月09日

修改日期:

函数作用:12864液晶初始化函数

说明:

********************************************************************/

voidLCD_Init(void)

{

ucharcmd;

Delay(50);

cmd=0x30;//功能设置8位数据,基本指令

Serial_send_cmd(cmd);

Delay(20);

cmd=0x0C;//显示状态ON,游标OFF,反白OFF

Serial_send_cmd(cmd);//写指令

Delay(20);

cmd=0x01;//清除显示

Serial_send_cmd(cmd);//写指令

Delay(20);

cmd=0x02;//地址归位

Serial_send_cmd(cmd);//写指令

Delay(20);

cmd=0x80;//设置DDRAM地址

Serial_send_cmd(cmd);//写指令

Delay(20);//延时

}

/*******************************************************************

函数名:Serial_send_cmd

入口参数:cmd

出口参数:无

建立日期:2008年4月13日

修改日期:

函数作用:写一个字节指令的到12864液晶,

说明:

********************************************************************/

voidSerial_send_cmd(ucharsend_cmd)

{

Serial_W_1byte_to_LCD(0,send_cmd);

}

/*******************************************************************

函数名:Serial_send_data

入口参数:cmd

出口参数:无

建立日期:2008年4月13日

修改日期:

函数作用:写一个字节数据到12864液晶,

说明:

********************************************************************/

voidSerial_send_data(ucharsend_data)

{

Serial_W_1byte_to_LCD(1,send_data);

}

名:Serial_Serial_W_1byte_to_LCD_to_LCD

入口参数:RW、RS、W_data

出口参数:无

建立日期:2007年3月3日

修改日期:

函数作用:写一个字节的数据到12864液晶,包括指令和数据

说 明:RW=1,从液晶读数据到MCU;RW=0,写一个数据到液晶;

(一般RW都设为0,即只向液晶写数据,不读数据)

RS=1,写入的是数据;RS=0,写入的是指令;

一般模式:RW=0,RS=1;写数据

RW=0,RS=0;写指令

********************************************************************/

void Serial_W_1byte_to_LCD(uchar RS, uchar W_data)

{

uchar H_data,L_data,S_ID = 0xf8; //11111 RWRS 0

if(RS == 0)

{

S_ID &= ~0x02;

}

else //if(RS==1)

{

S_ID “= 0X02;

}

H_data = W_data;

H_data &= 0xf0; //屏蔽低4位的数据

L_data = W_data; //xxxx0000格式

L_data 《《= 4; //xxxx0000格式

L_data &= 0xf0; //屏蔽高4位的数据

Set_CS();

asm(”nop“);

asm(”nop“);

Write_8bits(S_ID); //发送S_ID

asm(”nop“);

Write_8bits(H_data); //发送H_data

asm(”nop“);

Write_8bits(L_data); //发送L_data

asm(”nop“);

Clr_CS();

}

/********************************************************************

函 数 名:Write_8bits

入口参数:W_bits

出口参数:无

建立日期:2007年3月3日

修改日期:

函数作用:负责串行输出8个bit位

说 明:

********************************************************************/

void Write_8bits(uchar W_bits)

{

uchar i,Temp_data;

Temp_data = W_bits;

for(i=0; i《8; i++)

{

if((Temp_data&0x80)==0)

{

Clr_SID();

}

else

{

Set_SID();

}

asm(”nop“);

asm(”nop“);

Set_SCLK();

asm(”nop“);

asm(”nop“);

Clr_SCLK();

asm(”nop“);

asm(”nop“);

Temp_data 《《= 1;

}

Clr_SID();

}

/********************************************************************

函 数 名:Delay

入口参数:ms

出口参数:无

建立日期:2007年3月3日

修改日期:

函数作用:毫秒级的延时程序,当晶振为12MHz时,xtal=12;

说 明:

********************************************************************/

void Delay(uint ms)

{

uint i;

while(ms--)

{

for(i=1;i《(uint)(xtal*143-2);i++)

;

}

}


推荐阅读

史海拾趣

GE Industrial Solutions公司的发展小趣事
使用高压测试仪测量输入输出之间的隔离电压,确保满足安全要求。
台湾君耀(Brightking)公司的发展小趣事

君耀(Brightking)公司于1996年在台湾新竹高科技园区创立,初期专注于防雷元器件的研发和生产。凭借对技术的深入研究和市场需求的敏锐洞察,君耀逐步在台湾的电子器件市场上占得一席之地。随着产品质量和技术含量的提升,君耀的产品开始受到国内外客户的青睐,销售网络逐渐拓展至全球。

Dover Corporation公司的发展小趣事

进入21世纪后,Dover Corporation开始实施多元化发展战略。除了电梯业务外,公司逐渐将业务扩展到其他领域,如工程产品、燃料解决方案、成像和身份识别等。这一战略的实施使Dover能够更好地应对市场变化,实现业务的持续增长。

GE Oil & Gas Digital Solutions公司的发展小趣事
在电子技术教学实验中,作为演示电阻测量原理的教具。
协顺电子(Finecables)公司的发展小趣事

协顺电子(Finecables)成立于2003年,当时的中国电子行业正处于快速发展期。公司创始人凭借对市场敏锐的洞察力和对技术的执着追求,决定进入连接器制造领域。在创业初期,公司面临着资金短缺、技术积累不足等挑战。然而,通过不懈的努力和团队的合作,协顺电子成功研发出首批产品,并获得了市场的认可。这一阶段的经历为公司的后续发展奠定了坚实的基础。

ASM公司的发展小趣事

进入21世纪,ASM公司开始关注中国市场的潜力。随着中国经济的快速增长和半导体产业的蓬勃发展,ASM公司看到了巨大的商机。公司加大了对中国市场的投入,与中国半导体代工厂建立了紧密的合作关系,为中国市场提供了高质量的产品和服务。这一举措不仅促进了ASM公司在中国市场的快速发展,也为中国半导体产业的进步做出了贡献。

问答坊 | AI 解惑

有青岛各高校的同学吗?海大、山科、青大、青科、理工、农大。。。。

本帖最后由 paulhyde 于 2014-9-15 09:41 编辑 论坛上有青岛高校的吗?大家报个名,相互交流下,谈谈09国赛的准备情况,有什么看法,有什么疑惑,大家都讨论下! 路过也要吱一声。  …

查看全部问答>

基于DDS9834函数发生器

本帖最后由 paulhyde 于 2014-9-15 03:50 编辑 基于DDS9834函数发生器  …

查看全部问答>

lcd显示发现字在点击后变模糊

我的硬件平台: cpu arm9200, 2m 现存,外扩的1355 lcd 控制器, 触摸屏 软件: linux 2.4.27 + minigui 1.3 我启动了minigui的应用程序,这个界面上有按钮和文字,当我点击文字的时候,发现文字会变模糊,敲击越多越明显,这是怎么回事啊,是驱 ...…

查看全部问答>

C51管脚拉高问题

sbit BEEP = P1^3; BEEP=1; //蜂鸣 for(beep_delay=10;beep_delay>0;beep_delay--); BEEP=0; 将蜂鸣器蜂鸣然后关闭,但是BEEP管脚一直是低电平,为什么?…

查看全部问答>

请问在索尼爱立信这种手机开发外企都干些什么工作啊?

如题,不知道在手机开发外企都作什么,是否有技术含量。和赛门铁克比哪个公司更好呢? 谢谢大侠们的指点…

查看全部问答>

ARM常用汇编指令集使用手册

上传一本ARM指令集的简介,供大家学习使用......…

查看全部问答>

新手 求解答。。

刚学UCSO        请高人指点下下面这个语句到底是什么意思, 有什么作用。。。         OS_CPU_SR    cpu_sr;…

查看全部问答>

转行了出些芯片电子料件

不做电子了,手头上有不少芯片以及电子相关的料件,整理了部分: 1. AD623BR SOP8 数量25 价格10/PCS 2.CS4345 10-pin, 24-Bit, 192 kHz Stereo D/A Converter 数量2209 价格1/PCS 3.UTC 78L05L SOP8数量20 整出价格10 4.ON 78L05A SOP8数量180 ...…

查看全部问答>

富士通FRAM心得提交

富士的FRAM(铁电存储器)具有像E2PROM一样的非易失性,在系统断电的情况下,可以自动保存数据,用于工业现场或者一些需要记忆工作状态的情况。尤其是具有串行接口(I2C,SPI)和并行接口,还据高速和并行数据传送的时候省电的功能,这给我们的应用 ...…

查看全部问答>