DS1302时钟电路.doc
《DS1302时钟电路.doc》由会员分享,可在线阅读,更多相关《DS1302时钟电路.doc(30页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、原理图源程序#include/*位定义*/sbit io=P16; /ds1302的串行数据I/O口sbit clk=P15; /ds1302的时钟口sbit rst=P17; /ds1302的复位口sbit acc0=ACC0; /移位时的第0位sbit acc7=ACC7; /移位时用的第7位sbit busy=P07; /lcd 忙标志位sbit rs=P20; /lcd 数据状态位sbit rw=P21; /lcd 读写控件位sbit re=P22; /lcd 使能位sbit menu=P33; /菜单sbit inc=P32; /加一sbit dec=P35; /减一sbit qui
2、t=P34; /退出/*全局变量*/unsigned char sec,min,hour,day,month,week,year; /秒,分,时,日,月,星期,年char newsec,newmin,newhour,newday,newmonth,newweek,newyear; /重写数据用的秒,分,时unsigned char bksec,bkmin,bkhour,bkweek,bkday,bkmonth,bkyear,down,count; /闪烁标志位unsigned char flag,daflag; / 加减标志位,时间日期标志位unsigned char timete8,time
3、de10; /分别存放,时分秒;年月日unsigned char week13=SUN; /星期日unsigned char week23=MON; / 一unsigned char week33=TUE; / 二unsigned char week43=WED; / 三unsigned char week53=THU; / 四unsigned char week63=FRI; / 五unsigned char week73=SAT; / 六unsigned char name=; / 设计者名字/*函数申明*/void delay(unsigned char ms); /延时void wri
4、tebyte(unsigned char wdat);/写一字节到ds1302unsigned char readbyte(); /从ds1302中读一字节unsigned char readdat(); /读ds1302某地址数据void writedat(unsigned char waddr,unsigned char x);/写数据到ds1302的某地址void ifprotect(flag); /是否写允许void timebuf(); /时间缓冲区void checkbusy(); /测试lcd忙碌状态void wrcom(unsigned char com); /写指令到lcdv
5、oid wrdat(unsigned char dat); /写数据到lcdvoid lcdinit(); /lcd初始化void scanmenu(); /menu扫描void funcmenu(); /menu功能void scaninc(); /扫描加能函数void scandec(); /扫描减一函数void scanquit(); /扫描退出函数void funcinc(); /加一功能函数void funcdec(); /减一功能函数void funcquit(); /退出功能函数void turn_sub(unsigned char newval,unsigned char ne
6、wbk,unsigned char newaddr); /调时子函数void sub_buf(unsigned char subk,unsigned char bfte,unsigned char fda); /时间缓冲子函数void sub_week(unsigned char num); /显示星期子函数/*ds1302函数局部*/void delay(unsigned char ms) /延时函数 unsigned char i; unsigned char m=4; while(ms-) for(i=0;i0;i-) io=acc0; /从最低位开始传送 clk=1; /产生一个边沿
7、在写指令时供产生上升沿,在写数据时供产生紧挨着的下降沿 clk=0; ACC=1; unsigned char readbyte() /从ds1302中读一字节 unsigned char i1; for(i1=8;i10;i1-) ACC=1; /保证最低位传送至最低位 acc7=io; /从最低位开始传送 clk=1; /产生一个边沿 在读数据时供产生上升沿 clk=0; return(ACC);unsigned char readdat(unsigned char raddr) /读ds1302某地址数据 unsigned char value; rst=0; /在读写前何证rst为低电
8、平 clk=0; rst=1; /在读写期间保证rst为高电平 且只有在clk为低 电平时才能变为高电平 writebyte(raddr); value=readbyte(); rst=0; /读写完毕后保证rst为低,clk为高 clk=1; return(value);/*写数据到ds1302的某地址*/void writedat(unsigned char waddr,unsigned char x) rst=0; clk=0; rst=1; writebyte(waddr); writebyte(x); rst=0; clk=1;/*是否写保护*/void ifprotect(flag
9、) if(flag) /flag=1时禁止写入 writedat(0x8e,0x10); else /flag=0时允许写入 writedat(0x8e,0x00);void readtime() /读时间 unsigned char time; time=readdat(0x81); /读秒 sec=(time&0x70)4)*10+(time&0x0f); /将bcd码转换成十进制数 time=readdat(0x83); /读分 min=(time&0x70)4)*10+(time&0x0f); time=readdat(0x85); /读时 hour=(time&0x70)4)*10+
10、(time&0x0f); time=readdat(0x87); /读日 day=(time&0x70)4)*10+(time&0x0f); time=readdat(0x89); /读月 month=(time&0x70)4)*10+(time&0x0f); time=readdat(0x8d); /读年 year=(time4)*10+(time&0x0f); time=readdat(0x8b); /读星期 week=time&0x07;/*时间缓冲子函数*/void sub_buf(unsigned char subk,unsigned char bfte,unsigned char
11、fda) if(subk=1) /判断是否正常显示 if(daflag=1) /判断是日间还是日期 timetefda=bfte%10+48; timetefda+1=bfte/10+48; else timedefda=bfte%10+48; timedefda+1=bfte/10+48; else /显示空 if(daflag=1) /判断是时间还是日期 timetefda=0x02; timetefda+1=0x02; else timedefda=0x02; timedefda+1=0x02; void timebuf() /时间缓冲区 readtime(); /调用读时间函数 daf
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DS1302 时钟 电路
限制150内