模塊三 單片機(jī)應(yīng)用電路實(shí)例設(shè)計(jì)及制作_第1頁
模塊三 單片機(jī)應(yīng)用電路實(shí)例設(shè)計(jì)及制作_第2頁
模塊三 單片機(jī)應(yīng)用電路實(shí)例設(shè)計(jì)及制作_第3頁
模塊三 單片機(jī)應(yīng)用電路實(shí)例設(shè)計(jì)及制作_第4頁
模塊三 單片機(jī)應(yīng)用電路實(shí)例設(shè)計(jì)及制作_第5頁
已閱讀5頁,還剩276頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

模塊三單片機(jī)應(yīng)用電路

實(shí)例設(shè)計(jì)及制作

主編:高玉泉模塊三單片機(jī)應(yīng)用電路

實(shí)例設(shè)計(jì)及制作

單元1彩燈控制器的設(shè)計(jì)及制作 單元2加法運(yùn)算器設(shè)計(jì)及制作 單元3數(shù)顯搶答器設(shè)計(jì)及制作 單元4籃球比賽計(jì)分器設(shè)計(jì)及制作

單元1彩燈控制器的設(shè)計(jì)及制作知識(shí)目標(biāo):1.掌握單片機(jī)控制的彩燈控制器硬件電路設(shè)計(jì)方法。2.掌握單片機(jī)控制的彩燈控制器軟件設(shè)計(jì)方法。3.能夠熟練應(yīng)用CJNE指令。技能目標(biāo):1.掌握彩燈控制器軟件設(shè)計(jì)方法。2.掌握單片機(jī)控制的彩燈控制器硬件電路安裝和調(diào)試方法。模塊三單元1任務(wù)多種彩燈的設(shè)計(jì)及制作任務(wù)多種彩燈的設(shè)計(jì)及制作一、任務(wù)描述(見表3-1所示)表3-1任務(wù)描述

模塊三工作任務(wù)要求彩燈控制器硬件電路設(shè)計(jì)掌握彩燈控制器硬件電路設(shè)計(jì)方法彩燈控制器軟件電路設(shè)計(jì)掌握彩燈控制器軟件設(shè)計(jì)方法彩燈控制器硬件電路安裝和調(diào)試掌握彩燈控制器硬件電路安裝和調(diào)試方法理解CJNE指令熟練應(yīng)用CJNE指令編制程序單元1任務(wù)多種彩燈的設(shè)計(jì)及制作

二、任務(wù)分析彩燈的應(yīng)用十分廣泛,由數(shù)字電路設(shè)計(jì)的彩燈控制器亮燈方式單調(diào),花樣單一,維修及改變燈光控制方式十分復(fù)雜;而由單片機(jī)設(shè)計(jì)的彩燈控制器,成本低,控制方式靈活,維修及改變控制方式方便,只需改變單片機(jī)的程序即可實(shí)現(xiàn)多種亮燈控制方式。任務(wù)內(nèi)容:?jiǎn)纹瑱C(jī)控制的彩燈控制器設(shè)計(jì):接于P2口的8路彩燈按如圖3-1所示的方式亮燈,設(shè)計(jì)控制電路及程序。通過對(duì)比較轉(zhuǎn)移指令學(xué)習(xí)、單片機(jī)控制的彩燈控制器硬件、軟件設(shè)計(jì)及安裝,掌握彩燈控制器的軟件和硬件設(shè)計(jì)方法。模塊三單元1任務(wù)多種彩燈的設(shè)計(jì)及制作

模塊三圖3-1彩燈亮燈方式單元1任務(wù)多種彩燈的設(shè)計(jì)及制作

模塊三三、相關(guān)知識(shí)1.比較轉(zhuǎn)移指令CJNEA,#data,rel;若Adata,則轉(zhuǎn)移;若A=data,順序執(zhí)行下一條指令;若A≥data,C清“0”;若A<data,C置“1”CJNEA,direct,rel;若A(direct),則轉(zhuǎn)移;若A=(direct),順序執(zhí)行下一條指令;若A≥(direct),C清“0”;若A<(direct),C置“1”CJNERn,#data,rel;若Rndata,則轉(zhuǎn)移;若Rn=data,順序執(zhí)行下一條指令;若Rn≥data,C清“0”;若Rn<data,C置“1”CJNE@Ri,#data,rel;若(Ri)data,則轉(zhuǎn)移;若(Ri)=data,順序執(zhí)行下一條指令;若(Ri)≥data,C清“0”

;若(Ri)<data,C置“1”這4條指令的功能是比較兩個(gè)操作數(shù)的大小,如果它們的值不相等,則轉(zhuǎn)移到目標(biāo)地址。如果第一個(gè)操作數(shù)小于第二個(gè)操作數(shù),則進(jìn)位標(biāo)志CY置“1”,否則清“0”。指令執(zhí)行不影響任何一個(gè)操作數(shù)。單元1任務(wù)多種彩燈的設(shè)計(jì)及制作模塊三2..指令應(yīng)用舉例例:分析執(zhí)行CJNEA,#20H,K1指令后,程序轉(zhuǎn)移的目的地址,并指出執(zhí)行下列程序后R1的值及CY的值。單元1任務(wù)多種彩燈的設(shè)計(jì)及制作模塊三四、任務(wù)準(zhǔn)備1.電工常用工具每人一套。2.電工操作臺(tái)兩人一臺(tái)。3.安裝有偉福6000軟件電腦及下載設(shè)備兩人一套。4.材料元器件明細(xì)如表3-2所示。單元1任務(wù)多種彩燈的設(shè)計(jì)及制作模塊三序號(hào)元件名稱元件型號(hào)元件數(shù)量備注1單片機(jī)芯片AT89S511片DIP封裝2發(fā)光二極管Φ58只普通型3晶振6MHz1只普通型4電容30pF2只瓷片電容10uF1只電解電容5電阻470Ω9只碳膜電阻10kΩ1只碳膜電阻6電阻1K2只碳膜電阻7按鍵1只無自鎖840腳IC座1片安裝AT89S51芯片9細(xì)導(dǎo)線、焊錫若干10萬能電路板4×15cm21片表3-2彩燈控制器元器件明細(xì)表單元1任務(wù)多種彩燈的設(shè)計(jì)及制作模塊三五、任務(wù)實(shí)施1.電路分析和設(shè)計(jì)單片機(jī)工作條件設(shè)計(jì):40腳接+5V電源正極,20腳接電源負(fù)極;18腳、19腳外接6MHz晶振及兩個(gè)30pF瓷片電容,9腳接按鍵復(fù)位電路(以后電路中單片機(jī)工作條件與此相同將省略)。P2口分別通過8個(gè)電阻接8只發(fā)光二極管,發(fā)光二極管采用共陽極連接形式,根據(jù)P2口的結(jié)構(gòu),在此電路中具有足夠的驅(qū)動(dòng)能力,不需再加驅(qū)動(dòng)電路;若接成共陰極形式,驅(qū)動(dòng)能力不夠,發(fā)光二極管亮度低。單元1任務(wù)多種彩燈的設(shè)計(jì)及制作模塊三【注意】:在實(shí)際應(yīng)用時(shí),若節(jié)日彩燈或廣告霓虹燈,需外加隔離電路(光電耦合器)和驅(qū)動(dòng)電路(如晶閘管或繼電器等)。設(shè)計(jì)完成的電路原理圖如圖3-2所示。圖3-2彩燈控制器電路原理圖單元1任務(wù)多種彩燈的設(shè)計(jì)及制作模塊三2.程序分析和設(shè)計(jì)延時(shí)采用調(diào)用延時(shí)子程序的方式來實(shí)現(xiàn),延時(shí)子程序?yàn)槎嘀匮h(huán)結(jié)構(gòu)。(1)程序分析本系統(tǒng)為實(shí)現(xiàn)復(fù)雜的亮燈控制方式,采用查表方法,將用戶的亮燈數(shù)據(jù)存放在一張數(shù)據(jù)表中(讀者可參考文中的亮燈方式圖與亮燈數(shù)據(jù)的對(duì)應(yīng)關(guān)系,低電平燈亮,高電平燈滅,編寫出自己喜愛的亮燈方式的控制數(shù)據(jù)),通過修改數(shù)據(jù)索引值(數(shù)據(jù)在表中的序號(hào)),不斷取出亮燈數(shù)據(jù)來實(shí)現(xiàn)復(fù)雜而又有規(guī)律的亮燈控制方式。單元1任務(wù)多種彩燈的設(shè)計(jì)及制作模塊三為實(shí)現(xiàn)循環(huán)亮燈,把亮燈數(shù)據(jù)表中的最后一個(gè)數(shù)據(jù)設(shè)置為結(jié)束碼,每次所取的亮燈數(shù)據(jù)與結(jié)束碼比較,若判斷是結(jié)束碼,則一次循環(huán)亮燈結(jié)束,將索引值清“0”,轉(zhuǎn)下一次循環(huán)亮燈;若不是結(jié)束碼,則將所取數(shù)據(jù)輸出顯示,同時(shí)表示本次循環(huán)亮燈還沒結(jié)束,亮燈數(shù)據(jù)索引值加1,轉(zhuǎn)取下一個(gè)亮燈數(shù)據(jù)。每?jī)蓚€(gè)亮燈數(shù)據(jù)之間應(yīng)有相應(yīng)的延時(shí)時(shí)間,以便看清每次的亮燈情況,本程序中設(shè)置為1s延時(shí)時(shí)間,調(diào)節(jié)該延時(shí)時(shí)間可調(diào)節(jié)亮燈速度。單元1任務(wù)多種彩燈的設(shè)計(jì)及制作模塊三1)初始化本程序應(yīng)用查表指令MOVCA,@A+DPTR取得亮燈數(shù)據(jù),在使用查表指令時(shí)先要獲得兩個(gè)數(shù)據(jù),即數(shù)據(jù)表首地址和索引值。所以,程序首先進(jìn)行初始化,將數(shù)據(jù)表首地址賦給數(shù)據(jù)指針寄存器DPTR,將索引值寄存器Rl清“0”(在查表指令中A在查表前存放索引值,在查表后存放查表所取得的數(shù)據(jù),所以A不能直接作為索引值寄存器,只能用其他的存儲(chǔ)單元Rl作索引值存儲(chǔ)單元,在進(jìn)行查表時(shí)將數(shù)據(jù)索引值先傳送給A再查表),查表指針(DPTR的值加上A的值,即數(shù)據(jù)表首址加上數(shù)據(jù)索引值)指向數(shù)據(jù)表中的第一個(gè)數(shù)據(jù)。單元1任務(wù)多種彩燈的設(shè)計(jì)及制作模塊三2)查表初始化后,應(yīng)用查表指令取得亮燈數(shù)據(jù)。在使用查表指令時(shí),數(shù)據(jù)表的首地址送給數(shù)據(jù)指針DPTR,索引值送給A,DPTR的內(nèi)容加上A的內(nèi)容(即數(shù)據(jù)表首址加上數(shù)據(jù)在表中的偏移量)即為所要取的數(shù)據(jù)在表中的地址。然后通過索引值加1,依次取得表中數(shù)據(jù),查表取得的數(shù)據(jù)存放在A中。單元1任務(wù)多種彩燈的設(shè)計(jì)及制作模塊三

