用增強(qiáng)型51單片機(jī)實(shí)驗(yàn)板實(shí)現(xiàn)紅外線遙控
TR1=0://低電平(對(duì)發(fā)射電路而言)測(cè)試結(jié)束Iow_level_time=TH1*256+TL1:
//保存低電平的數(shù)據(jù)TH1=0;TL1=0;TR1=1;//為增加計(jì)時(shí)的準(zhǔn)確性,數(shù)據(jù)的處理都是在計(jì)時(shí)過程里//判斷引導(dǎo)碼(或重復(fù)碼)是否正確,如果不正確,則設(shè)置出錯(cuò)標(biāo)志位,并退出中斷程序if((high_level_time8500)II(high_level_time>9500)II(Iow_level_time1000)II(Iow_level_time>5000)){return1://因是引導(dǎo)碼出錯(cuò),所以直接初始化后重新開始測(cè)試}
//——————————————————//對(duì)是引導(dǎo)碼還是重復(fù)碼進(jìn)行判斷。如果是重復(fù)碼,就跳過后面數(shù)據(jù)的讀取if((Iow_level—time>1000)(Iow_level_time3500))repeat_code_detected=1:
if((Iow_level_time>4000)(Iow_level_time5000))Ioad_code_detected=1;if(repeat_code_detected==1)return1;//直接結(jié)束,temp1=uPD6121_read_code_8();//讀后面的系統(tǒng)、按健等數(shù)據(jù),temp2=uPD6121_read_code_8();teMP3=uPD6121_read_code_8();temp4=uPD6121_read_code_8();TR1=0:
if(decode_error==1)return1://無論是哪部分解碼出錯(cuò),都是重新開始if((temp1!=Ntemp2)II(temp3!
=~temp4)){return1;}
sys_code=temp1:
key_code=temp3;data_available=1;return0:
如圖5所示,是我們完成紅外線實(shí)驗(yàn)所必需的設(shè)備,準(zhǔn)備好硬件設(shè)備后,我們將紅外線解碼控制程序通過A51編程器燒入AT89S51單片機(jī)芯片,然后將芯片插到增強(qiáng)型51實(shí)驗(yàn)板上通電運(yùn)行即可。
圖6為增強(qiáng)型51實(shí)驗(yàn)板做紅外解碼電路,從而進(jìn)行數(shù)碼管顯示的實(shí)驗(yàn)電路板。
最后,要提醒大家一下,在做紅外實(shí)驗(yàn)需要注意的是:不同的紅外線遙控器編碼方式可能不同,你可能會(huì)發(fā)現(xiàn)有很多紅外線遙控器的外表幾乎都一樣。
但對(duì)于同一電器設(shè)備卻有些能用,有些不能用,這就是因?yàn)?a class="contentlabel" href="http://m.butianyuan.cn/news/listbylabel/label/遙控">遙控器內(nèi)部使用了不同的編碼芯片的原因,或許你會(huì)想到用家中的電視機(jī)或空調(diào)的遙控器來完成紅外線解碼的實(shí)驗(yàn),但你必須得事先知道該遙控器的紅外線編碼芯片是什么類型的,否則就比較麻煩了,而現(xiàn)在眾多紅外線遙控器廠商為了保護(hù)自己的知識(shí)產(chǎn)權(quán)已將編碼芯片打磨,這對(duì)我們DIY愛好者來說就不太有利了。
評(píng)論