一、DS1302实时时钟
1.引脚定义和应用电路:
2.寄存器
第零位:0读,1写
二、相关代码
1.初始化:
2.写入
3.读取:
4.变量相关:
1)command用什么根据需求去协议里查找(寄存器那块的图)
5.注意:
1)
2)
6.BCD码
7.初始定义:
8.设置时间
9..H设置
三、逻辑判断相关代码
1.模式切换:
while(1)
{
KeyNum=Key();
if(KeyNum==1)
{
if(MODE==0){MODE=1;}
else if(MODE==1){MODE=0;DS1302_SetTime();}
}
switch(MODE)
{
case 0:TimeShow();break;
case 1:TimeSet();break;
}
}
2.越界清零
TimeSetSelect++;
TimeSetSelect%6;
3.选择更改的位
Ds1302_Time[TimeSetSelect]++;
4.数据合理性判断
if(DS1302_Time[1]>12){DS1302_Time[1]=1;}
if(DS1302_Time[1]==1||DS1302_Time[1]==3||DS1302_Time[1]==5||DS1302_Time[1]==7||
DS1302_Time[1]==8||DS1302_Time[1]==10||DS1302_Time[1]==11)
{
if(DS1302_Time[2]>31){DS1302_Time[2]=1}
}
else if(DS1302_Time[1]==4||DS1302_Time[1]==6||DS1302_Time[1]==9||DS1302_Time[1]==12)
{
if(DS1302_Time[2]>30){DS1302_Time[2]=1}
}
else if(DS1302_Time[1]==2)
{
if(DS1302_Time[0]%4==0)
{
if(DS1302_Time[2]>29){DS1302_Time[2]=1}
}
else if
{
if(DS1302_Time[2]>28){DS1302_Time[2]=1}
}
}
if(DS1302_Time[3]>23){DS1302_Time[3]=0;}
if(DS1302_Time[4]>59){DS1302_Time[4]=0;}
if(DS1302_Time[6]>59){DS1302_Time[6]=0;}
--进行判断:使用char类型不用unsigned char类型
5.对应位进行闪烁:
void Timer0_Routine()
{
static unsigned int T0Count;
TL0=0x19;
TH0=OxFC;
T0Count++;
if(T0Count>=500)
{
T0Count=0;
TimeSetFlashFlag=!TimeSetFlashFlag;
}
}
if(TimeSetSelect==0&&TimeSetFlashFlag==1){LCD_ShowString(1,1," ");}
else {LCD_ShowNum(1,1,DS1302_Time[0],2);}