你家裡是否有一個電視機遙控器或者空調機遙控器呢？你是否也想讓它遙控其他的電器甚至讓它遙控您的電腦呢？那好，跟我一起做這個“紅外遙控解碼器&r……
你家裡是否有一個電視機遙控器或者空調機遙控器呢？你是否也想讓它遙控其他的電器甚至讓它遙控您的電腦呢？那好，跟我一起做這個“紅外遙控解碼器”。
該小製作所需要的元件很少：單片機TA89C2051一隻，RS232介面電平與TTL電平轉換心片MAX232CPE 一隻，紅外接收管一隻，晶振11.0592MHz,電解電容10uF4隻，10uF一隻，電阻1K1個，300歐姆左右1個，瓷片電容30P2個。發光二極體8個。價錢不足20元。
主控制單元是單片機AT89C2051,中斷口INT0跟紅外接受管U1相連，接收紅外信號的脈衝，8個發光二極體作為顯示解碼輸出（也可以用來擴展接其他控制電路），U3是跟電腦串列口RS232相連時的電平轉換心片，9、10腳分別與單片機的1、2腳相連，（1腳為串列接收，2腳為串列發送），MAX232CPE的7、8腳分別接電腦串列口的2（接收）腳、3（發送腳）。晶振採用11.0592MHz，這樣才能使得通訊的波特率達到9600b/s，電腦一般默認值是9600b/s、8位數據位、1位停止位、無校驗位。
電路就這麼簡單了，現在分析具體的編程過程吧。
如圖所示，panasonic遙控器的波形是這樣的（經過反覆測試的結果）。
開始位是以3.6ms低電平然後是3.6ms高電平，然後數據表示形式是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”。因此，我們主要用單片機測量高電平的長短來確定是“1”還是“0”即可。定時器0的工作方式設置為方式1：mov tmod,#09h，這樣設置定時器0即是把GATE置1，16位計數器，最大計數值為2的16次方個機器周期，此方式由外中斷INT0控制，即INT0為高時才允許計數器計數。比如：
這3條指令就可以測量一個高電平，接下來讀取計數值TH0,TL0就可以分辨是起始位還是“1”或“0”。在確定碼錶之前，您可以使用P0口的8個發光二極體來顯示編碼，16位編碼分兩次顯示：
根據P0相繼的兩次顯示的編碼，記錄每個按鍵的編碼，形成編碼表，即遙控器編碼的解碼完畢。碼錶確定之後，以後接收到遙控器的編碼之後，就與碼錶比較，找到匹配的碼項，並把該碼項對應的順序號輸出到P0口，同時也把順序號向串列口輸出到電腦，電腦接收該數據後由串口軟體決定如何處理。
keydata equ 30h ;//該地址和31H地址用來存放遙控器按鍵編碼。
mov a,keydata ;// 符合大於2.2ms 小於2.7ms，即為“1”
mov a,keydata ;//否則 ，符合位“0”