//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++;
}
}
|