📄 ds1302.c
字号:
#include <Intrins.h>#include <At89x51.h>#include "constant.h"#include "function.h"#include "variable.h"#include "chinese_const.h"sbit a0=ACC^0;sbit a1=ACC^1;sbit a2=ACC^2;sbit a3=ACC^3;sbit a4=ACC^4;sbit a5=ACC^5;sbit a6=ACC^6;sbit a7=ACC^7;//#define DS1302_CLK P1_4//#define DS1302_IO P1_5//#define DS1302_RST P1_6void Reset_Ds1302(void){ DS1302_CLK=0; DS1302_RST=0; _nop_(); DS1302_RST=1;}void Ds1302_Write_Byte(unsigned char byte){ ACC=byte; DS1302_IO=a0;_nop_();DS1302_CLK=0;_nop_();DS1302_CLK=1;_nop_(); DS1302_IO=a1;_nop_();DS1302_CLK=0;_nop_();DS1302_CLK=1;_nop_(); DS1302_IO=a2;_nop_();DS1302_CLK=0;_nop_();DS1302_CLK=1;_nop_(); DS1302_IO=a3;_nop_();DS1302_CLK=0;_nop_();DS1302_CLK=1;_nop_(); DS1302_IO=a4;_nop_();DS1302_CLK=0;_nop_();DS1302_CLK=1;_nop_(); DS1302_IO=a5;_nop_();DS1302_CLK=0;_nop_();DS1302_CLK=1;_nop_(); DS1302_IO=a6;_nop_();DS1302_CLK=0;_nop_();DS1302_CLK=1;_nop_(); DS1302_IO=a7;_nop_();DS1302_CLK=0;_nop_();DS1302_CLK=1;_nop_();}unsigned char Ds1302_Read_Byte(void){ DS1302_IO=1; DS1302_CLK=1;_nop_();DS1302_CLK=0;_nop_();a0=DS1302_IO; DS1302_CLK=1;_nop_();DS1302_CLK=0;_nop_();a1=DS1302_IO; DS1302_CLK=1;_nop_();DS1302_CLK=0;_nop_();a2=DS1302_IO; DS1302_CLK=1;_nop_();DS1302_CLK=0;_nop_();a3=DS1302_IO; DS1302_CLK=1;_nop_();DS1302_CLK=0;_nop_();a4=DS1302_IO; DS1302_CLK=1;_nop_();DS1302_CLK=0;_nop_();a5=DS1302_IO; DS1302_CLK=1;_nop_();DS1302_CLK=0;_nop_();a6=DS1302_IO; DS1302_CLK=1;_nop_();DS1302_CLK=0;_nop_();a7=DS1302_IO; return ACC;}unsigned char Ds1302_Read_Register(unsigned char address){unsigned char i; Reset_Ds1302(); Ds1302_Write_Byte(address); i=Ds1302_Read_Byte(); DS1302_RST=0; DS1302_CLK=0; return i;}void Ds1302_Write_Register(unsigned char address,unsigned char content){ Reset_Ds1302(); Ds1302_Write_Byte(address); Ds1302_Write_Byte(content); DS1302_RST=0; DS1302_CLK=0;}void Ds1302_Ini(void){ Ds1302_Write_Register(0x8e,0x00);//Ds1302 write enable:10001110,0 Ds1302_Write_Register(0x80,0x50);//Ds1302 sec,same as enable osc Ds1302_Write_Register(0x82,0x58);//Ds1302 min Ds1302_Write_Register(0x84,0x23);//Ds1302 hour Ds1302_Write_Register(0x86,0x19);//Ds1302 day Ds1302_Write_Register(0x88,0x12);//Ds1302 month Ds1302_Write_Register(0x8a,0x5);//Ds1302 week Ds1302_Write_Register(0x8c,0x04);//Ds1302 year Ds1302_Write_Register(0x8e,0x80);//Ds1302 write disable:10001110,0}void Ds1302_Demo(void){unsigned char sec,min,hour,day,month,week,year; EA=0; Reset_Ds1302(); Ds1302_Write_Byte(0xbf); sec=Ds1302_Read_Byte(); min=Ds1302_Read_Byte(); hour=Ds1302_Read_Byte(); day=Ds1302_Read_Byte(); month=Ds1302_Read_Byte(); week=Ds1302_Read_Byte(); year=Ds1302_Read_Byte(); EA=1; DS1302_RST=0; DS1302_CLK=0; Write_Command(LCD_LINE3_ADDR);//for lcd display Write_Data(NumberToCode[2]); Write_Data(NumberToCode[0]); Write_Command(LCD_LINE3_ADDR+1); Write_Data(NumberToCode[(year&0xf0)>>4]); Write_Data(NumberToCode[year&0x0f]); Lcd_Display_Char(3,3,'Y'); Write_Command(LCD_LINE3_ADDR+3); Write_Data(NumberToCode[(week&0xf0)>>4]); Write_Data(NumberToCode[week&0x0f]); Write_Command(LCD_LINE4_ADDR); Write_Data(NumberToCode[(month&0xf0)>>4]); Write_Data(NumberToCode[month&0x0f]); Write_Command(LCD_LINE4_ADDR+1); Write_Data('-'); Write_Data(NumberToCode[(day&0xf0)>>4]); Write_Command(LCD_LINE4_ADDR+2); Write_Data(NumberToCode[day&0x0f]); Write_Data(' '); Write_Command(LCD_LINE4_ADDR+3); Write_Data(NumberToCode[(hour&0xf0)>>4]); Write_Data(NumberToCode[hour&0x0f]); Write_Command(LCD_LINE4_ADDR+4); Write_Data(':'); Write_Data(NumberToCode[(min&0xf0)>>4]); Write_Command(LCD_LINE4_ADDR+5); Write_Data(NumberToCode[min&0x0f]); Write_Data(':'); Write_Command(LCD_LINE4_ADDR+6); Write_Data(NumberToCode[(sec&0xf0)>>4]); Write_Data(NumberToCode[sec&0x0f]); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -