久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: 單片機紅外解碼,短按開關燈,長按調光,數碼管顯示鍵值 源程序 [打印本頁]

作者: lids    時間: 2020-9-2 15:32
標題: 單片機紅外解碼,短按開關燈,長按調光,數碼管顯示鍵值 源程序
//紅外解碼,實驗板測試正常,8位數碼管顯示遙控編碼(用戶碼,用戶反碼,右邊3位數碼管顯示PWM值),
//兩片74hc573驅動8位共陰數碼管
//CH-鍵短按開關燈,+鍵長按調光,數碼管顯示鍵值;長按調光的解碼程序目前網上很難找到,我琢磨了很久才把程序調通//壓縮包里有完整的程序代碼,有邏輯分析儀測試的連發碼的波形

單片機源程序如下:
  1. #include "INC\STC89C52RC.H"
  2. #include "INC\MY_SET.H"
  3. #include "INC\IR_NEC.H"                   //調用NEC解碼頭文件


  4. #define DIGI_PORT P0 // 宏定義數碼管端口,如果端口改變,只需修改這一句即可
  5. #define DIGI_NUM 8 // 宏定義數碼管個數
  6. unsigned char digiBuf[DIGI_NUM]; //數碼管緩沖區
  7. sfr   SE   = 0x80;             //數碼管段選 P0:0x80   P1:0x90
  8. sbit wela = P2^7;           //位選
  9. sbit dula = P2^6;           //段選


  10. sbit led = P1^2;

  11. uint8 PWM_Val=200;           //占空比 變量
  12. uint8 flag; //開關燈標志
  13. uint8 flag1;//調光方向標志
  14. uint8 count;
  15. uint8 flag2; //
  16. uint8 num,pwm;
  17.                                 // 0     1    2    3    4     5    6    7    8   9          A    B    C    D   E    F    不顯  -
  18. uint8 code d[]={ 0x3F,0x06,0x5B,0x4F,0x66, 0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x00,0x40}; //數碼管段碼  共陰不帶小數點段碼

  19. void KZ0();      //短按處理
  20. //void KZ1();      //長按處理


  21. /***************** 主函數 ********************/
  22. void main(void)
  23. {
  24.         IR_Init();                           //紅外線解碼初始化
  25.         while(1)
  26.         {
  27.           //遙控檢測
  28.                    if(IR_BT==2)
  29.                 {
  30.                          KZ0();                //短按處理
  31.                         IR_BT =0;        //清有效標志
  32.                 //更新顯示
  33.                         digiBuf[0]  = NEC[0]/16;   //用戶碼               
  34.                         digiBuf[1]  = NEC[0]%16;   
  35.                         digiBuf[2]  = NEC[1]/16;   //用戶反碼
  36.                         digiBuf[3]  = NEC[1]%16;
  37.         //                digiBuf[4]  = NEC[2]/16;   //數據碼
  38.         //                digiBuf[5]  = NEC[2]%16;
  39.         //                digiBuf[6]  = NEC[3]/16;   //數據反碼
  40.         //                digiBuf[7]  = NEC[3]%16;
  41.                 }
  42.                 digiBuf[4]  = 16;        //不顯
  43.                 digiBuf[5]  = PWM_Val/100;        //顯示pwm值
  44.                 digiBuf[6]  = PWM_Val%100/10;   
  45.                 digiBuf[7]  = PWM_Val%10;

  46.         
  47.                 if(IR_BT==3 && KeyUpDownFlag==0 )                //長按調光,松手停止調光
  48.                 {        
  49.                         
  50.                         switch(NEC[2])
  51.                         {                                                                                  //長按接收的是連發碼,97.11ms高電平,10.15ms低電平
  52.                                 case 0x15:        if(IR==1)                                     //if(IR==0)
  53.                                                         {
  54.                                                                 KeyUpDownFlag=1;        //如果按鍵抬起,松手標志置1
  55.                                                         }         
  56.                                 
  57.                                                         if(flag1==1 && flag==0)           // 開燈狀態 +鍵 長按連加          亮度加
  58.                                                         {
  59.                                                                 if(PWM_Val<200)
  60.                                                                 {
  61.                                                                         
  62.                                                                         PWM_Val++;                   // if(IR==1)用這句
  63.                                                                 //        PWM_Val += 5;           //if(IR==0)用這句    加5 燈亮度變化才明顯
  64.                                                                         if(PWM_Val==200)
  65.                                                                                 
  66.                                                                                 flag1=0;
  67.                                                                         
  68.                                                                 }
  69.                                                         }         
  70.                                                 
  71.                                                         if(flag1==0 && flag==0)   //開燈狀態  +鍵 長按連減         亮度 減
  72.                                                         {
  73.                                                                 if(PWM_Val>0)
  74.                                                                 {
  75.                                                                 //        PWM_Val -= 5;
  76.                                                                         PWM_Val--;
  77.                                                                         if(PWM_Val==0)
  78.                                                                            
  79.                                                                                 flag1=1;
  80.                                                                
  81.                                                                 }
  82.                                                         }          break;  
  83.                         
  84.                                                         
  85.                                         case 0x07:break;
  86.                                         default:break;
  87.                         }        
  88.                
  89.                 }        
  90.                


  91. ///////////////////////////////////////////               
  92.                
  93.                 if(flag==0)                   //開燈
  94.                 {        
  95.                         for(pwm=200;pwm>0;pwm--)
  96.                         {
  97.                                 if(PWM_Val<pwm)
  98.                                 {
  99.                                         led=1;
  100.                         
  101.                                 }
  102.                                 else
  103.                                 {
  104.                                         led=0;
  105.                         
  106.                                 }
  107.                         }
  108.                 }
  109.                 else
  110.                 {
  111.                         led=1;                  //關燈
  112.                 }

  113.          
  114.         }

  115. }
