紅外遙控解碼器
你家里是否有一個電視機(jī)遙控器或者空調(diào)機(jī)遙控器呢?你是否也想讓它遙控其他的電器甚至讓它遙控您的電腦呢?那好,跟我一起做這個“紅外遙控解碼器”。 該小制作所需要的元件很少:單片機(jī)TA89C2051一只,RS232接口電平與TTL電平轉(zhuǎn)換心片MAX232CPE一只,紅外接收管一只,晶振11.0592MHz,電解電容10uF4只,10uF一只,電阻1K1個,300歐姆左右1個,瓷片電容30P2個。發(fā)光二極管8個。價錢不足20元。 電路原理介紹: 主控制單元是單片機(jī)AT89C2051,中斷口INT0跟紅外接受管U1相連,接收紅外信號的脈沖,8個發(fā)光二極管作為顯示解碼輸出(也可以用來擴(kuò)展接其他控制電路),U3是跟電腦串行口RS232相連時的電平轉(zhuǎn)換心片,9、10腳分別與單片機(jī)的1、2腳相連,(1腳為串行接收,2腳為串行發(fā)送),MAX232CPE的7、8腳分別接電腦串行口的2(接收)腳、3(發(fā)送腳)。晶振采用11.0592MHz,這樣才能使得通訊的波特率達(dá)到9600b/s,電腦一般默認(rèn)值是9600b/s、8位數(shù)據(jù)位、1位停止位、無校驗(yàn)位。電路就這么簡單了,現(xiàn)在分析具體的編程過程吧。 如圖所示,panasonic遙控器的波形是這樣的(經(jīng)過反復(fù)測試的結(jié)果)。 開始位是以3.6ms低電平然后是3.6ms高電平,然后數(shù)據(jù)表示形式是0.9ms低電平0.9ms高電平周期為1.8ms表示“0”, 0.9ms低電平 2.4ms高電平周期為3.3ms表示“1”,編寫程序時,以大于3.4ms小于3.8ms高電平為起始位,以大于2.2ms小于2.7ms高電平表示“1”,大于0.84ms小于1.11ms高電平表示“0”。因此,我們主要用單片機(jī)測量高電平的長短來確定是“1”還是“0”即可。定時器0的工作方式設(shè)置為方式1:mov tmod,#09h,這樣設(shè)置定時器0即是把GATE置1,16位計數(shù)器,最大計數(shù)值為2的16次方個機(jī)器周期,此方式由外中斷INT0控制,即INT0為高時才允許計數(shù)器計數(shù)。比如: jnb p3.2,$ jb p3.2,$ clr tr0 這3條指令就可以測量一個高電平,接下來讀取計數(shù)值TH0,TL0就可以分辨是起始位還是“1”或“0”。在確定碼表之前,您可以使用P0口的8個發(fā)光二極管來顯示編碼,16位編碼分兩次顯示: mov p0,keydata acall delay_1s ;//1ms延時子程序 mov p0,keydata+1 ljmp main 根據(jù)P0相繼的兩次顯示的編碼,記錄每個按鍵的編碼,形成編碼表,即遙控器編碼的解碼完畢。碼表確定之后,以后接收到遙控器的編碼之后,就與碼表比較,找到匹配的碼項(xiàng),并把該碼項(xiàng)對應(yīng)的順序號輸出到P0口,同時也把順序號向串行口輸出到電腦,電腦接收該數(shù)據(jù)后由串口軟件決定如何處理。 程序不長,下面是完整的程序和注釋:(先看流程圖) keydata equ 30h ;//該地址和31H地址用來存放遙控器按鍵編碼。 org 00h main: movkeydata,#0 ;// 清零 mov tmod,#09h ;//設(shè)置定時0方式1,GATE=1 mov r7,#0 ;//計數(shù)器,用來計數(shù)是否滿8位 mov r6,#0 ;//計數(shù)器,用來計數(shù)是否滿2字節(jié)(解16位編碼) jb p3.2,$ ;//是否為低電平 again: ;//如果為低,繼續(xù)往下面執(zhí)行 movtl0,#0 ;//清零TL0 mov th0,#0 ;//清零TH0 setb tr0 ;//開啟定時器0 jnbp3.2,$ ;//等待高電平到來 jb p3.2,$ ;//高電平到來,此時開始計數(shù)
|