c语言编程上升沿怎样写,用AT89C51和DS1302做万年历c语言编程.doc

用AT89C51和DS1302做万年历c语言编程

//写的时候,是低电平改变数据,上升沿送入数据//读的时候,是低电平读入数据,下降沿使得从设备把数据放到总线上 //读的时候,是低电平读,但没有读出,提供下降沿使得从设备把数据放到总线上#include#include#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;j>0;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;i>0;i--){??sclk=0;???//写的时候低电平改变数据??if(inbyte&0x01)??????io=1;??else??????io=0; ??sclk=1;??//写的时候高电平,把数据写入ds1302??_nop_();??inbyte=inbyte>>1;}}uchar read_byte() //sclk的下跳沿读数据{uchar i,temp=0; io=1;??????????//设置为输入口for(i=7;i>0;i--){???sclk=0;???if(io==1)???temp=temp|0x80;???else???temp=temp&0x7f;???sclk=1;???????//产生下跳沿???temp=temp>>1;}return (temp);}//----------往ds1302的某个地址写入数据-------------void write_ds1302(uchar cmd,uchar indata){??reset=1;??write_byte(cmd);??write_byte(indata);??reset=0;??sclk=0;}//----------读ds1302某地址的的数据----------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值