課程設計-基于單片機的紅外遙控電風扇設計.doc_第1頁
課程設計-基于單片機的紅外遙控電風扇設計.doc_第2頁
課程設計-基于單片機的紅外遙控電風扇設計.doc_第3頁
課程設計-基于單片機的紅外遙控電風扇設計.doc_第4頁
課程設計-基于單片機的紅外遙控電風扇設計.doc_第5頁
已閱讀5頁,還剩26頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

麗水學院 課程設計題 目 基于單片機的紅外遙控電風扇設計 指導教師 院 系 機電建工學院電子系 班 級 自動化071 學 號 姓 名 2011年 1 月 5 日目 錄引言-2一、紅外發(fā)射電路-2 1.1 紅外通信原理-21.2 硬件電路-31.3 軟件編碼解碼-51.4 流程圖-6二、紅外接收電路-7 2.1接收電路工作原理及組成部分-72.2 液晶顯示-92.3調(diào)速電路 -102.4流程圖 -11三、軟件設計-12四、仿真調(diào)試以及出現(xiàn)的問題-13五、總結(jié)評價-14謝詞-15參考文獻-16附錄-17附錄一:元器件清單-17附錄二:發(fā)射原理圖-17附錄三:接收原理圖 -19附錄四:發(fā)射程序-19附錄五:接收程序-22引 言電風扇曾一度被認為是空調(diào)產(chǎn)品沖擊下的淘汰品,其實并非如此,市場人士稱,家用電風扇并沒有隨著空調(diào)的普及而淡出市場,近兩年反而出現(xiàn)了市場銷售復蘇的態(tài)勢。其主要原因:一是風扇和空調(diào)的降溫效果不同空調(diào)有強大的制冷功能,可以快速有效地降低環(huán)境溫度,但電風扇的風更溫和,更加適合老人兒童和體質(zhì)較弱的人使用;二是電風扇有價格優(yōu)勢,價格低廉而且相對省電,安裝和使用都非常簡單。盡管電風扇有其市場優(yōu)勢,但傳統(tǒng)電風扇還是有許多地方應當進行改良的,最突出的缺點是它不能根據(jù)溫度的變化適時調(diào)節(jié)風力大小,對于夜間溫差大的地區(qū),人們在夏夜使用電風扇時可能遇到這樣的問題:當凌晨降溫的時候電風扇依然在工作,可是人們因為熟睡而無法察覺,既浪費電資源又容易引起感冒,傳統(tǒng)的機械定時器雖然能夠控制電風扇在工作一定后關(guān)閉,但定時范圍有限,且無法對溫度變化靈活處理。鑒于以上方面的考慮,我們需要設計一種智能電風扇控制系統(tǒng)來解決這些問題。一、紅外發(fā)射部分1.1紅外通信原理紅外遙控有發(fā)送和接收兩個組成部分。發(fā)送端采用單片機將待發(fā)送的二進制信號編碼調(diào)制為一系列的脈沖串信號,通過紅外發(fā)射管發(fā)射紅外信號。發(fā)射部分包括鍵盤矩陣、編碼調(diào)制、紅外發(fā)送器。使用89c52芯片 將按鍵信號調(diào)制在 38khz 的載波信號上通過三極管放大后發(fā)射出去。紅外編碼為: 全碼 =引導碼+系統(tǒng)碼+系統(tǒng)反碼+數(shù)據(jù)碼+數(shù)據(jù)反碼。89c52的p1口構(gòu)成矩陣式鍵盤,用t1產(chǎn)生定時中斷,驅(qū)動p3.3產(chǎn)生一個38k的方波,作為紅外線的調(diào)制基波。將發(fā)送的數(shù)據(jù)和p3.0進行邏輯與后,經(jīng)過調(diào)制電路整形,用三極管驅(qū)動紅外發(fā)射管發(fā)射。(圖1)遙控原理圖1.2硬件電路1.2.1紅外遙控器由發(fā)射和接收兩部分組成,發(fā)射部分和加收部分分別有兩塊89c52單片機構(gòu)成。工作原理及組成部分 (1)cpu 采用at89c52單片機,mcs-8051產(chǎn)品兼容、2kb可重編程閃速存儲器、耐久性:1000寫/擦除周期、2.7v6v的操作范圍、全靜態(tài)操作:0hz24mhz、兩級加密程序存儲器、1288位內(nèi)部ram、15根可編程i/o引線、6個中斷源、可編程串行uart通道、直接led驅(qū)動輸出、片內(nèi)模擬比較器、低耗空載和掉電方式。1.2.2電源采用4節(jié)7號電池來提供電源,并用一個二極管(in4148)進行降壓。1.2.3調(diào)制部分:采用cd40106進行緩沖放大并整形.發(fā)送的數(shù)字信號與38k的載波進行相與,將其調(diào)制在一起,整形并緩沖放大,經(jīng)過8050進行放大驅(qū)動紅外發(fā)射管,使其發(fā)射紅外光。1.2.3紅外線發(fā)射管:在led封裝行業(yè)中有三個主要且常用的波段,如下850nm、875nm、940nm。根據(jù)波長的特性運用的產(chǎn)品也有很大的差異,850nm波長的主要用于紅外線監(jiān)控設備、875nm主要用于醫(yī)療設備、940nm波段的主要用于紅外線控制設備。本設計采用940nm的紅外管。(圖2)紅外發(fā)射管1.2.4按鍵功能介紹k1:微風檔;鍵值為 01h k2:低風檔:鍵值為 02hk3:中風擋;鍵值為03hk4:高風檔;鍵值為04hk5:定時30s;鍵值為05hk6:定時60s;鍵值為06hk7:定時300s;鍵值為07hk8:開關(guān)鍵;鍵值為08h1.3軟件編碼、解碼遙控發(fā)射器專用芯片很多,根據(jù)編碼格式可以分成兩大類,這里我們以運用比較廣泛,解碼比較容易的一類來加以說明,現(xiàn)以日本 nec的upd6121g組成發(fā)射電路為例說明編碼原理。當發(fā)射器按鍵按下后,即有遙控碼發(fā)出,所按的鍵不同遙控編碼也不同。這種遙控碼具有以下特征:1.3.1采用脈寬調(diào)制的串行碼,以脈寬為0.565ms、間隔0.56ms、周期為1.125ms的組合表示二進制的“0”;以脈寬為0.565ms、間隔1.685ms、周期為2.25ms的組合表示二進制的“1”?!?”和“1”組成的32位二進制碼經(jīng)38khz的載頻進行二次調(diào)制以提高發(fā)射效率,達到降低電源功耗的目的。然后再通過紅外發(fā)射二極管發(fā)射。1.3.2遙控編碼是連續(xù)的32位二進制碼組,其中前16位為用戶識別碼,能區(qū)別不同的電器設備,防止不同機種遙控碼互相干擾。該芯片的用戶識別碼固定為十六進制0ffh;后16位為8位操作碼(功能碼)及其反碼。1.3.3遙控器在按鍵按下后,周期性地發(fā)出同一種32位二進制碼,周期約為108ms。一組碼本身的持續(xù)時間隨它包含的二進制“0”和“1”的個數(shù)不同而不同,大約在4563ms之間。1.3.4其相關(guān)的波形圖如下:(圖3)遙控編碼1.4程序流程圖(圖 4)遙控器軟件流程圖二、紅外接收部分2.1接收電路工作原理及組成部分2.1.1紅外接收部分包括光電轉(zhuǎn)換放大器、解調(diào)、解碼電路。cpu板將單片機、控制、鍵盤組合在一起完成了人機對話。 用 at89c51單片機來作主芯片控制,采用紅外t1838接收頭,用雙向可控硅mc97a6控制電機檔位,具有紅外遙控功能。2.1.2電源部分:由四節(jié)干電池題供6v電壓給控制板。2.1.3電風扇控制板框圖(圖 5 )電風扇控制板框圖2.2液晶顯示2.2.1液晶顯示器各種圖形的顯示原理線段的顯示:點陣圖形式液晶由mn個顯示單元組成,假設lcd顯示屏有64行,每行有128列,每8列對應1字節(jié)的8位,即每行由16字節(jié),共168=128個點組成,屏上6416個顯示單元與顯示ram區(qū)1024字節(jié)相對應,每一字節(jié)的內(nèi)容和顯示屏上相應位置的亮暗對應。例如屏的第一行的亮暗由ram區(qū)的000h00fh的16字節(jié)的內(nèi)容決定,當(000h)=ffh時,則屏幕的左上角顯示一條短亮線,長度為8個點;當(3ffh)=ffh時,則屏幕的右下角顯示一條短亮線;當(000h)=ffh,(001h)=00h,(002h)=00h,(00eh)=00h,(00fh)=00h時,則在屏幕的頂部顯示一條由8段亮線和8條暗線組成的虛線。這就是lcd顯示的基本原理。2.2.2字符型液晶介紹字符型液晶顯示模塊是一種專門用于顯示字母、數(shù)字、符號等點陣式lcd,目前常用16*1,16*2,20*2和40*2行等的模塊。下面以長沙太陽人電子有限公司的1602字符型液晶顯示器為例,介紹其用法。一般1602字符型液晶顯示器實物如圖1602lcd采用標準的14腳(無背光)或16腳(帶背光)接口,各引腳接口說明如表編號符號引腳說明編號符號引腳說明1vss電源地9d2數(shù)據(jù)2vdd電源正極10d3數(shù)據(jù)3vl液晶顯示偏壓11d4數(shù)據(jù)4rs數(shù)據(jù)/命令選擇12d5數(shù)據(jù)5r/w讀/寫選擇13d6數(shù)據(jù)6e使能信號14d7數(shù)據(jù)7d0數(shù)據(jù)15bla背光源正極8d1數(shù)據(jù)16blk背光源負極表1 引腳接口說明表第1腳:vss為地電源。第2腳:vdd接5v正電源。第3腳:vl為液晶顯示器對比度調(diào)整端,接正電源時對比度最弱,接地時對比度最高,對比度過高時會產(chǎn)生“鬼影”,使用時可以通過一個10k的電位器調(diào)整對比度。第4腳:rs為寄存器選擇,高電平時選擇數(shù)據(jù)寄存器、低電平時選擇指令寄存器。第5腳:r/w為讀寫信號線,高電平時進行讀操作,低電平時進行寫操作。當rs和r/w共同為低電平時可以寫入指令或者顯示地址,當rs為低電平r/w為高電平時可以讀忙信號,當rs為高電平r/w為低電平時可以寫入數(shù)據(jù)。第6腳:e端為使能端,當e端由高電平跳變成低電平時,液晶模塊執(zhí)行命令。第714腳:d0d7為8位雙向數(shù)據(jù)線。第15腳:背光源正極。第16腳:背光源負極。2.2.3液晶控制指令表序號指令rsr/wd7d6d5d4d3d2d1d01清顯示00000000012光標返回000000001*3置輸入模式00000001i/ds4顯示開/關(guān)控制0000001dcb5光標或字符移位000001s/cr/l*6置功能00001dlnf*7置字符發(fā)生存貯器地址0001字符發(fā)生存貯器地址8置數(shù)據(jù)存貯器地址001顯示數(shù)據(jù)存貯器地址9讀忙標志或地址01bf計數(shù)器地址10寫數(shù)到cgram或ddram)10要寫的數(shù)據(jù)內(nèi)容11從cgram或ddram讀數(shù)11讀出的數(shù)據(jù)內(nèi)容1602液晶模塊的讀寫操作,屏幕和光標的操作都是通過指令編程來實現(xiàn)的。(說明1為高電平,0為低電平)指令1:清顯示,指令碼01h,光標復位到地址00h位置。指令2:光標復位,光標返回到地址00h指令3:光標和顯示位置設置i/d,光標移動方向,高電平右移,低電平左移,s:屏幕上所有文字是否左移或右移,高電平表示有效,低電平表示無效。指令4:顯示開關(guān)控制。d:控制整體的顯示開與關(guān),高電平表示開顯示,低電平表示關(guān)顯示。c:控制光標的開與關(guān),高電平表示有光標,低電平表示無光標 b:控制光標是否閃爍,高電平閃爍,低電平不閃爍。指令5:光標或顯示移位 s/c :高電平時顯示移動的文字,低電平時移動光標。指令6:功能設置命令 dl:高電平時為4位總線,低電平時為8位總線 n:低電平時為單行顯示,高電平時為雙行顯示,f:低電平時顯示5x7的點陣字符,高電平時顯示5x10的顯示字符。指令7:字符發(fā)生器ram地址設置。2.3調(diào)速電路2.3.1可控硅調(diào)速可控硅調(diào)速可分為移向調(diào)速和可控硅過零調(diào)速兩種方式,這兩種方法同變頻調(diào)速而言,具有容易實現(xiàn)、系統(tǒng)簡單、成本低廉等優(yōu)點。運用單片機實現(xiàn)可控硅過零調(diào)速,不僅可以實現(xiàn)軟件控制可控硅的導通角、簡化 觸發(fā)電路結(jié)構(gòu)、便于控制、提高精度、調(diào)節(jié)轉(zhuǎn)速等功能,還可避免移向調(diào)速、脈寬調(diào)速、正弦調(diào)速等在運行過程中產(chǎn)生的大量噪音和高次諧波,降低了系統(tǒng)對電路器件的耐壓值要求。本設計采用moc3603帶過零觸發(fā)的雙向晶閘管驅(qū)動器。(圖6)可控硅調(diào)速2.3.2軟件設計采用雙向可控硅過零觸發(fā)方式,由單片機控制雙向可控硅的通斷,通過改變每個控制周期內(nèi)的可控硅導通和關(guān)斷交流完整全波(或半波)信號的數(shù)量來調(diào)節(jié)負載功率,進而達到調(diào)速目的。由于int0信號反映工頻電壓過零時刻,因此只要對在外中斷零二端服務程序中完成控制門的開啟與關(guān)閉,并利用中斷服務次數(shù)對控制量n(n為每個周期內(nèi)可控硅導通的正弦波個數(shù))進行計數(shù)。若n不等于0,保持控制電平為“1”,則繼續(xù)打開控制門;若n=0,則使控制電平復位為“0”,關(guān)閉控制門??墒箍煽毓柽^零觸發(fā)脈沖不在通過,這樣就可按照控制處理得到的控制量的要求,實現(xiàn)可控硅的過零控制 ,從而達到按控制量控制的效果,實現(xiàn)速度可調(diào)。三、仿真與調(diào)試按照上面設計的電路在proteus軟件內(nèi)畫圖,打開單片機軟件開發(fā)系統(tǒng)keil,選擇89c51單片機,在其中編寫程序,運行生成一個后綴名為hex的文件,然后將該文件下載到proteus中的at89c51單片機中進行仿真,觀察實驗現(xiàn)象。仿真能實現(xiàn)播放音樂,按鍵選擇曲目,暫停,播放功能。仿真成功后,安裝好實驗板,然后將音樂程序下載到電路板內(nèi),觀察結(jié)果。能實現(xiàn)播放音樂,按鍵換曲等功能。程序調(diào)試中出現(xiàn)的問題及解決辦法:(1)有時會出現(xiàn)程序一點錯誤也沒有,但就是不能正常運行的現(xiàn)象,最后我們發(fā)現(xiàn)是因為程序中有的指令書寫的不規(guī)范導致的,例如有的ret返回指令一定要按正確格式書寫或在兩行指令間最好不要留空行。(2)程序中的跳轉(zhuǎn)指令的運用很重要,為保險起見,都用ljmp,我們就遇到過跳轉(zhuǎn)指令用錯程序無法正常運行的現(xiàn)象。當用jnz指令時,跳轉(zhuǎn)范圍比較少,這時要用一個標號中轉(zhuǎn)。(3)編程時要注意,在程序開始時,要寫入各定時器中斷的入口地址。(4)編程過程中要注意加注釋或分割線,否則,在程序過長時容易變得很亂,不便于查找或更改。(5)編程前要加流程圖,這樣會使思路清晰四、心得體會本學期學習了單片機這門課,但是對于單片機的硬件設計,軟件設計掌握的深度不夠,通過此次課程設計,我對于硬件電路的工作原理有了進一步的學習,同時有了一個提升;在軟件方面,在程序的設計,程序的調(diào)試方面有了很大的進步。在具體的制作過程中我們發(fā)現(xiàn)在書本上的知識與實際的應用存在著不小的差距,這讓我們無法根據(jù)書上的理論就輕易得到預想中的結(jié)果,有時結(jié)果甚至很差別很大。通過這次實踐使我更深刻的體會到了理論聯(lián)系實際的重要性。在課程設計中,我主要負責的是protel原理圖繪制,pcb制作,以及電路板制作等,在pcb制作過程導入網(wǎng)絡是出現(xiàn)了很多錯誤,找了很久還問了好幾個同學還是能找出,后來自己在錯誤的元器件上嘗試性的修改,把一個元器件的分裝換了下,居然沒錯誤了,讓我覺得很興奮,現(xiàn)在回想以后做設計是一定要從細節(jié)入手,這樣才能做的更加順利。很感謝學校和老師給我們安排了這次課程設計,這次實習也讓我真正感受到的是合作的重要,許多時候都是在組員的討論,老師的指導中的一句半句啟發(fā)了我,就出現(xiàn)的讓人欣喜的結(jié)果;理論知識同樣很重要,有些問題都是由于基礎知識掌握不好才出現(xiàn)的。通過這次課程設計,我體會到了成功的喜悅,挺著自己設計的程序下載單片機中播放出音樂,心理非常自豪。這次的課程設計在一定程度上改變了我對于學習單片這么課程的態(tài)度,從最初的認為學他沒有什么意義,到如今覺得很有意義,并希望能將理論運用到實踐,設計出更好更完整的系統(tǒng)。參考文獻1 潘曉寧,朱耀東 單片機程序設計實踐教程m.北京:清華大學出版社,2009.082 戴仙金 51單片機及其c語言開發(fā)實例m.北京:清華大學出版社,2008.023 汪志紅,51單片機技術(shù)與應用系統(tǒng)開發(fā)案例精選 m.北京:清華大學出版社,2008.094李朝青,單片機原理及接口技術(shù)m.北京:北京航空航天大學出版社,2005.10附件一、程序清單元件名稱型號數(shù)量單片機89c522液晶rt16021雙向晶閘管驅(qū)動器moc30631雙向晶閘管bt1341晶振12mhz2電解電容33pf4有極電容10uf5蜂鳴器1電阻1k5電阻5504電阻10k9電阻4.7k2電阻4703電阻3304排阻10k1三極管npn3滑動變阻器10k1led紅色1按鍵小16接插件5二、發(fā)射原理圖三、接收原理圖四、發(fā)射程序;=電風扇紅外發(fā)射(遙控器)程序=;k1:微風檔,鍵值為 01;k2:低風檔,鍵值為 02;k3:中風檔,鍵值為 03;k4:高風檔,鍵值為 04;k5:定時30s,鍵值為05;k6:定時60s,鍵值為06;k7:定時300s,鍵值為07;k8:開關(guān)機,鍵值為08;采用 41.5v 供電,用89c51作cpu芯片,當沒有按鍵按下時,進入待機狀態(tài);= org 0000h jmp main org 0003h ;int0的中斷入口ko jmp key_int0 org 000bh ;t0的中斷入口ko jmp fm_t0 org 0100h;=keyon bit 20hdataout bit p3.0fmout bit p3.3sendbuf data 30h;=進入主程序=main: mov r0,#7fh ;預使用單元清0 clr amain0: mov r0,a djnz r0,main0 ;清緩沖的地址單元值;= mov sp,#60h clr it0 ;設置電平觸發(fā) setb pt0 setb ex0 setb ea mov tmod,#02h ;t0的工作方式2 mov th0,#0fah ;送初值 mov tl0,#0fahloop: clr dataout mov p0,#0fh ;將p1置輸入 clr keyon jmp loop;=中斷程序:完成其按鍵按下的標志位key_int0: push acc push psw clr ex0 mov a,p0 cpl a anl a,#0fh mov r2,a ;將行號存入r2中;= mov p0,#0f0h mov a,p0 cpl a anl a,#0f0h ;取列號并存入a中;= mov r1,#05h ;置列初號 clr cpint01: rlc a ;取列號 dec r1 jnc pint01pint02: mov a,r2 ;取行號 mov r3,#0ffh ;置循環(huán)次數(shù)pint03: rrc a inc r3 jnc pint03pint04: mov a,r3 clr c rlc a rlc a add a,r1 mov sendbuf+2,a ;鍵號存于32h單元中 cpl a mov sendbuf+3,a ;存鍵號的反碼 mov sendbuf,#0ffh ;系統(tǒng)碼在30h單元中 mov sendbuf+1,#00h ;系統(tǒng)反碼在31h單元中 lcall send setb et0 ;發(fā)送引導碼 setb tr0 ;啟動t0 lcall pp ;發(fā)送一幀數(shù)據(jù).包括系統(tǒng)碼和數(shù)據(jù)碼 clr tr0 ;當發(fā)送完后關(guān)斷定時器 clr et0 ;關(guān)t0的中斷 setb ex0 ;執(zhí)行完后打開外int0 pop psw pop acc reti;=fm_t0: cpl fmout reti;=引導脈沖子程序 send: setb dataout lcall dy9000us clr dataout lcall dy4500us ret ;=發(fā)送四個緩沖單元中的內(nèi)容程序:pp: mov r3,#4 ;發(fā)送的字節(jié)數(shù) mov r1,sendbuf pp0: mov r2,#08h ;讓其循環(huán)8次 mov a,r1 ;將數(shù)據(jù)首址 clr c ;清cpp1: rrc a ;右環(huán)移帶進位 jc one ;若c=1zer0: setb dataout ;若c=0 call dy560us clr dataout call dy560usone: setb dataout call dy560us clr dataout call dy1687us djnz r2,pp1 inc r1 djnz r3,pp0 ;等四個字節(jié)的發(fā)送完 ret;=延時1687us子程序 dy1687us: mov r6,#5l2: mov r4,#2l3: mov r5,#55 djnz r5,$ djnz r4,l3 djnz r6,l2 ret;=延時560us子程序 dy560us: mov r6,#2l22: mov r4,#2l33: mov r5,#45 djnz r5,$ djnz r4,l33 djnz r6,l22 ret ;=延時9000us子程序 dy9000us: mov r6,#90l2a: mov r4,#2 l3a: mov r5,#16 djnz r5,$ djnz r4,l3a djnz r6,l2a ret ;=延時4500us子程序 dy4500us: mov r6,#45l2b: mov r4,#2l3b: mov r5,#15 djnz r5,$ djnz r4,l3b djnz r6,l2b ret end五、接收程序;k1:微風檔,鍵值為 01;k2:低風檔,鍵值為 02;k3:中風檔,鍵值為 03;k4:高風檔,鍵值為 04;k5:定時30s,鍵值為05;k6:定時60s,鍵值為06;k7:定時300s,鍵值為07;k8:開關(guān)機,鍵值為08;= org 0000h jmp start org 0003h jmp yaokong_int0 ;紅外遙控中斷設置 org 000bh jmp it0p ;定時中斷 org 0013h jmp key_int1 ;按鍵中斷 org 0100h;= stall bit p2.0 ;微風控制位 e bit p2.5 ;e端為使能端 rs bit p2.6 ;rs為寄存器選擇 rw bit p2.7 ;rw為讀寫信號線 sj00 bit 20h.0 ;半小時控制標志 sj01 bit 20h.1 ;1小時控制標志 sj02 bit 20h.2 ;2小時控制標志 lkeyon bit 20h.3 ;按鍵中斷標志 lrec bit 20h.4 ;接收中斷標志 mrd data 30h ;數(shù)據(jù)碼寄存器 sen data 40h ;秒寄存器 min data 41h ;分鐘寄存器 cuzhi data 42h ;50ms的初值寄存器;=start: mov r0,#7fh ;預使用單元清0 clr amain0: mov r0,a djnz r0,main0;= mov sp,#60h mov tmod,#01h mov th0,#3ch ;定時50ms mov tl0,#0b0h setbet0 clrstall clrlkeyon clrlrec mov p0,#0ffh ;關(guān)所有的指示燈 setb ex0 setb ex1 setb it0 setb it1 setb ea ;cpu開中;=main: mov sp,#60h mov r4,#02h ;設置閃爍次數(shù) mov cuzhi,#20 jb lkeyon,keyhandle;檢按鍵標志位 jb lrec,keyhandle ;檢接收中斷標志位 acall lcd_init jmp main ;轉(zhuǎn)主程序;=keyhandle: mov a,mrd cjne a,#01h,key2 ;=key1: setbp2.0 calldy5ms clrp2.0 calldy35ms mov a,mrd cjne a,#05h,key11 setbsj00 setbtr0 jmpkey1key11: cjne a,#06h,key12 setbsj01 setbtr0 jmpkey1key12: cjne a,#07h,key13 setbsj02 setbtr0 jmpkey1key13: cjne a,#01h,key14 jmpkey1key14: jmp main;=key2: cjne a,#02h,key3 setbp2.0 calldy20ms clrp2.0 calldy30ms mov a,mrd cjne a,#05h,key21 setbsj00 setbtr0 jmpkey2key21: cjne a,#06h,key22 setbsj01 setbtr0 jmpkey2key22: cjne a,#07h,key23 setbsj02 setbtr0 jmpkey2key23: jmpkey2;=key3: cjne a,#03h,key4 setbp2.0 calldy10ms clrp2.0 calldy30ms mov a,mrd cjne a,#05h,key31 setbsj00 setbtr0 jmpkey3key31: cjne a,#06h,key32 setbsj01 setbtr0 jmpkey3key32: cjne a,#07h,key33 setbsj02 setbtr0 jmpkey3key33: jmpkey3;=key4: cjne a,#04h,key5 setbp2.0 calldy35ms mov a,mrd cjne a,#05h,key41 setbsj00 setbtr0 jmpkey4key41: cjne a,#06h,key42 setbsj01 setbtr0 jmpkey4key42: cjne a,#07h,key43 setbsj02 setbtr0 jmpkey4key43: jmpkey4;=開關(guān)機=key5: cjne a,#08h,pother ;開關(guān)機處理程序 clrstallpother: jmp main ;其他鍵的不處理直接返回 ;=t0定時中斷處理=it0p: push acc ;中斷處理 push psw mov th0,#3ch ;定時50ms mov tl0,#0b0h djnz cuzhi,gret1 ;1s到后向下執(zhí)行 mov cuzhi,#20 ;給50ms的寄存器給初值 inc sen mov a,sen cjne a,#30,gret1 ;1分鐘到后向下執(zhí)行 inc min mov a,min jb sj01,loop_1h ;定時2小時的處理 jb sj02,loop_2h ;定時4小時的處理 clrsj00 jmp gret0loop_1h: cjne a,#2,gret1 ;1小時到后向下執(zhí)行 clrsj01 jmp gret0loop_2h: cjne a,#10,gret1 ;1小時到后向下執(zhí)行 clrsj02gret0: mov mrd,#08hgret1: clr tr0 pop psw pop acc reti;=int0中斷處理程序:對接收數(shù)據(jù)進行接收 =yaokong_int0: push acc push psw clr ex0 ;關(guān)斷中斷 mov r6,#10 ;避開9ms時間的引導碼sb: jnb p3.2,exit ;ex檢測為1時退出 acall dy882us djnz r6,sb ;檢測為0時,引導碼過 jb p3.2,$ ;檢測為0時,等待 mov r7,#16 sb1: acall dy4700us ;避開4.5ms時間的引導碼 djnz r7,sb1 ;避開系統(tǒng)碼 jb p3.2,$ mov r1,#mrd mov r2,#2pp: mov r3,#8 ;右移的次數(shù)jjjj: jnb p3.2,$ ;=0則等 lcall dy1400us mov c,p3.2 ;送c中 cplc rrc a djnz r3,jjjj ;完成一個字節(jié),沒完則 mov r1,a ;送存貯單元中 inc r1 djnz r2,pp mov a,mrd cpl a cjne a,31h,exit ;進行數(shù)據(jù)碼和數(shù)據(jù)的反碼進行比較 pop psw pop acc setb lrec ;置rec的標志位exit: setb ex0 ;打開int0的中斷 reti;=int1的中斷處理=key_int1: push acc push psw clr ex1 ;關(guān)斷int1 lcall scankey setb lkeyon ;按鍵標志位 setb ex1 ;打開中斷位 pop psw pop acc reti;=掃描鍵盤程序=scankey: push acc push psw clr ex0 mov p1,#0fh mov a,p1 cpl a anl a,#0fh mov r2,a ;將行號存入r2中;= mov p1,#0f0h mov a,p1 cpl a anl a,#0f0h ;取列號并存入a中;= mov r1,#05h ;置列初號 clr cpint01: rlc a ;取列號 dec r1 jnc pint01pint02: mov a,r2 ;取行號 mov r3,#0ffh ;置循環(huán)次數(shù)pint03: rrc a inc r3 jnc pint03pint04: mov a,r3 clr c rlc a rlc a add a,r1 mov mrd,a ;鍵號存于mrd單元中 ret;=延時35ms子程序 =dy35ms: mov r6,#175l2e: mov r4,#2l3e: mov r5,#32 djnz r5,$ djnz r4,l3e djnz r6,l2e ret;=延時30ms子程序 =dy30ms: mov r6,#150l2c: mov r4,#2l3c: mov r5,#32 djnz r5,$ djnz r4,l3c djnz r6,l2c ret;=延時20ms子程序 =dy20ms: mov r6,#100l2: mov r4,#2l3: mov r5,#32 djnz r5,$

溫馨提示

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

評論

0/150

提交評論