这是我做时钟的按键程序,你可以参考一下。主要是选择按键的次数要用一个变量来表示,比如knum=0,knum=2。
void keyscan() //按键扫描函数
{
if(s3==0) //选择按键按下
{
delay(10);
if(s3==0)
{
while(!s3)
display(shi,fen,miao); //加上这句,按键按下就不会闪
knum++;
if(knum==1) //分闪烁
{
write_1302(0x8e,0x00); //保护取消
write_1302(write_miao,0x80);
}
if(knum==3) //时钟启动
{
knum=0;
write_1302(write_miao,0x00);
write_1302(0x8e,0x80); //保护启动
}
}
}
if(knum==1) //分钟调节
{
if(s1==0) //加
{
delay(10);
if(s1==0)
{
while(!s1)
display(shi,fen,miao); //加上这句,按键按下就不会闪
fen++;
fen=fen/10*16+fen%10; //转为16进制
if(fen==0x60)
fen=0x00;
write_1302(write_fen,fen); //写入1302
read_sf(); //读出时间,然后显示
}
}
if(s2==0)
{
delay(10);
if(s2==0)
{
while(!s2)
display(shi,fen,miao); //加上这句,按键按下就不会闪
fen--;
fen=fen/10*16+fen%10; //转为16进制
if(fen==-1)
fen=0x59;
write_1302(write_fen,fen);
read_sf();
}
}
}
if(knum==2)
{
if(s1==0)
{
delay(10);
if(s1==0)
{
while(!s1)
display(shi,fen,miao); //加上这句,按键按下就不会闪
shi++;
shi=shi/10*16+shi%10; //转为16进制
if(shi==0x24)
shi=0x00;
write_1302(write_shi,shi);
read_sf();
}
}
if(s2==0)
{
delay(10);
if(s2==0)
{
while(!s2)
display(shi,fen,miao); //加上这句,按键按下就不会闪
shi--;
shi=shi/10*16+shi%10; //转为16进制
if(shi==-1)
shi=0x23;
write_1302(write_shi,shi);
read_sf();
}
}
}
} |