ds1302实时时钟c程序加仿真原理图.docx
- 文档编号:796059
- 上传时间:2022-10-13
- 格式:DOCX
- 页数:25
- 大小:96.98KB
ds1302实时时钟c程序加仿真原理图.docx
《ds1302实时时钟c程序加仿真原理图.docx》由会员分享,可在线阅读,更多相关《ds1302实时时钟c程序加仿真原理图.docx(25页珍藏版)》请在冰豆网上搜索。
ds1302实时时钟c程序加仿真原理图
#ifndef_1602_yejing_
#define_1602_yejing_
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitlcden=P3^4;
sbitlcdrs=P3^5;
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voidwrite_com(ucharcom)
{
lcdrs=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
voidwrite_data(uchardate)
{
lcdrs=1;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
voidwrite_lcd(ucharx,char*cha)
{ucharlength,i=0;
write_com(x);
for(length=0;cha[length]!
=0;length++);
for(i=0;i { write_data(cha[i]); delay(5); } } voidwrite_bcd(ucharcha) { ucharch1,ch2; ch1=(cha&0x0f)+'0'; ch2=((cha>>4)&0x0f)+'0'; write_data(ch2); write_data(ch1); } voidwrite_fd(floatt)//显示float型函数 {uchars1,s2,s3,s4; uinttt; tt=t*100; s1=tt/1000;s1+=0x30; s2=tt%1000/100;s2+=0x30; s3=tt%1000%100/10;s3+=0x30; s4=tt%10;s4+=0x30; write_data(s1); write_data(s2); write_data(46); write_data(s3); write_data(s4); } voidinit() { lcden=0; write_com(0x38);//设置16*2显示 write_com(0x0c);//设置开显示,不显示光标 write_com(0x06);//写一个字符后地址指针加1 write_com(0x01);//显示清0,数据指针清0 } #endif /************************************************************************** THEREALTIMERDS1302DRIVERLIB COPYRIGHT(c)2010BYZYK. --ALLRIGHTSRESERVED-- FileName: DS1302.h Author: ZHANGYUANKE Created: 2010/06/21 Modified: NO Revision: 1.0 ***************************************************************************/ #ifndef_DS1302_2010_06_21_ #define_DS1302_2010_06_21_ sbitSCLK=P1^6;//实时时钟时钟线引脚 sbitDIO=P1^7;//实时时钟数据线引脚 sbitCE=P1^5;//实时时钟复位线引脚 sbitACC0=ACC^0; sbitACC7=ACC^7; charsec,min,hour,day,mon,week,year; char*tab[7]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat",}; voidwrite_1302(ucharadd,uchardat) { uchari; ACC=add; CE=0; SCLK=0; CE=1; for(i=0;i<8;i++) { DIO=ACC0; SCLK=1; SCLK=0; ACC>>=1; } ACC=dat; for(i=0;i<8;i++) { DIO=ACC0; SCLK=1; SCLK=0; ACC>>=1; } CE=0; } ucharread_1302(ucharadd) { uchari; ACC=add; CE=0; SCLK=0; CE=1; for(i=8;i>0;i--)//为什么不能for(i=0;i<8;i++)又为什么用我写的函数不能改时间! ! ! ! ! ! ! ! ! ! ! ! { DIO=ACC0; SCLK=1; ACC>>=1; SCLK=0; } for(i=8;i>0;i--) {ACC>>=1; ACC7=DIO; SCLK=1; SCLK=0; } return(ACC); CE=0; } voidinputbyte(uchard)//实时时钟写入一字节(内部函数) { uchari; ACC=d; for(i=8;i>0;i--) { DIO=ACC0;//相当于汇编中的RRC SCLK=1; SCLK=0; ACC>>=1; } } ucharoutputbyte()//实时时钟读取一字节(内部函数) { uchari; for(i=8;i>0;i--) { ACC=ACC>>1;//相当于汇编中的RRC ACC7=DIO; SCLK=1; SCLK=0; } return(ACC); } voidwrite_1302(ucharadd,uchardat)//ucAddr: DS1302地址,ucData: 要写的数据 { CE=0; SCLK=0; CE=1; inputbyte(add);//地址,命令 inputbyte(dat);//写1Byte数据 CE=0; } ucharread_1302(ucharadd)//读取DS1302某地址的数据 { uchardat; CE=0; SCLK=0; CE=1; inputbyte(add);//地址,命令 dat=outputbyte();//读1Byte数据 CE=0; return(dat); } voidsetprotect(bitflag) { if(flag) write_1302(0x8e,0x80); else write_1302(0x8e,0x00); } voidgettime_1302() { sec=read_1302(0x81); min=read_1302(0x83); hour=read_1302(0x85); day=read_1302(0x87); mon=read_1302(0x89); week=read_1302(0x8b); year=read_1302(0x8d); } voidstop_time(bitflag)//是否将时钟停止 { unsignedchardat; dat=read_1302(0x81); setprotect(0); if(flag) write_1302(0x80,dat|0x80); else write_1302(0x80,dat&0x7F); } voidinit_1302() { ucharsecond=read_1302(0x81); if(second&0x80) write_1302(0x80,0); } /******************************************************************************** voidBurstWrite1302(unsignedchar*pWClock)//往DS1302写入时钟数据(多字节方式) { unsignedchari; Write1302(0x8e,0x00);//控制命令,WP=0,写操作? DS1302_RST=0; DS1302_CLK=0; DS1302_RST=1; DS1302InputByte(0xbe);//0xbe: 时钟多字节写命令 for(i=8;i>0;i--)//8Byte=7Byte时钟数据+1Byte控制 { DS1302InputByte(*pWClock);//写1Byte数据 pWClock++; } DS1302_CLK=1; DS1302_RST=0; } voidBurstRead1302(unsignedchar*pRClock)//读取DS1302时钟数据(时钟多字节方式) { unsignedchari; DS1302_RST=0; DS1302_CLK=0; DS1302_RST=1; DS1302InputByte(0xbf);//0xbf: 时钟多字节读命令 for(i=8;i>0;i--) { *pRClock=DS1302OutputByte();//读1Byte数据 pRClock++; } DS1302_CLK=1; DS1302_RST=0; } ********************************************************************************/ #endif #include"1602.h" #include"DS1302.h" sbitset=P3^2; sbitjia1=P3^0; sbitjian1=P3^1; ucharslect=0; ucharbcdtoasc(ucharcha) { return((cha/16)*10+(cha%16)); } ucharasctobcd(ucharcha) { return((cha/10)*16+(cha%10)); } voiddisp_week() {switch(week) { case1: {write_lcd(0xcd,tab[0]);break;} case2: {write_lcd(0xcd,tab[1]);break;}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ds1302 实时 时钟 程序 仿真 原理图