3)循環(huán)結(jié)束判斷

每次取數(shù)據(jù)后應(yīng)判斷是否為一次循環(huán)結(jié)束,通過在數(shù)據(jù)表中放入一個(gè)結(jié)束碼(結(jié)束碼為在亮燈數(shù)據(jù)中不會(huì)出現(xiàn)的數(shù)據(jù),本程序中取結(jié)束碼為3DH)來實(shí)現(xiàn)一次循環(huán)結(jié)束的判斷,結(jié)束碼放在數(shù)據(jù)表的最后。若取得的數(shù)據(jù)為結(jié)束碼,則表示一次循環(huán)結(jié)束,將索引值寄存器清“0”,轉(zhuǎn)入下一次循環(huán)操作。若取得的數(shù)據(jù)不為結(jié)束碼,則將數(shù)據(jù)送至P2口輸出,驅(qū)動(dòng)LED點(diǎn)亮;然后將數(shù)據(jù)索引值加1,準(zhǔn)備取下一個(gè)數(shù)據(jù)。單元1任務(wù)多種彩燈的設(shè)計(jì)及制作模塊三4)亮燈延時(shí)

每次輸出亮燈數(shù)據(jù)后應(yīng)延時(shí),以便LED點(diǎn)亮一段時(shí)間,否則無法看清;通過調(diào)節(jié)延時(shí)時(shí)間來調(diào)節(jié)LED的閃爍速度,在本程序中通過調(diào)用延時(shí)子程序來實(shí)現(xiàn)延時(shí)。按以上任務(wù)分析得到如圖3-3所示的程序設(shè)計(jì)流程圖。單元1任務(wù)多種彩燈的設(shè)計(jì)及制作模塊三圖3-3彩燈控制器程序流程圖單元1任務(wù)多種彩燈的設(shè)計(jì)及制作模塊三(2)程序設(shè)計(jì)1)初始化程序設(shè)計(jì)時(shí)一般在程序開始部分均有初始化過程,給一些內(nèi)存單元賦初值,初始化通常用數(shù)據(jù)傳送指令來實(shí)現(xiàn)。在本程序中用數(shù)據(jù)傳送指令MOVRL,#00H將索引值寄存器R1清“0”,用指令MOVDPTR,#TAB將數(shù)據(jù)首地址#TAB賦給DPTR。單元1任務(wù)多種彩燈的設(shè)計(jì)及制作模塊三2)查表初始化后,進(jìn)行查表取得亮燈數(shù)據(jù),在查表時(shí)首先要用數(shù)據(jù)傳送指令MOVA,Rl將存放在Rl中的索引值送給A,然后用查表指令MOVCA,@A+DPTR取出亮燈數(shù)據(jù),DPTR的值加上A的值即為所取數(shù)據(jù)的地址,將該地址中的數(shù)據(jù)送給A。單元1任務(wù)多種彩燈的設(shè)計(jì)及制作模塊三

(3)循環(huán)結(jié)束判斷對(duì)查表取出的數(shù)據(jù)進(jìn)行判斷是否為結(jié)束碼,應(yīng)用控制轉(zhuǎn)移類指令中的比較轉(zhuǎn)移指令CJNEA,3DH,DISP,判斷A中的數(shù)據(jù)是否等于結(jié)束碼3DH,若相等則順序執(zhí)行下一條指令,即本次循環(huán)結(jié)束,用MOVRl,#OOH將索引值寄存器清“0”,程序轉(zhuǎn)移至標(biāo)號(hào)為START的指令處執(zhí)行,重新取數(shù)據(jù)表中的第一個(gè)數(shù)據(jù),進(jìn)行下一次循環(huán)亮燈操作;若A中的數(shù)據(jù)不等于結(jié)束碼則程序轉(zhuǎn)移至標(biāo)號(hào)為DISP的指令處執(zhí)行,即用MOVP2,A指令將A中的數(shù)據(jù)送P2口輸出,然后用加1指令I(lǐng)NCRl將索引值加1,為取下一個(gè)數(shù)據(jù)作準(zhǔn)備。單元1任務(wù)多種彩燈的設(shè)計(jì)及制作模塊三

(4)亮燈延時(shí)亮燈數(shù)據(jù)經(jīng)P2口輸出后,應(yīng)使燈亮延時(shí)一段時(shí)間,然后再取下一個(gè)數(shù)據(jù)輸出,否則將無法看清當(dāng)前數(shù)據(jù)的亮燈情況。應(yīng)用子程序調(diào)用指令LCALLDELLAY調(diào)用延時(shí)子程序?qū)崿F(xiàn)延時(shí),其中DELLAY為延時(shí)子程序第一條指令的標(biāo)號(hào)(相當(dāng)于其他計(jì)算機(jī)語言中的子程序名)。單元1任務(wù)多種彩燈的設(shè)計(jì)及制作模塊三(5)數(shù)據(jù)表

亮燈數(shù)據(jù)表用偽指令中的字節(jié)定義指令DB定義,標(biāo)號(hào)TAB表示數(shù)據(jù)表的首地址,數(shù)據(jù)表可以分行寫,但每行均必須以DB指令開始。每個(gè)數(shù)據(jù)之間必須用逗號(hào)分隔,如是字母開頭的數(shù)據(jù),則要在前面加0。以第一個(gè)亮燈狀態(tài)為例,說明亮燈情況與P2口輸出值的對(duì)應(yīng)關(guān)系。單元1任務(wù)多種彩燈的設(shè)計(jì)及制作模塊三按照上述對(duì)應(yīng)關(guān)系,得到如圖3-4所示的P2口輸出亮燈數(shù)據(jù)表。單元1任務(wù)多種彩燈的設(shè)計(jì)及制作模塊三圖3-4P2口輸出亮燈數(shù)據(jù)表單元1任務(wù)多種彩燈的設(shè)計(jì)及制作模塊三根據(jù)以上任務(wù)分析和任務(wù)實(shí)施過程編寫的源程序如下:ORGOOOOHMOVRl,#OOH;將數(shù)據(jù)表索引值寄存器清“0”MOVDPTR,#TAB;將數(shù)據(jù)表首地址賦給基址寄存器;DPTRSTART:MOVA,Rl;索引值送AMOVCA,@A+DPTR;利用查表指令取出亮燈數(shù)據(jù)CJNEA,3DH,DISP;判斷是否為亮燈結(jié)束碼,若是則;將索引值清“0”,進(jìn)行下一次亮燈;循環(huán);若不是則輸出單元1任務(wù)多種彩燈的設(shè)計(jì)及制作模塊三MOVRl,#OOHSJMPSTARTDISP:MOVP2,A;將亮燈數(shù)據(jù)通過P2口輸出INCRl;索引值加1LCALLDELAY;調(diào)用1s延時(shí)程序SJMPSTART;轉(zhuǎn)取下一個(gè)亮燈數(shù)據(jù)DELAY:MOVR5,#02;1s延時(shí)子程序Kl:MOVR6,#250K2:MOVR7,#250K3:NOPNOPDJNZR7,K3DJNZR6,K2DJNZR5,KlRETTAB:DBOE7H,OC3H981H,OOH90FFH;亮燈數(shù)據(jù)表DB7FH,3FH,1FH,OFH,07H,03H,OIH,OOH,OFFHDB55H,OAAH,55H,OAAH,OFFH,OOH,OFFH,OOHDBOFFH,3DH單元1任務(wù)多種彩燈的設(shè)計(jì)及制作模塊三

3.程序仿真與調(diào)試(1)運(yùn)行WAVE6000軟件,將本任務(wù)中的匯編源程序以文件名CD.ASM保存,添加到工程文件。(2)利用WAVE6000軟件進(jìn)行模擬仿真;如圖3-5所示。端口P2顯示亮燈輸出變化情況,觀察亮燈狀況,是否和設(shè)計(jì)相符?理解指令CJNEA,#OD3H,DISP,MOVCA,@A+DPTR的含義;將有關(guān)數(shù)據(jù)填入表3-3。單元1任務(wù)多種彩燈的設(shè)計(jì)及制作模塊三(3)如果發(fā)光二極管采用陰極連接方式,即8只發(fā)光二極管陰極相連后接地,陽極分別通過一個(gè)電阻接到P2口的8位,仍按圖3-1要求的方式亮燈,則亮燈數(shù)據(jù)表應(yīng)該如何修改,修改后仿真運(yùn)行,觀察電路運(yùn)行情況。表3-3彩燈控制器模擬仿真數(shù)據(jù)變化表單元1任務(wù)多種彩燈的設(shè)計(jì)及制作模塊三圖3-5彩燈控制器模擬仿真圖單元1任務(wù)多種彩燈的設(shè)計(jì)及制作模塊三4.彩燈控制器制作(1)存盤后CD.HEX十六進(jìn)制文件下載到AT89S51單片機(jī)中。(2)按電路原理圖在萬能線路板上按工藝要求,布線、連線、焊接、安裝。(3)將下載好程序的AT89S51單片機(jī)安裝到單片機(jī)插座上,調(diào)試運(yùn)行,首先按動(dòng)復(fù)位鍵,看是否達(dá)到設(shè)計(jì)要求,總結(jié)成功經(jīng)驗(yàn)和分析出現(xiàn)問題原因。單元1任務(wù)多種彩燈的設(shè)計(jì)及制作模塊三六、檢查評(píng)議彩燈控制器安裝調(diào)試考核表如表3-4所示。單元1任務(wù)多種彩燈的設(shè)計(jì)及制作模塊三1.技能訓(xùn)練(1)用protel軟件繪制出本設(shè)計(jì)任務(wù)的電路原理圖,并設(shè)計(jì)印制電路板圖及制作印制電路板。(2)連接仿真器,將本設(shè)計(jì)任務(wù)的程序輸入計(jì)算機(jī),并進(jìn)行仿真調(diào)試及運(yùn)行。(3)連接編程器,將仿真通過的程序代碼下載到單片機(jī)中,脫機(jī)運(yùn)行并觀察電路運(yùn)行情況。(4)自行設(shè)計(jì)一亮燈數(shù)據(jù)表,修改程序后仿真運(yùn)行,觀察電路運(yùn)行情況。(5)要求每個(gè)亮燈狀態(tài)延時(shí)時(shí)間為2s,程序應(yīng)如何修改,程序修改后仿真運(yùn)行,觀察電路運(yùn)行情況。七、考證要點(diǎn)單元2加法運(yùn)算器設(shè)計(jì)及制作模塊三知識(shí)目標(biāo):1.理解DAA指令。2.熟練掌握LED數(shù)碼管顯示器原理。技能目標(biāo):1.掌握加法運(yùn)算器硬件電路設(shè)計(jì)方法。2.掌握加法運(yùn)算器軟件設(shè)計(jì)方法。3.掌握加法運(yùn)算器硬件電路安裝和調(diào)試方法。單元2加法運(yùn)算器設(shè)計(jì)及制作任務(wù)個(gè)位數(shù)加法運(yùn)算器的制作一、任務(wù)描述(見表3-5所示)表3-5任務(wù)描述模塊三

