實(shí)例C 紅外線遙控應(yīng)用實(shí)例_第1頁(yè)
實(shí)例C 紅外線遙控應(yīng)用實(shí)例_第2頁(yè)
實(shí)例C 紅外線遙控應(yīng)用實(shí)例_第3頁(yè)
實(shí)例C 紅外線遙控應(yīng)用實(shí)例_第4頁(yè)
已閱讀5頁(yè),還剩28頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

實(shí)例C紅外線遙控應(yīng)用實(shí)例紅外線遙控成本低,安全可靠,不會(huì)產(chǎn)生電器干擾,因此,在家電設(shè)備及其他近距離的遙控中得到廣泛應(yīng)用。本章將通過(guò)LED顯示遙控器按鍵值實(shí)例、簡(jiǎn)易紅外線遙控開關(guān)和紅外線遙控七色小彩燈實(shí)例,介紹紅外線遙控基本原理及其設(shè)計(jì)、應(yīng)用方法。C.1LED顯示遙控器按鍵值功能說(shuō)明:選用一種電視機(jī)遙控器,再利用接收模塊結(jié)合單片機(jī)解碼,控制pi端口所接的8個(gè)LED亮或滅。因此,8個(gè)LED的亮或滅的狀態(tài),即是顯示紅外遙控器的按鍵值。8個(gè)LED視為8位二進(jìn)制數(shù),其中LED亮視為0,LED滅視為1。例如,按動(dòng)紅外遙控器按鍵1,8個(gè)LED中右邊第一個(gè)滅,其他全亮,則表示二進(jìn)制數(shù)為00000001B,轉(zhuǎn)換成十六進(jìn)制數(shù)為01H,即紅外遙控器按鍵1的控制編碼為01H;如果按動(dòng)紅外遙控器按鍵2,8個(gè)LED中右邊第二個(gè)滅,其他全亮,表示二進(jìn)制數(shù)為00000010B,轉(zhuǎn)換成十六進(jìn)制數(shù)為02H,即紅外遙控器按鍵2的控制編碼為02H。再如,按動(dòng)紅外遙控器"POWER”鍵,8個(gè)LED中第2、5滅,其他全亮,表示二進(jìn)制數(shù)為00010010B,轉(zhuǎn)換成十六進(jìn)制數(shù)為I2H,即遙控器的POWER鍵控制編碼為12Ho二進(jìn)制數(shù)轉(zhuǎn)換十六進(jìn)制數(shù)的方法可以參考書后附錄B的制式轉(zhuǎn)換表。C.1.1紅外線遙控原理.紅外線遙控系統(tǒng)結(jié)構(gòu)紅外線遙控系統(tǒng)是由發(fā)射端和接收端兩部分組成,如圖C.1和C.2所示。紅外線發(fā)射端就是紅外遙控器,主要包括鍵盤、編碼調(diào)制芯片、紅外線發(fā)射LED。當(dāng)按下某一按鍵后,遙控器上的編碼調(diào)制芯片便進(jìn)行編碼,并結(jié)合載波電路的教波信號(hào)而成為合成信號(hào),再經(jīng)紅外線發(fā)射二極管,將紅外線信號(hào)發(fā)射出去。發(fā)射端部分圖C.l紅外線發(fā)射端工作方框圖接收端部分圖C.2紅外線接收端工作方框圖紅外線接收端主要包括紅外線接收模塊、解碼單片機(jī)。其中紅外線接收模塊里包括光、電轉(zhuǎn)換放大器、解調(diào)電路。當(dāng)紅外線發(fā)射信號(hào)進(jìn)入接收模塊后,在其輸出端便可以得到原先的數(shù)字控制編碼,再經(jīng)過(guò)單片機(jī)解碼程序進(jìn)行解碼,便可以得知按下了哪一按鍵,從而完成紅外線遙控的動(dòng)作。.編碼方式與解碼原理紅外線遙控器的編碼與所使用的編碼芯片有關(guān),不同的芯片編碼有所不同,但基本原理相似。這里以SC9012芯片為例,說(shuō)明遙控編碼方式和解碼原理。SC9012一幀完整的發(fā)射碼是山引導(dǎo)碼、用戶編碼和鍵數(shù)據(jù)碼3部分組成。編碼的格式如圖C.3所示。圖C.3紅外線發(fā)射碼格式引導(dǎo)碼由一個(gè)4.5ms的高電平脈沖及4.5ms的低電平脈沖組成。八位的用戶編碼被連續(xù)發(fā)送兩次,八位的鍵數(shù)據(jù)碼也被發(fā)送兩次,第一次發(fā)送的是鍵數(shù)據(jù)碼的原碼,第二次發(fā)送的是鍵數(shù)據(jù)碼的反碼,所以,整個(gè)數(shù)據(jù)編碼占用32位。數(shù)據(jù)編碼方式是通過(guò)脈寬調(diào)制來(lái)實(shí)現(xiàn)的,以脈寬為0.56ms,間隔為0.56ms,周期為1.125ms的組合表示二進(jìn)制的“0”;以脈寬為0.56ms,間隔為1.69ms,周期為2.25ms的組合表示二進(jìn)制的“1”,其接收端波形如圖C.4和圖C.5所示。位“0”0.56ms1.125ms位“1”圖C.4位“0”0.56ms1.125ms位“1”圖C.4遙控碼“0”波形圖0.56ms2.25nls圖C.5遙控碼“1”波形圖單片機(jī)解碼的關(guān)鍵是如何識(shí)別“0”和“1”,從上面遙控碼“0”和“1”的波形圖中可以發(fā)現(xiàn)“0”、"1”均以0.56ms的低電平開始,不同的是高電平的寬度不同,“0”為0.56ms,“1”為1.68ms,即“1”的高電平寬度是“0”的高電平寬度的3倍。如果延時(shí)0.56ms,若讀到的電平為低,說(shuō)明該位為“0”,反之則為“1”?;蛘咴O(shè)計(jì)一精確的延時(shí)時(shí)間,例如以0.093ms延時(shí)時(shí)間當(dāng)作基礎(chǔ)時(shí)間,以調(diào)用基礎(chǔ)延時(shí)時(shí)間的次數(shù)來(lái)計(jì)數(shù)實(shí)際的波形寬度,若讀值為6表示波形寬度為0.56ms,若讀值為18則表示波形寬度為1.68ms,因此,可以直接通過(guò)判斷高電平的寬度的計(jì)數(shù)值是6或是18,來(lái)判斷接收的原編碼為0或1。C.1.2硬件設(shè)計(jì)紅外線發(fā)射端采用市場(chǎng)上通用的一種紅外遙控器(芯片為SC9012或TC9012系列等)。接收端采用一體化紅外接收頭,紅外接收頭只有3個(gè)引腳:引腳1為數(shù)字信號(hào)輸出端(OUT),引腳2為接地端(GND),引腳3為電源輸入(VCC)。紅外接收頭與單片機(jī)連接非常簡(jiǎn)單,只需將信號(hào)輸出端(OUT)與單片機(jī)-個(gè)I/O引腳連接(P3.2),然后接上電源即可。單片機(jī)主要用于解碼,P1端口所接的8個(gè)LED用來(lái)顯示解碼后紅外遙控器的按鍵值。單片機(jī)的P2.4引腳通過(guò)限流電阻R與三極管基極相接,三極管的集電極接有蜂鳴器,電路如圖C.6所示。C.1.3程序設(shè)計(jì)程序中,主程序通過(guò)調(diào)用解碼子程序,將接收到的紅外線遙控器信號(hào)進(jìn)行解碼,再調(diào)用遙控執(zhí)行子程序,將解碼后的按鍵值由LED顯示出來(lái)。所以,解碼子程序是程序中的主要部分。1.主要標(biāo)號(hào)說(shuō)明MAIN:主程序。IR_IN:解碼子程序。IR_ZX:遙控執(zhí)行子程序。FS_SPK:發(fā)聲子程序。DE:短暫延時(shí)子程序。DELAY05_R5:延時(shí)子程序,總延時(shí)時(shí)間為0.5msxR5。DEL:用于解碼延時(shí)子程序,延時(shí)時(shí)間為0.093mso2.程序清單匯編語(yǔ)言編寫的LED顯示紅外線遙控器按鍵值源程序IR01.ASM代碼如下:01; 02;程序名:IR01.ASM03;程序功能:顯示紅外遙控器按鍵值04; 05; 程序初始化 06SPKEQUP2.4 ;壓電喇叭信號(hào)輸入位07IRINEQUP3.2 ;紅外線IR信號(hào)輸入位08;

