欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 14902|回復: 22
打印 上一主題 下一主題
收起左側

單片機3個按鍵靈活修改多個參數(浮點與整數型)

  [復制鏈接]
跳轉到指定樓層
樓主
ID:96935 發表于 2018-5-7 12:08 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
最近寫代碼,涉及到按鍵修改參數,就設計了由3個按鍵修改多個參數的程序設計。按鍵修改參數,我以寫過,但是有著很長的代碼。最近寫了一個程序,個人感覺代碼量較少,適合使用。這里我選STC15F2K60S2單片機開發板來寫Demo程序。
原理很簡單,第一個按鍵是 調節+ 按鍵(程序IO口寫Add),第二個按鍵是 調節- 按鍵程序IO口寫Sub),第二個按鍵是 切換 按鍵(程序IO口寫Exit),也就是切換要修改的參數。然后通過Exit按鍵修改Add和Sub調節的變量,從而達到修改參數。
預先定義3個要修改的變量和操作標志位。
  1. unsigned char Data1=0,Data2=0,Data3=0;
  2. unsigned char Handle = 1 ; //Handle  1:操作Data1,2:操作Data2,3:操作Data3
復制代碼

實現代碼分為3部分。
第一部分是Exit按鍵改變標志(代碼如下)。Handle是標志當前修改的變量,1:操作Data1,2:操作Data2,3:操作Data3。當按下Exit按鍵,則切操作標志加1,到末端著回到第一個,形成一個環形循環結構。如果增加要修改的參量,要在這里加。

  1.     if(Exit==0)        //切換按鍵按下,操作位標志改變
  2.     {
  3.     while(Exit == 0);//等待松手
  4.     if(Handle ==1)   
  5.     {
  6.         Handle=2;
  7.     }
  8.     else if(Handle == 2)   
  9.     {
  10.         Handle=3;         
  11.     }
  12.     else if(Handle == 3)   
  13.     {
  14.         Handle=1;            
  15.     }            
  16.     }
復制代碼



第二部分是根據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),代碼如下:
  1. void KeyAlterValue(unsigned char *Variate)
  2. {
  3.     if(Add==0)
  4.     {
  5.         while(Add ==0);      //等待松手,如果要長按快速加,則注釋此句
  6.         if((*Variate)<20)    //設置調節上限為20
  7.         (*Variate)++;        //值加1
  8.     }
  9.     if(Sub==0)
  10.     {
  11.         while(Sub ==0);      //等待松手,如果要長按快速減,則注釋此句
  12.         if(*Variate!=0)      //設置調節下限為0,
  13.         {
  14.             (*Variate)--;    //值減1
  15.         }
  16.     }
  17. }
復制代碼

整份代碼我都沒有設置消抖,都是直接等待松手,即類似while(Add ==0);
三部分代碼,前2部分直接扔大循環就可以實現3個按鍵修改多個參數。但是不能沒有顯示當前修改的參數是什么,如果不用的話,也可以直接按一下Add或者Sub就可以知道。如果要顯示,請看我等下的解決辦法。對于按鍵輸入,我習慣開個定時時間約為20ms~30ms的定時器中斷。然后把按鍵掃描或者按鍵操作的程序放進定時器中斷中,這樣按鍵響應是非常快的。但是定時器中斷不能跑時間很長的代碼,原因你們應該都懂得。這里我使用定時器0,設置20ms。
因為是按鍵操作,定時器中斷代碼如下。KeyAction()函數體集合第一部分和第二部分代碼。關閉定時器0中斷是防止還在處理按鍵的時候再次來中斷。重新裝初值是避免定時時間減少。
  1. void T0Service() interrupt 1
  2. {
  3.     ET0 = 0;        //關閉定時器0中斷
  4.     TR0 = 0;                //定時器0開始計時   
  5.     KeyAction();    //修改參數      
  6.     TL0 = 0x00;                //設置定時初值
  7.     TH0 = 0x70;                //設置定時初值
  8.     TR0 = 1;                //定時器0開始計時   
  9.     ET0 = 1;        //開啟定時器0中斷
  10. }
