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

標(biāo)題: 關(guān)于51單片機(jī)NEC紅外解碼錯(cuò)誤的問(wèn)題 [打印本頁(yè)]

作者: taowenyin    時(shí)間: 2019-5-27 22:59
標(biāo)題: 關(guān)于51單片機(jī)NEC紅外解碼錯(cuò)誤的問(wèn)題
各位大佬,最近在做一個(gè)NEC格式的紅外遙控器的接收項(xiàng)目,但是始終沒(méi)能正確解析,請(qǐng)大佬們指正代碼的問(wèn)題,萬(wàn)分感謝。我的晶振是18.432MHz,定時(shí)器是200us,目前的結(jié)果是每次獲取都是一堆7F,不知道問(wèn)題出在哪里。
另外,想再問(wèn)下各位大佬,紅外遙控器有去抖的說(shuō)法嘛?

1、單片機(jī)頭文件的相關(guān)定義
  1. #define FOSC 18432000L
  2. #define T0US (65536 - (FOSC / 12 / 1000000 * 200))   //200us timer calculation method in 12T mode

  3. // 紅外的時(shí)間
  4. extern BYTE Ir_Time;
  5. // 收到紅外信號(hào)
  6. extern BYTE Ir_Start;
  7. // 收到紅外信號(hào)頭
  8. extern BYTE Ir_Header;
  9. // 紅外數(shù)據(jù)
  10. extern BYTE Ir_Data[33];
  11. // 紅外碼
  12. extern BYTE Ir_Code[4];
  13. // 數(shù)據(jù)索引
  14. extern BYTE Data_Index;
  15. // 有新編碼
  16. extern BYTE New_Code;

  17. // 紅外初始化
  18. extern void IrInit(void);
  19. // 紅外編碼解析
  20. extern void IrDecode(void);
復(fù)制代碼

2、紅外初始化
  1. void IrInit(void) //100微秒@18.432MHz
  2. {
  3.         // 打開(kāi)紅外接收中斷
  4.     IT1 = 1; // 外部中斷1下降沿觸發(fā)
  5.     EX1 = 1; // 打開(kāi)外部中斷1
  6.         
  7.         //200us @18.432MHz
  8.     TMOD |= 0x01;                    //set timer0 as mode1 (16-bit)
  9.     TL0 = T0US;                     //initial timer0 low byte
  10.     TH0 = T0US >> 8;                //initial timer0 high byte
  11.     ET0 = 1;                        //enable timer0 interrupt
  12. }
復(fù)制代碼

3、紅外編碼解析
  1. // 紅外編碼的解析
  2. void IrDecode(void)
  3. {
  4.     BYTE i = 0, j = 0, time = 0, ir_tmp_code = 0;
  5.     for(i = 0; i < 4; i++) // 處理開(kāi)頭的兩個(gè)字節(jié)
  6.     {
  7.         for(j = 0; j < 8; j++)
  8.         {
  9.             time = Ir_Data[i * 8 + j + 1];
  10.             if(time > 5) // 大于1.125ms表示1,否則就為0
  11.             {
  12.                 ir_tmp_code |= 0x80;
  13.             }
  14.             ir_tmp_code = ir_tmp_code >> 1;
  15.         }
  16.         
  17.         Ir_Code[i] = ir_tmp_code;
  18.                 ir_tmp_code = 0;
  19.     }
  20. }
復(fù)制代碼

4、中斷處理
  1. // 遙控器接收中斷,外部中斷1
  2. void Ir_Isr(void) interrupt 2 using 2
  3. {
  4.     TR0 = 1; // 啟動(dòng)定時(shí)器0
  5.         
  6.         if(Ir_Start) // 判斷是否遙控器接收已經(jīng)啟動(dòng)
  7.         {
  8.                 if(Ir_Time >= 40 && Ir_Time < 75) // 引導(dǎo)碼大于4.5ms小于90
  9.                 {
  10.             Ir_Data[Data_Index++] = Ir_Time; // 保存時(shí)間
  11.             Ir_Time = 0; // 重置時(shí)間
  12.                         Ir_Header = 1;
  13.                 }
  14.                 else
  15.                 {
  16.                         if(Ir_Header)
  17.                         {
  18.                                 Ir_Data[Data_Index++] = Ir_Time;
  19.                                 if(Data_Index == 34) // 保存了4個(gè)字節(jié)的信息
  20.                                 {
  21.                                         New_Code = 1; // 數(shù)據(jù)填滿
  22.                                         TR0 = 0; // 暫停定時(shí)器0
  23.                                         Ir_Start = 0; // 重置遙控器接收啟動(dòng)位
  24.                                         Data_Index = 0; // 重置數(shù)據(jù)索引
  25.                                         Ir_Header = 0;
  26.                                 }
  27.                                 Ir_Time = 0; // 重置脈寬時(shí)間
  28.                         }
  29.                 }
  30.         }
  31.         else
  32.         {
  33.                 // 接收遙控器發(fā)送啟動(dòng)
  34.                 Ir_Start = 1;
  35.                 // 定時(shí)器歸位
  36.                 Ir_Time = 0;
  37.         }
  38. }
復(fù)制代碼

