單片機(jī)遙控控制酒店客房燈光系統(tǒng)_第1頁
單片機(jī)遙控控制酒店客房燈光系統(tǒng)_第2頁
單片機(jī)遙控控制酒店客房燈光系統(tǒng)_第3頁
單片機(jī)遙控控制酒店客房燈光系統(tǒng)_第4頁
單片機(jī)遙控控制酒店客房燈光系統(tǒng)_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

單片機(jī)遙控控制酒店客房燈光系統(tǒng)單片機(jī)遙控控制酒店客房燈光系統(tǒng)摘要:本文通過老式酒店客房燈光控制系統(tǒng)進(jìn)行改造,將原機(jī)的機(jī)械開關(guān)控制改為單片機(jī)紅外線遙控控制,說明了單片機(jī)在現(xiàn)代酒店燈光智能控制中的適用性、靈活性、先進(jìn)性。通過對客房燈光控制電路改造后,大大提高了客人的使用舒適感,使酒店的硬件設(shè)施提高了一個臺階。關(guān)鍵字:單片機(jī)遙控客房燈光前言:酒店原有的智能控制系統(tǒng)較周邊新開張酒店相比,已跟不上潮流,失去競爭能力。例如原來酒店客房燈光控制系統(tǒng)均采用TCL2.0系列產(chǎn)品,房間的電視、臺燈、地?zé)簟Ⅳ~缸照明、夜燈、廊燈、吧臺燈等開關(guān)與床頭燈調(diào)光開關(guān)均集中安裝在床頭柜處(如圖1)。由于開關(guān)較多且固定在床頭柜側(cè)面,客人想開燈時必須先看清開關(guān)下面的標(biāo)記才能正確開燈,有時為開一盞燈竟把所有的開關(guān)都按了一遍,使用時極為不便?,F(xiàn)在大多數(shù)星級酒店都采用微動開關(guān)輕觸式集中控制面板,安裝在床頭柜的正上方。雖然較以前直觀,但是開關(guān)多且固定仍不是十分方便。本人采用8051系列單片機(jī)將原來固定的機(jī)械式開關(guān)改用遙控控制,這樣一個遙控器就可以控制整個房間的燈光開啟,電源控制箱可以放在床頭柜內(nèi);遙控器在放置在床頭柜上,可以任意移動,還可以在遙控面板中間加裝一液晶時鐘(如圖2所示)。美觀且實(shí)用即大方便客人的使用。圖1老式控制柜圖2新式遙控發(fā)射器一硬件電路的設(shè)計(jì)1、遙控發(fā)射電路如圖3所示,為該系統(tǒng)遙控發(fā)射器電原理圖,其中P1口作為鍵盤掃描端口,具有16個操作鍵,可分別控制單片機(jī)發(fā)出16種不同脈沖,執(zhí)行16種操作。第9腳為單片機(jī)的復(fù)位腳,采用RC上電復(fù)位電路;15腳作為紅外線遙控碼的輸出口,用于輸出38KHz載波編碼。脈沖經(jīng)9013放大然后由紅外發(fā)射管輸出;18、19腳接12M晶振。P1.4—P1.7需接上拉電阻。圖3遙控發(fā)射電路圖2、遙控接收電路如圖4所示,為該系統(tǒng)遙控接收電原理圖,其中P1.0—P1.2口作為數(shù)碼管的二進(jìn)制數(shù)據(jù)輸出,顯示數(shù)字為“0—7”,“0”表示最暗,“7”表示最亮,采用帶鎖存功能的七段譯碼電路74HC4511集成塊譯碼顯示數(shù)值。4511的LE端接8051的30腳(地址鎖存允許控制);P0.0—P0.7以及P2.2—P2.7作為14個電器的電源控制輸出,接口用繼電器隔離輸出。P2.0口為調(diào)光脈沖輸出,輸出脈沖由三極管9012放大后經(jīng)光電耦合器MOC3021驅(qū)動雙向可控硅控制負(fù)載;P3.0口為交流50Hz同步檢測輸入。系統(tǒng)對市電進(jìn)行變壓、整流、并經(jīng)施密特觸發(fā)器整形后得到100Hz的方波(周期10ms),作為發(fā)送調(diào)光脈沖的同步信號,系統(tǒng)采用10ms為一個“單位時間”的長度,燈的亮度越高,則可控硅導(dǎo)通時間的占空比越大;P3.1口為紅外遙控碼輸入,采用集成紅外線接收路SFH506-38,此集成元件體積小、抗干擾性好、靈敏度高、并且價格低廉。它僅有三個腳,分別是電源正極、電源負(fù)極以及信號輸出端,其工作電壓為5V左右,它的主要功能包括放大、選頻、解調(diào)幾大部分,要求輸入是已經(jīng)被調(diào)制的信號,經(jīng)過它的接收放大和解調(diào)會在輸出端直接輸出原始信號至P3.1腳。這款紅外線接收電路接收距離可以達(dá)8米左右,完全可以滿足客房內(nèi)的遙控距離(一般客房標(biāo)準(zhǔn)間都在30平米左右);P3.2腳為外部中斷0輸入腳,采用下降沿觸發(fā),當(dāng)有信號時,第一位碼的低電平啟動中斷程序,實(shí)時接收數(shù)據(jù)幀。第9腳為單片機(jī)的復(fù)位腳,采用RC上電復(fù)位電路;18、19腳接12M晶振。圖4遙控接收電路圖二系統(tǒng)的遙控功能實(shí)現(xiàn)方法1、遙控編碼格式該遙控器采用脈沖個數(shù)編碼,不同的脈沖個數(shù)代表不同的碼,最小為2個脈沖,最大為17個脈沖。為了使接收可靠,第一位碼寬為3ms,其余為1ms,遙控?cái)?shù)據(jù)幀間隔大于10ms,如圖5所示。圖5遙控脈沖編碼圖2、遙控碼的發(fā)射當(dāng)某個操作鍵按下時,單片機(jī)先讀出該鍵值,然后根據(jù)鍵值設(shè)定的遙控脈沖個數(shù),再調(diào)制成38KHz的方波由紅外線發(fā)射管發(fā)射出去。P3.5端口的輸出調(diào)制波如圖5所示。3、數(shù)據(jù)幀的接收處理當(dāng)紅外線接收器輸出脈沖幀數(shù)據(jù)時,第一位碼的低電平將啟動中斷程序,實(shí)時接收數(shù)據(jù)幀。在數(shù)據(jù)接收時,先對第一位(起始位)碼的碼寬進(jìn)行驗(yàn)證。若第一位低電平碼的脈寬小于2ms,將作為錯誤碼處理;否則認(rèn)為是起始碼,累加器A加1。當(dāng)間隔位的高電平大于3ms時,結(jié)束接收,然后根據(jù)累加器A中的脈沖個數(shù),執(zhí)行相應(yīng)的輸出操作。圖6為紅外線接收器輸出的一幀遙控碼波形圖。圖6一幀遙控碼波形圖三遙控發(fā)射及接收控制程序流程圖1、遙控發(fā)射程序控制流程圖圖7遙控發(fā)射控制流程圖2、遙控接收程序控制流程圖圖8遙控接收控制流程圖四主要程序分析1、鍵盤掃描程序本電路采用4×4矩陣式鍵盤電路,共16個按健開關(guān)可發(fā)送16種編碼指令。首先將立即數(shù)#0F0H送至P1口,再讀入P1口值與#0F0H相比較,相等則說明沒有鍵按下,返回。不相等則表示有鍵按下,再調(diào)用延時消抖程序,確認(rèn)有鍵按下。轉(zhuǎn)至行掃描程序確認(rèn)按鍵所在的行,并將R2賦行號初值,然后調(diào)用列掃描程序確認(rèn)按鍵所在例號。例號與行號初值相加即得按鍵號(送寄存器A)。KEYWORK:MOVP1,#0F0H;置P1口輸入狀態(tài)MOVA,P1;讀入P1口值MOVB,A;P1口值暫存B中CJNEA,#0F0H,KEYHIT;不等于#0FFH,轉(zhuǎn)KEYHIT(有鍵按下)KEYOUT:RET;沒有鍵按下返回;KEYHIT:LCALLDL10MS;延時去抖動MOVA,P1;再讀入P1口值至ACJNEA,B,KEYOUY;A不等于B(是干擾),子程序返回SETBP1.1;有鍵按下,找鍵號開始,查0行SETBP1.2SETBP1.3MOVA,P1;讀入P1口值CJNEA,#0FEH,KEYVAL0;P1不等于#0FEH,按下鍵在第0行SETBP1.0;不在第0行,開始查1行CLRP1.1MOVA,P1;讀入P1口值CJNEA,#0FDH,KEYVAL1;P1口不等于#0FDH,按下鍵在第1行SETBP1.1;不在第1行,開始查2行CLRP1.2MOVA,P1;讀入P1口值CJNEA,#0FBH,KEYVAL2;P1口不等于#0FBH,按下鍵在第2行SETBP1.2;不在第2行,開始查3行CLRP1.3MOVA,P1;讀入P1口值CJNEA,#0F7H,KEYVAL3;P1口不等于#0F7H,按下鍵在第3行LJMPKEYOUT;不在第3行,子程序返回KEYVAL0:MOVR2,#00H;按下鍵在第0行,R2賦行號初值0LJMPKEYVAL4;跳到KEYVAL4KEYVAL1:MOVR2,#04H;按下鍵在第1行,R2賦行號初值4LJMPKEYVAL4;跳到KEYVAL4..KEYVAL4:MOVDPTR,#KEYVALTAB;翻譯成連續(xù)數(shù)字MOVB,A;P1口值暫存B內(nèi)ANLB,#0F0H;取高四位MOVR0,#0;清R0KEYVAL5:MOVA,R0;查列號開始,R0數(shù)據(jù)放入ASUBBA,#04H;A中數(shù)減4JNCKEYOUT;借位C為0,查表出錯,返回MOVA,R0;查表次數(shù)小于4,繼續(xù)查,MOVCA,@A+DPTR;查列號表INCR0;R0加1CJNEA,B,KEYVAL5;查得值和P1口值不等,轉(zhuǎn)KEYVAL5再查DECR0;查得值和P1口值相等,R0減1MOVA,R0;放入A(R0中數(shù)值即為列號值)ADDA,R2;與行號初值相加成為鍵號值(0-15)KEYVALTAB:DB0E0H,0D0H,0B0H,07H;列號對應(yīng)數(shù)據(jù)表;對應(yīng)列號:01232、鍵號處理程序根據(jù)寄器A中的鍵號,首先執(zhí)行A×3程序,(因?yàn)橐韵滤鶊?zhí)行的長跳轉(zhuǎn)指令“LJMP”為3字節(jié)指令)然后使用散轉(zhuǎn)指令“JMPA,@A+DPTR”跳到相應(yīng)的程序標(biāo)號。各鍵號相應(yīng)的程序標(biāo)號均為一條長跳轉(zhuǎn)指令,各跳轉(zhuǎn)指令均指向與之相應(yīng)的紅外線脈沖賦值程序,最后跳轉(zhuǎn)至脈沖發(fā)送程序,發(fā)出與鍵號相對應(yīng)的脈沖。MOVB,A;鍵號乘3處理用于JMP散轉(zhuǎn)指令RLA;鍵號乘3處理用于JMP散轉(zhuǎn)指令A(yù)DDA,B;鍵號乘3處理用于JMP散轉(zhuǎn)指令MOVDPTR,#KEYFUNTAB;取散轉(zhuǎn)功能程序(表)首址JMP@A+DPTR;散轉(zhuǎn)至對應(yīng)功能程序標(biāo)號KEYFUNTAB:LJMPKEYFUN00;跳到鍵號0對應(yīng)功能程序標(biāo)號LJMPKEYFUN01;跳到鍵號1對應(yīng)功能程序標(biāo)號...LJMPKEYFUN15;跳到鍵號15對應(yīng)功能程序標(biāo)號RETKEYFUN00:MOVA,#02H;發(fā)2個脈沖LJMPREMOTE;轉(zhuǎn)發(fā)送程序RETKEYFUN01:MOVA,#03H;發(fā)3個脈沖LJMPREMOTE;轉(zhuǎn)發(fā)送程序RET...KEYFUN15:MOVA,#11H;發(fā)17個脈沖LJMPREMOTE;轉(zhuǎn)發(fā)送程序RET3、38KHz載波及編碼脈沖發(fā)射程序本系統(tǒng)所用的紅外線接收集成電路SFH506-38的解調(diào)中心頻率為38KHz,故發(fā)射頻率也采用38KHz,通過定時器中斷程序?qū)崿F(xiàn),每次溢出中斷時對P3.5取反,輸出38KHz載波。計(jì)算得周期為26.3us,則定時器設(shè)定為模式2,初值為(256-13)=0F3H。利用1ms與3ms延時程序控制定時器的啟停,從而控制P3.5發(fā)出相應(yīng)的脈沖。并根據(jù)寄存器A中的脈沖個數(shù)確定發(fā)送次數(shù)。MOVIE,#00H;關(guān)所有中斷MOVTMOD,#20H;8位自動重裝初值模式MOVTH1,#0F3H;定時為13微秒初值MOVTL1,#0F3HSETBEA;開總中斷允許INTT1:CPLP3.5;38kHZ紅外線遙控信號產(chǎn)生RETI;中斷返回REMOTE:MOVR1,A;裝入發(fā)射脈沖個數(shù)LJMPOUT3;轉(zhuǎn)第一個碼發(fā)射處理OUT:MOVR0,#64H;1MS寬低電平發(fā)射控制數(shù)據(jù)OUT1:SETBET1;開T1中斷SETBTR1;開啟定時器T1NOP;延時NOPNOPNOPNOPDJNZR0,OUT1;時間不到轉(zhuǎn)OUT1再循環(huán)MOVR0,#3CH;1MS高電平間隙控制數(shù)據(jù)OUT2:CLRTR1;關(guān)定時器T1CLRET1;關(guān)T1中斷CLRP3.5;關(guān)脈沖輸出NOP;空操作延時NOPNOPNOPNOPNOPNOPNOPNOPNOPNOPDJNZR0,OUT2;時間不到轉(zhuǎn)OUT2再循環(huán)DJNZR1,OUT;脈沖未發(fā)完,轉(zhuǎn)OUT再循環(huán)發(fā)射LCALLDL500MSRETOUT3:MOVR0,#0FFH;裝發(fā)謝3MS寬控制數(shù)據(jù)LJMPOUT1;轉(zhuǎn)OUT14、遙控接收及處理程序采用中斷接收,經(jīng)過紅外線接收集電路SFH506接收處理后的脈沖信號送至P3.1與P3.2(中斷輸入腳,采用低電平觸發(fā)),當(dāng)接收到第一個低電平時將啟動中斷程序,實(shí)時接收數(shù)據(jù)幀,接收程序首先采用8us循環(huán)計(jì)時程序?qū)Φ谝晃淮a(起始碼)的碼寬進(jìn)行驗(yàn)證,當(dāng)計(jì)時大于8×255=2040us時則認(rèn)為是起始碼,開始對輸入的脈沖進(jìn)行計(jì)數(shù)與校驗(yàn),將計(jì)數(shù)值送到累加A中。脈沖高電位大于設(shè)定時間513×6=3072us時則結(jié)束接收,然后根據(jù)累加器中的脈沖個數(shù),跳轉(zhuǎn)至相應(yīng)的操作子程序。2——15個脈沖所對應(yīng)程序分別控制每盞燈的開關(guān),通過將相應(yīng)輸出端口取反方法,從而控制了燈的亮滅,系統(tǒng)上電時所有輸出I/O口均為“1”(高電平)外接晶體管均無輸出,當(dāng)某個按鍵按下時,程序?qū)⑾鄳?yīng)端口取反,輸出為“0”(低電平)外接晶體管放大后,驅(qū)動繼電器繼合亮燈。再次按下該鍵時,程序再次將該相應(yīng)端口取反,輸出為“1”關(guān)燈,如此便控制了每一路燈的亮、滅。16、17個脈沖為亮度調(diào)整信號,接收到該脈沖信號時,將P1口加“1”(調(diào)亮)或減“1”(調(diào)暗),然后再調(diào)亮度調(diào)整程序,亮度調(diào)整程序根據(jù)P1口的值確定燈的亮度。INTEX0:CLREX0;關(guān)外中斷JNBP3.1,READ1;P3.1口為低電平轉(zhuǎn)READ1READOUTT0:SETBEX0;P3.1口為高電平開中斷(系干擾)RETI;退出中斷READ1:CLRA;清AMOVDPH,A;清DPTRMOVDPL,AHARD1:JBP3.1,HARD11;P3.1變高電平轉(zhuǎn)HARD11INCDPTR;用DPTR對低電平計(jì)數(shù)NOP;1微秒延時NOPNOPAJMPHARD1;轉(zhuǎn)HARD1循環(huán)(循環(huán)周期為8微秒)HARD11:MOVA,DPH;DPTR高8位放入AJZREADOUTT0;為0(脈寬小于8*255=2毫秒)退出CLRA;不為0,說明是第一個寬脈沖(3毫秒)READ11:INCA;脈沖個數(shù)計(jì)1READ12:JNBP3.1,READ12;低電平時等待MOVR1,#06H;高電平寬度判斷定時值READ13:JNBP3.1,READ11;變低電平時轉(zhuǎn)READ11脈沖計(jì)數(shù)LCALLDELAY;延時(512微秒)DJNZR1,READ13;6次延時不到轉(zhuǎn)READ13再延時DECA;超過3毫秒判為結(jié)束,減1DECA;減1JZFUN0;為0執(zhí)行FUN0(2個脈沖)DECA;減1...FUN0:CPLP0.0;P0口各端口開關(guān)輸出控制LJMPREADOUTT0;轉(zhuǎn)中斷退出FUN1:CPLP0.1LJMPREADOUTT0...FUN14:INCP1MOVA,P1CJNEA,#00H,OUTT0;不等轉(zhuǎn)OUTT0(顯示值大于7)MOVP1,#0FFH;放回P1(顯示值為7)OUTT0:LCALLLOOP;亮度調(diào)整LJMPREADOUTT0;中斷退出FUN15:DECP1;P1口值減1MOVA,P1;移入ACJNEA,#0F7H,OUTT1;不等轉(zhuǎn)OUTT1(顯示值小于0)MOVP1,#0F8H;放回P1(顯示值為0)OUTT1:LCALLLOOP;亮度調(diào)整LJMPREADOUTT0;中斷退出...5、調(diào)光程序系統(tǒng)調(diào)光電路采用雙向可控硅,利用它的“過零自動關(guān)閉”特性,AT89C51只需在每個交流信號的1/2周期(10ms)內(nèi)控制可控硅打開的時刻,由于交流電過零點(diǎn)時可控硅自動關(guān)斷,即間接控制了燈光的亮度。上電時,首先調(diào)用調(diào)光程序,根據(jù)P1口值設(shè)定延時值并放在寄存器B中。再根據(jù)P3.0輸入的交流同步信號,確定調(diào)光脈沖的發(fā)送時間,當(dāng)交流信號過零時調(diào)用調(diào)光程序,調(diào)光程序根據(jù)寄存器B中的值確定延時次數(shù)(每次延時512us)從而確定調(diào)光脈沖的發(fā)送時間,延時到P2.0置“0”經(jīng)過外接晶體管反向放大后經(jīng)光電耦合器隔離驅(qū)動雙向可控硅導(dǎo)通的時間,當(dāng)交流信號再次過零時,雙向可控硅自動關(guān)閉,再次調(diào)用調(diào)光程序。這樣便控制了雙向可控硅的導(dǎo)通時間,從而達(dá)到調(diào)光的目的。START:LCALLCLEARIO;上電初始化LCALLLOOP;調(diào)用調(diào)光控制程序MAIN:JBP3.0,MAIN;50HZ交流電未過零轉(zhuǎn)MAINLCALLDLX;過零點(diǎn)時調(diào)用延時子程序(延時可變)CLRP2.0;發(fā)調(diào)光脈沖LCALLDELAY;持續(xù)512微秒SETBP2.0;關(guān)調(diào)光脈沖LJMPMAIN;轉(zhuǎn)MAIN循環(huán)DLX:MOVR2,B;置延時初值DLX1:LCALLDELAY;調(diào)512微秒延時子程序DJNZR2,DLX1;循環(huán)控制RET;返回LOOP:MOVA,P1;讀入P1口值SUBBA,#0FFH;比較JZLOOP7;值為#0FFH(顯示7)時轉(zhuǎn)LOOP7MOVA,P1SUBBA,#0FEHJZLOOP6;值為#0FEH(顯示6)時轉(zhuǎn)LOOP6MOVA,P1...RETLOOP7:MOVB,#01H;設(shè)置延時值#01H(最亮)RET;返回LOOP6:MOVB,#02H;設(shè)置延時值#02H(次亮)RET;返回LOOP5:MOVB,#04H...RET6、延時子程序采用循環(huán)結(jié)構(gòu)實(shí)現(xiàn)513微秒、10微秒、500微秒延時功能。DELAY:MOVR2,#0FFH;513微秒延時程序DELAY1:DJNZR2,DELAY1RETDL10MS:MOVR3,#14H;10毫秒延時程序DL10MS1:LCALLDELAYDJNZR3,DL10MS1RETDL500MS:MOVR4,#32H;500毫秒延時程序DL500MS1:LCALLDL10MSDJNZR4,DL500MS1RET五、系統(tǒng)調(diào)試上電,測試發(fā)送板單片機(jī)各IO口電平,P3.5、P1.0、P1.1、P1.2、P1.3均為低電平,其余均為高電平,表明單片機(jī)上電復(fù)位正常,且程序運(yùn)行正常。然后用萬用表毫伏檔測量紅外線發(fā)射管兩端,同時按各輸入鍵,表針應(yīng)有左右擺動現(xiàn)像,則表明鍵掃描程序與紅外線發(fā)射程序運(yùn)行正常,且在發(fā)射紅外線脈沖。接收電路上電時,數(shù)碼管顯示“7”各繼電器及可控硅均無輸出。遙控信號輸入腳P3.1應(yīng)高電平。則表明單片機(jī)上電復(fù)位正常,外圍電路接線正確。然后將發(fā)射板紅外線發(fā)射管對準(zhǔn)接收電路,按壓輸入鍵,同時用萬用表測量P3.1腳,應(yīng)有輕微擺動。紅外脈沖接收正常。且相應(yīng)輸出繼電器應(yīng)動作,或調(diào)光電路應(yīng)正確動。如無動作或萬用有針無擺動,可以稍為改動發(fā)射脈沖頻率,將定時器初值改為(0FFH-12)=0F4H對應(yīng)發(fā)射頻率為41.7KHz或(0FFH-13)=0F3H對應(yīng)發(fā)射頻率為38.5KHz,因?yàn)榧t外線發(fā)射與接收電路的中心頻率相差1KHz時大都能正常遙控,相差2KHz以上會出現(xiàn)遙控失靈現(xiàn)象。大多晶振或接收電路都有一定的頻率偏差,我們可以調(diào)整定時器的初值來稍為改動發(fā)射頻率或換用12M晶振,直到能夠接收為止。調(diào)光程序調(diào)試,按調(diào)光鍵,調(diào)至顯示“0”,此時燈為最暗,應(yīng)熄滅。否則可以改變調(diào)光程序中寄存器B中的值,加長或減少延時時間,使燈能在最低亮度時能正常熄滅,最高亮度時能達(dá)最大亮度。按本程序中的值,實(shí)測數(shù)據(jù)如下。延時子程序?yàn)?12us,電源交流電壓227V燈光亮度顯示負(fù)載電壓(60W)燈光亮度顯示負(fù)載電壓(60W)02V4102V120V5135V247V6168V373V7216V六、結(jié)束語通過此次改造,利用單片機(jī)遙控控制房間燈光取得了良好的效果,使酒店的硬件服務(wù)水平提高了一個臺階。同時也應(yīng)總結(jié)經(jīng)驗(yàn),逐步完善客房燈光智能控制,例如可以增加房間燈具的自動巡檢與電腦聯(lián)網(wǎng)功能,燈具故障即可自動發(fā)出報(bào)修信號,服務(wù)人員可以通過主服務(wù)器方便的了解各個房間電氣設(shè)備工作情況,即提高了工作效率又方便管理。也體會到我的知識面還是很狹窄,作為從事電氣工作的技術(shù)人員,在學(xué)好本專業(yè)的基礎(chǔ)前提下,還要不斷的學(xué)習(xí)其他領(lǐng)域的科學(xué)技術(shù)知識,拓寬自己的知識面,才能勝任新設(shè)備、新技術(shù)的工作,更好發(fā)揮本專業(yè)的作用。本人因水平、經(jīng)驗(yàn)有限,文中難免有錯漏以及不足之處,懇請專家、教授及同行批評指正。七、附錄1、遙控發(fā)射電路原理圖附圖一遙控發(fā)射電路原理圖2、遙控接收電路原理圖附圖二遙控接收電路原理圖3、遙控發(fā)送控制器程序ORG0000H;程序執(zhí)行開始地址AJMPSTART;跳至START執(zhí)行ORG001BH;定時器T1中斷入口地址LJMPINTT1;跳至INTT1中斷服務(wù)程序CLEARIO:MOVP0,#0FFH;P0-P3口置1MOVP1,#0FFHMOVP2,#0FFHMOVP3,#0FFHCLRP3.5;關(guān)遙控輸出CLEARMEM:MOVSP,#70H;設(shè)堆?;窞?0HMOVIE,#00H;關(guān)所有中斷MOVTMOD,#20H;8位自動重裝初值模式MOVTH1,#0F3H;定時為13微秒初值MOVTL1,#0F3HSETBEA;開總中斷允許RET;返回START:LCALLCLEARIO;調(diào)用初始化子程序;MAIN:LCALLKEYWORK;主體程序。調(diào)用查鍵子程序LJMPMAIN;轉(zhuǎn)MAIN循環(huán)NOP;PC值出錯處理NOPNOPLJMPSTART;重新初始化INTT1:CPLP3.5;40kHZ紅外線遙控信號產(chǎn)生RETI;中斷返回KEYWORK:MOVP1,#0F0H;置P1口輸入狀態(tài)MOVA,P1;讀入P1口值MOVB,A;P1口值暫存B中CJNEA,#0F0H,KEYHIT;不等于#0FFH,轉(zhuǎn)KEYHIT(有鍵按下)KEYOUT:RET;沒有鍵按下返回;KEYHIT:LCALLDL10MS;延時去抖動MOVA,P1;再讀入P1口值至ACJNEA,B,KEYOUY;A不等于B(是干擾),子程序返回SETBP1.1;有鍵按下,找鍵號開始,查0行SETBP1.2SETBP1.3MOVA,P1;讀入P1口值CJNEA,#0FEH,KEYVAL0;P1不等于#0FEH,按下鍵在第0行SETBP1.0;不在第0行,開始查1行CLRP1.1MOVA,P1;讀入P1口值CJNEA,#0FDH,KEYVAL1;P1口不等于#0FDH,按下鍵在第1行SETBP1.1;不在第1行,開始查2行CLRP1.2MOVA,P1;讀入P1口值CJNEA,#0FBH,KEYVAL2;P1口不等于#0FBH,按下鍵在第2行SETBP1.2;不在第2行,開始查3行CLRP1.3MOVA,P1;讀入P1口值CJNEA,#0F7H,KEYVAL3;P1口不等于#0F7H,按下鍵在第3行LJMPKEYOUT;不在第3行,子程序返回KEYVAL0:MOVR2,#00H;按下鍵在第0行,R2賦行號初值0LJMPKEYVAL4;跳到KEYVAL4KEYVAL1:MOVR2,#04H;按下鍵在第1行,R2賦行號初值4LJMPKEYVAL4;跳到KEYVAL4KEYVAL2:MOVR2,#08H;按下鍵在第2行,R2賦行號初值8LJMPKEYVAL4;跳到KEYVAL4KEYVAL3:MOVR2,#0CH;按下鍵在第3行,R2賦行號初值12LJMPKEYVAL4;跳到KEYVAL4KEYVAL4:MOVDPTR,#KEYVALTAB;翻譯成連續(xù)數(shù)字MOVB,A;P1口值暫存B內(nèi)ANLB,#0F0H;取高四位MOVR0,#0;清R0KEYVAL5:MOVA,R0;查列號開始,R0數(shù)據(jù)放入ASUBBA,#04H;A中數(shù)減4JNCKEYOUT;借位C為0,查表出錯,返回MOVA,R0;查表次數(shù)小于4,繼續(xù)查,MOVCA,@A+DPTR;查列號表INCR0;R0加1CJNEA,B,KEYVAL5;查得值和P1口值不等,轉(zhuǎn)KEYVAL5再查

