內(nèi)蒙古工業(yè)大學(xué)單片機實訓(xùn)蜂鳴器、按鍵、數(shù)碼管顯Word版_第1頁
內(nèi)蒙古工業(yè)大學(xué)單片機實訓(xùn)蜂鳴器、按鍵、數(shù)碼管顯Word版_第2頁
內(nèi)蒙古工業(yè)大學(xué)單片機實訓(xùn)蜂鳴器、按鍵、數(shù)碼管顯Word版_第3頁
內(nèi)蒙古工業(yè)大學(xué)單片機實訓(xùn)蜂鳴器、按鍵、數(shù)碼管顯Word版_第4頁
內(nèi)蒙古工業(yè)大學(xué)單片機實訓(xùn)蜂鳴器、按鍵、數(shù)碼管顯Word版_第5頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、學(xué)校代碼: 10128單片機工程實踐好好學(xué)習(xí)不準抄襲!題 目: 儀表參數(shù)設(shè)定(任務(wù)二) 組長:指導(dǎo)教師:劉偉、裴巖、斯日古楞、楊傳穎、韓海波、高鵬 、郭慧(研)、胡元元(研)設(shè)計時間:2013年6月17日2012年6月29日0 / 37設(shè)計目的:通過一個以8 位單片機為核心的模擬量數(shù)字表的硬件調(diào)試過程,掌握具有七段LED 顯示、蜂鳴器自檢、鍵盤自檢的單片機應(yīng)用系統(tǒng)的設(shè)計思想和方法。同時用單片機實現(xiàn)一個模擬的乒乓球游戲機。學(xué)習(xí)應(yīng)用系統(tǒng)軟件的模塊化設(shè)計方法,通過源程序的編輯、匯編或編譯、鏈接、仿真調(diào)試,完成給定的任務(wù)。通過上述過程提高學(xué)生工程實踐能力和素質(zhì)。一、 設(shè)計任務(wù):要求明確設(shè)計任務(wù)內(nèi)容及任

2、務(wù)分工等;(內(nèi)容小四號宋體字)1、 基本任務(wù): 完成蜂鳴器、鍵盤、七段LED 顯示器、AD7109的自檢程序設(shè)計。 (1)蜂鳴器自檢 要求:利用程序?qū)崿F(xiàn)兩種以上聲音。 (2)鍵盤自檢 要求:確定鍵盤正確。 (3)七段LED 顯示器自檢 要求:確定LED 顯示器每一段均正確。 。 主任務(wù):題目10:乒乓球游戲機難度系數(shù):9功能: 1、用5個LED顯示器作為乒乓球臺,用LED顯示器的中間橫線“一”代表乒乓球 2、用兩個按鍵代表球拍。 3、比賽規(guī)則:當(dāng)“一”到了最左側(cè)LED時,左側(cè)要及時擊球,右側(cè)同理。 4、輸贏判斷:當(dāng)乒乓球到達某一側(cè)時,若提前或滯后按鍵(擊球),則為輸,用聲音和顯示來表示。 5、

3、球速要隨著比賽回合的增加而加快,擊球判斷時間逐漸減小。 6*、可以顯示比分。硬件環(huán)境:鍵盤、LED顯示器、喇叭等2.任務(wù)分工:組長:張勤偉負責(zé)主程序的編寫以及定時計數(shù)器有關(guān)控制反應(yīng)時間以及球速的編寫及調(diào)用 組員:武松負責(zé)編寫鍵盤采集程序編寫 組員:張子陽負責(zé)編寫各程序所用延時子程序和蜂鳴器的程序的編寫二、 框圖:要求包括自檢任務(wù)和主任務(wù)的框圖1、 硬件編程框圖及相關(guān)說明喇叭自檢硬件框圖:P2.3 P2.3置0后,喇叭會發(fā)聲,P2.3置1后,喇叭不響。鍵盤自檢硬件框圖:P1LEDP2.5P2.6P2.7K1,K2,K3,K4的開關(guān)值對應(yīng)P1口的低4位,而自檢開關(guān)由高4位控制。然而,此程序要求保護

