📄 ds1302_main.c
字号:
#include<pic.h>
#include"1302.h"
const unsigned char LEDCODE[]=
{
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x40,
};
unsigned char LEDBuffer[8];
unsigned char ScanLEDCount;
unsigned char SecondFlag;
unsigned int SecondCount;
//unsigned char Year,Month,Day,Hour,Minute,Second;
struct timestruct
{
unsigned char Year;
unsigned char Month;
unsigned char Day;
unsigned char Hour;
unsigned char Minute;
unsigned char Second;
}
struct timestruct DateTime;
void main(void)
{
unsigned char temp;
ADCON1|=0x07;
TRISD=0;
TRISE=0;
TMR0=256-4;
T0CS=0;
PSA=0;
T0IF=0;
PS2=1;
PS1=1;
PS0=1;
T0IE=1;
GIE=1;
init_1302(); //ds1302的初始
Write_DS1302(0x8e,0x00);//时钟停止工作
Write_DS1302(0X80,0X00);//设置DS1302的秒时钟
Write_DS1302(0X82,0X55);//设置DS1302的分时钟
Write_DS1302(0x84,0x11);//设置DS1302的时时钟
Write_DS1302(0x86,0x16);//设置DS1302的日期
Write_DS1302(0x88,0x11);//设置DS1302的月份
Write_DS1302(0x8a,0x05);//设置DS1302的年
Write_DS1302(0x8c,0x05);//设置DS1302的星期
Write_DS1302(0x8e,0x80);//启动DS1302开始工作
temp=Read_DS1302(0x8f);
LEDBuffer[0]=temp%16;
LEDBuffer[1]=temp/16;
while(1)
{
if(SecondFlag==1)
{
SecondFlag=0;
DateTime.Second=Read_DS1302(0x81);//读取DS1302的秒
DateTime.Minute=Read_DS1302(0x83);//读取DS1302的分
DateTime.Hour =Read_DS1302(0X85);//读取DS1302的时
DateTime.Day =Read_DS1302(0x87);//读DS1302的日
DateTime.Month =Read_DS1302(0X89);//读DS1302的月
DateTime.Year =Read_DS1302(0x8b);//读DS1302的年
LEDBuffer[0]=DateTime.Second%16;
LEDBuffer[1]=DateTime.Second/16;
LEDBuffer[2]=10;
LEDBuffer[3]=DateTime.Minute%16;
LEDBuffer[4]=DateTime.Minute/16;
LEDBuffer[5]=10;
LEDBuffer[6]=DateTime.Hour%16;
LEDBuffer[7]=DateTime.Hour/16;
/*
LEDBuffer[0]=Datetime.Day%16;
LEDBuffer[1]=Datetime.Day/16;
LEDBuffer[2]=10;
LEDBuffer[3]=Datetime.Month%16;
LEDBuffer[4]=Datetime.Month/16;
LEDBuffer[5]=10;
LEDBuffer[6]=Datetime.Year%16;
LEDBuffer[7]=Datetime.Year/16;
for(i=0;i<50000;i++);
for(i=0;i<50000;i++);
*/
}
}
}
void interrupt pic(void)
{
if(T0IF==1)
{
T0IF=0;
TMR0=256-4;
PORTD=LEDCODE[LEDBuffer[ScanLEDCount]];
PORTE=ScanLEDCount;
ScanLEDCount++;
if(ScanLEDCount==sizeof(LEDBuffer))ScanLEDCount=0;
SecondCount++;
if(SecondCount==500)
{
SecondCount=0;
SecondFlag=1;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -