單片機紅外解碼查詢法(HS9148)
先看一下連發(fā)碼的傳輸規(guī)律,如下圖所示
本文引用地址:http://m.butianyuan.cn/article/201611/323972.htm這個是發(fā)射器上面的碼型,經(jīng)過紅外接收模塊后,信號與發(fā)射型號是反相的。如下圖:
其中a的值可以左右計算a=(1/fosc)*192,當采用455E的晶振時候a=0.422ms.。
在看看“0”和“1”的定義,對單片機接收端而言,下面圖示是0和1的定義
由圖可以看出來,高電平過后,低電平持續(xù)時間為3a定義為邏輯1,高電平過后低電平持續(xù)時間為a定義為邏輯0。(理解了這個規(guī)律對解碼能否成功有著非常重大的意義)。
為了驗證PDF上的高低電平時間定義的正確性,用示波器檢測了其中某幾個按鍵的紅外接收端的波型。如下所示:
對其時間測試發(fā)現(xiàn)和PDF上的資料基本符合。
本程序靈敏度和抗干擾能力還有待提高。本文目的在于尋找紅外解碼的方法,如何做到簡單有效。RB2為遙控接收腳,RC0,RC1,RC2,RC3鏈接LED指示燈,程序代碼如下(下載地址:http://www.51hei.com/f/pichon.rar):
#include
__CONFIG(0X034);
#define uchar unsigned char
#define uint unsigned int
Unsigned char head_ok;//頭碼標志
unsigned char code_ok;//解碼成功標志
unsigned char code1;//系統(tǒng)碼
unsigned char code2;//按鍵碼
unsigned char i,//系統(tǒng)碼解碼次數(shù)
unsigned char n,//按鍵碼解碼次數(shù)
void delay2(uint b)//us級別延時
{
unsigned int j;
for(j=0;j
{
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
}
}
評論