09IRDZEQU20H;解碼數(shù)據(jù)放置起始地址10DZ3EQU22H;比較第3字節(jié)11t1314MAIN:15ACALLFS_SPK;調(diào)用發(fā)聲子程序,響一聲16SETBIRIN;IR輸入位設(shè)置為高電平17LOOP:18MOVRO,#IRDZ;設(shè)置IR解碼起始地址19ACALLIR_IN;調(diào)用解碼子程序,解碼20ACALLIR_ZX;調(diào)用遙控執(zhí)行子程序,執(zhí)行動(dòng)作21JMPLOOP;繼續(xù)循環(huán)執(zhí)行2223—■—解碼子程序 2425IR_IN:;解碼子程序26;確認(rèn)IR信號(hào)出現(xiàn),避開9毫秒引導(dǎo)脈沖27L1:JNBIRIN,L2;等待IR信號(hào)出現(xiàn)28JMPLI29L2:MOVR5,#17;避開9毫秒引導(dǎo)脈沖30ACALLDELAY05_R531JBIRIN,LI;確認(rèn)IR信號(hào)出現(xiàn)32t—33L3:JBIRIN,L4;等IR變?yōu)楦唠娖?4ACALLDEL;調(diào)用0.093ms延時(shí)程序

35JMP L336L4:MOVR3,#0;8位計(jì)數(shù)清為03839;避開低電平,待直接判斷高電平L5:JNB IRIN,L6;等IR變?yōu)榈碗娖?0ACALLDEL;調(diào)用0.093ms延時(shí)程序4142JMP L5L6: JB IRIN,L7;等IR變?yōu)楦唠娖?3ACALLDEL;調(diào)用0.093ms延時(shí)程序444546JMP L6f;通過(guò)調(diào)用0.093ms延時(shí)次數(shù)的計(jì)數(shù)值來(lái)判斷高電平的寬度,解碼0或147L7:MOVR2,#0;0.093ms計(jì)數(shù)清為048L8:ACALLDEL;調(diào)用0.093ms延時(shí)子程序49JB IRIN,L9;等IR變?yōu)楦唠娖?051rMOVA,#8;將A寄存器設(shè)置為852CLRC;清除借位標(biāo)志C53SUBBA,R2;以減法指令SUBB來(lái)判斷高低位54MOVA,@R0;R0值為解碼內(nèi)存地址,即取出內(nèi)存數(shù)據(jù)給A55RRCA;將借位標(biāo)志C右移進(jìn)入A56MOV@R0,A;將數(shù)據(jù)寫入內(nèi)存57INC R3;R3值加1,處理完一位58CJNER3,#8,L5;需處理完8位5960rMOVR3,#0;計(jì)數(shù)清0

61INCRO;RO值力口162CJNERO,#23H,L5;收集到4字節(jié)63JMPLIO64L9:INCR2;R2值加165CJNER2,#30,L8;計(jì)數(shù)過(guò)長(zhǎng)離開66LIO:67RET;子程序返回687071IR_ZX:;遙控執(zhí)行子程序72MOVA,DZ3;將第3字節(jié)數(shù)據(jù)賦予A73MOVPl,A;顯示二進(jìn)制按鍵值74ACALLFS_SPK;調(diào)用發(fā)聲子程序,響一聲75RET7677— 發(fā)聲子程序 7879FS_SPK:;發(fā)聲子程序80MOVR6,#081Bl:ACALL?DE82CPLSPK83DJNZR6,Bl84MOVR5,#10085ACALLDELAY05.R586RET

8788—-短暫延時(shí)子程序 8990DE:;短暫延時(shí)子程序91MOVR7,#18092DEI:NOP93DJNZR7,DEI94RET9596r—----延時(shí)子程序 9798DELAY05_R5;延時(shí)子程序,總延時(shí)時(shí)間為0.5ms*R599MOVR6,#5100DI:MOVR7,#10101DJNZR7,?102DJNZR6,DI103DJNZR5,DELAY05_R5104RET105106r—-解碼延時(shí)子程序 107108DEL;用于解碼延時(shí)子程序,延時(shí)為0.093ms109MOVR7,#22110El:NOP111NOP112DJNZR7,El113 RET114; 115 END ;程序結(jié)束C.1.4代碼詳解06?10:為程序初始化部分。06:P2.4為壓電喇叭信號(hào)輸入位,并設(shè)定P2.4以SPK表示。07:P3.2為紅外線IR信號(hào)輸入位,并設(shè)定P3.2以IRIN表示。09:20H為解碼數(shù)據(jù)放置起始地址,并設(shè)定起始地址20H以IRDZ表示。解碼數(shù)據(jù)一共需要占用4字節(jié),即20H、21H、22H、23H。其中20H和21H單元放置用戶編碼,22H單元放置按犍數(shù)據(jù)編碼,23H單元放置按鍵數(shù)據(jù)碼的反碼。10:22H單元放置的是按鍵數(shù)據(jù)編碼,并設(shè)定22H單元以DZ3表示。14~21:為主程序部分。15:調(diào)用FS_SPK發(fā)聲子程序,響一聲,表示紅外線接收開始工作。16:將紅外線信號(hào)輸入位設(shè)置為高電平。17:循環(huán)開始。18:將20H賦給寄存器R0,設(shè)置紅外線解碼起始地址。19:調(diào)用IR」N解碼子程序,將接收到的紅外線遙控器信號(hào)進(jìn)行解碼。20:調(diào)用IR_ZX遙控執(zhí)行子程序,將解碼后的按鍵值由LED顯示出來(lái)。21:無(wú)限循環(huán)執(zhí)行。25?67:紅外線接收解碼子程序部分。25:解碼子程序開始。27~36:確認(rèn)IR信號(hào)出現(xiàn),避開9ms引導(dǎo)脈沖。接收端接收到的引導(dǎo)碼是由一個(gè)4.5ms的低電平脈沖及4.5ms的高電平脈沖組成9ms引導(dǎo)脈沖,當(dāng)IR信號(hào)出現(xiàn)后,通過(guò)調(diào)用DELAY05R5延時(shí)子程序避開9ms引導(dǎo)脈沖。39~44:避開低電平,直接判斷高電平。數(shù)據(jù)“0”和“1”的波形均以0.56ms的低電平開始,只是高電平的寬度不同,因此,可以避開低電平,直接通過(guò)判斷高電平的寬度來(lái)確定數(shù)據(jù)"0"或"1"。47:R2為計(jì)數(shù)高低電平寬度的計(jì)數(shù)器,使計(jì)數(shù)初始值為0,即從0開始計(jì)數(shù)調(diào)用0.093ms解碼延時(shí)的次數(shù)。48:調(diào)用0.093ms延時(shí)解碼子程序。49:如果仍為高電平,則跳轉(zhuǎn)到標(biāo)號(hào)L9處執(zhí)行,使R2值加1。51:將A寄存器設(shè)置為8。52:清除借位標(biāo)志C。53:指令“SUBBA,R2”中R2為計(jì)數(shù)值,若出現(xiàn)高電平的寬度為0.56ms,即數(shù)字“0”的特征,則調(diào)用6次0.093ms延時(shí)便會(huì)出現(xiàn)低電平,此時(shí)存入R2中的計(jì)數(shù)值為6。若出現(xiàn)高電平的寬度為1.68ms,即數(shù)字“1”的特征,則需耍調(diào)用18次0.093ms延時(shí)才能出現(xiàn)低電平,此時(shí)存入R2中的計(jì)數(shù)值為18。所以,R2中計(jì)數(shù)值是6還是18,就決定編碼“0”或是“1"。A寄存器設(shè)置為8,當(dāng)R2值為6時(shí),“8-R2”無(wú)產(chǎn)生借位,借位標(biāo)志C=0,表示編碼為0。當(dāng)R2值為18時(shí),“8-R2”產(chǎn)生借位,借位標(biāo)志C=1,表示編碼為Io54:R0以間接尋址方式取出內(nèi)存數(shù)據(jù)給Ao55:右移指令,將借位標(biāo)志C右移進(jìn)入A寄存器中。56:將數(shù)據(jù)寫入內(nèi)存內(nèi)。57:R3值加1,處理完一位。58:一字節(jié)需收集完8位數(shù)據(jù)。60?63:需要收集到4字節(jié)。64:R2值力口k65:計(jì)數(shù)過(guò)長(zhǎng)自動(dòng)離開。67:解碼子程序返回。71-75:遙控執(zhí)行子程序。72:將第3字節(jié)的內(nèi)容,即解碼后的紅外按鍵編碼數(shù)據(jù)送入寄存器A中。73:將寄存器A中的內(nèi)容送入P1端口輸出,由8個(gè)LED顯示二進(jìn)制按鍵值。74:調(diào)用發(fā)聲子程序,響一聲。75:遙控執(zhí)行子程序返回。79~86:發(fā)聲子程序。90?94:短暫延時(shí)子程序。98-104:延時(shí)子程序,總延時(shí)時(shí)間為0.5msxR5。108~113:用于解碼延時(shí)子程序,延時(shí)為0.093ms。115:程序結(jié)束。C.2簡(jiǎn)易紅外線遙控開關(guān)功能說(shuō)明:選用一種電視機(jī)遙控器,再利用接收模塊結(jié)合單片機(jī)解碼,設(shè)計(jì)一個(gè)簡(jiǎn)易的紅外線遙控系統(tǒng),通過(guò)遙控繼電器開啟關(guān)閉,進(jìn)而控制家用電器開關(guān)。遙控器使用鍵盤上的1鍵(測(cè)得鍵碼為01H)。按下1鍵,則繼電器SSR將ON,蜂鳴器響一聲,再次按下遙控器上的1鍵,繼電器將OFF。C.2.1硬件設(shè)計(jì)紅外線發(fā)射端采用市場(chǎng)上通用的一種電視機(jī)遙控器(芯片為SC9012或TC9012系列)。接收端用一體化紅外接收頭,將接收頭腳1信號(hào)輸出端(OUT)與單片機(jī)P3.2引腳連接,接收頭腳3接電源,腳2接地。單片機(jī)的P2.6引腳連接交流式固態(tài)繼電器SSR,這種繼電器是采用光電耦合式無(wú)觸點(diǎn)隔離輸出控制,可以有效防止在電源接通或斷開時(shí)對(duì)系統(tǒng)產(chǎn)生的不良影響。其繼電器的輸出端OUT無(wú)正、負(fù)之分,可以控制交流回路的通斷。單片機(jī)的P2.4引腳接有蜂鳴器,P1.7引腳接有LED,作為解碼信號(hào)的指示燈。電路如圖C.7所示。S9C51S9C51圖C.7簡(jiǎn)易紅外線遙控開關(guān)電路圖C.2.2程序設(shè)計(jì)程序中,將接收到的紅外線遙控器信號(hào)進(jìn)行解碼,并與按鍵1碼(01H)進(jìn)行比較,如果相同,則繼電器才能工作,防止誤動(dòng)。1.主要標(biāo)號(hào)說(shuō)明MAIN:主程序。IRJN:解碼子程序。IRZX:遙控執(zhí)行子程序。SD_LED:工作燈閃動(dòng)子程序。FSSPK:發(fā)聲子程序。DE:短暫延時(shí)子程序。DELAY05R5:延時(shí)子程序,總延時(shí)時(shí)間為0.5ms*R5。DEL:用于解碼延時(shí)子程序,延時(shí)時(shí)間為0.093ms。2.程序清單匯編語(yǔ)言編寫的簡(jiǎn)易紅外線遙控開關(guān)源程序IR02.ASM代碼如下:01 -————— -————__,-一02;程序名:IR02.ASM03;程序功能:簡(jiǎn)易紅外線遙控開關(guān)04; 05; 程序初始化 06IR_K1EQU01H;IR遙控器按鍵1碼07—08SSREQUP2.6;繼電器控制引腳定義09SLEDEQUPl.7;工作指示燈引腳定義10SPKEQUP2.4;壓電喇叭信號(hào)輸入位11IRINEQUP3.2;紅外線IR信號(hào)輸入位12r—13IRDZEQU20H;解碼數(shù)據(jù)放置起始地址14DZ3EQU22H;比較第3字節(jié)1516— 主程序 1718MAIN:19ACALLFS_SPK;調(diào)用發(fā)聲子程序,響一聲SETBIRIN;IR輸入位設(shè)置為高電平ACALLSD_LED;調(diào)用工作燈閃動(dòng)子程序,閃動(dòng)一次LOOP:MOVRO,#IRDZ;設(shè)置IR解碼起始地址ACALLIR_IN;調(diào)用解碼子程序,解碼ACALLIR_ZX;調(diào)用遙控執(zhí)行子程序,執(zhí)行動(dòng)作JMPLOOP;繼續(xù)循環(huán)執(zhí)行202122232425262728293031323334353637383940414243444546; 解碼子程序 IRIN:L5:JNBL5:JNBIRIN,L6ACALLDELJMPL5L6:JBIRIN,L7;等IR變?yōu)榈碗娖?調(diào)用0.093ms延時(shí)程序;等工R變?yōu)楦唠娖?確認(rèn)工R信號(hào)出現(xiàn),避開9ms引導(dǎo)脈沖L1:JNBIRIN,L2;等待IR信號(hào)出現(xiàn)JMPLIL2:MOVR5,#17;避開9ms引導(dǎo)脈沖ACALLDELAY05_R5JBIRIN,LI;確認(rèn)IR信號(hào)出現(xiàn)CLRSLED;工作指示燈亮起L3:JBIRIN,L4;等IR變?yōu)楦唠娖紸CALLDEL;調(diào)用0.093ms延時(shí)程序JMPL3L4:MOVR3,#0;8位計(jì)數(shù)清為0;避開低電平,待直接判斷高電平