4、自檢開關(guān),檢驗K1,K2,K3,K4的正確性。調(diào)用SEL8可以打開74HC245L的三態(tài)門。然后將最終表現(xiàn)結(jié)果巧妙的利用LED或喇叭表現(xiàn)出來。七段LED顯示器自檢硬件框圖:字型口P0.7P0.0P0字位口P2.7P2.6P2.5RR.abhCOMa f b g e c d h反相驅(qū)動器2803P0.7P0.0P0+5VQ1DT1SEL1A Y0B Y1C Y2 138 Y7 P2.7P2.6P2.5P0口負責(zé)字型口,P2口負責(zé)字位口,實驗中的數(shù)碼管都是共陽極的。通過中斷控制模數(shù)轉(zhuǎn)換,采集模擬的電壓量,轉(zhuǎn)換為用LED顯示出來的數(shù)字信號量。2、 主程序框圖、子程序框圖及相關(guān)說明 1)乒乓球主程序框

5、圖:LED從左到右依次亮比賽開始初始化程序判斷發(fā)球權(quán)LED從右到左依次亮A發(fā)球B發(fā)球B接到球? A接到球?蜂鳴器響,A加1分蜂鳴器響,B加一分A得11分?B得11分?顯示比分,A勝顯示比分,B勝比賽結(jié)束加速加速YYNNYYNN2)子程序框圖判斷發(fā)球權(quán)框圖判斷jufaq=0開始Clr faqiu從左向右發(fā)球Stb faqiu從右向左發(fā)球是否乒乓球做一程序(右移同理)延時打開三態(tài)門K1是否按下下幾位同理選用SEL1,打開SEL8K1是否按下加速,右移B加一分,蜂鳴器響B(tài)加一分開始開顯示“一”選通SEL5第一位顯示YYNN接球過程框圖:選通SEL1啟動定時計數(shù)器0(溢出次數(shù)為n)SEL1所接LED亮

6、加速K1是否按下SEL1接LED亮定時器重新裝入初值不變速重新發(fā)球向右移動NY功能:B發(fā)球確定A是否正確擊中球顯示分數(shù)框圖: 開始 取分數(shù) 將分數(shù)的十位數(shù)與個位 數(shù)放入緩存區(qū) 顯示個位數(shù)顯示十位數(shù)延時喇叭自檢的程序框圖: 注釋:每次循環(huán)給R0.R1,R2賦初值0A0H,延時1,延時2,延時3根據(jù)標(biāo)準音符頻率得到。開始不響延時1響延時1R0=0不響延時2響延時2R1=0不響延時3響延時3R2=0是是是否否否 LED自檢程序框圖開始位選第一個LED各段碼分別顯示及數(shù)字并延時0-9送字型顯示子程序送01H(小數(shù)點亮)送40H(f亮)送10H(d亮)送08H(c亮)送20H(e亮)為選第四個LED位選

7、第五個LED位選第個LED位選第三個LED送02H(a亮)送04H(b亮)各段碼分別顯示及數(shù)字并延時各段碼分別顯示及數(shù)字并延時各段碼分別顯示及數(shù)字并延時各段碼分別顯示及數(shù)字并延時送FFH(8.亮)送80H(g亮)結(jié)束此模塊返回鍵盤自檢程序框圖開始P1=0DH?P1=0FH?P1=07H?C=1?采樣顯示1,響一聲顯示2,響兩聲顯示4,響四聲顯示3,響三聲清除高四位YNYYNNNY三、 程序清單:乒乓球游戲機程序score_left equ 30h;定義左側(cè)分數(shù)緩存區(qū)uint_left equ 31h;左側(cè)得分的個位緩存區(qū)decade_left equ 32h;左側(cè)得分的十位緩存區(qū)score_r