DECR0;查得值和P1口值相等,R0減1MOVA,R0;放入A(R0中數(shù)值即為列號值)

ADDA,R2;與行號初值相加成為鍵號值(0-15)

MOVB,A;鍵號乘3處理用于JMP散轉(zhuǎn)指令

RLA;鍵號乘3處理用于JMP散轉(zhuǎn)指令A(yù)DDA,B;鍵號乘3處理用于JMP散轉(zhuǎn)指令MOVDPTR,#KEYFUNTAB;取散轉(zhuǎn)功能程序(表)首址JMP@A+DPTR;散轉(zhuǎn)至對應(yīng)功能程序標(biāo)號KEYFUNTAB:LJMPKEYFUN00;跳到鍵號0對應(yīng)功能程序標(biāo)號LJMPKEYFUN01;跳到鍵號1對應(yīng)功能程序標(biāo)號LJMPKEYFUN02;跳到鍵號2對應(yīng)功能程序標(biāo)號LJMPKEYFUN03;跳到鍵號3對應(yīng)功能程序標(biāo)號LJMPKEYFUN04;跳到鍵號4對應(yīng)功能程序標(biāo)號LJMPKEYFUN05;跳到鍵號5對應(yīng)功能程序標(biāo)號LJMPKEYFUN06;跳到鍵號6對應(yīng)功能程序標(biāo)號LJMPKEYFUN07;跳到鍵號7對應(yīng)功能程序標(biāo)號LJMPKEYFUN08;跳到鍵號8對應(yīng)功能程序標(biāo)號LJMPKEYFUN09;跳到鍵號9對應(yīng)功能程序標(biāo)號LJMPKEYFUN10;跳到鍵號10對應(yīng)功能程序標(biāo)號LJMPKEYFUN11;跳到鍵號11對應(yīng)功能程序標(biāo)號LJMPKEYFUN12;跳到鍵號12對應(yīng)功能程序標(biāo)號LJMPKEYFUN13;跳到鍵號13對應(yīng)功能程序標(biāo)號LJMPKEYFUN14;跳到鍵號14對應(yīng)功能程序標(biāo)號LJMPKEYFUN15;跳到鍵號15對應(yīng)功能程序標(biāo)號RETKEYVALTAB:DB0E0H,0D0H,0B0H,07H;列號對應(yīng)數(shù)據(jù)表;對應(yīng)列號:0123RETKEYFUN00:MOVA,#02H;發(fā)2個脈沖LJMPREMOTE;轉(zhuǎn)發(fā)送程序RETKEYFUN01:MOVA,#03H;發(fā)3個脈沖LJMPREMOTE;轉(zhuǎn)發(fā)送程序RETKEYFUN02:MOVA,#04H;發(fā)4個脈沖LJMPREMOTE;轉(zhuǎn)發(fā)送程序RETKEYFUN03:MOVA,#05H;發(fā)5個脈沖LJMPREMOTE;轉(zhuǎn)發(fā)送程序RETKEYFUN04:MOVA,#06H;發(fā)6個脈沖LJMPREMOTE;轉(zhuǎn)發(fā)送程序RETKEYFUN05:MOVA,#07H;發(fā)7個脈沖LJMPREMOTE;轉(zhuǎn)發(fā)送程序RETKEYFUN06:MOVA,#08H;發(fā)8個脈沖LJMPREMOTE;轉(zhuǎn)發(fā)送程序RETKEYFUN07:MOVA,#09H;發(fā)9個脈沖LJMPREMOTE;轉(zhuǎn)發(fā)送程序RETKEYFUN08:MOVA,#0AH;發(fā)10個脈沖LJMPREMOTE;轉(zhuǎn)發(fā)送程序RETKEYFUN09:MOVA,#0BH;發(fā)11個脈沖LJMPREMOTE;轉(zhuǎn)發(fā)送程序RETKEYFUN10:MOVA,#0CH;發(fā)12個脈沖LJMPREMOTE;轉(zhuǎn)發(fā)送程序RETKEYFUN11:MOVA,#0DH;發(fā)13個脈沖LJMPREMOTE;轉(zhuǎn)發(fā)送程序RETKEYFUN12:MOVA,#0EH;發(fā)14個脈沖LJMPREMOTE;轉(zhuǎn)發(fā)送程序RETKEYFUN13:MOVA,#0FH;發(fā)15個脈沖LJMPREMOTE;轉(zhuǎn)發(fā)送程序RETKEYFUN14:MOVA,#10H;發(fā)16個脈沖LJMPREMOTE;轉(zhuǎn)發(fā)送程序RETKEYFUN15:MOVA,#11H;發(fā)17個脈沖LJMPREMOTE;轉(zhuǎn)發(fā)送程序RETREMOTE:MOVR1,A;裝入發(fā)射脈沖個數(shù)LJMPOUT3;轉(zhuǎn)第一個碼發(fā)射處理OUT:MOVR0,#64H;1MS寬低電平發(fā)射控制數(shù)據(jù)OUT1:SETBET1;開T1中斷SETBTR1;開啟定時器T1NOP;延時NOPNOPNOPNOPDJNZR0,OUT1;時間不到轉(zhuǎn)OUT1再循環(huán)MOVR0,#3CH;1MS高電平間隙控制數(shù)據(jù)OUT2:CLRTR1;關(guān)定時器T1CLRET1;關(guān)T1中斷CLRP3.5;關(guān)脈沖輸出NOP;空操作延時NOPNOPNOPNOPNOPNOPNOPNOPNOPNOPDJNZR0,OUT2;時間不到轉(zhuǎn)OUT2再循環(huán)DJNZR1,OUT;脈沖未發(fā)完,轉(zhuǎn)OUT再循環(huán)發(fā)射LCALLDL500MSRETOUT3:MOVR0,#0FFH;裝發(fā)謝3MS寬控制數(shù)據(jù)LJMPOUT1;轉(zhuǎn)OUT1DELAY:MOVR2,#0FFH;513微秒延時程序DELAY1:DJNZR2,DELAY1RETDL10MS:MOVR3,#14H;10毫秒延時程序DL10MS1:LCALLDELAYDJNZR3,DL10MS1RETDL500MS:MOVR4,#32H;500毫秒延時程序DL500MS1:LCALLDL10MSDJNZR4,DL500MS1RETEND;程序結(jié)束4、遙控接收控制器程序ORG0000H;程序開始地址LJMPSTART;跳至START執(zhí)行ORG0003H;外中斷0中斷入口LJMPINTEX0;跳至INTEX0執(zhí)行中斷服務(wù)程序CLEARIO:MOVP0,#0FFH;P0-P3口置1MOVP1,#0FFHMOVP2,#0FFHMOVP3,#0FFHCLEARMEM:MOVIE,#00H;關(guān)所有中斷SETBEX0;開外中斷SETBEA;總中斷允許RET;子程序返回START:LCALLCLEARIO;上電初始化LCALLLOOP;調(diào)用調(diào)光控制程序MAIN:JBP3.0,MAIN;50HZ交流電未過零轉(zhuǎn)MAINLCALLDLX;過零點(diǎn)時調(diào)用延時子程序(延時可變)CLRP2.0;發(fā)調(diào)光脈沖LCALLDELAY;持續(xù)512微秒SETBP2.0;關(guān)調(diào)光脈沖LJMPMAIN;轉(zhuǎn)MAIN循環(huán)NOP;PC值出錯處理NOPLJMPSTART;出錯時重新初始化;采用中斷接收INTEX0:CLREX0;關(guān)外中斷JNBP3.1,READ1;P3.1口為低電平轉(zhuǎn)READ1READOUTT0:SETBEX0;P3.1口為高電平開中斷(系干擾)RETI;退出中斷READ1:CLRA;清AMOVDPH,A;清DPTRMOVDPL,AHARD1:JBP3.1,HARD11;P3.1變高電平轉(zhuǎn)HARD11INCDPTR;用DPTR對低電平計(jì)數(shù)NOP;1微秒延時NOPNOPAJMPHARD1;轉(zhuǎn)HARD1循環(huán)(循環(huán)周期為8微秒)HARD11:MOVA,DPH;DPTR高8位放入AJZREADOUTT0;為0(脈寬小于8×255=2毫秒)退出CLRA;不為0,說明是第一個寬脈沖(3毫秒)READ11:INCA;脈沖個數(shù)計(jì)1READ12:JNBP3.1,READ12;低電平時等待MOVR1,#06H;高電平寬度判斷定時值READ13:JNBP3.1,READ11;變低電平時轉(zhuǎn)READ11脈沖計(jì)數(shù)LCALLDELAY;延時(512微秒)DJNZR1,READ13;6次延時不到轉(zhuǎn)READ13再延時DECA;超過3毫秒判為結(jié)束,減1DECA;減1JZFUN0;為0執(zhí)行FUN0(2個脈沖)DECA;減1JZFUN1;為0執(zhí)行FUN1(3個脈沖)DECAJZFUN2;為0執(zhí)行FUN2(4個脈沖)DECAJZFUN3;為0執(zhí)行FUN3(5個脈沖)DECAJZFUN4;為0執(zhí)行FUN4(6個脈沖)DECAJZFUN5;為0執(zhí)行FUN5(7個脈沖)DECAJZFUN6;為0執(zhí)行FUN6(8個脈沖)DECAJZFUN7;為0執(zhí)行FUN7(9個脈沖)DECAJZFUN8;為0執(zhí)行FUN8(10個脈沖)DECAJZFUN9;為0執(zhí)行FUN9(11個脈沖)DECAJZFUN10;為0執(zhí)行FUN10(12個脈沖)DECAJZFUN11;為0執(zhí)行FUN11(13個脈沖)DECAJZFUN12;為0執(zhí)行FUN8(114個脈沖)DECAJZFUN13;為0執(zhí)行FUN9(15個脈沖)DECAJZFUN14;為0執(zhí)行FUN10(16個脈沖)DECAJZFUN15;為0執(zhí)行FUN11(17個脈沖)NOPNOPLJMPREADOUTT0

溫馨提示

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

最新文檔

評論

0/150

提交評論