47ACALLDEL;調(diào)用0.093ms延時(shí)程序48JMPL649—50;通過(guò)調(diào)用0.093ms延時(shí)次數(shù)的計(jì)數(shù)值來(lái)判斷高電平的寬度,解碼?;?51L7:MOVR2,#0;0.093ms計(jì)數(shù)清為052L8:ACALLDEL;調(diào)用0.093ms延時(shí)子程序53JB工RIN,L9;等IR變?yōu)楦唠娖?4r—55MOVA,8;將A寄存器設(shè)置為856CLRC;清除借位標(biāo)志C57SUBBA,R2;以減法指令SUBB來(lái)判斷高低位58MOVA,@R0;R0值為解碼內(nèi)存地址,即取出內(nèi)存數(shù)據(jù)給59RRCA;將借位標(biāo)志C右移進(jìn)入A60MOV@R0,A;將數(shù)據(jù)寫入內(nèi)存61INCR3;R3值加1,處理完一位62CJNER3,#8,L5;需處理完8位63r—64MOVR3,#0;計(jì)數(shù)清065INCR0;R0值加166CJNER0,#23H,L5;收集到4字節(jié)67JMPLIO68L9:INCR2;R2值加169CJNER2,#30,L8;計(jì)數(shù)過(guò)長(zhǎng)離開70L10:SETESLED;關(guān)閉LED71RET;子程序返回7273 ;-遙控執(zhí)行子程序