8、ight equ 33h;定義右側(cè)分數(shù)緩存區(qū)uint_right equ 34h;定義右側(cè)的分緩存區(qū)decade_right equ 35h;定義右側(cè)分數(shù)十位緩存區(qū)speed equ 36h;定義球移動速度緩存區(qū)speed2 equ 37hscore equ 38h;為發(fā)球的次數(shù)開辟緩存區(qū)beep bit p2.3;定義蜂鳴器端口k1 bit p1.0;定義k1位k2 bit p1.1;定義k2位k3 bit p1.2;定義k3位k4 bit p1.3;定義k4位org 00hajmp mainorg 0bhajmp time;time為定時器0子程序org 30h;錯開中斷入口地址main:

9、init:MOV p1,#0ffh MOV p0,#00h SETB p2.3;關(guān)閉蜂鳴器 mov score_left,#0h;初始化分數(shù) mov uint_left,#0h;初始化左側(cè)分數(shù)個位 mov decade_left,#0h mov score_right,#0h;初始化右側(cè)分數(shù) mov uint_right,#0h;初始化右側(cè)個位分數(shù) mov decade_right,#0h;初始化右側(cè)分數(shù)十位 mov speed,#60;初始化球的移動速度 mov TMOD,#01h;設(shè)置定時計數(shù)器方式1 mov TH0,#0b1h mov TL0,#0e0h;定時20ms mov n,#50

10、 mov IE,#82h;開總中斷和定時計數(shù)器0中斷 mov R7,#0h;初始化R7start: jb p1.2,start;啟動判斷開關(guān) lcall delay2;延時去抖動 jb p1.2,start;如果k3鍵按下則繼續(xù)執(zhí)行,否則返回 jb jufaq ,clr faqiu;判斷誰的發(fā)球權(quán) setb faqiu jb faqiu, yd_left:判斷A,B誰發(fā)球 yd_rightyd_left:mov p0,#80h ;送入“一” cjne a,#11,led_left1 lcall score_display_left led_left1:acall sel5 acall dela

11、y acall sel8yd_left2:jb k1,yd_left3;如果k1不按下則 lcall delay2 jb k1,yd_left2 lcall yd_left_failyd_left3:acall sel4 acall delay acall sel8yd_left4:jb k1,yd_left5 lcall delay2 jb k1,yd_left4 lcall yd_left_fail;如果在此時按下k1鍵則跳入輸判斷子程序yd_left5:acall sel3 acall delay acall sel8yd_left6:jb k1,yd_left7 lcall delay

12、2 jb k1,yd_left6 lcall yd_left_fail;yd_left7:acall sel2 acall delay acall sel8yd_left8:jb k1,yd_left9 lcall delay2 jb k1,yd_left8 lcall led_left_failyd_left9:acall sel1 acall delay acall sel8yd_left10:jb p1.0,yd_left11;如果沒有按下鍵則重新從左發(fā)球 lcall delay2 jb p1.0,yd_left10 lcall time;如果接住球啟動定時器加速球的速度 ljmp yd

13、_right yd_left11:inc score_right lcall fail_buzzer clr TR0 ljmp led_left;*;此程序?qū)崿F(xiàn)乒乓球右移動程序;* yd_right:mov p0,#80h ;送入“一” cjne a,#11,led_right1 lcall score_display_leftyd_right1:acall sel1 acall delay acall sel8yd_right2:jb k4,yd_right3 lcall delay2 jb k4,yd_right2 lcall yd_right_failyd_right3:acall se

14、l2 acall delay acall sel8yd_right4:jb k4,yd_right5 lcall delay2 jb k4,yd_right4 lcall yd_right_failyd_right5:acall sel3 acall delay acall sel8yd_right6:jb k4,yd_right7 lcall delay2 jb k4,yd_right6 lcall yd_right_failyd_right7:acall sel4 acall delay acall sel8yd_right8:jb k4,yd_right9 lcall delay2 jb