工作任務(wù)要求加法運(yùn)算器硬件電路設(shè)計(jì)掌握加法運(yùn)算器硬件電路設(shè)計(jì)方法加法運(yùn)算器軟件電路設(shè)計(jì)掌握加法運(yùn)算器軟件設(shè)計(jì)方法加法運(yùn)算器硬件電路安裝和調(diào)試掌握加法運(yùn)算器硬件電路安裝和調(diào)試方法理解DAA指令的含義和LED顯示器原理熟練掌握DAA指令的含義和LED顯示器原理單元2加法運(yùn)算器設(shè)計(jì)及制作模塊三

二、任務(wù)分析通過對(duì)DAA指令和LED顯示器原理的學(xué)習(xí),掌握BCD碼加法程序設(shè)計(jì)和電路安裝技能及數(shù)碼管顯示的有關(guān)知識(shí),并能模擬仿真加法運(yùn)算器。任務(wù)內(nèi)容:接于PO口的8個(gè)撥動(dòng)開關(guān)向單片機(jī)輸入兩個(gè)一位BCD碼,經(jīng)單片機(jī)運(yùn)算和處理后由Pl口和P3口輸出,驅(qū)動(dòng)兩個(gè)數(shù)碼管顯示相加結(jié)果。本設(shè)計(jì)任務(wù)是兩個(gè)一位BCD碼數(shù)相加,由數(shù)碼管顯示出運(yùn)算結(jié)果。單元2加法運(yùn)算器設(shè)計(jì)及制作模塊三三、相關(guān)知識(shí)1.十進(jìn)制調(diào)整指令DAA這條指令是在進(jìn)行BCD碼加法運(yùn)算時(shí),對(duì)所得結(jié)果進(jìn)行十進(jìn)制調(diào)整,使累加器A中的內(nèi)容調(diào)整為壓縮BCD碼數(shù)?!咀⒁狻浚涸撝噶钪荒芨诩臃ㄖ噶钪笫褂?,不能對(duì)減法運(yùn)算的結(jié)果進(jìn)行調(diào)整。單元2加法運(yùn)算器設(shè)計(jì)及制作模塊三執(zhí)行該指令時(shí),若A(BCD碼加法運(yùn)算結(jié)果)中的低4位大于9或AC=1,則低4位進(jìn)行加6調(diào)整操作;同樣,A中的高4位大于9或CY=1則高4位進(jìn)行加6調(diào)整操作。以上調(diào)整操作由DAA指令自動(dòng)完成,用戶無需關(guān)心。表3-6中以兩個(gè)十進(jìn)制數(shù)為例,給出了十進(jìn)制數(shù)、BCD碼及BCD碼的十六進(jìn)制書寫格式之間的關(guān)系。從表3-6中可以看出,十進(jìn)制數(shù)對(duì)應(yīng)的BCD碼的十六進(jìn)制書寫格式為在該十進(jìn)制數(shù)的后面加一個(gè)H。單元2加法運(yùn)算器設(shè)計(jì)及制作模塊三表3-6十進(jìn)制數(shù)、BCD碼及BCD碼的十六進(jìn)制書寫格式之間的關(guān)系單元2加法運(yùn)算器設(shè)計(jì)及制作模塊三例:已知有兩個(gè)BCD碼:A=28H、立即數(shù)35H,執(zhí)行加法指令A(yù)DDA,#35H及十進(jìn)制調(diào)整指令DAA,說明指令的執(zhí)行過程。在單片機(jī)內(nèi)部將兩個(gè)BCD碼按二進(jìn)制數(shù)加ADD(因在單片機(jī)內(nèi)部只能進(jìn)行二進(jìn)制數(shù)加法運(yùn)算,不能進(jìn)行十進(jìn)制數(shù)運(yùn)算),所以執(zhí)行ADDA,#35H指令的情況如下顯然,上面結(jié)果不是BCD碼,結(jié)果是錯(cuò)誤的,原因是單片機(jī)將十進(jìn)制數(shù)按二進(jìn)制規(guī)則運(yùn)算造成的。單元2加法運(yùn)算器設(shè)計(jì)及制作模塊三所以要將上面結(jié)果進(jìn)行十進(jìn)制調(diào)整,運(yùn)行DAA指令的情況如下:進(jìn)行十進(jìn)制調(diào)整后結(jié)果為63,是正確的。所以,凡是進(jìn)行BCD碼加法運(yùn)算時(shí),在加法運(yùn)算指令后一定要跟一條十進(jìn)制調(diào)整指令DAA,將加法運(yùn)算結(jié)果調(diào)整為BCD碼。在以后任務(wù)中不再講解指令的有關(guān)知識(shí),如在程序設(shè)計(jì)中用到前面任務(wù)中未講解過的指令,請(qǐng)讀者參閱附錄中單片機(jī)指令系統(tǒng)內(nèi)容。單元2加法運(yùn)算器設(shè)計(jì)及制作模塊三

2.LED顯示器接口在單片機(jī)應(yīng)用系統(tǒng)中,LED顯示器是最常用的顯示器,價(jià)格低廉,結(jié)構(gòu)簡(jiǎn)單。下面介紹LED顯示器的結(jié)構(gòu)及靜態(tài)顯示方式。

(1)LED顯示器的結(jié)構(gòu)LED顯示器是由發(fā)光二極管按照一定的排列規(guī)律組成的顯示器,也稱為數(shù)碼管顯示器。其結(jié)構(gòu)如圖3-6a所示,由8只發(fā)光二極管(以下簡(jiǎn)稱字段)組成,給8只發(fā)光二極管加上不同的電平(高電平或低電平),使其對(duì)應(yīng)的段亮燈或熄滅,可以組合顯示0~9十個(gè)數(shù)字、A~F六個(gè)字母及小數(shù)點(diǎn)“,”等。圖中dp表示小數(shù)點(diǎn),com表示8只發(fā)光二極管的公共端。單元2加法運(yùn)算器設(shè)計(jì)及制作模塊三數(shù)碼管顯示器兩種形式

圖3-6數(shù)碼管顯示器結(jié)構(gòu)單元2加法運(yùn)算器設(shè)計(jì)及制作模塊三共陰極數(shù)碼管的公共端com(陰極)接地,當(dāng)某一發(fā)光二極管的陽極接高電平(+5V)時(shí),此二極管點(diǎn)亮;共陽極數(shù)碼管的公共端com(陽極)接高電平(+5V),當(dāng)某一發(fā)光二極管的陰極接低電平(地)時(shí),此二極管點(diǎn)亮。數(shù)碼管顯示器通常有共陰極極和共陽極極兩種形式,如圖3-6b、c所示。共陰極數(shù)碼管的公共端com(陰極)接地,當(dāng)某一發(fā)光二極管的陽極接高電平(+5V)時(shí),此二極管點(diǎn)亮;單元2加法運(yùn)算器設(shè)計(jì)及制作模塊三共陽極數(shù)碼管的公共端com(陽極)接高電平(+5V),當(dāng)某一發(fā)光二極管的陰極接低電平(地)時(shí),此二極管點(diǎn)亮。要顯示某字形時(shí),應(yīng)使該字形的相應(yīng)段點(diǎn)亮,實(shí)際就是通過單片機(jī)的I/O端口給數(shù)碼管送一個(gè)字形碼(代表不同電平組合的顯示數(shù)據(jù),其中1代表高電平,0代表低電平)。如要顯示字形“5”,則a、c、d、f、g段亮,b、e段滅,其對(duì)應(yīng)共陰極和共陽極數(shù)碼管單片機(jī)I/O口輸出顯示數(shù)據(jù)如圖3-7和3-8所示。單元2加法運(yùn)算器設(shè)計(jì)及制作模塊三圖3-7共陰極數(shù)碼管顯示字形“5”的數(shù)據(jù)單元2加法運(yùn)算器設(shè)計(jì)及制作模塊三圖3-8共陽極數(shù)碼管顯示字形“5”的數(shù)據(jù)單元2加法運(yùn)算器設(shè)計(jì)及制作模塊三按照上面的對(duì)應(yīng)關(guān)系,可得其他字符的七段顯示數(shù)據(jù)見表3-7。