5、定時(shí)器處理
  1. // 遙控器接收定時(shí)器
  2. void Ir_Timer_Isr(void) interrupt 1 using 1
  3. {
  4.     TL0 = T0US;                     //initial timer0 low byte
  5.     TH0 = T0US >> 8;                //initial timer0 high byte
  6.         
  7.         if(count >= 5000)
  8.         {
  9.                 LED = !LED;
  10.                 count = 0;
  11.         }
  12.         count++;
  13.    
  14.     Ir_Time++; // 紅外時(shí)間以200us累加
  15. }
復(fù)制代碼





作者: 小貓要吃魚(yú)    時(shí)間: 2019-5-28 09:50
你好!你使用的單片機(jī)具體型號(hào)是什么?

做過(guò)幾款紅外解碼學(xué)習(xí)型遙控器(帶發(fā)射)和記錄脈寬的全能學(xué)習(xí)型遙控器(帶發(fā)射);
都是用的STC單片機(jī),分別是 89C52RC、15F2K60S2 和 12C5A60S2 這三款,使用
效果不錯(cuò),解碼型的NEC編碼的都可解碼和發(fā)射;記錄脈寬的全能型的,基本通吃
所有遙控器(空調(diào)測(cè)試通過(guò):美的、奧克斯、格力),實(shí)現(xiàn)比較完美的脈寬記錄和
紅外發(fā)射控制。

作者: yinqing452    時(shí)間: 2019-8-30 20:36
小貓要吃魚(yú) 發(fā)表于 2019-5-28 09:50
你好!你使用的單片機(jī)具體型號(hào)是什么?

做過(guò)幾款紅外解碼學(xué)習(xí)型遙控器(帶發(fā)射)和記錄脈寬的全能學(xué)習(xí)型遙 ...

可以幫忙一下紅外發(fā)射程序嗎?
作者: angmall    時(shí)間: 2019-8-31 14:23
紅外發(fā)射程序


  1. /*-----------------------------------------------
  2.   名稱:紅外發(fā)射原理
  3.   內(nèi)容:通過(guò)紅外發(fā)射接收閃爍LED,同普通LED顯示程序相同。
  4.   間歇發(fā)送38K調(diào)制波形。發(fā)射J34(IR2)端子接P3.3,J27(任意端子)接P3.2,
  5.   P1.3接任意LED,正常情況LED閃爍,拔掉發(fā)射或者接收信號(hào)線,led熄滅。
  6. ------------------------------------------------*/
  7. #include<reg52.h>     //包含頭文件,一般情況不需要改動(dòng),頭文件包含特殊功能寄存器的定義
  8. #include<INTRINS.H>


  9. sbit LED=P3^3;        //紅外發(fā)射
  10. sbit LED1=P1^3;
  11. sbit IR=P3^2;         //紅外一體化接收

  12. bit Flag;

  13. void Init_Timer0(void)
  14. {
  15. TMOD |= 0x01;                             
  16. TH0=0xf0;                              //定時(shí)器值初始化
  17. TL0=0x00;
  18. EA=1;                      //打開(kāi)中斷
  19. ET0=1;                     
  20. TR0=1;  
  21. }


  22. /*-----------------------------------------------
  23.                                 定時(shí)器初始化
  24. ------------------------------------------------*/
  25. void Timer0_isr(void) interrupt 1 using 1
  26. {
  27. TH0=0x0f;                //重新賦值
  28. TL0=0x00;
  29. Flag=!Flag;
  30. }

  31. /*-----------------------------------------------
  32.                                 主函數(shù)
  33. ------------------------------------------------*/
  34. main()
  35. {

  36. //unsigned int j;
  37. Init_Timer0();    //定時(shí)器初始化

  38. while(1)
  39. {

  40.     LED1=IR;       //讀取一體化接收頭數(shù)值
  41.         while(Flag)           //循環(huán)取反頻率大約38K
  42.            {
  43.                    _nop_();
  44.                    _nop_();
  45.                    _nop_();
  46.                    _nop_();
  47.                    _nop_();
  48.                    _nop_();
  49.                    _nop_();
  50.                    _nop_();
  51.                    _nop_();
  52.                    LED=!LED;    //發(fā)射管輸出            
  53.             }
  54.    }
  55. }
復(fù)制代碼





歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 在线免费观看成人 | 欧美一区2区三区4区公司二百 | 免费在线观看毛片 | 欧美群妇大交群中文字幕 | 日日操天天射 | 国产一区| 国产福利久久 | 国产日韩欧美 | 免费成人高清 | 国产精品久久久亚洲 | 91视视频在线观看入口直接观看 | 在线观看国产精品一区二区 | 伊人狠狠干 | 日本成人在线免费视频 | 日韩电影一区 | 韩国精品一区二区三区 | 黄色一级大片在线免费看产 | 亚洲高清视频一区二区 | 韩国毛片视频 | 一区二区国产在线观看 | 精品中文字幕在线观看 | 美女国产一区 | 在线成人免费视频 | 精品一区二区三区在线观看 | 欧美人妖网站 | 成人免费一区二区 | 欧产日产国产精品国产 | 欧美精品一区二区三区在线播放 | 久久综合伊人 | 午夜免费福利影院 | 亚洲最大的成人网 | 婷婷激情综合 | www.47久久青青 | 天天色综 | 日本在线中文 | 午夜男人的天堂 | 免费在线观看黄网站 | 91pao对白在线播放 | 国产精成人 | 97国产精品 | 99国产精品一区二区三区 |