標(biāo)題: 第18章-單片機(jī)紅外通信 [打印本頁]
作者: wul 時(shí)間: 2016-3-28 23:22
標(biāo)題: 第18章-單片機(jī)紅外通信
51單片機(jī)輕松入門—基于STC15W4K系列(C語言版)
李友全 編著 詳見:http://www.raoushi.com/bbs/dpj-37954-1.html
第18章 紅外通信
1 電路圖
2 程序移植
0.png (203.99 KB, 下載次數(shù): 187)
下載附件
2016-3-28 23:03 上傳
紅外遙控普遍運(yùn)用在家用電器上,在工業(yè)控制中,對于存在高壓、輻射、有毒
氣體、粉塵等場合,可以使用紅外遙控。
1電路圖
1號單片機(jī)與紅外接收頭連接電路如圖所示,紅外接收頭一般都可互換使用。
1.png (130 KB, 下載次數(shù): 207)
下載附件
2016-3-28 23:03 上傳
2 程序移植
例18.4 紅外接收數(shù)據(jù),使用一個(gè)定時(shí)器模擬外中斷方式,并通過串口發(fā)送接收到的用戶碼 與鍵碼,R/C時(shí)鐘:22.1184MHz,波特率9600, 要求串口助手按字符格式顯示。 程序優(yōu)點(diǎn):通用性極強(qiáng),可使用任意IO口接收紅外數(shù)據(jù),紅外接收部分自適應(yīng)R/C時(shí)鐘頻率
5~35M,模擬串口輸出部分需要根據(jù)R/C時(shí)鐘頻率調(diào)整延時(shí)函數(shù)參數(shù),此程序移植時(shí)只需更
改紅外接收引腳定義與模擬串口發(fā)送引腳即可。
#include "STC15W4K.H"
#define MAIN_Fosc 22.1184 // 定義主時(shí)鐘, 紅外接收會(huì)自動(dòng)適應(yīng)5~36MHZ,
#define User_code 0xFD02 // 定義紅外接收用戶碼 sbit Ir_Pin = P3^6; // 定義紅外接收輸入端口 sbit TXD1 = P3^1; // 定義模擬串口發(fā)送腳 void InitTimer0(void)
{
TMOD = 0x01; // 16位計(jì)數(shù)方式. TH0 = Timer0_Reload / 256;
TL0 = Timer0_Reload % 256; ET0 = 1;
TR0 = 1; EA = 1;
}
void main(void)
{
InitTimer0(); // 初始化Timer0
PrintString("定時(shí)器0初始化完畢\r\n"); // 上電后串口發(fā)送一條提示信息
while(1)
{
if(IR_OK) // 接收到一幀完整的紅外數(shù)據(jù)
{
PrintString("紅外鍵碼: 0x"); // 提示紅外鍵碼 Tx1Send(HEX2ASCII(IR_code >> 4)); // 鍵碼高半字節(jié) Tx1Send(HEX2ASCII(IR_code)); // 鍵碼低半字節(jié) if(IrUserErr) // 用戶碼錯(cuò)誤,則發(fā)送用戶碼
{
Tx1Send(' '); // 發(fā)空格 Tx1Send(' '); // 發(fā)空格 PrintString("用戶碼: 0x"); // 提示用戶碼 Tx1Send(HEX2ASCII(IR_UserH >> 4)); // 用戶碼高字節(jié)的高半字節(jié) Tx1Send(HEX2ASCII(IR_UserH)); // 用戶碼高字節(jié)的低半字節(jié) Tx1Send(HEX2ASCII(IR_UserL >> 4)); // 用戶碼低字節(jié)的高半字節(jié) Tx1Send(HEX2ASCII(IR_UserL)); // 用戶碼低字節(jié)的低半字節(jié)
}
Tx1Send(0x0d); // 發(fā)回車 Tx1Send(0x0a); // 發(fā)回車
IR_OK = 0; // 清除IR鍵按下標(biāo)志
}
}
}
程序運(yùn)行結(jié)果如下圖所示。
2.png (310.73 KB, 下載次數(shù): 192)
下載附件
2016-3-28 23:03 上傳
只要單片機(jī)能獲取紅外鍵碼,單片機(jī)就可根據(jù)不同的鍵碼執(zhí)行不同的控制功能。
程序:
1.1—IR查詢方式解碼:
2.3—IR-中斷方式(復(fù)雜的)
IR中斷方式(簡單版)的單片機(jī)紅外解碼程序:http://www.raoushi.com/bbs/dpj-47283-1.html
只用一個(gè)單片機(jī)定時(shí)器的紅外接收解碼程序:http://www.raoushi.com/bbs/dpj-47284-1.html
全部完整的4個(gè)源碼請下載附件:
第18章 紅外通信.rar
(84.33 KB, 下載次數(shù): 169)
2016-3-28 23:07 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者: lizhendong 時(shí)間: 2016-10-4 23:16
太好了,謝謝
作者: 國君 時(shí)間: 2018-7-10 15:25
路過學(xué)習(xí)學(xué)習(xí)。。。。。。。。。。
作者: xiexugang 時(shí)間: 2018-10-20 10:16
不錯(cuò),很好的應(yīng)用實(shí)例
作者: 北極泥 時(shí)間: 2018-11-1 09:13
很給力
作者: 水泊之星 時(shí)間: 2018-11-3 18:01
很實(shí)用,謝謝
作者: 無聊到處逛 時(shí)間: 2019-1-24 22:59
剛好,需要用到,謝謝了
作者: jpg阿福 時(shí)間: 2019-11-30 21:52
你好我是小白 請問一下:我用IR中斷的形式寫的串口顯示按鍵碼的程序 ,內(nèi)容上面大致和您的大致相同,可是在按下同一個(gè)按鍵兩次后就顯示其他的數(shù)碼(不是正常的00 ff 開頭的數(shù)碼) 我開始以為是程序的問題 但是第二次的顯示還是正確的第三次錯(cuò)誤,我就想不出來是什么原因了,您能指導(dǎo)指導(dǎo)嗎? 必要的話可以叫我貼出程序出來 謝謝! 各位看到的朋友如果可以的話也請幫幫忙,。感謝。
作者: herui2128 時(shí)間: 2020-2-17 13:19
路過,學(xué)習(xí)大神的編程思路
作者: qiuabc1234 時(shí)間: 2020-4-24 15:06
jpg阿福 發(fā)表于 2019-11-30 21:52
你好我是小白 請問一下:我用IR中斷的形式寫的串口顯示按鍵碼的程序 ,內(nèi)容上面大致和您的大致相同,可是在 ...
我比你白,是不是按鍵按下時(shí)連續(xù)發(fā)射信號?該搞個(gè)松開按鍵才發(fā)射的程序。或是你那個(gè)變量發(fā)射后沒復(fù)位?發(fā)射完復(fù)位
作者: 君工創(chuàng) 時(shí)間: 2021-11-16 11:57
沒看見連續(xù)鍵的解碼部份。
歡迎光臨 (http://www.raoushi.com/bbs/) |
Powered by Discuz! X3.1 |