復制代碼


全部資料51hei下載地址:
紅外線NEC解碼(任意腳接收,短按開關,長按調光).rar (329.78 KB, 下載次數: 191)

作者: 尋風    時間: 2021-9-10 10:55
很好,希望可以用到
作者: 君工創    時間: 2021-11-27 10:04
希望能正常解碼。
作者: a2748446    時間: 2021-12-17 18:00
我想問下 為啥IR判斷等于1,就是紅外遙控按鍵抬起呢?
作者: a2748446    時間: 2021-12-17 18:01
你好 我想問下 為啥是IR=1 表示紅外按鍵抬起呢
作者: lids    時間: 2021-12-29 16:47
a2748446 發表于 2021-12-17 18:01
你好 我想問下 為啥是IR=1 表示紅外按鍵抬起呢

接收頭沒有接收到紅外光時,輸出端是高電平




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 一级片免费网站 | 天天插天天 | 日本在线 | 成人中文字幕在线观看 | 天天拍夜夜操 | 超碰91在线 | 久草网在线 | 国产精品成人免费视频 | 天堂一区二区三区 | 欧美精品www | 午夜视频在线看 | 欧美国产日韩在线 | 日日操夜夜 | 国产一区二区精品丝袜 | 中文字幕影院 | 五月婷婷在线播放 | 国产日韩欧美综合 | 一区二区不卡视频 | 激情丁香| 欧美激情久久久 | 欧美日韩在线免费观看 | 国产成人精品视频 | 免费成人毛片 | 国产一区免费视频 | 久久一区二区三区四区 | 亚洲国产精 | 日韩免费在线视频 | 四虎永久网址 | av在线播放不卡 | 黄色av免费观看 | 免费观看一级毛片 | 亚洲一区 | 亚洲一区二区三区视频 | 色播av | 日韩免费视频 | 欧美激情精品 | 91久久精品视频 | 日本久久精品视频 | 六月婷婷综合 | av免费看片 | 成人综合网站 |