15、 k4,yd_right8 lcall yd_right_failyd_right9:acall sel5 acall delay acall sel8 nopyd_right10: jb p1.3,yd_right;如果沒有按下則重新從有發(fā)球 lcall delay2 jb p1.3,yd_right10 nop lcall time;如果接住球則啟動定時計數(shù)器 ljmp led_left yd_right11:inc score_left lcall fail_buzzer clr TR0 ljmp yd_right ;*;功能:對輸球進行處理的子程序;返回值:右側(cè)分數(shù);*yd_left_

16、fail:lcall fail_buzzer inc score_right clr TR0 ajmp yd_leftyd_right_fail:lcall fail_buzzer inc score_left clr TR0 ajmp yd_right;*;下面為所有用到的的子程序;*sel5: setb p2.5 clr p2.6 clr p2.7 retsel4: clr p2.5 setb p2.6 setb p2.7 retsel3: clr p2.5 setb p2.6 clr p2.7 retsel2: clr p2.5 clr p2.6 setb p2.7 retsel1: c

17、lr p2.5 clr p2.6 clr p2.7 retsel8:setb p2.5;開三態(tài)門74hc245 setb p2.6 setb p2.7 ret;*;分數(shù)顯示程序;本段程序用來將采集的分數(shù)顯示到數(shù)碼管上;*;接住球的蜂鳴器程序win_buzzer:mov r4,#60 mov p0,#0ch;在蜂鳴器響的同時讓1也亮win_buzzer1:cpl beep acall delay1 djnz r4,win_buzzer1 ret;未接住蜂鳴器的程序fail_buzzer:mov r4,#60fail_buzzer1:cpl beep acall delay2 djnz r4,fa

18、il_buzzer1 ret;*;分數(shù)顯示程序;本段程序用來將采集的左側(cè)擊球分數(shù)顯示到數(shù)碼管上;*score_display_left: mov a,score_left; mov b,#10 div ab mov uint_left,b;將分數(shù)的個位送入相應(yīng)的緩沖區(qū) mov decade_left,a;將十位送入相應(yīng)的緩沖區(qū) mov DPTR,#tab mov a,uint_left;將個位數(shù)送入到a中 movc a,a+DPTR acall sel3;開個位顯示 mov p0,a;顯示個位數(shù) lcall delay1 mov p0,#00h;關(guān)顯示以去除虛亮 mov a,decade_le

19、ft movc a,a+DPTR acall sel2;開十位顯示 mov p0,a;顯示十位數(shù) lcall delay1 mov p0,#00h;關(guān)顯示以去除虛亮sore_display_right:mov a,score_right; mov b,#10 div ab mov uint_right,b;將分數(shù)的個位送入相應(yīng)的緩沖區(qū) mov decade_right,a;將十位送入相應(yīng)的緩沖區(qū) mov DPTR,#tab mov a,uint_right;將個位數(shù)送入到a中 movc a,a+DPTR acall sel5;開個位顯示 mov p0,a;顯示個位數(shù) lcall delay1

20、mov p0,#00h;關(guān)顯示以去除虛亮 mov a,decade_right movc a,a+DPTR acall sel4;開十位顯示 mov p0,a;顯示十位數(shù) lcall delay1 mov p0,#00h;關(guān)顯示以去除虛亮 ajmp score_display_left ret;*;定時計數(shù)程序 中斷子程序;為球移動速度進行定時,控制反應(yīng)時間;*time:push ACC push PSW inc r7 cjne r7,#11,exit djnz n ,time exit dec n dec speed mov r7,#00hexit: mov TH0,#0b1h;重裝初值 m