單元2加法運(yùn)算器設(shè)計(jì)及制作模塊三單元2加法運(yùn)算器設(shè)計(jì)及制作4.材料元器件明細(xì)表如表3-8所示。表3-8加法運(yùn)算器元器件明細(xì)表模塊三序號(hào)元件名稱元件型號(hào)元件數(shù)量備注1單片機(jī)芯片AT89S511片DIP封裝2數(shù)碼管LG5011BSR2只普通型3晶振12MHz1只普通型4電容30pF2只瓷片電容10uF1只電解電容5電阻470Ω15只碳膜電阻10kΩ9只碳膜電阻6萬能電路板4×15cm21片萬能電路板7按鍵9只無自鎖840腳IC座1片安裝AT89S51芯片9細(xì)導(dǎo)線、焊錫若干單元2加法運(yùn)算器設(shè)計(jì)及制作模塊三五、任務(wù)實(shí)施1.電路分析和設(shè)計(jì)(1)電路原理分析PO口接8個(gè)撥動(dòng)開關(guān),、其中開關(guān)S1~S4組成一位BCD碼,開關(guān)S5~S8組成另一位BCD碼。Pl口和P3口分別接一個(gè)數(shù)碼管,其中P1所接數(shù)碼管顯示結(jié)果高位(十位),P3口所接數(shù)碼管顯示結(jié)果低位(個(gè)位),數(shù)碼管采用共陽極連接,即公共端接電源,每段接一470Ω限流電阻。8個(gè)撥動(dòng)開關(guān)的公共端接地,另一端各通過一個(gè)10kΩ上拉電阻接電源,所以在輸入時(shí),開關(guān)斷開則相應(yīng)位為“1”(高電平),開關(guān)閉合則相應(yīng)位為“O”(低電平)。單元2加法運(yùn)算器設(shè)計(jì)及制作模塊三如輸入2和8兩個(gè)BCD碼,則S2斷開,S4、S3和Sl閉合;S8斷開,S7、S6、S5閉合。經(jīng)內(nèi)部程序相加,再經(jīng)七段譯碼后,由Pl口輸出高位(十位)BCD碼的七段碼,P3口輸出低位(個(gè)位)BCD碼的七段碼,并通過SMG1(顯示十位)和SMG2(顯示個(gè)位)兩個(gè)數(shù)碼管顯示出相加結(jié)果。如輸入2和8兩個(gè)BCD碼,則相加結(jié)果為10,SMG1顯示1,SMG2顯示0。單元2加法運(yùn)算器設(shè)計(jì)及制作模塊三(2)電路設(shè)計(jì)PO口接8個(gè)撥動(dòng)開關(guān),8個(gè)開關(guān)的一端相連接地,另一端分別接PO口的8位,并分別通過10kΩ的電阻接至電源。Pl口和P3口分別經(jīng)470Ω的限流電阻接到一個(gè)數(shù)碼管的七段,Pl.7和P3.7未用到。設(shè)計(jì)完成的電路原理圖如圖3-9所示。單元2加法運(yùn)算器設(shè)計(jì)及制作模塊三圖3-9加法運(yùn)算器原理圖單元2加法運(yùn)算器設(shè)計(jì)及制作模塊三2.程序分析和設(shè)計(jì)(1)程序分析由PO口輸入的兩個(gè)一位BCD碼(8個(gè)二進(jìn)制位),高4位為一個(gè)BCD碼,低4位為另一個(gè)BCD碼。首先要將PO高4位和低4位分開,形成兩個(gè)BCD碼,然后將兩個(gè)BCD碼相加。在單片機(jī)內(nèi)兩個(gè)BCD碼(二一十進(jìn)制數(shù))是按二進(jìn)制相加的,所以相加后要得到正確的結(jié)果必須進(jìn)行十進(jìn)制調(diào)整。十進(jìn)制調(diào)整后的結(jié)果.(兩位BCD碼數(shù))存于A中,其中十位存于A的高4位,個(gè)位存于A的低4位。結(jié)果要通過兩個(gè)數(shù)碼管顯示出來,所以還要將BCD碼進(jìn)行七段譯碼。單元2加法運(yùn)算器設(shè)計(jì)及制作模塊三為使程序結(jié)構(gòu)清晰,七段譯碼及輸出顯示是通過調(diào)用子程序的方式實(shí)現(xiàn)的。在子程序中首先將A中的兩個(gè)BCD碼拆開,然后分別將兩個(gè)BCD碼通過查表方式譯成LED七段碼(在模塊二中已詳細(xì)講解過),再通過Pl口和P3口輸出驅(qū)動(dòng)兩個(gè)數(shù)碼管顯示出運(yùn)算結(jié)果。其中,Pl口顯示結(jié)果的十位,P3口顯示結(jié)果的個(gè)位。在查表程序中BCD碼對(duì)應(yīng)的七段碼值存放在數(shù)據(jù)表中。按以上任務(wù)分析過程繪制的程序設(shè)計(jì)流程如圖3-10和圖3-11所示。單元2加法運(yùn)算器設(shè)計(jì)及制作模塊三圖3-10加法運(yùn)算器主程序流程圖單元2加法運(yùn)算器設(shè)計(jì)及制作模塊三圖3-11七段譯碼及顯示子程序流程圖單元2加法運(yùn)算器設(shè)計(jì)及制作模塊三(2)程序設(shè)計(jì)1)數(shù)據(jù)讀入用MOVA,PO指令將PO口輸入的兩個(gè)BCD碼讀入,存放于A中。2)數(shù)據(jù)拆分在拆分前應(yīng)先用MOVRl,A指令將輸入的兩個(gè)BCD碼數(shù)據(jù)暫存于Rl中,然后用邏輯與指令A(yù)NLA,#OFH,取出A中的低4位(其中的一個(gè)BCD碼),暫存于R2中。再將暫存于Rl中的輸入數(shù)據(jù)送給A,用邏輯與指令A(yù)NLA,#OFOH,取出A中的高4位(另一個(gè)BCD碼),存于A中;該位BCD碼現(xiàn)位于十位,必須再運(yùn)用數(shù)據(jù)交換指令SWAPA將其變換為個(gè)位。單元2加法運(yùn)算器設(shè)計(jì)及制作模塊三3)BCD碼相加

將拆分后分別存放于R2和A中的兩個(gè)BCD碼輸入數(shù)據(jù)用不帶進(jìn)位位的加法指令A(yù)DDA,R2進(jìn)行相加,結(jié)果存于A中。然后用十進(jìn)制調(diào)整指令DAA,將相加后的結(jié)果進(jìn)行十進(jìn)制調(diào)整,以得到正確的十進(jìn)制結(jié)果。4)七段譯碼輸出將七段譯碼輸出編寫為子程序,以使程序結(jié)構(gòu)更清晰。同樣在譯碼前要將結(jié)果中的兩位BCD碼拆開為兩個(gè)單獨(dú)的BCD碼,以便分別譯碼輸出。單元2加法運(yùn)算器設(shè)計(jì)及制作模塊三用MOVR3,A指令將結(jié)果暫存于R3中,用ANLA,#OFOH指令取出結(jié)果中的十位BCD碼,用SWAPA指令將其變換到個(gè)位;然后進(jìn)行查表將BCD碼轉(zhuǎn)換為七段碼。先將七段碼表的首地址用MOVDPTR.#TAB指令送給數(shù)據(jù)指針DPTR;此時(shí)A中已存放要查數(shù)據(jù),并且要查數(shù)據(jù)的值與要取得數(shù)據(jù)在數(shù)據(jù)表中的位置(即索引值)相等;接著用查表指令MOVCA,@A+DPTR取得十位BCD碼對(duì)應(yīng)的七段碼存放于A中。用MOVPl,A指令將結(jié)果十位數(shù)的七段碼輸出到Pl口,驅(qū)動(dòng)SMG1數(shù)碼管顯示。單元2加法運(yùn)算器設(shè)計(jì)及制作模塊三將暫存于R3的結(jié)果數(shù)據(jù)用MOVA,R3送給A,用ANLA,#OFH將結(jié)果的個(gè)位BCD碼取出,再用查表指令MOVCA,@A+DPTR取得個(gè)位BCD碼對(duì)應(yīng)的七段碼存放于A中,用MOVP3,A指令將結(jié)果個(gè)位數(shù)的七段碼輸出到P3口,驅(qū)動(dòng)SMG2數(shù)碼管顯示。按以上任務(wù)分析及任務(wù)實(shí)施過程編寫的源程序如下:?jiǎn)卧?加法運(yùn)算器設(shè)計(jì)及制作模塊三

