- 2
- 0
- 约1.67万字
- 约 81页
- 2022-03-25 发布于广东
- 举报
* * 五、DS1302与单片机的接口 下面程序对DS1302初始化,设定时间、日期初始值,然后再读出时间、日期。 * * #includereg51.h #define uchar unsigned char sbit DS1302_SCLK=P1^0; sbit DS1302_IO=P1^1; sbit DS1302_RST=P1^2; uchar bdata Bits; sbit Bits0=Bits^0; sbit Bits7=Bits^7; typedef struct { uchar Second; uchar Minute; uchar Hour; uchar Week; uchar Day; uchar Month; uchar Year; }DS1302_TIME; DS1302_TIME *Time; #define DS1302_SECOND 0x80 #define DS1302_MINUTE 0x82 #define DS1302_HOUR 0x84 #define DS1302_WEEK 0x8A #define DS1302_DAY 0x86 #define DS1302_MONTH 0x88 #define DS1302_YEAR 0x8C void DS1302_Init(void ) //初始化DS1302,写入时间和日期 { DS1302_Write_addr(0x8E ,0x00); //向0x8E地址写入0x00,清写保 护位WP DS1302_Write_addr (DS1302_SECOND , Time-Second); DS1302_Write_addr (DS1302_MINUTE , Time- Minute); DS1302_Write_addr (DS1302_HOUR , Time- Hour); DS1302_Write_addr (DS1302_DAY , Time- Day); DS1302_Write_addr (DS1302_WEEK , Time- Week); DS1302_Write_addr (DS1302_MONTH, Time- Month); DS1302_Write_addr (DS1302_YEAR, Time- Year); DS1302_Write_addr (0x8E ,0x80); //向0x8E地址写入0x80,置位写 保护位WP } * * void DS1302_ReadTime(void ) //读取DS1302中的时间、日期 { uchar temp; temp = DS1302_Read_addr (DS1302_SECOND); Time-Second = ((temp0x70)4)*10 + (temp0x0F); temp = DS1302_Read_addr (DS1302_MINUTE); Time-Minute = ((temp0x70)4)*10 + (temp0x0F); temp = DS1302_Read_addr (DS1302_HOUR); Time-Hour = ((temp0x70)4)*10 + (temp0x0F); temp = DS1302_Read_addr (DS1302_DAY); Time-Day = ((temp0x70)4)*10 + (temp0x0F); temp = DS1302_Read_addr (DS1302_WEEK); Time-Week = ((temp0x70)4)*10 + (temp0x0F); temp = DS1302_Read_addr (DS1302_MONTH); Time-Month = ((temp0x70)4)*10 + (temp0x0F); temp = DS1302_Read_addr (DS1302_YEAR); Time-Year = ((temp0xF0)4)*10 + (temp0x0F); } * * void main(void ) { Time-Second =0x10; //设置初始值,BCD
原创力文档

文档评论(0)