1.易错点
显示温度之前一定要读取温度,千万不要忘了,我就忘记了....
刚做这个题的时候,我发现切换界面很困难,于是我不断寻找,发现一定要在初始化系统里面加上read_ds18b20,同时要在循环里刷新一遍数码管而不是在扫描按键里,扫描按键只能用来改变状态。
2.控制单个led点亮的方法
如点亮led1
Select_HC573(4);
LED_stat &= ~0x01;//单独让led1点亮
LED_stat |= 0x01;//单独让led1熄灭
我们这里定义了一个LED_stat这个变量,目的是为了保存当前led的状态,防止它被轻易改变
3.关于切换界面的好方法
void change1()
{
if(stat1 == 2)//ʱ¼ä
{
stat1 = 0;
}
else if(stat1 == 1)//»ØÏÔ
{
stat1++;
}
else if(stat1 == 0)//²ÎÊý
{
stat1++;
}
}
void Scan_keys()
{
R1 = 0; L1= L2 = R2 =1;
if(L2 == 0)//S4°´¼ü
{
Delay(500);
if(L2 == 0)
{
change1();
while(L2 == 0)
{
display_time();
}
}
}
}
void main()
{
Init_sys();
Init_DS1302();
while(1)
{
Read_ds1302time();
Scan_keys();
if(stat1 == 2)
{
display_bitSMG(0,SMG_NoDot[gettime[2]/16]);
Delay(200);
display_bitSMG(1,SMG_NoDot[gettime[2]%16]);
Delay(200);
display_bitSMG(2,0xbf);
Delay(200);
display_bitSMG(3,SMG_NoDot[gettime[1]/16]);
Delay(200);
display_bitSMG(4,SMG_NoDot[gettime[1]%16]);
Delay(200);
display_bitSMG(5,0xbf);
Delay(200);
display_bitSMG(6,SMG_NoDot[gettime[0]/16]);
Delay(200);
display_bitSMG(7,SMG_NoDot[gettime[0]%16]);
Delay(200);
}
}
}
状态改变要定义一个函数,在主函数里不能耽误读取时间,松手检测时要做出改变状态后发生的事
这里注意可以把读取时间放在扫描按键函数里面