74IR_ZX:75MOVA,DZ3 ;將第3字節(jié)數(shù)據(jù)賦予A76CJNEA,#IR_K1,Al ;與按鍵1碼比較,不是則返回77ACALLFS.SPK ;調(diào)用發(fā)聲子程序,響一聲78CPL SSR ;反相輸出,使繼電器接通或斷開79A1:RET8081; 工作燈閃動(dòng)子程序 82SD__LED:83MOVR4,#484LEI:CPL SLED85MOVR5,#20086ACALLDELAY05_R587DJNZ R4,LEI88RET8990; 發(fā)聲子程序 91FS_SPK:92MOV R6,#093Bl:ACALLDE94CPL SPK95DJNZR6,B196MOVR5,#10097ACALLDELAY05_R598RET99100; 短暫延時(shí)子程序

DE:MOVDEI:NOPDJNZRETR7,#180R7rDElr 延時(shí)子程序 DELAY05_F(5: ;總延時(shí)時(shí)間為0.5ms*R5MOVR6,#5DI:MOVR7,#10DJNZR7,$DJNZR6,D1DJNZR5,DELAY05_R5RETr 解碼延時(shí)子程序 DEL:;延時(shí)為0.093msMOVR7,#22El:NOPNOPDJNZR7,ElRETrEND;程序結(jié)束C.2.3代碼詳解10110210310410510610710810911011111211311411511611711811912012112212306?14:為程序初始化部分。06:0IH為遙控器按鍵1碼,并設(shè)定01H以IRK1表示。08:P2.6為繼電器控制引腳,并設(shè)定P2.6以SSR表示。09:P1.7為工作指示燈引腳,并設(shè)定P1.7以SLED表示。10:P2.4為壓電喇叭信號(hào)輸入位,并設(shè)定P2.4以SPK表示。11:P3.2為紅外線IR信號(hào)輸入位,并設(shè)定P3.2以1RIN表示。13:20H為解碼數(shù)據(jù)放置起始地址,并設(shè)定起始地址20H以IRDZ表示。解碼數(shù)據(jù)一共需要占用4字節(jié),即20H、21H、22H、23H。其中20H和21H單元放置用戶編碼,22H單元放置按鍵數(shù)據(jù)編碼,23H單元放置按鍵數(shù)據(jù)碼的反碼。14:22H單元放置的是按鍵數(shù)據(jù)編碼,并設(shè)定22H單元以DZ3表示。18?26:為主程序部分。19:調(diào)用FS_SPK發(fā)聲子程序,響一聲,表示紅外線接收開始工作。20:將紅外線信號(hào)輸入位設(shè)置為高電平。21:調(diào)用工作燈閃動(dòng)子程序,閃動(dòng)一次。22:循環(huán)開始。23:將20H賦給寄存器R0,設(shè)置紅外線解碼起始地址。24:調(diào)用IR」N解碼子程序,將接收到的紅外線遙控器信號(hào)進(jìn)行解碼。25:調(diào)用IRZX遙控執(zhí)行子程序,使繼電器執(zhí)行遙控動(dòng)作。26:無(wú)限循環(huán)執(zhí)行。29?71:紅外線接收解碼子程序部分。請(qǐng)參考C.1.4節(jié)中的解碼部分。74?79:遙控執(zhí)行子程序。75:將第3字節(jié)的內(nèi)容,即解碼后的紅外按鍵編碼數(shù)據(jù)送人寄存器A中。76:將接收的按犍解碼數(shù)據(jù)與按鍵1碼比較,如果相等說(shuō)明按下的是遙控器1鍵,則程序向下執(zhí)行1鍵的遙控功能,否則程序返回。77:調(diào)用發(fā)聲子程序,響一聲。78:?jiǎn)纹瑱C(jī)P2.6端口反相輸出,使繼電器接通或斷開。82~88:為工作燈閃動(dòng)子程序。每當(dāng)接收一次紅外線發(fā)射信號(hào)時(shí),LED就會(huì)閃動(dòng)一次。91-98:發(fā)聲子程序。每按一次紅外遙控1鍵,便會(huì)響一聲,表明在執(zhí)行遙控動(dòng)作。101~105:短暫延時(shí)子程序,延時(shí)時(shí)間為540US。108—114:延時(shí)子程序,總延時(shí)時(shí)間為0.5msxR5。116~121:用于解碼延時(shí)子程序,延時(shí)為0.093ms。123:程序結(jié)束。C.3紅外線遙控七色小彩燈功能說(shuō)明:利用紅外線遙控系統(tǒng),控制3個(gè)高亮度LED,其發(fā)光顏色分別為紅、綠、藍(lán)。再根據(jù)三基色原理進(jìn)行組合,使得彩燈呈現(xiàn)7種不同顏色。按下遙控器1鍵,彩燈呈現(xiàn)紅色。按下遙控器2鍵,彩燈呈現(xiàn)黃色。按下遙控器3鍵,彩燈呈現(xiàn)綠色。按下遙控器4鍵,彩燈呈現(xiàn)青色。按下遙控器5鍵,彩燈呈現(xiàn)藍(lán)色。按下遙控器6鍵,彩燈呈現(xiàn)紫色。按下遙控器7鍵,彩燈呈現(xiàn)白色。按下遙控器POWER鍵,關(guān)閉彩燈。C.3.1硬件設(shè)計(jì)紅外線發(fā)射端采用市場(chǎng)上通用的一種電視機(jī)遙控器(芯片為SC9012或TC9012系列等)。接收端用一體化紅外接收頭,將接收頭腳1信號(hào)輸出端(OUT)與單片機(jī)P3.2引腳連接,接收頭腳3接電源,腳2接地。單片機(jī)的P1.0引腳連接發(fā)紅光顏色的LED,Pl.1引腳連接發(fā)綠光顏色的LED,Pl.2引腳連接發(fā)藍(lán)光顏色的LED。再將3個(gè)LED放在磨砂的玻璃罩內(nèi),使3種基色光混合后發(fā)出。單片機(jī)的P2.4引腳接有蜂鳴器。電路如圖C.8所示。圖C.8紅外線遙控7色小彩燈電路圖C.3.2程序設(shè)計(jì)利用紅外遙控系統(tǒng),控制3個(gè)LED,按照三基色原理進(jìn)行組合發(fā)光。紅色+綠色=黃色綠色+藍(lán)色=青色紅色+藍(lán)色=紫色紅色+綠色+藍(lán)色=白色1.主要標(biāo)號(hào)說(shuō)明MAIN:主程序。IRIN:解碼子程序。IR_ZX:遙控執(zhí)行子程序。FS_SPK:發(fā)聲子程序。DE:短暫延時(shí)子程序。DELAY05_R5:延時(shí)子程序,總延時(shí)時(shí)間為O.5ms*R5。DEL:用于解碼延時(shí)子程序,延時(shí)時(shí)間為0.093ms。2.程序清單匯編語(yǔ)言編寫的紅外線遙控7色小彩燈源程序IR03.ASM代碼如下:01; 02;程序名:IR03.ASM03;程序功能:紅外線遙控7色小彩燈04; 05; 程序初始化 0607IR_K1EQU01H;IR遙控器按鍵1比較碼08IR_K2EQU02H;IR遙控器按鍵2比較碼09IR_K3EQU03H;IR遙控器按鍵3比較碼10IR_K4EQU04H;IR遙控器按鍵4比較碼11IR_K5EQU05H;IR遙控器按鍵5比較碼12IR_K6EQU06H;IR遙控器按鍵6比較碼

