一、代码总览
void T1_Proc()
{
if(!TF1) //定时时间未到,返回
return;
TF1 = 0 ; //定时时间到,TF1标记置0,防止事情没做完一直进入
if(++uims==1000)
{
uims = 0;
if(++ucSec==60) //1分钟到
{
ucSec = 0;
if(++ucMin==60) //1小时到
ucMin = 0;
}
}
if(++uiSeg_Dly==500) //控制锁存器的周期
uiSeg_Dly = 0; //允许新的数据对数码管进行更新
if(uims % 4 == 0) //每隔4ms刷新一个数码管
{
Seg_Disp(pucseg_Code, ucseg_Pos); //在ucseg_Pos位置上显示A4编码的数字
if(++ucseg_Pos == 4) // 0 1 2 3
ucseg_Pos = 0;
}
}
二、分段解析
1、定时器TF1判断
if(!TF1)
return;
TF1 = 0 ;
判断TF1
值,如TF1=0
则返回,TF1=1
则将TF1
重置为0后继续执行代码。
2、时分秒计时累加
if(++uims==1000)
{
uims = 0;
if(++ucSec==60) //1分钟到
{
ucSec = 0;
if(++ucMin==60) //1小时到
ucMin = 0;
}
}
uims = 0;
1s到时将毫秒重置为0,1000ms=1s。
ucSec = 0;
1min到时将分钟重置为0,1min=60s。
ucMin = 0;
1h到时将小时重置为0,1h=60min。
3、锁存器控制函数
if(++uiSeg_Dly==500)
uiSeg_Dly = 0;
控制锁存器的周期,当uiSeg_Dly = 0
时允许新的数据对数码管进行更新。
4、数码管刷新函数
if(uims % 4 == 0)
{
Seg_Disp(pucseg_Code, ucseg_Pos);
if(++ucseg_Pos == 4)
ucseg_Pos = 0;
}
if(uims % 4 == 0)
判断当前ms时间是否可以整除4ms,每隔4ms刷新一个数码管。
if(++ucseg_Pos == 4)
ucseg_Pos = 0;
当位码ucseg_Pos为4时,重置为0。
没有回复内容