ORGOOOOHSTART:MOVA,PO;將PO口數(shù)據(jù)(兩個(gè)一位BCD碼)讀;入A中MOVRl,A;將A中的數(shù)據(jù)暫存于Rl中ANLA,#0FH;取出A中的低4位(其中一個(gè)BCD碼)MOVR2,;將A的值送入R2中MOVA,Rl;將暫存于R1的數(shù)據(jù)送人A中ANLA,#0F0H;取出A中的高4位(另一個(gè)BCD碼)SWAPA;交換至低4位ADDA,R2;A與R2相加(兩個(gè)BCD碼相加)DAA;十進(jìn)制調(diào)整(將結(jié)果調(diào)整為十進(jìn)制數(shù))單元2加法運(yùn)算器設(shè)計(jì)及制作模塊三LCALLLEDDISP;調(diào)用七段譯碼及顯示子程序SJMPSTART;跳轉(zhuǎn)至START(循環(huán)執(zhí)行)LEDDISP:MOVR3,;將A中的數(shù)據(jù)(結(jié)果數(shù)據(jù))暫存于R3中ANLA,#0F0H;取出A的高4位(結(jié)果的十位BCD碼)SWAPA;交換至低4位(便于查表)MOVDPTR:;#TAB;將BCD碼對(duì)應(yīng)的七段碼數(shù)據(jù)表首地址;送DPTRMOVCA,@A+DPTR;查表得十位BCD碼對(duì)應(yīng)的七段碼MOVPl,A;將A中的數(shù)據(jù)(十位BCD碼對(duì)應(yīng)的七;段碼)送Pl口輸出MOVA,R3;將暫存于R3中的數(shù)據(jù)(結(jié)果數(shù)據(jù))送;入A中單元2加法運(yùn)算器設(shè)計(jì)及制作模塊三ANLA,#OFH;取出A的低4位(結(jié)果的個(gè)位BCD碼)MOVCA,@A+DPTR;查表得個(gè)位BCD碼對(duì)應(yīng)的七;段碼MOVP3,A;將A中的數(shù)據(jù)(個(gè)位BCD碼對(duì)應(yīng)的七;段碼)送P3口輸出RET;子程序返回TAB:DBOCOH,OF9H,OA4H,OBOH,99H;BCD碼對(duì)應(yīng)的七段碼數(shù)據(jù)表DB92H,82H,OF8H,80H,90HEND單元2加法運(yùn)算器設(shè)計(jì)及制作模塊三3.程序仿真與調(diào)試(1)運(yùn)行偉福6000軟件,將(P0)=#28H代入?yún)R編源程序中,并以文件名JFJSQ.ASM保存,添加到工程文件。(2)將已經(jīng)保存文件進(jìn)行編譯,若編譯中檢測(cè)到錯(cuò)誤的符號(hào),會(huì)將錯(cuò)誤信息用紅色條反顯,用鼠標(biāo)雙擊錯(cuò)誤提示,即可以在對(duì)應(yīng)位置進(jìn)行修改。(3)利用WAVE6000軟件進(jìn)行可模擬仿真。如圖3-12所示。觀察P1和P3輸出端口數(shù)值,是否和設(shè)計(jì)相符?單元2加法運(yùn)算器設(shè)計(jì)及制作理解指令DAA的含義和LED顯示器原理;將有關(guān)數(shù)據(jù)填入3-9表。表3-9加法運(yùn)算器模擬仿真數(shù)據(jù)變化表模塊三數(shù)值P0口輸入數(shù)據(jù)P1口輸出P3口輸出28單元2加法運(yùn)算器設(shè)計(jì)及制作模塊三(4)如果采用共陰極極數(shù)碼管,電路應(yīng)該如何修改?程序中七段顯示數(shù)碼表中的數(shù)據(jù)又應(yīng)如何修改,修改后仿真運(yùn)行。(5)程序中如將十進(jìn)制數(shù)調(diào)整指令DAA刪除,仿真運(yùn)行,觀察是否能得到正確的結(jié)果數(shù)據(jù)。單元2加法運(yùn)算器設(shè)計(jì)及制作模塊三圖3-12偉福6000軟件模擬仿真單元2加法運(yùn)算器設(shè)計(jì)及制作模塊三4.加法運(yùn)算器電路板制作(1)存盤后的JFJSQ.HEX十六進(jìn)制文件下載到AT89S51單片機(jī)中。(2)按電路原理圖在萬能線路板上按工藝要求布線、布線時(shí)顯示器件3和8腳接公共端,接線接線要盡量短,焊接要迅速,不然過多焊錫要短路。(3)調(diào)試運(yùn)行時(shí)P0口是二進(jìn)制輸入端,并分為高四位和低四位;P0.0~P0.3是一位數(shù),P0.4~P0.7是另一位數(shù);看是否達(dá)到設(shè)計(jì)要求,總結(jié)成功經(jīng)驗(yàn)和找出問題原因。六、檢查評(píng)議加法運(yùn)算器安裝調(diào)試考核表如3-10所示。單元2加法運(yùn)算器設(shè)計(jì)及制作3-10加法運(yùn)算器安裝調(diào)試考核表模塊三評(píng)價(jià)項(xiàng)目評(píng)價(jià)內(nèi)容配分/分評(píng)價(jià)標(biāo)準(zhǔn)得分硬件電路電路基礎(chǔ)知識(shí)20認(rèn)識(shí)電路中各元器件功能及型號(hào)10分掌握電路工作原理10分焊接工藝元器件整形、插裝5按照原理圖及元器件焊接尺寸正確整形、安裝5分焊接5符合焊接工藝標(biāo)準(zhǔn)5分程序編制、調(diào)試、運(yùn)行指令學(xué)習(xí)10正確理解程序中所有指令的意義10分程序分析、設(shè)計(jì)20能正確分析程序的功能10分能根據(jù)要求設(shè)計(jì)功能相似的程序10分程序調(diào)試與運(yùn)行20程序輸入正確5分程序編譯仿真正確5分能修改程序并分析10分安全文明生產(chǎn)使用設(shè)備和工具10正確使用設(shè)備及工具團(tuán)結(jié)協(xié)作集體意識(shí)10各成員分工協(xié)作,積極參與單元2加法運(yùn)算器設(shè)計(jì)及制作模塊三七、問題及防治顯示器電路的調(diào)試與故障分析1.所有數(shù)字的顯示均為亂碼在電路的設(shè)計(jì)中,有可能是顯示代碼的位與顯示數(shù)字段的對(duì)應(yīng)關(guān)系有誤,可以通過仿真器,向顯示器的輸出端口每次發(fā)送一段可顯示的信號(hào),觀察顯示器的哪一段點(diǎn)亮,找出代碼的"位"與顯示器"段"的關(guān)系,然后重新編碼。2.LED顯示器的亮度太弱亮度太弱,通常是驅(qū)動(dòng)電流太小的原因,通常認(rèn)為有10mA左右的電流就可滿足要求,但在背景光線較強(qiáng)時(shí)就顯得亮度不夠,只要加大驅(qū)動(dòng)電流即可解決此問題。另外,在動(dòng)態(tài)掃描的顯示電路中,由于顯示器顯示時(shí),每一段的驅(qū)動(dòng)電流可能會(huì)很大,在顯示位數(shù)較多時(shí)尤其是這樣,因而要檢查電流驅(qū)動(dòng)器件能否提供相應(yīng)的電流。單元2加法運(yùn)算器設(shè)計(jì)及制作模塊三八、考證要點(diǎn)1.選擇題(1)MCS-51指令系統(tǒng)中,指令DAA是

。A.除法指令B.加1指令C.加法指令D.十進(jìn)制調(diào)整指令(2)MCS—51指令系統(tǒng)中,指令DAA應(yīng)跟在

。A.加法指令后B.BCD碼的加法指令后C.減法指令后D.BCD碼的減法指令后(3)在單片機(jī)算術(shù)運(yùn)算過程中,指令DAA常用于

運(yùn)算。A.二進(jìn)制B.加法C.BCD碼加法D.十六進(jìn)制單元2加法運(yùn)算器設(shè)計(jì)及制作模塊三(4)MCS—51指令系統(tǒng)中,執(zhí)行下列指令后,其結(jié)果為

。MOVA,#68ADDA,#53DAAA.A=21CY=1OV=0B.A=21CY=1OV=1C.A=21CY=0OV=0D.以上都不對(duì)單元2加法運(yùn)算器設(shè)計(jì)及制作模塊三2.技能訓(xùn)練(1)用protel軟件繪制出本設(shè)計(jì)任務(wù)的電路原理圖,并設(shè)計(jì)印制電路版圖及制作印制電路板。(2)連接仿真器,將本設(shè)計(jì)任務(wù)的程序輸入計(jì)算機(jī),并進(jìn)行仿真調(diào)試及運(yùn)行。(3)連接編程器,將仿真通過的程序代碼下載到單片機(jī)中,脫機(jī)運(yùn)行并觀察電路運(yùn)行情況。單元3數(shù)顯搶答器設(shè)計(jì)及制作模塊三知識(shí)目標(biāo):1.熟練掌握鍵盤接口和獨(dú)立式鍵盤工作原理。技能目標(biāo):1.掌握數(shù)顯搶答器硬件電路設(shè)計(jì)方法。2.掌握數(shù)顯搶答器軟件設(shè)計(jì)方法。3.掌握數(shù)顯搶答器硬件電路安裝和調(diào)試方法。單元3數(shù)顯搶答器設(shè)計(jì)及制作任務(wù)獨(dú)立式鍵盤搶答器的設(shè)計(jì)及制作模塊三一、任務(wù)描述(見表3-11所示)表3-11任務(wù)描述

