|
可以參考這段按鍵代碼,取自《STC8H萬年歷自動匹配18b20序列號多點測溫示例程序》
- //按鍵掃描函數(shù) 運行環(huán)境 周期1ms
- void key_scan()
- {
- static bit key_sign=0;//按鍵狀態(tài)標(biāo)志
- static u8 count=0;//消抖計數(shù)
- if(!key1||!key2||!key3||!key4)
- {
- if(++count>=10 && key_sign==0)
- {
- key_sign=1;
- if(!key1)
- {
- Key_value=++Key_value%8;
- if(Key_value==0)
- {
- Ds1302Init();//寫7個字節(jié)的日歷和時間
- mark=1; //允許讀DS1302
- }
- else mark=0;//禁止讀DS1302
- }
- if(!key2 && Key_value!=0)
- {
- switch(Key_value)
- {
- case 1:if(++TIME[6]>99)TIME[6]=0; break;//調(diào)年
- case 2:if(++TIME[4]>12)TIME[4]=1; break;//調(diào)月
- case 3:if(++TIME[3]>31)TIME[3]=1; break;//調(diào)日
- case 4:if(++TIME[5]>7) TIME[5]=1; break;//調(diào)周
- case 5:if(++TIME[2]>23)TIME[2]=0; break;//調(diào)時
- case 6:if(++TIME[1]>59)TIME[1]=0; break;//調(diào)分
- case 7:if(++TIME[0]>59)TIME[0]=0; break;//調(diào)秒
- }
- }
- if(!key3 && Key_value!=0)
- {
- switch(Key_value)
- {
- case 1:if(--TIME[6]<0)TIME[6]=99; break;//調(diào)年
- case 2:if(--TIME[4]<1)TIME[4]=12; break;//調(diào)月
- case 3:if(--TIME[3]<1)TIME[3]=31; break;//調(diào)日
- case 4:if(--TIME[5]<1)TIME[5]= 7; break;//調(diào)周
- case 5:if(--TIME[2]<0)TIME[2]=23; break;//調(diào)時
- case 6:if(--TIME[1]<0)TIME[1]=59; break;//調(diào)分
- case 7:if(--TIME[0]<0)TIME[0]=59; break;//調(diào)秒
- }
- }
- if(!key4)//切換單總線多通道DS1302
- {
- Chx++;
- if(Chx==common)Chx=0; //循環(huán)切換
- }
- }
- }
- else
- {
- key_sign=0;
- count=0;
- }
- }
復(fù)制代碼 |
|