//s1加键,s2减键,s3设置键,knum是设置键按下的次数
//现在加,减调节都正常;
//现在想在按下设置键,对时后过几秒钟使时钟自行启动走;
//后面写了一段程序,按下设置键不做任何操作过10秒启动时钟走时,
//现在问题是按下设置键,按加、减键调时,如果从1加到59,时间没对好就启动时钟走时了,怎么做才能使时间对好后过几秒自动启动走时呢?
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); // 写秒80,时钟停止走时;
}
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();
}
}
}
if(knum!=0 ) //在设置状态下,x秒钟不做任何操作,则自动退出设置状态,时钟启动,走时。
{
if( (s1!=0)&&(s2!=0) )
{
TR1=1; //启动定时器
if(zs==10)
{
zs=0;
knum=0; //设置按键次数清零
TR1=0; //关闭定时器
write_1302(write_miao,0x00); //写秒0,时钟启动,走时。
write_1302(0x8e,0x80); //保护启动
}
}
}
}
void temer2() interrupt 3 //50毫秒中断
{
TH1=(65536-46080)/256;
TL1=(65536-46080)%256;
ss1++;
if(ss1==20) //到1秒
{
ss1=0;
zs++;
}
}
|