工作任務(wù)要求學(xué)習(xí)鍵盤接口和獨(dú)立式鍵盤原理熟練掌握鍵盤接口和獨(dú)立式鍵盤原理數(shù)顯搶答器硬件電路設(shè)計(jì)掌握數(shù)顯搶答器硬件電路設(shè)計(jì)方法數(shù)顯搶答器軟件電路設(shè)計(jì)掌握數(shù)顯搶答器軟件設(shè)計(jì)方法數(shù)顯搶答器硬件電路安裝和調(diào)試掌握數(shù)顯搶答器硬件電路安裝和調(diào)試方法單元3數(shù)顯搶答器設(shè)計(jì)及制作模塊三二、任務(wù)分析在各種競(jìng)答活動(dòng)中,搶答器是十分重要設(shè)備,用單片機(jī)控制的搶答器不僅電路簡(jiǎn)單,而且成本低,具有顯示搶答者號(hào)碼和防作弊功能。在搶答器程序設(shè)計(jì)中,關(guān)鍵是對(duì)鍵盤掃描、按鍵判別及按鍵功能的編程。這樣我們首先要掌握:1.鍵盤接口;2.獨(dú)立式鍵盤;單元3數(shù)顯搶答器設(shè)計(jì)及制作模塊三任務(wù)內(nèi)容:當(dāng)主持人按下?lián)尨痖_始按鈕(可用單片機(jī)復(fù)位按鍵作搶答開始按鈕)發(fā)布搶答命令后,8位參賽選手通過按下各自的搶答按鈕(鍵)進(jìn)行搶答。哪位選手最先按下?lián)尨鸢粹o,數(shù)碼管就顯示其對(duì)應(yīng)的號(hào)碼,表示該名選手搶答成功,并且鎖定,其他參賽選手本輪無法再進(jìn)行搶答。通過本設(shè)計(jì)任務(wù)的學(xué)習(xí),掌握數(shù)顯搶答器的軟、硬件設(shè)計(jì)及設(shè)計(jì)制作數(shù)顯搶答器的方法和技能。單元3數(shù)顯搶答器設(shè)計(jì)及制作模塊三三、相關(guān)知識(shí)1.鍵盤接口單片機(jī)應(yīng)用系統(tǒng)通常都具有人機(jī)對(duì)話功能,用戶通過按鍵向單片機(jī)系統(tǒng)發(fā)出控制指令,單片機(jī)接收到鍵盤指令后完成相應(yīng)的控制功能。在單片機(jī)應(yīng)用系統(tǒng)中,常用的是獨(dú)立式鍵盤和矩陣式鍵盤,此類鍵盤只簡(jiǎn)單提供通、斷兩種狀態(tài),其他工作如鍵盤掃描、按鍵去抖動(dòng)及按鍵識(shí)別等都是依靠軟件來完成。單元3數(shù)顯搶答器設(shè)計(jì)及制作模塊三鍵盤控制程序需完成的任務(wù)有:(1)檢測(cè)是否有鍵按下當(dāng)無鍵按下時(shí),則等待按鍵按下或繼續(xù)執(zhí)行原來程序;當(dāng)有鍵按下時(shí)則進(jìn)行按鍵去抖動(dòng)處理。(2)按鍵去抖動(dòng)處理按鍵去抖動(dòng)有硬件或軟件去抖動(dòng)兩種方法。(3)多個(gè)按鍵同時(shí)按下處理當(dāng)有多個(gè)按鍵同時(shí)按下時(shí),則按鍵盤掃描順序只執(zhí)行一個(gè)按鍵功能。(4)按鍵一次僅執(zhí)行一次操作不管一次按鍵持續(xù)多長時(shí)間,僅執(zhí)行一次按鍵功能程序。單元3數(shù)顯搶答器設(shè)計(jì)及制作模塊三2.獨(dú)立式鍵盤在本任務(wù)中用到的是獨(dú)立式鍵盤,有關(guān)矩陣式鍵盤將在項(xiàng)目五中詳細(xì)講解。獨(dú)立式鍵盤是指直接用I/O口線構(gòu)成的單個(gè)按鍵電路,每個(gè)按鍵單獨(dú)占有一根I/O口線,各I/O口線的工作狀態(tài)不會(huì)互相影響。獨(dú)立式鍵盤接口電路如圖3-13所示。獨(dú)立式鍵盤接口電路的硬件電路和軟件編程都比較簡(jiǎn)單,但每個(gè)按鍵必須占一根I/O口線,在按鍵個(gè)數(shù)較多時(shí),I/O口線資源浪費(fèi)較大,故只在按鍵數(shù)量不多時(shí)采用這種鍵盤電路。圖3-13獨(dú)立式鍵盤接口電路單元3數(shù)顯搶答器設(shè)計(jì)及制作模塊三四、任務(wù)準(zhǔn)備1.電工常用工具每人一套。2.電工操作臺(tái)兩人一臺(tái)。3.裝配有MedWinV3.0軟件或偉福6000軟件電腦及下載設(shè)備兩人一套。4.材料元器件明細(xì)如表3-12所示。單元3數(shù)顯搶答器設(shè)計(jì)及制作模塊三序號(hào)元件名稱元件型號(hào)元件數(shù)量備注1單片機(jī)芯片AT89S511片DIP封裝2數(shù)碼管LG5011BSR1只普通型3晶振12MHz1只普通型4電容30pF2只瓷片電容10uF1只電解電容5電阻470Ω8只碳膜電阻10kΩ9只碳膜電阻6萬能電路板4×15cm21片萬能電路板7按鍵9只無自鎖840腳IC座1片安裝AT89S51芯片9細(xì)導(dǎo)線、焊錫若干表3-12數(shù)顯搶答器器元器件明細(xì)表單元3數(shù)顯搶答器設(shè)計(jì)及制作模塊三五、任務(wù)實(shí)施1.電路分析和設(shè)計(jì)(1)根據(jù)任務(wù)P0口接8個(gè)搶答開關(guān),供8位參賽選手進(jìn)行搶答。P0口接8個(gè)獨(dú)立按鍵,按鍵輸入低電平有效,所以按鍵一端接地,另一端接P0口的一條口線。由于P0口內(nèi)部無上拉電阻,為保證按鍵斷開時(shí)I/O口線有確定的高電平,所以在P0口外部要接上拉電阻,電阻值為10KΩ。單元3數(shù)顯搶答器設(shè)計(jì)及制作模塊三(2)P1口接一個(gè)數(shù)碼管顯示器,用于顯示搶答成功者的號(hào)碼。P1口分別通過470Ω的電阻接到數(shù)碼管的七段,數(shù)碼管采用共陽極數(shù)碼管,com端接+5V電源。8位參賽選手在主持人按下?lián)尨痖_始按鈕(復(fù)位按鈕)S,發(fā)出開始搶答命令后,迅速按下各自搶答按鈕(S1~S8),數(shù)碼管立即顯示最先按下?lián)尨鸢粹o的參賽選手號(hào)碼,表明該選手搶答成功,獲得答題權(quán)。同時(shí)其他按鈕立即被封鎖,后按下?lián)尨鸢粹o選手無法搶答。單元3數(shù)顯搶答器設(shè)計(jì)及制作模塊三在主持人發(fā)布完下一道題,再次發(fā)出搶答命令前,要先按下?lián)尨痖_始按鈕S,以清除上次搶答號(hào)碼,同時(shí)開放各按鈕,以備參賽選手進(jìn)行下一道題的搶答。設(shè)計(jì)完成的電路原理圖如圖3-14所示。圖3-14設(shè)計(jì)完成的電路原理圖單元3數(shù)顯搶答器設(shè)計(jì)及制作模塊三2.程序設(shè)計(jì)P0口外接8個(gè)搶答按鍵,若某按鍵按下,則該按鍵對(duì)應(yīng)的P0口相應(yīng)位為0,否則為1。通過讀入8個(gè)搶答按鍵的狀態(tài),判斷是否有人按下按鍵;這樣就要首先讀取按鍵狀態(tài)。(1)讀取按鍵狀態(tài)首先讀取P0口的值,即讀取8個(gè)輸入按鍵狀態(tài)。應(yīng)用MOVA,P0指令將口外接8個(gè)按鍵的狀態(tài)讀入到A中。單元3數(shù)顯搶答器設(shè)計(jì)及制作模塊三(2)判斷是否有鍵按下某個(gè)按鍵被按下時(shí),按鍵對(duì)應(yīng)的口相應(yīng)位為0,否則為1,運(yùn)用比較轉(zhuǎn)移指令CJNEA,#0FFH,PL0將存于A中的按鍵狀態(tài)值與數(shù)值FFH比較。若不相等則說明有人按鍵,程序轉(zhuǎn)移至標(biāo)號(hào)為PL0處執(zhí)行。若按鍵值等于FFH,則說明無人按鍵,程序順序執(zhí)行下一條指令SJMPSTART,跳轉(zhuǎn)至START處,重新讀取,并判斷按鍵狀態(tài)。單元3數(shù)顯搶答器設(shè)計(jì)及制作模塊三(3)按鍵去抖動(dòng)當(dāng)判斷有鍵按下時(shí),程序跳轉(zhuǎn)至PL0處執(zhí)行子程序調(diào)用指令LCALLDELAY,調(diào)用12ms延時(shí)子程序以消除按鍵抖動(dòng)。(4)判斷是否真正有人按鍵判斷真正有按鍵被按下后,接著進(jìn)行按鍵掃描,判讀是誰最先按下按鍵的。運(yùn)用MOVA,P0再次輸入P0的值,執(zhí)行CJNEA,#0FFH,PL1指令,再次判斷是否有人按下按鍵;若真正有人按下按鍵,則程序轉(zhuǎn)移至PL1處執(zhí)行,繼續(xù)判斷哪個(gè)鍵被按下;若判斷無鍵按下,說明是由于干擾引起的誤讀操作,程序順序執(zhí)行下一條指令SJMPSTART,轉(zhuǎn)START處重新讀取按鍵狀態(tài)。單元3數(shù)顯搶答器設(shè)計(jì)及制作模塊三(5)判斷被按鍵號(hào)當(dāng)判斷真正有鍵被按下時(shí),程序轉(zhuǎn)移至PL1處執(zhí)行,進(jìn)行按鍵掃描。執(zhí)行JNBACC.0,K1指令,判斷A的第0位是否為0。若為0(即對(duì)應(yīng)鍵按下)則程序跳轉(zhuǎn)至K1處執(zhí)行;經(jīng)判斷如是1號(hào)選手按下的,則P1口輸出1的七段碼,驅(qū)動(dòng)數(shù)碼管顯示“1”若為1(即對(duì)應(yīng)按鍵沒按下),則程序順序執(zhí)行下一條指令。若第一個(gè)鍵沒被按下,繼續(xù)執(zhí)行指令JNBACC.1,K2,判斷第二個(gè)鍵是否被按下,若第二個(gè)鍵被按下,則程序轉(zhuǎn)移K2處執(zhí)行;單元3數(shù)顯搶答器設(shè)計(jì)及制作模塊三如2號(hào)選手按下的,則P1口輸出2的七段碼,驅(qū)動(dòng)數(shù)碼管顯“2”依次類推若第二個(gè)鍵沒被按下,則程序繼續(xù)判斷第三個(gè)鍵。依次類推,直至執(zhí)行JNBACC.7,K8,判斷第八個(gè)鍵是否被按下,若按下則程序跳轉(zhuǎn)至K8處執(zhí)行;若沒有鍵按下,則說明是強(qiáng)干擾引起的誤讀鍵,程序順序執(zhí)行下一條指令LJMPSTART,跳轉(zhuǎn)至START處重新讀取按鍵狀態(tài)。按以上任務(wù)分析繪制的程序流程圖如圖3-15所示。單元3數(shù)顯搶答器設(shè)計(jì)及制作模塊三3-15圖按以上任務(wù)分析繪制的程序流程圖單元3數(shù)顯搶答器設(shè)計(jì)及制作模塊三按以上任務(wù)分析及任務(wù)實(shí)施過程編寫的源程序如下:ORG0000HSTART:MOVA,P0;讀取P0的值至A中CJNEA,#0FFH,PL0;A與立即數(shù)FFH比較(即判斷有無按鍵按下),;不相等(有鍵按下)則程序跳轉(zhuǎn)PL0處SJMPSTART;無鍵按下時(shí)轉(zhuǎn)START處,重新讀取鍵盤(等待按鍵按下)PL0:LCALLDELAY;當(dāng)有鍵按下時(shí),調(diào)用延時(shí)程序消除按鍵抖動(dòng)MOVA,P0;再次讀取鍵盤狀態(tài)單元3數(shù)顯搶答器設(shè)計(jì)及制作模塊三CJNEA,#0FFH,PL1;確認(rèn)是否真有按鍵按下,如真有鍵按下則程序轉(zhuǎn)PL1處SJMPSTART;如第二次判斷無鍵按下,則表明是干擾引起的;誤讀鍵操程序轉(zhuǎn)至START處PL1:JNBACC.0,K1;進(jìn)行鍵盤掃描,以判斷按下的是哪個(gè)鍵,如是;S1鍵按下,則程序轉(zhuǎn)K1處JNBACC.1,K2;如是S2鍵按下,則程序轉(zhuǎn)K2處JNBACC.2,K3;如是S3鍵按下,則程序轉(zhuǎn)K3處JNBACC.3,K4;如是S4鍵按下,則程序轉(zhuǎn)K4處JNBACC.4,K5;如是S5鍵按下,則程序轉(zhuǎn)K5處單元3數(shù)顯搶答器設(shè)計(jì)及制作模塊三JNBACC.5,K6;如是S6鍵按下,則程序轉(zhuǎn)K6處JNBACC.6,K7;如是S7鍵按下,則程序轉(zhuǎn)K7處JNBACC.7,K8;如是S8鍵按下,則程序轉(zhuǎn)K8處LJMPSTART;如無鍵按下,則程序轉(zhuǎn)START出,重新讀取鍵值K1:MOVP1,#0F9H;S1按下時(shí),則經(jīng)P1口輸出字符“1”的七段碼SJMP$;程序動(dòng)態(tài)暫停,以封鎖鍵盤K2MOVP1,#0A4HK2:MOVP1,#0A4H;S2按下時(shí),則經(jīng)P1口輸出字符2”的七段碼SJMP$;程序動(dòng)態(tài)暫停,以封鎖鍵盤單元3數(shù)顯搶答器設(shè)計(jì)及制作模塊三K3:MOVP1,#0B0H;S3按下時(shí),則經(jīng)P1口輸出字符“3”的七段碼SJMP$;程序動(dòng)態(tài)暫停,以封鎖鍵盤K4:MOVP1,#99H;S4按下時(shí),則經(jīng)P1口輸出字符“4”的七段碼SJMP$;程序動(dòng)態(tài)暫停,以封鎖鍵盤K5:MOVP1,#92H;S5按下時(shí),則經(jīng)P1口輸出字符“5”的七段碼SJMP$;程序動(dòng)態(tài)暫停,以封鎖鍵盤K6:MOVP1,#82H;S6按下時(shí),則經(jīng)P1口輸出字符“6”的七段碼SJMP$;程序動(dòng)態(tài)暫停,以封鎖鍵盤K7:MOVP1,#0F8H;S7按下時(shí),則經(jīng)P1口輸出字符“7”的七段碼單元3數(shù)顯搶答器設(shè)計(jì)及制作模塊三SJMP$;程序動(dòng)態(tài)暫停,以封鎖鍵盤K8:MOVP1,#80H;S8按下時(shí),則經(jīng)P1口輸出字符“8”的七段碼SJMP$;程序動(dòng)態(tài)暫停,以封鎖鍵盤DELAY:MOVR6,#15;12ms延時(shí)子程序DEL2:MOVR7,#200DEL1:DJNZR7,DEL1DJNZR6,DEL2RET單元3數(shù)顯搶答器設(shè)計(jì)及制作模塊三3.程序仿真與調(diào)試(1)運(yùn)行WAVE6000軟件,新建以SXQDQ為名稱的項(xiàng)目文件并保存,新建以SXQDQ.ASM為名稱文檔,并將將SXQDQ.ASM文檔添加到SXQDQ為名稱的項(xiàng)目文件中。匯編源程序,并生成以SXQDQ.HEX十六進(jìn)制文件。(2)利用偉福6000軟件進(jìn)行模擬仿真。設(shè)S6鍵按下,則端口P0的五口為0電位,如圖3-16所示。圖3-16數(shù)顯搶答器模擬仿真單元3數(shù)顯搶答器設(shè)計(jì)及制作P0口為11011111,程序執(zhí)行完后P3口為10000010,即對(duì)應(yīng)的82H,顯示數(shù)字6,符合控制要求;將有關(guān)數(shù)據(jù)填入表3-13。表3-13數(shù)顯搶答模擬仿真數(shù)據(jù)變化表模塊三數(shù)值執(zhí)行程序P0口S鍵值P1口前1后7單元3數(shù)顯搶答器設(shè)計(jì)及制作模塊三(3)如果刪除用于按鍵去抖動(dòng)的12ms延時(shí)子程序調(diào)用指令,即刪除LCALLDELAY指令,仿真運(yùn)行,觀察運(yùn)行情況。(4)將延時(shí)程序的延時(shí)時(shí)間修改為1ms,仿真運(yùn)行,觀察運(yùn)行情況。(5)刪除每個(gè)按鍵功能程序中的動(dòng)態(tài)停機(jī)指令SJMP$,仿真運(yùn)行觀察運(yùn)行情況。(6)數(shù)顯搶答器制作:1)存盤后SXQDQ.HEX十六進(jìn)制文件下載到AT89S51單片機(jī)中。2)按硬件圖在萬能線路板上按工藝要求布線,因按鍵較多首先要對(duì)按鍵布線,焊接安裝接線時(shí)要用排線。3)調(diào)試運(yùn)行;如出現(xiàn)亂碼可先復(fù)位,然后觀察運(yùn)行情況。單元3數(shù)顯搶答器設(shè)計(jì)及制作六、檢查評(píng)議數(shù)顯搶答器安裝調(diào)試考核表如表3-14所示。表3-14數(shù)顯搶答器安裝調(diào)試考核表。模塊三評(píng)價(jià)項(xiàng)目評(píng)價(jià)內(nèi)容配分/分評(píng)價(jià)標(biāo)準(zhǔn)得分硬件電路電路基礎(chǔ)知識(shí)20認(rèn)識(shí)電路中各元器件功能及型號(hào)10分掌握電路工作原理10分焊接工藝元器件整形、插裝5按照原理圖及元器件焊接尺寸正確整形、安裝5分焊接5符合焊接工藝標(biāo)準(zhǔn)5分程序編制、調(diào)試運(yùn)行指令學(xué)習(xí)10正確理解程序中所有指令的意義1分程序分析、設(shè)計(jì)20能正確分析程序的功能10分能根據(jù)要求設(shè)計(jì)功能相似的程序10分程序調(diào)試與運(yùn)行20程序輸入正確5分程序編譯仿真正確5分能修改程序并分析10分安全文明生產(chǎn)使用設(shè)備和工具10正確使用設(shè)備及工具團(tuán)結(jié)協(xié)作集體意識(shí)10各成員分工協(xié)作,積極參與單元3數(shù)顯搶答器設(shè)計(jì)及制作模塊三七、考證要點(diǎn)技能訓(xùn)練1.用Protel軟件繪制出本設(shè)計(jì)任務(wù)的電路原理圖,并設(shè)計(jì)印制電路板圖及制作印制電路板。2.連接仿真器,將本設(shè)計(jì)任務(wù)的程序輸入計(jì)算機(jī),并進(jìn)行仿真調(diào)試及運(yùn)行。3.連接編程器,將仿真通過的程序代碼下載到單片機(jī)中,脫機(jī)運(yùn)行并觀察電路運(yùn)行情況。單元4籃球比賽計(jì)分器設(shè)計(jì)及制作模塊三知識(shí)目標(biāo):1.熟練掌握鍵盤接口和獨(dú)立式鍵盤原理。技能目標(biāo):1.掌握籃球比賽計(jì)分器硬件電路設(shè)計(jì)方法。2.掌握籃球比賽計(jì)分器軟件設(shè)計(jì)方法。3.掌握籃球比賽計(jì)分器硬件電路安裝和調(diào)試方法。單元4籃球比賽計(jì)分器設(shè)計(jì)及制作一、任務(wù)描述(見表3-15所示)表3-15任務(wù)描述模塊三工作任務(wù)要求學(xué)習(xí)鍵盤接口和獨(dú)立式鍵盤原理熟練掌握鍵盤接口和獨(dú)立式鍵盤原理籃球比賽計(jì)分器硬件電路設(shè)計(jì)掌握籃球比賽計(jì)分器硬件電路設(shè)計(jì)方法籃球比賽計(jì)分器軟件電路設(shè)計(jì)掌握籃球比賽計(jì)分器軟件設(shè)計(jì)方法籃球比賽計(jì)分器硬件電路安裝和調(diào)試掌握籃球比賽計(jì)分器硬件電路安裝和調(diào)試方法任務(wù)兩位數(shù)籃球比賽計(jì)分器設(shè)計(jì)及制作單元4籃球比賽計(jì)分器設(shè)計(jì)及制作模塊三二、任務(wù)分析本任務(wù)學(xué)習(xí)用于籃球比賽中的計(jì)分器的設(shè)計(jì),在此計(jì)分器的基礎(chǔ)上稍加修改可設(shè)計(jì)成其他比賽用的計(jì)分器。本設(shè)計(jì)任務(wù)程序主要部分是按鍵掃描、按鍵處理、按鍵功能編程及BCD碼轉(zhuǎn)換為七段碼編程。任務(wù)內(nèi)容:在籃球比賽過程中,根據(jù)比賽得分情況(得1分、2分、3分),分別通過3個(gè)計(jì)分按鍵進(jìn)行加分(加1分、2分、3分),當(dāng)前總分值通過兩個(gè)數(shù)碼管顯示出來。如計(jì)分錯(cuò)誤(多加分?jǐn)?shù))可通過第4個(gè)按鍵進(jìn)行減分,每按一次按鍵減1分。單元4籃球比賽計(jì)分器設(shè)計(jì)及制作模塊三三、任務(wù)準(zhǔn)備1.電工常用工具每人一套。2.電工操作臺(tái)兩人一臺(tái)。3.安裝有偉福6000軟件電腦及下載設(shè)備兩人一套。5.材料元器件明細(xì)如表3-16所示。單元4籃球比賽計(jì)分器設(shè)計(jì)及制作模塊三序號(hào)元件名稱元件型號(hào)元件數(shù)量備注1單片機(jī)芯片AT89S511片DIP封裝2數(shù)碼管LG5011BSR2只普通型3晶振12MHz1只普通型4電容30pF2只瓷片電容10uF1只電解電容5電阻470Ω15只碳膜電阻10kΩ5只碳膜電阻6萬能線路板4×15cm21片萬能線路板7按鍵5只無自鎖840腳IC座1片安裝AT89S51芯片9細(xì)導(dǎo)線、焊錫若干表3-16籃球比賽計(jì)分器元器件明細(xì)表單元4籃球比賽計(jì)分器設(shè)計(jì)及制作模塊三四、任務(wù)實(shí)施1.電路設(shè)計(jì)PO口低4位接4個(gè)獨(dú)立式按鍵,分別是總分加1分、加2分、加3分和減1分按鍵。Pl口和P3口分別接一個(gè)數(shù)碼管,其中Pl口所接數(shù)碼管顯示總分的十位數(shù),P3口所接數(shù)碼管顯示總分的個(gè)位數(shù)。當(dāng)比賽隊(duì)得1分時(shí),按下Sl鍵加1分,得2分時(shí)按下S2鍵加2分,得3分時(shí)按下S3鍵加3分;如分?jǐn)?shù)計(jì)錯(cuò)需減分時(shí),每按一次S4鍵減1分。設(shè)計(jì)完成的電路原理圖如圖3-17所示。單元4籃球比賽計(jì)分器設(shè)計(jì)及制作模塊三圖3-17籃球比賽計(jì)分器電路圖單元4籃球比賽計(jì)分器設(shè)計(jì)及制作模塊三2.程序設(shè)計(jì)程序設(shè)計(jì)時(shí),首先讀取按鍵狀態(tài),判斷是否有鍵被按下,當(dāng)確認(rèn)有鍵按下后,再進(jìn)行鍵盤掃描,判斷按下的是哪個(gè)鍵。執(zhí)行相應(yīng)的按鍵功能。然后等待按鍵釋放,以確保每按一次按鍵只進(jìn)行一次鍵處理,將總分轉(zhuǎn)換為十進(jìn)制數(shù),再通過查表方法轉(zhuǎn)換為七段碼,經(jīng)Pl口和P3口輸出,驅(qū)動(dòng)數(shù)碼管顯示。(1)程序流程圖1)初始化將用于存放總分的寄存器RO清O,將七段碼表首地址送數(shù)據(jù)指針DPTR。單元4籃球比賽計(jì)分器設(shè)計(jì)及制作模塊三2)判斷是否有鍵按下將PO口的值讀入,即讀取按鍵狀態(tài)。因本電路中只用到了接于P0口低4位的4個(gè)按鍵,所以要將讀入的PO口值的高4位屏蔽,只取出其低4位。然后判斷是否有鍵按下,如沒有,則繼續(xù)讀取PO口值,等待按鍵;如有鍵按下,則調(diào)用延時(shí)程序以消除按鍵抖動(dòng)。3)判斷是否真正有鍵按下消除按鍵抖動(dòng)后,再次讀取按鍵狀態(tài),判斷是否真正有按鍵被按下,如第二次判斷為沒有按鍵被按下,則該次按鍵為干擾引起的誤讀操作,重新讀取按鍵狀態(tài);如第二次判斷為有鍵被按下,則可確認(rèn)是一次真正的按鍵操作。單元4籃球比賽計(jì)分器設(shè)計(jì)及制作模塊三4)判斷被按鍵號(hào)判斷確有鍵被按下時(shí),進(jìn)行鍵盤掃描,判斷是哪個(gè)鍵被按下。5)按鍵功能執(zhí)行按鍵情況執(zhí)行相應(yīng)的按鍵功能,即前面分析的加、減分方式。6)等待按鍵釋放功能執(zhí)行完畢,等待按鍵釋放,以確保按鍵一次,執(zhí)行一次按鍵功能操作。7)數(shù)制轉(zhuǎn)換將總分二進(jìn)制碼轉(zhuǎn)換為BCD碼(十進(jìn)制數(shù)),并通過LED數(shù)碼管顯示出來,因此,還要進(jìn)一步將BCD碼轉(zhuǎn)換為七段碼。單元4籃球比賽計(jì)分器設(shè)計(jì)及制作模塊三8)輸出顯示將轉(zhuǎn)換為七段碼形式的總分值經(jīng)Pl口和P3口輸出顯示,其中用Pl口輸出顯示總分的十位數(shù),用P3口輸出顯示總分的個(gè)位數(shù)。根據(jù)以上分析繪制出的程序設(shè)計(jì)流程圖如圖3-18所示。圖3-18籃球比賽計(jì)分器程序流程圖單元4籃球比賽計(jì)分器設(shè)計(jì)及制作模塊三(2)程序設(shè)計(jì)1)初始化用MOVRO,#0指令將總分寄存器RO清“0”,用MOVDPTR,#TAB指令將七段碼表首地址送DPTR。2)判斷是否有鍵按下用MOVA,PO指令將接于PO口的4個(gè)按鍵狀態(tài)讀入,因只用到PO口的低4位,所以應(yīng)用ANLA,#OFH指令屏蔽PO口高4位,取出其低4位。根據(jù)原理圖中4個(gè)按鍵的接線方式可知當(dāng)某按鍵按下時(shí)其對(duì)應(yīng)位為0,沒有按下時(shí)對(duì)應(yīng)位為1,所以用CJNEA.#OFH,KEY1指令判斷讀人的按鍵值是否等于OFH(即4個(gè)按鍵均沒按下,對(duì)應(yīng)位均為1),如相等,說明沒有按鍵按下,程序順序執(zhí)行下一條指令SJMPSTART,轉(zhuǎn)到START處繼續(xù)讀取按鍵狀態(tài);如不相等,則程序轉(zhuǎn)到KEY1處執(zhí)行,調(diào)用12ms延時(shí)子程序,以消除按鍵抖動(dòng)。單元4籃球比賽計(jì)分器設(shè)計(jì)及制作模塊三(3)判斷是否真正有鍵按下再次用MOVA,PO指令讀取按鍵狀態(tài),運(yùn)用ANLA,#OFH指令取出PO口低4位,運(yùn)用CJNEA,#OFH,KEY2指令再次判斷是否有鍵按下,如A等于OFH,則表明該次是由于干擾引起的誤讀鍵操作,程序順序執(zhí)行下一條指令.SJMPSTART,轉(zhuǎn)到START處繼續(xù)讀取按鍵狀態(tài);如不相等,則表明是一次真正的按鍵操作,程序轉(zhuǎn)到KEY2處執(zhí)行。單元4籃球比賽計(jì)分器設(shè)計(jì)及制作模塊三(4)判斷被按下的是哪個(gè)鍵當(dāng)真有鍵被按下時(shí),程序進(jìn)行按鍵掃描,運(yùn)用“JNBACC.O,K1”“JNBACC.1,K2”“JNBACC.2,K3”“JNBACC.3,K4”指令判斷是哪個(gè)鍵被按下,并使程序轉(zhuǎn)到相應(yīng)的按鍵功能程序段處執(zhí)行。(5)按鍵功能執(zhí)行當(dāng)S1鍵按下時(shí),得1分,運(yùn)用MOVR1,#1給存放得分的寄存器R1送入1,然后執(zhí)行LJMPADDOPR指令,程序轉(zhuǎn)到ADDOPR處;當(dāng)S2鍵按下時(shí),得2分,運(yùn)用MOVR1,#2給R1送入2,然后執(zhí)行LJMPADDOPR指令,程序轉(zhuǎn)到ADDOPR處;當(dāng)S3鍵按下時(shí),得3分,運(yùn)用MOVR1,#3給R1送入3,然后執(zhí)行LJMPADDOPR指令,程序轉(zhuǎn)到ADDOPR處。單元4籃球比賽計(jì)分器設(shè)計(jì)及制作模塊三當(dāng)程序轉(zhuǎn)到ADDOPR處時(shí),運(yùn)用MOVA,RO指令,ADDA,R1指令將所得的分?jǐn)?shù)加到總分上,然后運(yùn)用MOVRO,A將總分送人存放總分的寄存器R0中。當(dāng)按下S4鍵時(shí),用DECRO指令將總分減1分,然后執(zhí)行LJMPWAIT程序,轉(zhuǎn)到WAIT處。(6)等待按鍵釋放運(yùn)用WAIT:MOVA,PO指令,ANLA,#OFH指令,CJNEA,#OFH,WAIT指令等待按鍵釋放,以確保每按一次按鍵,進(jìn)行一次按鍵功能操作。單元4籃球比賽計(jì)分器設(shè)計(jì)及制作模塊三(7)二進(jìn)制數(shù)轉(zhuǎn)換為BCD碼存放總分的寄存器RO中的數(shù)為二進(jìn)制數(shù),應(yīng)將其轉(zhuǎn)換為人們習(xí)慣的十進(jìn)制數(shù)(BCD碼)。用MOVA,RO指令將RO的值(總分)送到A中,再用MOVB,#10指令給寄存器B送入10,最后用DIVAB指令將A(總分)的值除以10,則結(jié)果的十位存放在A中,結(jié)果的個(gè)位存放在B中。(8)BCD碼轉(zhuǎn)換為七段碼并輸出顯示因?yàn)榭偡忠ㄟ^數(shù)碼管顯示出來,必須將BCD碼再轉(zhuǎn)換為七段碼,運(yùn)用查表法進(jìn)行轉(zhuǎn)換。單元4籃球比賽計(jì)分器設(shè)計(jì)及制作模塊三執(zhí)行MOVCA,@A+DPTR指令,查得總分十位對(duì)應(yīng)的七段碼,執(zhí)行MOVPl,A將總分十位的七段碼輸出至Pl口,驅(qū)動(dòng)SMG1數(shù)碼管顯示;執(zhí)行MOVA,B指令將總分個(gè)位送到A中,再執(zhí)行MOVCA,@A+DPTR指令,查得總分個(gè)位對(duì)應(yīng)的七段碼,最后執(zhí)行MOVP3,A指令,將總分個(gè)位的七段碼經(jīng)P3口輸出,驅(qū)動(dòng)SMG2數(shù)碼管顯示。根據(jù)以上任務(wù)分析和任務(wù)實(shí)施過程編寫的源程序如下:?jiǎn)卧?籃球比賽計(jì)分器設(shè)計(jì)及制作模塊三ORGOOOOHMOVRO,#0;將RO(存放總分的寄存器)清“0”MOVDPTR,#TAB;將七段碼數(shù)據(jù)表首地址送DPTRSTART:MOVA,PO;讀取PO口(鍵盤狀態(tài))值A(chǔ)NLA,#OFH;取出PO口低4位(因只有低4位接按鍵)CJNEA,#OFH,KEY1;A與OFH比較(即判斷是否有鍵按下),;不相等(有鍵按下)則轉(zhuǎn)移至KEY1處單元4籃球比賽計(jì)分器設(shè)計(jì)及制作模塊三SJMPSTART;無按鍵按下,則轉(zhuǎn)移至START處,重新讀?。绘I盤狀態(tài)KEYl:LCALLDELAY;有鍵按下則調(diào)用延時(shí)程序以消除按鍵抖動(dòng)MOVA,PO;再次讀取PO口(鍵盤狀態(tài))值A(chǔ)NLA,#OFH;取出PO口低4位CJNEA,#OFH,KEY2;再次判斷是否有鍵按下,有鍵按下則程序轉(zhuǎn)移至KEY2處單元4籃球比賽計(jì)分器設(shè)計(jì)及制作模塊三SJMPSTART;第二次判斷為無鍵按下,則表明是由于干擾;引起的誤讀鍵KEY2:JNBACC.O,Kl;進(jìn)行鍵盤掃描,以判斷按下的是哪個(gè)鍵,如按下的是Sl鍵,則程序轉(zhuǎn)Kl處JNBACC.1,K2;如按下的是S2鍵,則程序轉(zhuǎn)K2處JNBACC.2,K3;如按下的是S3鍵,則程序轉(zhuǎn)K3處JNBACC.3,K4;如按下的是S4鍵,則程序轉(zhuǎn)K4處單元4籃球比賽計(jì)分器設(shè)計(jì)及制作模塊三LJMPSTART;如無按鍵按下,則程序轉(zhuǎn)START處,重新讀;取鍵盤K1:MOVR1,#1;S1鍵按下時(shí),給R1送人1LJMPADDOPR;程序跳轉(zhuǎn)至ADDOPR處K2:MOVR1,#2;S2鍵按

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論