21、ov TL0,#0e0h; pop PSW pop ACC retidelay:mov r6,speed d1:mov r5,#100 d2:mov r4,#60 djnz r4,$ djnz r5,d2 djnz r6,d1 retdelay1:mov r0,#20 d3:mov r1,#20 djnz r1,$ djnz r0,d3 retdelay2:mov r2,#50 d4:mov r3,#20 djnz r3,$ djnz r2,d4 rettab: db 7eh,0ch,0b6h,9eh,0cch,0dah,0fah,0eh,0feh,0deh;數(shù)碼管顯示0,1,2,3,4,5,

22、6,7,8,9 end喇叭自檢程序清單:BEEP:MOV R0,#0DFH MOV R1,#0DFH MOV R2,#0DFHLOOP1:SETB P2.3 ACALL DELAY1 CLR P2.3 ACALL DELAY1 DJNZ R0,LOOP1 LOOP2:SETB P2.3 ACALL DELAY2 CLR P2.3 ACALL DELAY2 DJNZ R1,LOOP2 LOOP3:SETB P2.3 ACALL DELAY3 CLR P2.3 ACALL DELAY3 DJNZ R2, LOOP3 SJMP BEEPDELAY1:MOV R6,#02H N1:MOV R7,#07

23、BH N2:DJNZ R7,N2 DJNZ R6,N1 RETDELAY2:MOV R4,#02H N3:MOV R5,#0AFH N4:DJNZ R5,N4 DJNZ R4,N3 RETDELAY3:MOV R3,#02H N5:MOV R4,#0DFH N6:DJNZ R4,N6 DJNZ R3,N5 RETLED自檢程序清單:鍵盤自檢程序清單:KR245: MOV P0,#0 LCALL SEL8 MOV P1,#0FFH MOV A,P1 ANL A,#0FH CJNE A,#0FH,ZWZ1 SJMP KR245 ZWZ1: LCALL DELAY10 MOV P1,#0FFH MO

24、V A,P1 ANL A,#0FH CJNE A,#0FH,ZW1 SJMP KR245 ZW1: LCALL SEL7 CJNE A,#0DH,ZW2 SJMP Z2 ZW2: JC ZW3 SJMP Z1 ZW3: CJNE A,#07H,Z3 SJMP Z4 Z1:LCALL W1 LCALL LED SJMP KR245 W1:LCALL SEL1 MOV P0,#0CH LCALL BEEP RET Z2: LCALL W2 LCALL LED SJMP KR245 W2:LCALL SEL2 MOV P0,#0B6H LCALL BEEP LCALL BEEP RET Z3:LCA

25、LL W3 LCALL LED SJMP KR245 W3:LCALL SEL3 MOV P0,#9EH LCALL BEEP LCALL BEEP LCALL BEEP RET Z4:LCALL W4 LCALL LED LJMP KR245 W4:LCALL SEL4 MOV P0,#0CCH LCALL BEEP LCALL BEEP LCALL BEEP LCALL BEEP RETBEEP: CLR P2.3 LCALL DELAY1 SETB P2.3 LCALL DELAY1 RETLED: MOV R0,#07H LOOP1: LCALL DELAY DJNZ R0,LOOP1

26、 RET DELAY:MOV R6,#0DEH LOOP3:DJNZ R7,LOOP3 RET DELAY10:MOV R6,#14H LOOP4:MOV R7,#0F8H LOOP5:DJNZ R7,LOOP5 DJNZ R6,LOOP4 RETDELAY1:MOV R6,#0A9H LOOP6:MOV R7,#0B0H LOOP7:DJNZ R7,LOOP7 DJNZ R6,LOOP6 RET SEL1: CLR P2.7 CLR P2.6 CLR P2.5 RETSEL2: SETB P2.7 CLR P2.6 CLR P2.5 RETSEL3: CLR P2.7 SETB P2.6 CLR P2.5 RETSEL4: SETB P2.7 SETB P2.6 CLR P2.5 RETSEL7: CLR P2.7 SETB P2.6 SETB P2.5 RETSEL8: SETB P2.7 SETB P2.6 SETB P2.5 RET要求有明確的程序注解、程序清單可分兩欄打印四

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論