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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5203|回復: 5
收起左側

單片機紅外解碼,短按開關燈,長按調光,數碼管顯示鍵值 源程序

  [復制鏈接]
ID:140489 發表于 2020-9-2 15:32 | 顯示全部樓層 |閱讀模式
//紅外解碼,實驗板測試正常,8位數碼管顯示遙控編碼(用戶碼,用戶反碼,右邊3位數碼管顯示PWM值),
//兩片74hc573驅動8位共陰數碼管
//CH-鍵短按開關燈,+鍵長按調光,數碼管顯示鍵值;長按調光的解碼程序目前網上很難找到,我琢磨了很久才把程序調通//壓縮包里有完整的程序代碼,有邏輯分析儀測試的連發碼的波形
遙控器鍵值圖.png aaa.jpg
單片機源程序如下:
  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)

評分

參與人數 2黑幣 +65 收起 理由
digger63 + 15 很給力!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:964280 發表于 2021-9-10 10:55 | 顯示全部樓層
很好,希望可以用到
回復

使用道具 舉報

ID:965189 發表于 2021-11-27 10:04 | 顯示全部樓層
希望能正常解碼。
回復

使用道具 舉報

ID:543220 發表于 2021-12-17 18:00 | 顯示全部樓層
我想問下 為啥IR判斷等于1,就是紅外遙控按鍵抬起呢?
回復

使用道具 舉報

ID:543220 發表于 2021-12-17 18:01 | 顯示全部樓層
你好 我想問下 為啥是IR=1 表示紅外按鍵抬起呢
回復

使用道具 舉報

ID:140489 發表于 2021-12-29 16:47 | 顯示全部樓層
a2748446 發表于 2021-12-17 18:01
你好 我想問下 為啥是IR=1 表示紅外按鍵抬起呢

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 9久久婷婷国产综合精品性色 | 久久出精品 | 欧美激情一区二区三级高清视频 | 欧美成人a∨高清免费观看 欧美日韩中 | 日韩电影在线 | 成人中文字幕在线 | 玖玖玖在线| 国产成人99久久亚洲综合精品 | av官网在线 | 成人精品在线观看 | 人成在线 | 国产午夜精品理论片a大结局 | 黄篇网址 | 中文字幕一区二区三区四区 | 亚洲成人在线免费 | 日韩欧美一区二区三区免费观看 | 国产91在线播放 | 91av视频 | www.日韩 | 国内精品久久久久久 | 国产精品美女久久久 | 国产福利91精品一区二区三区 | 亚洲国产专区 | 狠狠躁天天躁夜夜躁婷婷老牛影视 | 九九导航| 在线亚洲一区 | 天天操天天射综合网 | 人人爽人人草 | 一区二区三区精品视频 | 国产在线1区 | 国产偷录叫床高潮录音 | 精品一区久久 | 在线国产小视频 | 国产日韩精品一区二区三区 | 大象视频一区二区 | 91精品国产高清一区二区三区 | 污污的网站在线观看 | 99精品在线 | va精品| 国产精品福利视频 | 日韩在线精品 |