基于MSP430的紅外遙控器解碼
采用脈寬調(diào)制的串行碼,以脈寬為0.565ms、間隔0.56ms、周期為1.125ms的組合表示二進(jìn)制的“0”;以脈寬為0.565ms、間隔1.685ms、
周期為2.25ms的組合表示二進(jìn)制的“1”,其波形如圖2所示。
當(dāng)一個鍵按下超過36ms,振蕩器使芯片激活,將發(fā)射一組108ms的編碼脈沖,這108ms發(fā)射代碼由一個引導(dǎo)碼(9ms),一個結(jié)果碼(4.5ms),低8位地址碼(9ms~18ms),高8位地址碼(9ms~18ms),8位數(shù)據(jù)碼(9ms~18ms)和這8位數(shù)據(jù)的反碼(9ms~18ms)組成。如果鍵按下超過108ms仍未松開,接下來發(fā)射的代碼(連發(fā)碼)將僅由起始碼(9ms)和結(jié)束碼(2.25ms)組成。
接收電路可以使用一種集紅外線接收和放大于一體的一體化紅外線接收器,不需要任何外接元件,就能完成從紅外線接收到輸出與TTL電平信號兼容的所有工作,而體積和普通的塑封三極管大小一樣,它適合于各種紅外線遙控和紅外線數(shù)據(jù)傳輸。
接收器對外只有3個引腳:Out、GND、Vcc與單片機(jī)接口非常方便
① 脈沖信號輸出接,直接接單片機(jī)的IO 口。
② GND接系統(tǒng)的地線(0V);
③ Vcc接系統(tǒng)的電源正極(3~5V);
以上信息來自搜集的資料和自己的整理(方便大家學(xué)習(xí))
以下是我的解碼程序(參考C51的程序的成功移植)
注意:紅外解碼對時間延時的精度要求比較高,很難一次成功,需要耐心調(diào)試,修改著色部分的數(shù)字大小.
//利用兩位數(shù)碼管顯示遙控器的編碼值
//如遙控器上的0~9對應(yīng)在數(shù)碼管上顯示00~09
#include
#define wei1_1 P1DIR|=BIT7;P1OUT|=BIT7//數(shù)碼管低位置高
#define wei1_0 P1DIR|=BIT7;P1OUT&=~BIT7//數(shù)碼管低位置低
#define wei2_1 P1DIR|=BIT6;P1OUT|=BIT6//數(shù)碼管高位置高
#define wei2_0 P1DIR|=BIT6;P1OUT&=~BIT6//數(shù)碼管高位置低
#define duan_out P2DIR=0xff//數(shù)碼管段選P2口設(shè)為輸出
#define IR_DIR_IN P1DIR&=~BIT0//紅外接收頭P1.0設(shè)置為輸入,
#define IRIN (P1IN&BIT0)//紅外接收頭輸入值
#define duan P2OUT//數(shù)碼管段選為P2口
char dat[8];
char seg[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xC6,0xa1,0x86,0x8e};
//函數(shù)聲明
void InitSys();
void display();
void delay(unsigned char x) //延時子程序(x*0.14MS)
{
unsigned char i,j;
while(x--)
{
for (i = 20; i>0; i--)
for(j=5;j>0;j--);
}
}
評論