模塊三 單片機應用電路實例設計及制作_第1頁
模塊三 單片機應用電路實例設計及制作_第2頁
模塊三 單片機應用電路實例設計及制作_第3頁
模塊三 單片機應用電路實例設計及制作_第4頁
模塊三 單片機應用電路實例設計及制作_第5頁
已閱讀5頁,還剩276頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

模塊三單片機應用電路

實例設計及制作

主編:高玉泉模塊三單片機應用電路

實例設計及制作

單元1彩燈控制器的設計及制作 單元2加法運算器設計及制作 單元3數顯搶答器設計及制作 單元4籃球比賽計分器設計及制作

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

模塊三工作任務要求彩燈控制器硬件電路設計掌握彩燈控制器硬件電路設計方法彩燈控制器軟件電路設計掌握彩燈控制器軟件設計方法彩燈控制器硬件電路安裝和調試掌握彩燈控制器硬件電路安裝和調試方法理解CJNE指令熟練應用CJNE指令編制程序單元1任務多種彩燈的設計及制作

二、任務分析彩燈的應用十分廣泛,由數字電路設計的彩燈控制器亮燈方式單調,花樣單一,維修及改變燈光控制方式十分復雜;而由單片機設計的彩燈控制器,成本低,控制方式靈活,維修及改變控制方式方便,只需改變單片機的程序即可實現多種亮燈控制方式。任務內容:單片機控制的彩燈控制器設計:接于P2口的8路彩燈按如圖3-1所示的方式亮燈,設計控制電路及程序。通過對比較轉移指令學習、單片機控制的彩燈控制器硬件、軟件設計及安裝,掌握彩燈控制器的軟件和硬件設計方法。模塊三單元1任務多種彩燈的設計及制作

模塊三圖3-1彩燈亮燈方式單元1任務多種彩燈的設計及制作

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

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

3)循環結束判斷

每次取數據后應判斷是否為一次循環結束,通過在數據表中放入一個結束碼(結束碼為在亮燈數據中不會出現的數據,本程序中取結束碼為3DH)來實現一次循環結束的判斷,結束碼放在數據表的最后。若取得的數據為結束碼,則表示一次循環結束,將索引值寄存器清“0”,轉入下一次循環操作。若取得的數據不為結束碼,則將數據送至P2口輸出,驅動LED點亮;然后將數據索引值加1,準備取下一個數據。單元1任務多種彩燈的設計及制作模塊三4)亮燈延時

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

(3)循環結束判斷對查表取出的數據進行判斷是否為結束碼,應用控制轉移類指令中的比較轉移指令CJNEA,3DH,DISP,判斷A中的數據是否等于結束碼3DH,若相等則順序執行下一條指令,即本次循環結束,用MOVRl,#OOH將索引值寄存器清“0”,程序轉移至標號為START的指令處執行,重新取數據表中的第一個數據,進行下一次循環亮燈操作;若A中的數據不等于結束碼則程序轉移至標號為DISP的指令處執行,即用MOVP2,A指令將A中的數據送P2口輸出,然后用加1指令INCRl將索引值加1,為取下一個數據作準備。單元1任務多種彩燈的設計及制作模塊三

(4)亮燈延時亮燈數據經P2口輸出后,應使燈亮延時一段時間,然后再取下一個數據輸出,否則將無法看清當前數據的亮燈情況。應用子程序調用指令LCALLDELLAY調用延時子程序實現延時,其中DELLAY為延時子程序第一條指令的標號(相當于其他計算機語言中的子程序名)。單元1任務多種彩燈的設計及制作模塊三(5)數據表

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

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

工作任務要求加法運算器硬件電路設計掌握加法運算器硬件電路設計方法加法運算器軟件電路設計掌握加法運算器軟件設計方法加法運算器硬件電路安裝和調試掌握加法運算器硬件電路安裝和調試方法理解DAA指令的含義和LED顯示器原理熟練掌握DAA指令的含義和LED顯示器原理單元2加法運算器設計及制作模塊三

二、任務分析通過對DAA指令和LED顯示器原理的學習,掌握BCD碼加法程序設計和電路安裝技能及數碼管顯示的有關知識,并能模擬仿真加法運算器。任務內容:接于PO口的8個撥動開關向單片機輸入兩個一位BCD碼,經單片機運算和處理后由Pl口和P3口輸出,驅動兩個數碼管顯示相加結果。本設計任務是兩個一位BCD碼數相加,由數碼管顯示出運算結果。單元2加法運算器設計及制作模塊三三、相關知識1.十進制調整指令DAA這條指令是在進行BCD碼加法運算時,對所得結果進行十進制調整,使累加器A中的內容調整為壓縮BCD碼數。【注意】:該指令只能跟在加法指令之后使用,不能對減法運算的結果進行調整。單元2加法運算器設計及制作模塊三執行該指令時,若A(BCD碼加法運算結果)中的低4位大于9或AC=1,則低4位進行加6調整操作;同樣,A中的高4位大于9或CY=1則高4位進行加6調整操作。以上調整操作由DAA指令自動完成,用戶無需關心。表3-6中以兩個十進制數為例,給出了十進制數、BCD碼及BCD碼的十六進制書寫格式之間的關系。從表3-6中可以看出,十進制數對應的BCD碼的十六進制書寫格式為在該十進制數的后面加一個H。單元2加法運算器設計及制作模塊三表3-6十進制數、BCD碼及BCD碼的十六進制書寫格式之間的關系單元2加法運算器設計及制作模塊三例:已知有兩個BCD碼:A=28H、立即數35H,執行加法指令ADDA,#35H及十進制調整指令DAA,說明指令的執行過程。在單片機內部將兩個BCD碼按二進制數加ADD(因在單片機內部只能進行二進制數加法運算,不能進行十進制數運算),所以執行ADDA,#35H指令的情況如下顯然,上面結果不是BCD碼,結果是錯誤的,原因是單片機將十進制數按二進制規則運算造成的。單元2加法運算器設計及制作模塊三所以要將上面結果進行十進制調整,運行DAA指令的情況如下:進行十進制調整后結果為63,是正確的。所以,凡是進行BCD碼加法運算時,在加法運算指令后一定要跟一條十進制調整指令DAA,將加法運算結果調整為BCD碼。在以后任務中不再講解指令的有關知識,如在程序設計中用到前面任務中未講解過的指令,請讀者參閱附錄中單片機指令系統內容。單元2加法運算器設計及制作模塊三

2.LED顯示器接口在單片機應用系統中,LED顯示器是最常用的顯示器,價格低廉,結構簡單。下面介紹LED顯示器的結構及靜態顯示方式。

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

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

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

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

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

。A.除法指令B.加1指令C.加法指令D.十進制調整指令(2)MCS—51指令系統中,指令DAA應跟在

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

運算。A.二進制B.加法C.BCD碼加法D.十六進制單元2加法運算器設計及制作模塊三(4)MCS—51指令系統中,執行下列指令后,其結果為

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

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

溫馨提示

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

評論

0/150

提交評論