HS5104紅外遙控晶元應用

2021-05-22 16:39:20 字數 1610 閱讀 4739

hs5104是乙個通用的紅外遙控編碼晶元,採用38khz載波紅外訊號編碼發射輸出,定向性,抗干擾性都不錯。採用的是按鍵起振模式,在平時沒有按鍵時是不通電的,沒有功耗。晶元有8個輸入通道及2個使用者碼設定鍵,最大可以管理32個按鍵編碼。可以用作一些家電和電動玩具的遙控器上,也可以與微控制器構成乙個短距離的(7~10m)的紅外遙控系統。

hs5104的編碼是12位資料編碼,每次按鍵按下時,先進行32ms延時,然後再連帶起始碼發出按鍵編碼,直到按鍵抬起,才停止傳送編碼。每次按鍵至少傳送兩次。這些需要在微控制器中進行軟體處理。hs5104資料輸出格式,連續兩幀碼之間間隔四位,根據48k訊號的長短來區分0和1。

紅外置收使用也是38khz整合紅外解碼模組,與微控制器的連線較為簡單,接收管的輸出通過三極體反向後連線到微控制器的io口。軟體中使用查詢方式進行解碼,也可以連線到微控制器中斷口,使用中斷方式進行解碼。這裡使用的是io查詢方式。

解碼程式,用的是stc微控制器,11.0592mhz晶振,使用微控制器的定時器進行計數定時,可以比較準備測得每乙個高電平低電平的延時時間,準確進行解碼。

一些預定義:

#define bit_low (750)           //16個38khz的定時器值,跟晶振有關,在實際用時,可以先用串列埠把這個值發出來

#define bit_high (2250)

#define bit_low_l (bit_low - 500)    //為提高抗干擾性所放的餘量,這樣低電平的長度就是250~1250

#define bit_low_r (bit_low + 500)

#define bit_high_l (bit_high - 1200)   //高電平長度1050~3450

#define bit_high_r (bit_high + 1200)

#define bit_width (bit_low_l + bit_high_r) //一位總長度,低電平最長時加上高電平最長時間

解碼函式,只是校驗了起始碼後直接返回按鍵值,至於一次按鍵多個碼,需要在讀鍵值時進行處理。

//初始化,將定時器設定為16位計數模式

void irda_init(void)

解碼函式:

uint16 irda_soft_decord(void)

for (i=0; i<12; i++)

} while (irda_port);

irda_tr = 0;

irda_th = 0;

irda_tl = 0;

if (mid < bit_low_l) //less then 360 us, error

if (mid > bit_high_l) //big then 800us, 1, or 0;

irda_th = 0;

irda_tl = 0;

irda_tr = 1;

do

} while (!irda_port);

}

if ((key & start_code) == start_code)

else

}

//end