機械社區
標題: DIY單片機紅外遙控解碼器 [打印本頁]
作者: 1五湖四海1 時間: 2011-7-8 10:10
標題: DIY單片機紅外遙控解碼器
本帖最后由 1五湖四海1 于 2011-7-8 20:51 編輯
經過這幾天制作單片機紅外線遙控解碼的學習研究中,遇到了許多不解的問題,雖然有了難題但是我不愿意請教我的老師,因為不經思考隨便跑去問別人問題會失去自己獨立學習和解決實際問題的好機會。為了學習單片機技術,滿足自己DIY的愿望我努力,認真的分析沒一條語句,最終在今天晚上我的DIY單片機紅外遙控解碼器調試初步成功了,手里拿著遙控器隨便按了一個鍵子,便會在單片機接收器數碼管上顯示該鍵子了數據編碼。甭提心里有多高興了,我興奮了一個晚上。
這回DIY我心愛的數字存儲示波器為我立下汗馬功勞,幫我捕捉了遙控器發射的數據編碼,讓我可以借助儀器解出每一個按鍵數據編碼。示波器在調試單片機紅外接收器延時程序時,也起到重大作用。這次成功還少不了跟隨我5年的臺式電腦和USB編寫器。
(, 下載次數: 106)
上傳
點擊文件名下載附件
下載積分: 威望 -10 點
實驗電路板
(, 下載次數: 108)
上傳
點擊文件名下載附件
下載積分: 威望 -10 點
汗馬功勞的示波器
#include<reg51.h> //成功時間2011.07.08
// 函數原型
void SystemInit(void);
void Delay_840us(void);
void Delay_2400us(void);
void LedDisp();
unsigned char GetCode(void);//獲得碼
// 位變量
sbit IRIN = P3^2;
// 變量
unsigned char KeyValue; //機器碼
unsigned char MaValue; //鍵值碼;
unsigned char disbuf[4]; //數碼管顯示緩沖
unsigned char code table[16] =
{~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F,~0x77,~0x7C,~0x39,~0x5E,~0x79,~0x71};
* 延時9ms
*/
void Delay_9000us(void)
{
TH1=(65536-27300)/256;
TL1=(65536-27300)%256;
TR1 = 1;
while(!TF1);
TF1 = 0;
TR1 = 0;
}
/**
* 延時4.5ms
*/
void Delay_4500us(void)
{
TH1=(65536-13800)/256;
TL1=(65536-13800)%256;
TR1 = 1;
while(!TF1);
TF1 = 0;
TR1 = 0;
}
//延時0.84ms
void Delay_840us(void)
{
TH1=(65536-2520)/256;
TL1=(65536-2520)%256;
TR1 = 1;
while(!TF1);
TF1 = 0;
TR1 = 0;
}
/**
* 系統初始化
*/
void SystemInit(void)
{
IRIN = 1;
IT0 = 1; //INT0負跳變觸發
TMOD = 0x10; //定時器1工作在方式1
EA = 1;
EX0 = 1;
}
/**
* 讀碼
*/
unsigned char GetCode()
{
unsigned char n;
static temp = 0;
for( n = 0; n < 8; n++ )
{
while(!IRIN); // 等待高電平,開始解碼
Delay_840us(); // 延時0.84ms
if(IRIN) // 若仍然為高電平,則為1,否則為0
{
temp = (0x80|(temp>>1)); // 1
while(IRIN); //等待跳變成低電平
}
else {
temp=(0x00|(temp>>1)); // 0
}
}
return temp;
}
/**
* 數碼管顯示
*/
void LedDisp()
{
/* unsigned char i;
for(i=0;i<4;i++)
{
P1=0xff;
P1=table[disbuf];
P2=0xdf;
delay(4);
P2>>=1;
}*/
P1=table[disbuf[1]];
P2=table[disbuf[0]];
}
void main(void)
{
SystemInit();
while(1)
{
//以下是查表顯示
disbuf[0]=(((KeyValue&0xf0)>>4)&0x0f);
disbuf[1]=KeyValue&0x0f;
// disbuf[2]=(((MaValue&0xf0)>>4)&0x0f);
// disbuf[3]=MaValue&0x0f;
LedDisp();
}
}
void interr_ir(void) interrupt 0
{
/**
* 用戶碼和機器碼
*/
unsigned char addrl,addrh,num1,num2;
EA = 0; //先關閉外部中斷0
Delay_9000us(); // 檢測9ms開始碼
if (!IRIN) { // 檢測是否為干擾信號
EA = 1; // 重新開啟外部中斷0
return ; // 退出解碼
}
while(!IRIN); // 等待跳為高電平
Delay_4500us(); // 檢測4.5ms結果碼
if (IRIN) { // 檢測是否為干擾信號
EA = 1; // 重新開啟外部中斷0
return ; // 退出解碼
}
// 讀碼
addrl=GetCode(); // 用戶編碼高位
addrh=GetCode(); // 用戶編碼低位
num1=GetCode(); // 機器碼
num2=GetCode(); // 機器碼反碼
//校驗是否為錯碼
if(num1!=~num2)
{
KeyValue=14;
EA=1;
return;
}
KeyValue=num2;
MaValue=addrh;
EA=1;
}
作者: 火炮 時間: 2011-7-8 10:50
恭喜樓主了 ,雖然樓主的C語言看的不太懂。樓主用的是那種單片機啊。有機會交流一下,我只會匯編編程。
作者: robotics30 時間: 2011-7-8 10:52
興趣是最好的老師,樓主,加油!
人生最幸福的事情就是興趣成為謀生的手段.
另外問一下,你用的是什么系列的單片機,8051還是ARM還是其它?
作者: 1五湖四海1 時間: 2011-7-8 11:17
回復 火炮 的帖子
火炮網友你好,我認為C語言和匯編比較起來,C語言語句容易理解,移植性很好,匯編也有它的優勢執行指令比C語言快一些。所以我選擇C語言了。我用的時8051核心的單片機,有機會交流請教下。
作者: 快樂的海綿 時間: 2011-7-8 11:21
樓主有興趣,有條件,這種研究型學習實乃人生一大幸事
作者: 1五湖四海1 時間: 2011-7-8 11:22
回復 robotics30 的帖子
robotics30 網友你好:
是啊,能夠把自己的興趣,變成自己的工作是一件幸福的事情。我用的是8051核心的單片機,有機會也嘗試下有特殊本領的其他新型單片機。
作者: 1五湖四海1 時間: 2011-7-8 11:24
回復 快樂的海綿 的帖子
謝謝
作者: zhongdong163 時間: 2011-7-8 23:52
示波器是自己買的嗎? 貌似價格不低
作者: 孤酒 時間: 2011-7-9 14:23
跟社區總工一個地的?
作者: 1五湖四海1 時間: 2011-7-9 20:15
回復 孤酒 的帖子
我是撫順的。
作者: 紫劍狂風 時間: 2011-7-9 20:24
呵呵 撫順雷鋒的第二故鄉呀,呵呵,去那邊的書店看過,很多老工人去那邊買技術類的書。
作者: 1五湖四海1 時間: 2011-8-2 19:33
這幾天家里買了一個冷風扇,自帶的遙控器不但下而且還不美觀,我就利用這個紅外解碼器制做了冷風扇遙控裝置,遙控器用家里電視遙控器,坐著沙發上不到能遙控電視節目還可以遙控風扇。
作者: ao923 時間: 2011-8-2 22:15
樓主真牛啊!一直在學習單片機。用的是匯編語言,正準備嘗試c語言。
作者: 補充 時間: 2011-8-3 09:03
恭喜 恭喜
作者: incisor007 時間: 2011-8-7 19:29
高手啊,剛剛學習PLC。樓主以后又問題能找你嗎?還有做PLC一般要準備哪些必要的工具呢?
作者: 1五湖四海1 時間: 2011-8-7 20:38
incisor007 發表于 2011-8-7 19:29 
高手啊,剛剛學習PLC。樓主以后又問題能找你嗎?還有做PLC一般要準備哪些必要的工具呢?
incisor007網友你好:
有問題大家可以一起討論啊,我這個電路是單片機系統板。學PLC應該有個PC加一些電工工具就可以吧。
作者: wbzd03 時間: 2011-10-8 12:30
羨慕大俠,再問設計單片機的外圍電路需要哪些知識?
作者: cyriliii 時間: 2011-10-8 13:08
好東西 只能看 不能下 郁悶了 曰
作者: 1五湖四海1 時間: 2011-10-9 20:29
wbzd03 發表于 2011-10-8 12:30 
羨慕大俠,再問設計單片機的外圍電路需要哪些知識?
WBZD03網友你好:
單片機是由硬件和軟件組成的,有人光玩硬件程序從網上下載,有人光玩程序單片機系統板買現成的,還有一種軟硬都玩。至于設計單片機外圍電路需要懂得電子技術方面的知識。
作者: 1五湖四海1 時間: 2011-10-9 20:31
cyriliii 發表于 2011-10-8 13:08 
好東西 只能看 不能下 郁悶了 曰
cyriliii網友你好:
為何不能下啊
作者: cyriliii 時間: 2011-10-9 22:06
搞錯了,不好意識,單片機買了一個套件,還沒有時間折騰
作者: 繁_花_落_盡__。 時間: 2011-10-10 18:53
高手 、值得學習!
作者: tianqilq 時間: 2011-11-16 21:38
程序是看不懂 但也看用途也知道挺厲害的
作者: 小學孩 時間: 2013-9-14 00:13
第一次看到大俠的測碼器程序,很佩服你呀!這里好像很久沒有新的發言了吧。我來晚了。
作者: 星河q 時間: 2013-9-14 15:11
多謝樓主分享
作者: 沨之嵐 時間: 2013-9-14 16:46
可以,用的哪一個型號的單片機啊?
作者: wujianbo1988 時間: 2013-10-2 21:38
上傳個外圍電路圖
作者: hexinkeji6 時間: 2013-10-20 10:55
樓主好樣的
作者: 藍zuzu 時間: 2015-1-20 23:05
路過
作者: 一杯熱茶足以 時間: 2015-5-29 18:48
人才,我們國家需要你
| 歡迎光臨 機械社區 (http://www.whclglass.com.cn/) |
Powered by Discuz! X3.5 |