13IR_K7EQU07H;IR遙控器按鍵7比較碼14POWER:EQU12H;工R遙控器POWER按鍵比較碼15;—16R_LEDEQUP1.0;發(fā)紅光LED控制引腳定義17G_LEDEQUPl.l;發(fā)綠光LED控制引腳定義18B_LEDEQUPl.2;發(fā)藍(lán)光LED控制引腳定義19; 2021SPKEQUP2.4;壓電喇叭信號(hào)輸入位22IRINEQUP3.2;紅外線IR信號(hào)輸入位23i—24IRDZEQU20H;解碼數(shù)據(jù)放置起始地址25DZ3EQU22H;比較第3字節(jié)26r— 主程序 2728MAIN:29ACALLFS_SPK;調(diào)用發(fā)聲子程序,響一聲30SETBIRIN;IR輸入位設(shè)置為高電平31LOOP:32MOVRO,#IRDZ;設(shè)置IR解碼起始地址33ACALLIR_IN;調(diào)用解碼子程序,解碼34ACALLIR_ZX;調(diào)用遙控執(zhí)行子程序,執(zhí)行動(dòng)作35JMPLOOP;繼續(xù)循環(huán)執(zhí)行3637r 解碼子程序 38IR_IN:

39;確認(rèn)IR信號(hào)出現(xiàn),避開9ms引導(dǎo)脈沖40LI:JNBIRIN,L2 ;等待1R信號(hào)出現(xiàn)41JMP L142L2:MOVR5,#17 ;避開9毫秒引導(dǎo)脈沖43ACALLDELAY05_R54445JB IRIN,LI ;確認(rèn)IR信號(hào)出現(xiàn)46L3:JB IRIN,L4 ;等1R變?yōu)楦唠娖?7ACALLDEL ;調(diào)用0.093ms延時(shí)程序48JMP L349L4:MOVR3,#0 ;8位計(jì)數(shù)清為05051;避開低電平,待直接判斷高電平52L5:JNB IRIN,L6 ;等1R變?yōu)榈碗娖?3ACALLDEL ;調(diào)用0.093ms延時(shí)程序54JMP L555L6:JB IRIN,L7 ;等工R變?yōu)楦唠娖?6ACALLDEL ;調(diào)用0.093ms延時(shí)程序57JMP L65859;通過(guò)調(diào)用0.093ms延時(shí)次數(shù)的計(jì)數(shù)值來(lái)判斷高電平的寬度,解碼?;?60L7:MOVR2,#0 ;0.093ms計(jì)數(shù)清為061L8:ACALLDEL ;調(diào)用0.093ms延時(shí)子程序62JB IRIN,L9 ;等IR變?yōu)楦唠娖?364MOVA,8 ;將A寄存器設(shè)置為865CLRC ;清除借位標(biāo)志C

