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

標題: 利用按鍵控制PWM調節LED亮度,持續按按鍵能夠連續變化 求幫助 [打印本頁]

作者: 遲遲不離去    時間: 2019-9-9 18:12
標題: 利用按鍵控制PWM調節LED亮度,持續按按鍵能夠連續變化 求幫助
我已經做到了單獨按遙控或者是按按鍵的時候可以調節亮度,但是持續按遙控或者是按鍵的話我實現不了,希望大佬們幫幫忙,給我一點點思路。

作者: csmyldl    時間: 2019-9-9 22:44
單獨按能實現,持續按不能實現,這就要看你的電路和程序了,按鍵是否中斷實現?若是中斷的話是邊沿觸發還是電平觸發?判斷按鍵是否要彈起才有效?這些問題不清楚不好回答你的問題。一般若要連續按實現調節的話,用一個計數器計數,計數至最大值對應最大亮度,最小值對應最小亮度,只要保證按鍵能對計數值增減就可實現了
作者: xianfajushi    時間: 2019-9-9 23:02
循環延時你的按鈕變量自增
作者: wulin    時間: 2019-9-10 07:49
短按+-,長按連+-,給你一個示例程序參考。
  1. #include <REG51.H>
  2. #define uint unsigned int        
  3. #define uchar unsigned char
  4. #define key_S 1000                                        //宏定義短按(約20ms)
  5. #define key_L 30000                                        //宏定義長按(約2/3s)
  6. #define key_M 20000                                        //宏定義長按(約1/3s)
  7. sbit key1=P3^6;                                                //加鍵
  8. sbit key2=P3^7;                                                //減鍵
  9. uchar num=1;

  10. void keyscan()                                                        //按鍵掃描
  11. {
  12.         static uint count1=0,count2=0;//計數變量
  13.         if(!key1)   
  14.         {  
  15.                 count1++;  
  16.                 if(count1>=key_L)                                //長按
  17.                 {
  18.                         if(num<255)
  19.                                 num++;        
  20.                         count1=key_M;
  21.                 }
  22.         }  
  23.         else                                                                        //按鍵抬起
  24.         {  
  25.                 if(count1>key_S && count1<key_L)//短按
  26.                 {
  27.                         if(num<255)
  28.                                 num++;
  29.                 }
  30.                 count1=0;                                                        //count清0
  31.         }   
  32.         if(!key2)   
  33.         {  
  34.                 count2++;  
  35.                 if(count2>=key_L)                                //長按
  36.                 {
  37.                         if(num>0)
  38.                                 num--;        
  39.                         count2=key_M;
  40.                 }
  41.         }  
  42.         else                                                                        //按鍵抬起
  43.         {  
  44.                 if(count2>key_S && count2<key_L)//短按
  45.                 {
  46.                         if(num>0)
  47.                                 num--;
  48.                 }
  49.                 count2=0;                                                        //count清0
  50.         }
  51. }

  52. void main()
  53. {
  54.         while(1)
  55.         {
  56.                 keyscan();                                //按鍵掃描
  57.                 P1=~num;                                        //LED低電平顯示
  58.         }
  59. }
復制代碼

作者: 遲遲不離去    時間: 2019-9-10 08:49
csmyldl 發表于 2019-9-9 22:44
單獨按能實現,持續按不能實現,這就要看你的電路和程序了,按鍵是否中斷實現?若是中斷的話是邊沿觸發還是 ...

謝謝 我再試試
作者: bsbshi    時間: 2019-9-10 15:08
本帖最后由 bsbshi 于 2019-9-10 16:07 編輯

按鍵不用中斷,在計時器里循環查詢按鍵接口電平,加個延遲計數器,if判斷,在延遲時間內高電平回零,為單次按按鍵,+1;超過延遲還是高電平則為持續按壓,++,直到按鍵變低電平
作者: hmgqljz111    時間: 2019-11-22 15:34
能看看你的按鍵檢測代碼嗎。有沒有加松手檢測。




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