|
最近寫代碼,涉及到按鍵修改參數,就設計了由3個按鍵修改多個參數的程序設計。按鍵修改參數,我以寫過,但是有著很長的代碼。最近寫了一個程序,個人感覺代碼量較少,適合使用。這里我選STC15F2K60S2單片機開發板來寫Demo程序。
原理很簡單,第一個按鍵是 調節+ 按鍵(程序IO口寫Add),第二個按鍵是 調節- 按鍵(程序IO口寫寫Sub),第二個按鍵是 切換 按鍵(程序IO口寫Exit),也就是切換要修改的參數。然后通過Exit按鍵修改Add和Sub調節的變量,從而達到修改參數。
預先定義3個要修改的變量和操作標志位。- unsigned char Data1=0,Data2=0,Data3=0;
- unsigned char Handle = 1 ; //Handle 1:操作Data1,2:操作Data2,3:操作Data3
復制代碼
實現代碼分為3部分。
第一部分是Exit按鍵改變標志(代碼如下)。Handle是標志當前修改的變量,1:操作Data1,2:操作Data2,3:操作Data3。當按下Exit按鍵,則切操作標志加1,到末端著回到第一個,形成一個環形循環結構。如果增加要修改的參量,要在這里加。
- if(Exit==0) //切換按鍵按下,操作位標志改變
- {
- while(Exit == 0);//等待松手
- if(Handle ==1)
- {
- Handle=2;
- }
- else if(Handle == 2)
- {
- Handle=3;
- }
- else if(Handle == 3)
- {
- Handle=1;
- }
- }
復制代碼
第二部分是根據Handle把參量的地址傳入到修改函數。如果增加要修改的參量,也是要在這里加。
switch(Handle) //選擇修改指向
{
case 1:KeyAlterValue(&Data1);break; //Handle = 1,按鍵修改操作指針指向Data1
case 2:KeyAlterValue(&Data2);break; //Handle = 2,按鍵修改操作指針指向Data2
case 3:KeyAlterValue(&Data3);break; //Handle = 3,按鍵修改操作指針指向Data3
}
第三部分是調節函數。輸入參數是一個指針,也就是要調節的變量的地址。函數名void KeyAlterValue(unsigned char *Variate),代碼如下:
- void KeyAlterValue(unsigned char *Variate)
- {
- if(Add==0)
- {
- while(Add ==0); //等待松手,如果要長按快速加,則注釋此句
- if((*Variate)<20) //設置調節上限為20
- (*Variate)++; //值加1
- }
- if(Sub==0)
- {
- while(Sub ==0); //等待松手,如果要長按快速減,則注釋此句
- if(*Variate!=0) //設置調節下限為0,
- {
- (*Variate)--; //值減1
- }
- }
- }
復制代碼
整份代碼我都沒有設置消抖,都是直接等待松手,即類似while(Add ==0);
三部分代碼,前2部分直接扔大循環就可以實現3個按鍵修改多個參數。但是不能沒有顯示當前修改的參數是什么,如果不用的話,也可以直接按一下Add或者Sub就可以知道。如果要顯示,請看我等下的解決辦法。對于按鍵輸入,我習慣開個定時時間約為20ms~30ms的定時器中斷。然后把按鍵掃描或者按鍵操作的程序放進定時器中斷中,這樣按鍵響應是非常快的。但是定時器中斷不能跑時間很長的代碼,原因你們應該都懂得。這里我使用定時器0,設置20ms。
因為是按鍵操作,定時器中斷代碼如下。KeyAction()函數體集合第一部分和第二部分代碼。關閉定時器0中斷是防止還在處理按鍵的時候再次來中斷。重新裝初值是避免定時時間減少。
- void T0Service() interrupt 1
- {
- ET0 = 0; //關閉定時器0中斷
- TR0 = 0; //定時器0開始計時
- KeyAction(); //修改參數
- TL0 = 0x00; //設置定時初值
- TH0 = 0x70; //設置定時初值
- TR0 = 1; //定時器0開始計時
- ET0 = 1; //開啟定時器0中斷
- }
復制代碼
至此,響應很快的3個按鍵修改參量已經可以完成。
上述是修改整形參數的,如果要修改浮點型的,請修改要修改的類型為float,然后把KeyAlterValue的類型也改為float在其內部的自加語句改為需要按下增加的精度就好,Dome程序是以0.1為例,沒有松手等待。
|
-
-
Dome程序 參數為浮點型.zip
2018-5-7 12:08 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
50.43 KB, 下載次數: 40, 下載積分: 黑幣 -5
-
-
Dome程序 參數為整數.zip
2018-5-7 12:08 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
45.82 KB, 下載次數: 52, 下載積分: 黑幣 -5
評分
-
查看全部評分
|