66SUBBA,R2;以減法指令SUBB來(lái)判斷高低位67MOVA,@R0;R0值為解碼內(nèi)存地址,即取出內(nèi)存數(shù)據(jù)給A68RRCA;將借位標(biāo)志C右移進(jìn)入A69MOV@R0,A;將數(shù)據(jù)寫入內(nèi)存70INCR3;R3值加1,處理完一位71CJNER3,#8,L5;需處理完8位72 73MOVR3,#0;計(jì)數(shù)清074INCRO;R0值加175CJNERO,#23H,L5;收集到4字節(jié)76JMPLIO77L9:INCR2;R2值加178CJNER2,#30,L8;計(jì)數(shù)過(guò)長(zhǎng)離開79LIO:80RET;子程序返回8182— 遙控執(zhí)行子程序 8384IR_ZX:;紅光LED亮85MOVA,DZ3;將第3字節(jié)數(shù)據(jù)賦予A86CJNEA,Al ;與按鍵1碼比較,不是則繼續(xù)向下比較87ACALLFS_SPK;調(diào)用發(fā)聲子程序,響一聲88SETBG_LED;綠光LED熄滅89SETBB_LED;藍(lán)光LED熄滅90CLRR_LED;紅光LED亮91RET92f—

93Al:;發(fā)黃色光94MOVA,DZ3;將第3字節(jié)數(shù)據(jù)賦予A95CJNEA,#IRK2,A2;與按鍵2碼比較,不是則繼續(xù)向下比較96ACALLFS_SPK;調(diào)用發(fā)聲子程序,響1聲97SETBB_LED;藍(lán)光LED熄滅98CLR R_LED;紅光LED亮99CLR G_LED;綠光LED亮100RET101r102A2:;發(fā)綠色光103MOVA,DZ3;將第3字節(jié)數(shù)據(jù)賦予A104CJNEA,#IR_K3,A3;與按鍵3碼比較,不是則繼續(xù)向下比較105ACALLFS_SPK;調(diào)用發(fā)聲子程序,響1聲106SETBB_LED;藍(lán)光LED熄滅107SETBR_LED;紅光LED滅108CLRG_LED;綠光LED亮109RET110r111A3:;發(fā)青色光112MOVA,DZ3;將第3字節(jié)數(shù)據(jù)賦予A113CJNEA,#IR_K4,A4;與按鍵4碼比較,不是則繼續(xù)向下比較114ACALLFS_SPK;調(diào)用發(fā)聲子程序,響1聲115SETBR_LED;紅光LED熄滅116CLRG_LED;綠光LED亮117CLRB_LED;藍(lán)光LED亮118RET119r

