网站大量收购独家精品文档,联系QQ:2885784924

用AT89C51与DS1302做的万年历c语言编程.doc

用AT89C51与DS1302做的万年历c语言编程.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
用AT89C51与DS1302做的万年历c语言编程

//写的时候,是低电平改变数据,上升沿送入数据 //读的时候,是低电平读入数据,下降沿使得从设备把数据放到总线上 //读的时候,是低电平读,但没有读出,提供下降沿使得从设备把数据放到总线上 #includereg51.h #includeintrins.h #define uchar unsigned char #define uint unsigned int sbit 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)

yan698698 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档