DS1302 实时时钟.docx
- 文档编号:26001074
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:9
- 大小:14.98KB
DS1302 实时时钟.docx
《DS1302 实时时钟.docx》由会员分享,可在线阅读,更多相关《DS1302 实时时钟.docx(9页珍藏版)》请在冰豆网上搜索。
DS1302实时时钟
DS1302实时时钟
/*************************************
LED_D(数码管段选)LED_W(数码管位选)
*************************************/
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
#defineLED_WP2
#defineLED_DP0
sbitLED=P3^2;
sbitSCK=P3^4;
sbitIO=P3^5;
sbitRST=P3^6;
sbitset=P1^0;
sbits1=P1^1;
sbits2=P1^2;
ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0-9
ucharwrite_add[]={0x8c,0x8a,0x88,0x86,0x84,0x82,0x80};//年、星期、月份、日期、时、分、秒
ucharread_add[]={0x8d,0x8b,0x89,0x87,0x85,0x83,0x81};//年、星期、月份、日期、时、分、秒
uchartime_date[7];//年、星期、月份、日期、时、分、秒
uchardisp[4];
ucharnum,setn,minite,hour;
voiddelay(uintz)
{
uintx,y;
for(x=0;x for(y=0;y<110;y++); } voidWrite_DS1302_Byte(uchardat) { uchari; for(i=0;i<8;i++) { SCK=0; IO=dat&0x01; dat=dat>>1; SCK=1; } } voidWrite_DS1302(ucharadd,uchardat) { RST=0; _nop_(); SCK=0; _nop_(); RST=1; _nop_(); Write_DS1302_Byte(add); Write_DS1302_Byte(dat); RST=0; _nop_(); IO=1; SCK=1; } ucharRead_DS1302(ucharadd) { uchari,value; RST=0; _nop_(); SCK=0; _nop_(); RST=1; _nop_(); Write_DS1302_Byte(add); for(i=0;i<8;i++) { value=value>>1; SCK=0; if(IO) value=value|0x80; SCK=1; } RST=0; _nop_(); SCK=0; _nop_(); SCK=1; IO=1; returnvalue; } ucharChang_H_D(uchardat) { uchart; t=dat/16*10+dat%16; returnt; } ucharChang_D_H(uchardat) { uchart; t=dat/10*16+dat%10; returnt; } voidRead() { uchari; for(i=0;i<7;i++) { time_date[i]=Read_DS1302(read_add[i]); } } voidtimepro() { disp[0]=time_date[5]%16; disp[1]=time_date[5]/16; disp[2]=time_date[4]%16; disp[3]=time_date[4]/16; } voidkeyscan() { if(set==0) { delay(5); if(set==0) { while(! set); setn++; LED=0; TR0=0; num=0; TH0=(65536-50000)/256; TL0=(65536-50000)%256; Write_DS1302(0x8e,0x00); delay (1); Write_DS1302(0x80,Chang_D_H(128)); delay (1); Write_DS1302(0x8e,0x80); if(setn==3) { setn=0; TR0=1; Write_DS1302(0x8e,0x00); delay (1); Write_DS1302(0x80,Chang_D_H(0)); delay (1); Write_DS1302(0x8e,0x80); } } } if(setn! =0) { if(s1==0) { delay(5); if(s1==0) { while(! s1); Write_DS1302(0x8e,0x00); if(setn==1) { minite=Chang_H_D(time_date[5]); minite++; if(minite==60) minite=0; } Write_DS1302(0x82,Chang_D_H(minite)); if(setn==2) { hour=Chang_H_D(time_date[4]); hour++; if(hour==24) hour=0; } Write_DS1302(0x84,Chang_D_H(hour)); Write_DS1302(0x8e,0x80); } } } } voiddisplay() { if(setn! =2) { LED_W=1; LED_D=table[disp[0]]; delay(3); LED_D=0; LED_W=2; LED_D=table[disp[1]]; delay(3); LED_D=0; } if(setn! =1) { LED_W=4; LED_D=table[disp[2]]; delay(3); LED_D=0; LED_W=8; LED_D=table[disp[3]]; delay(3); LED_D=0; } } voidinit() { TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; ET0=1; EA=1; TR0=1; num=0; setn=0; LED_W=0; LED_D=0; LED=1; } voidShan() { LED=~LED; } voidmain() { init(); while (1) { Read(); timepro(); keyscan(); display(); } } voidtimer0(void)interrupt1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; num++; if(num==20) { num=0; Shan(); } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DS1302 实时时钟 实时 时钟