120A4;發(fā)藍(lán)色光121MOVA,DZ3;將第3字節(jié)數(shù)據(jù)賦予A122CJNEA,#IR_K5,A5;與按鍵5碼比較,不是則繼續(xù)向下比較123ACALLFS_SPK;調(diào)用發(fā)聲子程序,響1聲124SETBR_LED;紅光LED熄滅125SETBG_LED;綠光LED熄滅126CLRB_LED;藍(lán)光LED亮127RET128r—129A5;發(fā)紫色光130MOVA,DZ3;將第3字節(jié)數(shù)據(jù)賦予A131CJNEA,#IR_K6,A6;與按鍵6碼比較,不是則繼續(xù)向下比較132ACALLFS_SPK;調(diào)用發(fā)聲子程序,響1聲133SETBG_LED;綠光LED熄滅134CLRR_LED;紅光LED亮135CLRB_LED;藍(lán)光LED亮136RET137r . 138A6;發(fā)白色光139MOVA,DZ3;將第3字節(jié)數(shù)據(jù)賦予A140CJNEA,#IR_K7,A7;與按鍵7碼比較,不是則繼續(xù)向下比較141ACALLFS_SPK;調(diào)用發(fā)聲子程序,響1聲142CLRR_LED;紅光LED亮143CLRG_LED;綠光LED亮144CLRB_LED;藍(lán)光LED亮145RET146—

147A7:;關(guān)閉彩燈148MOVA,DZ3 ;將第3字節(jié)數(shù)據(jù)賦予A149CJNEA,#POWERrA8 ;與POWER按鍵碼比較,不是返回150ACALLFS_SPK ;調(diào)用發(fā)聲子程序,響2聲151ACALLFS_SPK152SETBR_LED ;紅光LED熄、滅153SETBG_LED ;綠光LED熄滅154SETBB_LED ;藍(lán)光LED熄滅155A8:156RET157158r 發(fā)聲子程序 159FS_SPK: ;發(fā)聲子程序160MOVR6,#0161Bl:ACALLDE162CPL SPK163DJNZR6,B1164MOVR5,#100165ACALLDELAY05_R5166RET167168f 短暫延時(shí)子程序 169DE:170MOVR7,#180171DEI:NOP172DJNZR7,DE1173RET174175—-延時(shí)子程序 176DELAY05_R5:;總延時(shí)時(shí)間為0.5ms*R5177MOVR6,#5178DI:MOVR7,#10179DJNZR7,$180DJNZR6,DI181DJNZR5,DELAY05_R5182RET183t—■--解碼延時(shí)子程序 184DEL:;延時(shí)為0.093ms185MOVR7,#22186El: NOP187NOP188DJNZR7,El189RET191END;程序結(jié)束C.3.3代碼詳解07~25:為程序初始化部分。07-14:為遙控器

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論