资源描述:
《以AT89C51单片机为核心,制作一个LCD显示的智能电子钟》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第6章 智能电子钟的设计6.1功能要求1.设计要求以AT89C51单片机为核心,制作一个LCD显示的智能电子钟:(1)计时:秒、分、时、天、周、月、年。(2)闰年自动判别。(3)五路定时输出,可任意关断(最大可到16路)。(4)时间、月、日交替显示。(5)自定任意时刻自动开/关屏。(6)计时精度:误差≤1秒/月(具有微调设置)。(7)键盘采用动态扫描方式查询。所有的查询、设置功能均由功能键K1、K2完成。2.工作原理本设计采用市场上流行的时钟芯片DS1302进行制作。DS1302是DALLAS公司推出的涓流
2、充电时钟芯片,内含一个实时时钟/日历和31字节静态RAM,可以通过串行接口与计算机进行通信,使得管脚数量减少。实时时钟/日历电路能够计算2100年之前的秒、分、时、日、星期、月、年的,具有闰年调整的能力。DS1302时钟芯片的主要功能特性:(1)能计算2100年之前的年、月、日、星期、时、分、秒的信息;每月的天数和闰年的天数可自动调整;时钟可设置为24或12小时格式。(2)31B的8位暂存数据存储RAM。(3)串行I/O口方式使得引脚数量最少。(4)DS1302与单片机之间能简单地采用同步串行的方式进行通信
3、,仅需3根线。(5)宽范围工作电压2.0-5.5V。(6)工作电流为2.0A时,小于300nA。(7)功耗很低,保持数据和时钟信息时功率小于1mW。6.2方案论证6.3系统硬件电路的设计……6.4系统程序的设计#include#include#include#defineucharunsignedchar#defineuintunsignedintsbitkey1=P3^0;//设置键sbitkey2=P3^3;//调节键加sbitkey3=P3^6;//
4、设置键减ucharsecond,minute,hour;ucharday,week,month,year;ucharpos_flag=0;ucharkeyflag=0;//按键标志位//函数声明ucharread1302(ucharadd);//读地址、数据voidwrite1302(ucharadd,uchardate);//写入地址、数据voidwrite_com_date(ucharadd,uchardate);voidinit_lcd();voidinit_ds1302();voiddelay(uc
5、hartime);voidDisp_1602(ucharx,uchary,uchar*p);voidkeyscan();voidsettime();voidsettime(){write1302(0x8e,0x00);//关闭写保护write1302(0x80,second/10*16+second%10);//秒write1302(0x82,minute/10*16+minute%10);//分write1302(0x84,hour/10*16+hour%10);//时write1302(0x86,day
6、/10*16+day%10);//日write1302(0x88,month/10*16+month%10);//月write1302(0x8a,week/10*16+week%10);//星期write1302(0x8c,year/10*16+year%10);//年write1302(0x8e,0x80);}voiddisplay(){second=read1302(0x81);write_com_date(0xca,0x30+second%10);write_com_date(0xc9,0x30+se
7、cond/10);minute=read1302(0x83);write_com_date(0xc7,0x30+minute%10);write_com_date(0xc6,0x30+minute/10);hour=read1302(0x85);write_com_date(0xc4,0x30+hour%10);write_com_date(0xc3,0x30+hour/10);day=read1302(0x87);write_com_date(0x8a,0x30+day%10);write_com_dat
8、e(0x89,0x30+day/10);week=read1302(0x8b);write_com_date(0xcd,0x30+week%10);month=read1302(0x89);write_com_date(0x87,0x30+month%10);write_com_date(0x86,0x30+month/10);year=read1302(0x8d);write_com_date(0x84,0x3