- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
用AT89C51与DS1302做的万年历c语言编程
//写的时候,是低电平改变数据,上升沿送入数据//读的时候,是低电平读入数据,下降沿使得从设备把数据放到总线上 //读的时候,是低电平读,但没有读出,提供下降沿使得从设备把数据放到总线上#includereg51.h#includeintrins.h#define uchar unsigned char#define uint unsigned intsbit rs=P2^4;sbit rw=P2^5;sbit en=P3^6;sbit reset=P3^3;sbit sclk=P3^0;sbit io=P3^1;uchar str1[]=date of today is:;uchar init[]={0x00,0x00,0x21,0x21,0x10,0x01,0x04};//秒,分,时,日,月,星期,年//void delay(){uchar j;for(j=250;j0;j--);}//-------------------液晶模块-----------------//void en_toggle(){??en=0;??//_nop_();delay();??en=1;delay();// _nop_();??en=0;}?????????????//注意必须加延时,否则会出问题的void is_ready(){???P2=0x00;//设置为输入口 //注意:现实中应该送0xff???rs=0;???rw=1;???en=1;???while(bflag);?? en=0;}void write_cmd(uchar cmd){??is_ready();??rs=0;??rw=0;??P2=cmd;??en_toggle();??_nop_();}void write_data(uchar indata){??is_ready();??rs=1;??rw=0;??P2=indata;??en_toggle();??_nop_();}void write_str(uchar addr,uchar *p){uchar i; write_cmd(addr);while(p[i]!=\0){write_data(p[i]);??i++;}}void write_position(uchar row,uchar col){uchar p;if(row==1){p=0x80+col-1;??write_cmd(p);}else{p=0xc0+col-1;??write_cmd(p);???}}void init_lcd(){write_cmd(0x38);write_cmd(0x0c);write_cmd(0x06);write_cmd(0x01);//清屏幕}//------------液晶模块结束---------------------
//-----------ds1302模块开始-------------------//注意点:sclk的上升沿输入数据,sclk的下跳沿输出数据//读写时都是从第0位开始void write_byte(uchar inbyte){uchar i;for(i=8;i0;i--){??sclk=0;???//写的时候低电平改变数据??if(inbyte0x01)??????io=1;??else??????io=0; ??sclk=1;??//写的时候高电平,把数据写入ds1302??_nop_();??inbyte=inbyte1;}}uchar read_byte() //sclk的下跳沿读数据{uchar i,temp=0; io=1;??????????//设置为输入口for(i=7;i0;i--){???sclk=0;???if(io==1)???temp=temp|0x80;???else???temp=temp0x7f;???sclk=1;???????//产生下跳沿???temp=temp1;}return (temp);}//----------往ds1302的某个地址写入数据-------------void write_ds1302(uchar cmd,uchar indata){??reset=1;??write_byte(cmd);??write_byte(indata);??reset=0;??sclk=0;}//----------读ds1302某地址的的数据-----------------uchar read
文档评论(0)