復制代碼


至此,響應很快的3個按鍵修改參量已經可以完成。

上述是修改整形參數的,如果要修改浮點型的,請修改要修改的類型為float,然后把KeyAlterValue的類型也改為float在其內部的自加語句改為需要按下增加的精度就好,Dome程序是以0.1為例,沒有松手等待。


Dome程序 參數為浮點型.zip

50.43 KB, 下載次數: 40, 下載積分: 黑幣 -5

Dome程序 參數為整數.zip

45.82 KB, 下載次數: 52, 下載積分: 黑幣 -5

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏10 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:331928 發表于 2018-5-17 10:32 | 只看該作者
看看學習下
回復

使用道具 舉報

板凳
ID:370667 發表于 2018-7-13 09:23 | 只看該作者
這里的代碼如何寫?請教!
回復

使用道具 舉報

地板
ID:384956 發表于 2018-8-10 12:57 | 只看該作者
好思路學些了,謝謝
回復

使用道具 舉報

5#
ID:273583 發表于 2018-8-13 11:09 | 只看該作者
很好,有啟發!
回復

使用道具 舉報

6#
ID:96935 發表于 2018-8-27 22:41 | 只看該作者
denny1011 發表于 2018-7-13 09:23
這里的代碼如何寫?請教!

簡單的C語言代碼而已,應該很容易看懂。
回復

使用道具 舉報

7#
ID:275854 發表于 2018-8-28 09:48 來自觸屏版 | 只看該作者
很厲害的樣子,學習學習。
回復

使用道具 舉報

8#
ID:361213 發表于 2018-10-17 10:28 | 只看該作者
思路不錯,學到了
回復

使用道具 舉報

9#
ID:373813 發表于 2018-10-31 12:49 | 只看該作者
謝謝分享
回復

使用道具 舉報

10#
ID:66287 發表于 2018-10-31 14:17 | 只看該作者
期待,謝謝分享!
回復

使用道具 舉報

11#
ID:230847 發表于 2018-10-31 14:50 來自觸屏版 | 只看該作者
學習學習,謝謝
回復

使用道具 舉報

12#
ID:265468 發表于 2018-11-3 18:12 | 只看該作者
很好!多謝!
回復

使用道具 舉報

13#
ID:303892 發表于 2018-11-4 09:23 | 只看該作者
學習學習,謝謝
回復

使用道具 舉報

14#
ID:422833 發表于 2018-12-18 20:18 | 只看該作者
厲害啊啊啊
回復

使用道具 舉報

15#
ID:385506 發表于 2019-3-21 22:53 | 只看該作者
學習,謝謝樓主分享。
回復

使用道具 舉報

16#
ID:65956 發表于 2019-3-22 08:53 | 只看該作者
方法不錯,學習學習,謝謝分享
回復

使用道具 舉報

17#
ID:349986 發表于 2019-3-22 11:29 | 只看該作者
真棒
回復

使用道具 舉報

18#
ID:343102 發表于 2019-3-22 12:46 | 只看該作者
謝謝分享!
回復

使用道具 舉報

19#
ID:228022 發表于 2019-3-22 13:27 | 只看該作者
學習一下,感謝LZ分享!
回復

使用道具 舉報

20#
ID:497468 發表于 2019-3-24 20:03 | 只看該作者
學習了
回復

使用道具 舉報

21#
ID:476909 發表于 2019-7-23 16:22 | 只看該作者
學習了,不錯的思路
回復

使用道具 舉報

22#
ID:406505 發表于 2020-3-27 10:46 | 只看該作者
學習,和我想要的功能和點出入,
回復

使用道具 舉報

23#
ID:282626 發表于 2020-8-18 18:13 | 只看該作者
很簡捷,有啟發,學習了
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表