- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
LCD1602液晶显示DS1302实时时钟Proteus仿真.
Proteus仿真图:仿真程序:#includereg52.h#includeintrins.h#includestring.h#define uint unsigned int#define uchar unsigned char//*******LCD*******sbit LCDRS=P2^0;//LCD数据/命令选择端sbit LCDRW=P2^1;sbit LCDEN=P2^2;//LCD使能新号端//******DS1302******sbit IO=P1^0;//1302数据线sbit SCLK=P1^1;//1302时钟线sbit RST=P1^2;//复位uint num=0;//uchar *week[]={SUN,***,MON,TUS,WEN,THU,FRI,SAT};uchar Date[]={Date: 2000-00-00 };uchar Time[]={Time: *00:00-00* };uchardate_time[7];//从ds1302读取的当前日期时间//=======延时=======void delay(uint z){uintx,y;for(x=z;x0;x--)for(y=110;y0;y--);}//********向1302写数据*********void write_ds1302(uchardat){uchari;for(i=0;i8;i++){IO=dat 0x01;//保持最后一位为1,读状态SCLK=1;delay(1);SCLK=0;dat = 1;}}//*********从1302读数据*********uchar read_ds1302(){uchari,b=0x00;for(i=0;i8;i++){b |= _crol_((uchar)IO,i);SCLK=1;delay(1);SCLK=0;}return b/16*10+b%16;//与BCD码转换}//*********从指定位置读数据********ucharread_data(ucharaddr){uchardat;RST=0;SCLK=0;RST=1;write_ds1302(addr);dat=read_ds1302();SCLK=1;RST=0;return dat;}//*********读取当前日期时间*********void read_date_time(){uchari,addr=0x81;for(i=0;i7;i++){date_time[i]=read_data(addr);addr+=2;}}//----------LCD写指令----------void lcd_write_com(uchar com){LCDRS=0;//RS为0时,写指令,RS为1时,写数据P0=com;delay(5);LCDEN=1;delay(5);LCDEN=0;}//----------LCD写数据----------void lcd_write_data(uchardat){LCDRS=1;P0=dat;delay(5);LCDEN=1;delay(5);LCDEN=0;}//-------LCD初始化-------void lcd_init(){LCDEN=0;lcd_write_com(0x38);//LCD显示模式设置lcd_write_com(0x0c);//LCD显示开/关及光标设置lcd_write_com(0x06);//当写一个字符后地址指针加1,且光标加1lcd_write_com(0x01);//显示清屏}//---------设置液晶显示位置-----------void set_lcd_pos(uchar p){lcd_write_com(p | 0x80);}//---------液晶显示程序----------void lcd_print(ucharp,uchar *s){set_lcd_pos(p);for(num=0;num16;num++){lcd_write_data(s[num]);delay(10);}}//----------日期时间转换-----------void format_datetime(uchard,uchar *p){p[0]=d/10+0;p[1]=d%10+0;}//---------主程序----------void main(){LCDRW=0;lcd_init();while(1){read_date_time();format_datetime(date_time[6],Date+8);//年月日format_datetime(date_time[4],Date+11);format_datetime(date_tim
文档评论(0)