《DS1302驱动程序详解(3页).doc》由会员分享,可在线阅读,更多相关《DS1302驱动程序详解(3页).doc(3页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、-DS1302驱动程序详解-第 3 页DS1302驱动程序详解 DS1302引脚介绍特性介绍驱动程序详解sbit IO=P10;/DS1302数据线sbit SCLK=P11;/DS1302时钟线sbit RST=P12;/DS1302复位线uchar WEEK4=SUN,*,MON,TUS,WEN,THU,FRI,SAT; /亦可定义成指针数组*WEEKuchar LCD_DSY_BUFFER1=DATE 00-00-00 ;uchar LCD_DSY_BUFFER2=TIME 00:00:00 ;uchar DateTime7;void Initialize_LCD();void Disp
2、lay_LCD_String(uchar p,uchar *s);void DelayMS(uint ms); /向DS1302写入一个字节void Write_A_Byte_TO_DS1302(uchar x)uchar i;SCLK=0; /拉低SCLK,为脉冲上升沿写入数据做好准备for (i=0;i=1; /将x的各数据位右移1位,准备写入下一个数据位/从DS1302读取一个字节,/注意:DS1302中所存放的数据是BCD码,在读写时要注意转换uchar Get_A_Byte_FROM_DS1302()uchar i,b=0x00;for (i=0;i8;i+)b |= _crol_(
3、uchar)IO,i);/将uchar类型的IO数据左移i位SCLK=1; /将SCLK置于高电平,为下降沿读出SCLK=0; /时钟下降沿读取return (b/16)*10+b%16; /将BCD码转换为十进制数/从DS1302指定位置读取数据uchar Read_Data(uchar addr)uchar dat;RST=0; /拉低RSTSCLK=0; /确保写数据前SCLK被拉低RST=1; /启动数据传输Write_A_Byte_TO_DS1302(addr); /写入命令字dat=Get_A_Byte_FROM_DS1302();SCLK=1; /将时钟电平置于已知状态RST=0
4、; /禁止数据传递return dat;/读取当前日期时间void GetTime()uchar i,addr =0x81;for (i=0;i7;i+)DateTimei = Read_Data(addr);addr+=2;/日期与时间值转换为数字字符void Format_DataTime(uchar d,uchar *a)a0=d/10+0;a1=d%10+0;/主程序void main()Initialize_LCD();while(1)GetTime();Format_DataTime(DateTime6,LCD_DSY_BUFFER1+5);/0x8D 年份寄存器 Format_D
5、ataTime(DateTime4,LCD_DSY_BUFFER1+8);/0x89 月份寄存器Format_DataTime(DateTime3,LCD_DSY_BUFFER1+11); /0x87 日期寄存器/星期strcpy (LCD_DSY_BUFFER1+13,WEEKDateTime5);/将字符串WEEKDateTime5复制到字符数组LCD_DSY_BUFFER1+13中 /0x8B 周日寄存器Format_DataTime(DateTime2,LCD_DSY_BUFFER2+5); /0x85 小时寄存器Format_DataTime(DateTime1,LCD_DSY_BUFFER2+8); /0x83 分钟寄存器Format_DataTime(DateTime0,LCD_DSY_BUFFER2+11); /0x81 秒寄存器Display_LCD_String(0x00,LCD_DSY_BUFFER1); /第一行显示年、月、日、星期几Display_LCD_String(0x40,LCD_DSY_BUFFER2); /第二行显示小时、分钟、秒
限制150内