亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

標(biāo)題: 單片機(jī)3個按鍵靈活修改多個參數(shù)(浮點(diǎn)與整數(shù)型) [打印本頁]

作者: 少年0508    時間: 2018-5-7 12:08
標(biāo)題: 單片機(jī)3個按鍵靈活修改多個參數(shù)(浮點(diǎn)與整數(shù)型)
最近寫代碼,涉及到按鍵修改參數(shù),就設(shè)計了由3個按鍵修改多個參數(shù)的程序設(shè)計。按鍵修改參數(shù),我以寫過,但是有著很長的代碼。最近寫了一個程序,個人感覺代碼量較少,適合使用。這里我選STC15F2K60S2單片機(jī)開發(fā)板來寫Demo程序。
原理很簡單,第一個按鍵是 調(diào)節(jié)+ 按鍵(程序IO口寫Add),第二個按鍵是 調(diào)節(jié)- 按鍵程序IO口寫Sub),第二個按鍵是 切換 按鍵(程序IO口寫Exit),也就是切換要修改的參數(shù)。然后通過Exit按鍵修改Add和Sub調(diào)節(jié)的變量,從而達(dá)到修改參數(shù)。
預(yù)先定義3個要修改的變量和操作標(biāo)志位。
  1. unsigned char Data1=0,Data2=0,Data3=0;
  2. unsigned char Handle = 1 ; //Handle  1:操作Data1,2:操作Data2,3:操作Data3
復(fù)制代碼

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

  1.     if(Exit==0)        //切換按鍵按下,操作位標(biāo)志改變
  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.     }
復(fù)制代碼



第二部分是根據(jù)Handle把參量的地址傳入到修改函數(shù)。如果增加要修改的參量,也是要在這里加。
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
}


第三部分是調(diào)節(jié)函數(shù)。輸入?yún)?shù)是一個指針,也就是要調(diào)節(jié)的變量的地址。函數(shù)名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)    //設(shè)置調(diào)節(jié)上限為20
  7.         (*Variate)++;        //值加1
  8.     }
  9.     if(Sub==0)
  10.     {
  11.         while(Sub ==0);      //等待松手,如果要長按快速減,則注釋此句
  12.         if(*Variate!=0)      //設(shè)置調(diào)節(jié)下限為0,
  13.         {
  14.             (*Variate)--;    //值減1
  15.         }
  16.     }
  17. }
復(fù)制代碼

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


至此,響應(yīng)很快的3個按鍵修改參量已經(jīng)可以完成。

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


Dome程序 參數(shù)為浮點(diǎn)型.zip

50.43 KB, 下載次數(shù): 40, 下載積分: 黑幣 -5

Dome程序 參數(shù)為整數(shù).zip

45.82 KB, 下載次數(shù): 52, 下載積分: 黑幣 -5


作者: Fraisty    時間: 2018-5-17 10:32
看看學(xué)習(xí)下
作者: denny1011    時間: 2018-7-13 09:23
這里的代碼如何寫?請教!
作者: liuzhaofeng    時間: 2018-8-10 12:57
好思路學(xué)些了,謝謝
作者: danpianji3501    時間: 2018-8-13 11:09
很好,有啟發(fā)!
作者: 少年0508    時間: 2018-8-27 22:41
denny1011 發(fā)表于 2018-7-13 09:23
這里的代碼如何寫?請教!

簡單的C語言代碼而已,應(yīng)該很容易看懂。
作者: gdstlhy    時間: 2018-8-28 09:48
很厲害的樣子,學(xué)習(xí)學(xué)習(xí)。
作者: 思憶    時間: 2018-10-17 10:28
思路不錯,學(xué)到了
作者: sdygrlb    時間: 2018-10-31 12:49
謝謝分享
作者: bhjyqjs    時間: 2018-10-31 14:17
期待,謝謝分享!
作者: 一束光的旅程    時間: 2018-10-31 14:50
學(xué)習(xí)學(xué)習(xí),謝謝
作者: 踏浪揚(yáng)帆    時間: 2018-11-3 18:12
很好!多謝!
作者: xuxiaochunabcd    時間: 2018-11-4 09:23
學(xué)習(xí)學(xué)習(xí),謝謝
作者: 123.。99    時間: 2018-12-18 20:18
厲害啊啊啊
作者: xtwsc2    時間: 2019-3-21 22:53
學(xué)習(xí),謝謝樓主分享。
作者: aking991    時間: 2019-3-22 08:53
方法不錯,學(xué)習(xí)學(xué)習(xí),謝謝分享
作者: 宋嘿嘿    時間: 2019-3-22 11:29
真棒

作者: 風(fēng)158    時間: 2019-3-22 12:46
謝謝分享!
作者: lsyswh    時間: 2019-3-22 13:27
學(xué)習(xí)一下,感謝LZ分享!
作者: ne5532    時間: 2019-3-24 20:03
學(xué)習(xí)了
作者: 一時    時間: 2019-7-23 16:22
學(xué)習(xí)了,不錯的思路
作者: nvntx    時間: 2020-3-27 10:46
學(xué)習(xí),和我想要的功能和點(diǎn)出入,
作者: hebxk311a    時間: 2020-8-18 18:13
很簡捷,有啟發(fā),學(xué)習(xí)了




歡迎光臨 (http://www.denmoz.com/bbs/) Powered by Discuz! X3.1