匯編語言課程設(shè)計-電子鬧鐘_第1頁
匯編語言課程設(shè)計-電子鬧鐘_第2頁
匯編語言課程設(shè)計-電子鬧鐘_第3頁
匯編語言課程設(shè)計-電子鬧鐘_第4頁
匯編語言課程設(shè)計-電子鬧鐘_第5頁
已閱讀5頁,還剩13頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)電子鬧鐘電子鬧鐘一、一、課題內(nèi)容和要求課題內(nèi)容和要求題目描述:利用匯編語言實現(xiàn)一個可以在顯示器上顯示時、分、秒的電子時鐘,并能提供整點報時功能?;疽螅海?)設(shè)計一個基本的具有顯示時、分、秒的電子時鐘。(2)到整點或預(yù)定的報警時間,能夠以不同的音樂進行報時,可以自行設(shè)置鬧鐘報警時間; (3)實物演示時要求講出程序原理和設(shè)計思想;(4)程序運行良好、界面清晰。提高要求:設(shè)計一個具有鐘面、分針、秒針的指針式鐘表,在圓盤上有均勻分布的 60 根刻度,對應(yīng)小時的刻度用不同顏色的長刻度區(qū)別,并且將12、3、6、9 對應(yīng)的拉丁文繪制于表盤外。設(shè)計提示:(1)指針

2、式鐘表的繪制。將屏幕設(shè)置成圖形顯示方式,通過畫點、畫線,畫圓等基本程序完成鐘表的繪制。表盤圓周上刻度線段兩端點坐標計算是鐘表繪制的核心部分。 (2)秒針、分針、時針的轉(zhuǎn)動。是經(jīng)過一定的延時時間,通過在下一位置重新畫一個,在原來的位置用背景色覆蓋的方法實現(xiàn)。 (3)音樂的演奏。利用 CPU 支持的外圍電路 8254 與 8255,通過匯編程序改變 8255 的 PB0,PB1 口,接通揚聲器,使得計算機能夠發(fā)出一定頻率的聲音,同時通過 8254 的與 8255 連接的 2 號計數(shù)器控制指定頻率,從而達到控制揚聲器的音樂的效果。通過建立適當?shù)难訒r程序達到一定時間后則改變 2號計數(shù)器產(chǎn)生的方波的頻率

3、,實現(xiàn)音樂程序的演奏。二、需求和思路分析二、需求和思路分析經(jīng)分析本次程序設(shè)計的主要內(nèi)容主要分為如下的幾個模塊:當前時間的獲取并顯示,碼制轉(zhuǎn)換,設(shè)定鬧鐘報鳴的時間,不同頻率的鬧鈴聲,鐘表的繪制和并實現(xiàn)動態(tài)等模塊。其中鐘表的繪制和動態(tài)走動部分比較難是本次課程設(shè)計的提高部分,且改模塊可單獨形成一個模塊,所以放到最后進行考慮精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)1 時間的獲取可以用 INT 21H 的 2CH 功能,該功能調(diào)用 DOS 時間調(diào)用功能,功能號:2CH,小時,分鐘,秒數(shù)分別保存在,保存的形式是以二進制的形式,故顯示時要2 碼制轉(zhuǎn)化利用 ASCII 碼與二進制碼的關(guān)系 ASCII=二進制

4、+30H3 鬧鐘鳴叫主要利用 8254 的二號計數(shù)器和 8255 的 PB0 和 PB1 來設(shè)定4 鬧鐘的表盤,指針的繪制,并實現(xiàn)時針,分針,秒針的走動。主要通過過圖形的畫點進行操作,并通過在固定的區(qū)域內(nèi)不斷的刷屏來實現(xiàn)。三、概要設(shè)計三、概要設(shè)計 (一)算法設(shè)計及重要程序流程圖1)程序整體流程精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)check display int 21h 2ch call bctd ASCII clear or ESCcall editmusic call edittime 精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)2)edittime子程序流程圖CALLEDITTIME

5、 (INT 21H 9 )int 21h0ah hh:mm:sst_buffer ascii 30H-dhadd dh,10 30H-dladd dl,10 inc bx()mov al,dhadd al,dlmov temphor,al2)editmusic子程序精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)CALLEDITMUSIC (INT 21H 9 ) int 21h 0ah t_buffer music 12 3 movmusic,800 movmusic,3200 movmusic,1600 3)打開和關(guān)閉揚聲器此處重要用到了8254和8255的相關(guān)知識,書中P238有相關(guān)代碼首先,

6、應(yīng)該讀出8255的PB端口當前的狀態(tài),將PB0和PB1分別置1,以讀修改寫的方式修改PB0和PB1接通揚聲器。其次,利用8254的2號計數(shù)器產(chǎn)生XXX Hz 的方波,此處計數(shù)初值利用公式 N=fclk1 /fout2 對8254先寫低8位,再寫高8位,out2輸出方波最后,將8255的PB0和PB1回復(fù)位00,用AND AL,B來修改CALL OPENCALL CLOSE8254 4)BCTD子程序的流程圖該子程序程序功能主要是實現(xiàn)二進制轉(zhuǎn)化成相應(yīng)BCD碼精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)AX輸入?yún)?shù) AX輸出參數(shù),存放調(diào)整過的BCD碼 MOV DX,AXMOV AX,0MOV CX,

7、16 - XCHG AL,AH ; ADC AL,ALDAAXCHG AL,AHclc ; Crcl dx,1 ; - adc al,al ; daa ; CALL BCTDLOOP BCTD1(二)變量名聲明DATA SEGMENTMESS1 DB *ASM ASSIGNMENT* ,0AH,0DHDB ,0AH,0DHDB *ELECTRONIC CLOCK* ,0AH,0DHDB ,0AH,0DHDB ,0AH,0DHDB *PRESS C OR C TO EDIT THE ALARM TIME PRESS M OR M TO CHANGE SOUND!* ,0AH,0DHDB ,0AH

8、,0DHDB *PRESS ESC BUTTON TO EXIT* ,0AH,0DH,$TN DB PLEASE INPUT THE NEW TIME (HH:MM:SS):,0DH,0AH,$MUSICMESS DB PLEASE CHOOSE THE TYPE OF MUSIC:1(FAST) 2(MIDDLE) 精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)3(SLOW),0DH,0AH,$MESS2 DB *TIME IS:,0AH,0DH,$T_BUFF DB 40 ;在數(shù)據(jù)段開一段時間顯示緩沖區(qū)DB ?DB 40 DUP (?)TEMPHOR DB ? ;存放鍵入的定時時間的小時TEM

9、PMIN DB ? ;存放鍵入的定時時間的分鐘TEMPSEC DB ? ;存放鍵入的定時時間的秒數(shù)MUSIC DW 800 ;存放默認音樂的頻率數(shù)DATA ENDSSTACK SEGMENT DB 100 DUP(?) STACK ENDS 四、詳細設(shè)計四、詳細設(shè)計 課題任務(wù)實現(xiàn)的源程序(可以是一組源程序,每個功能模塊采用不同的函數(shù)實現(xiàn)) ,源程序要按照寫程序的規(guī)則來編寫。要結(jié)構(gòu)清晰,重點函數(shù)的重點變量,重點功能部分要加上清晰的程序注釋。 (一)1 主函數(shù)代碼CODE SEGMENT ASSUME CS:CODE,SS:STACK,DS:DATA ;確定各個邏輯段的類型 START: MOV

10、AX,DATA MOV DS,AX CALL CLEAR ;調(diào)用清屏子程序 DISPLAY: ;時間顯示部分 MOV AX,DATA MOV DS,AX MOV BX,OFFSET T_BUFF ;送T_BUFF的偏移地址到BX MOV AH,2CH ;調(diào)用DOS時間調(diào)用功能,功能號:2CH,小時,分鐘,秒數(shù)分別保存在CH,CL,DH中 INT 21H ;判斷時間是否相等SUB DH,1 ;秒鐘+1修正CALL CHECKMOV AL,CH ;小時數(shù)設(shè)定 MOV AH,0 CALL BCTD ;調(diào)用進制轉(zhuǎn)換子程序 二進制轉(zhuǎn)BCD碼子程序PUSH AX AND AL,0F0H ;選取AL高四位

11、MOV CL,4 ;設(shè)置右循環(huán)的次數(shù) ROL AL,CL ;右循環(huán) OR AL,30H ;加30H得到ACSII碼 MOV BX,AL ;將得到的結(jié)果送到T_BUFF緩沖區(qū) INC BX ;BX自加1,指針指向下一個緩沖區(qū)的下一個地址 精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)POP AX AND AL,0FH ;選取低四位 OR AL,30H MOV BX,AL ;將轉(zhuǎn)換后的低四位值送入緩沖區(qū)的第二個地址 INC BX ;- MOV AL,: ;顯示分隔符號 MOV BX,AL INC BX ;- MOV AH,2CH INT 21H MOV AL,CL ;分鐘數(shù)設(shè)定 MOV AH,0 CA

12、LL BCTD PUSH AX AND AL,0F0H MOV CL,4 ROL AL,CL OR AL,30H MOV BX,AL INC BX POP AX AND AL,0FH OR AL,30H MOV BX,AL INC BX ;- MOV AL,: ;顯示分隔符號 MOV BX,AL INC BX ;- MOV AH,2CH ;秒設(shè)定 INT 21H MOV AL,DH MOV AH,0 CALL BCTD PUSH AX AND AL,0F0H MOV CL,4 ROL AL,CL OR AL,30H 精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)MOV BX,AL INC BX P

13、OP AX AND AL,0FH OR AL,30H MOV BX,AL INC BX ;- MOV AL,$ ;將字符串的結(jié)束位送至顯示緩沖區(qū)的最后一位 MOV BX,AL ;- PUSH BX ;置光標位置 ,AH=2,BH=0,DH跟DL分別為行號與列號,并入棧保護BX MOV AH,2 ;01用于此程序快下邊的 在下面的兩個置光標位置MOV BH,0 MOV DH,17 MOV DL,41 INT 10H POP BX LEA DX,T_BUFF ;送T_BUFF偏移地址到DX,并調(diào)用DOS顯示功能,功能號為9 MOV AH,9 INT 21H ;至此當前事前時間的顯示功能結(jié)束!PUS

14、H BX ;置光標位置 MOV AH,2 MOV BH,0 MOV DH,0 MOV DL,0 INT 10H POP BX LEA DX,MESS1 MOV AH,9 INT 21H ; 顯示MESS1PUSH BX ;置光標位置 MOV AH,2 MOV BH,0 MOV DH,17 MOV DL,21 INT 10H POP BX LEA DX,MESS2 MOV AH,9 精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)INT 21H ; 顯示MESS2;- CALL DELAY1 MOV AH,1 ;調(diào)用鍵盤I/O中斷功能號1,獲取鍵值到AL INT 16H CMP AL,C ;是C鍵,轉(zhuǎn)

15、到時間修改程序 JE EDITTIME CMP AL,C ;是C鍵,轉(zhuǎn)到時間修改程序 JE EDITTIMECMP AL,M;是M鍵,轉(zhuǎn)到鬧鈴種類設(shè)定程序JE EDITMUSICCMP AL,M ;是M鍵,轉(zhuǎn)到鬧鈴種類設(shè)定程序JE EDITMUSIC CMP AL,1BH JZ QUIT ;是ESC鍵,退出程序 JMP DISPLAY QUIT: MOV AH,4CH ;程序終止功能號 INT 21H RET 2 功能函數(shù)代碼1) 二進制轉(zhuǎn) BCD 碼子程序BCTD PROC NEAR ;二進制轉(zhuǎn)BCD碼子程序 ;AX輸入?yún)?shù) ;AX輸出參數(shù),存放調(diào)整過的BCD碼 MOV DX,AX MOV

16、AX,0 MOV CX,16 ;設(shè)循環(huán)次數(shù) BCTD1: CLC ;清進位標志C RCL DX,1 ;通過進位的循環(huán)右移 ADC AL,AL ;帶進位加法 DAA ;加法的十進制調(diào)整 XCHG AL,AH ;交換高、低八位 ADC AL,AL DAA XCHG AL,AH LOOP BCTD1 ;循環(huán)次數(shù)保存在CX里 RET 精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)BCTD ENDP 2)清屏CLEAR子程序CLEAR PROC NEAR PUSH AX ;入棧保護現(xiàn)場 PUSH BX PUSH CX PUSH DX MOV AX,0600H ;AH=06(滾動)AL=00(全屏空白) MO

17、V BH,3EH ;設(shè)置背景顏色(2)和前景顏色(E) SUB CX,CX MOV DX,5F5FH INT 10H POP DX ;出?;謴?fù)現(xiàn)場 POP CX POP BX POP AX RET CLEAR ENDP 3)精確延遲時間子程序 delay1DELAY1 PROC ;精確延遲時間子程序 MOV DX,04FFH ;循環(huán)次數(shù) UP: XOR CX,CX A: NOP LOOP A DEC DX JNZ UP RET DELAY1 ENDP 4)設(shè)定定時時鐘 EDITTIME 子程序EDITTIME PROC ;時間修改子程序 PUSH AX ;入棧保護數(shù)據(jù) PUSH BX PUSH

18、 CX PUSH DX PUSHF MOV DX,OFFSET TN ;顯示修改時間的格式提示 MOV AH,09H INT 21H MOV DX,OFFSET T_BUFF ;數(shù)據(jù)緩沖區(qū)的數(shù)據(jù)輸入 精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)MOV AH,0AH INT 21H AND DX,0H LEA BX,T_BUFF INC BX INC BX INC BXMOV DH,BX SUB DH,30H INC BX MOV DL,BX SUB DL,30H MOV CL,10 MOV AL,DH MUL CL ADD AL,DLMOV CH,AL MOV TEMPHOR,ALINC BX

19、INC BX MOV DH,BX SUB DH,30H INC BX MOV DL,BX SUB DL,30H MOV CL,10 MOV AL,DH MUL CL ADD AL,DL MOV CL,AL MOV TEMPMIN,ALINC BX INC BX MOV DH,BX SUB DH,30H INC BX MOV DL,BX SUB DL,30H MOV CL,10 MOV AL,DH MUL CL 精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)ADD AL,DL MOV DH,AL MOV TEMPSEC,ALPOPF ;出?;謴?fù)數(shù)據(jù) POP DX POP CX POP BX POP

20、AX JMP START RET EDITTIME ENDP5)檢驗定時時間是否到CHECK子程序CHECK PROC PUSH AX PUSH BX CMP CH,TEMPHOR ;設(shè)置定點報時 JNE CF CMP CL,TEMPMIN JNE CF CMP DH,TEMPSEC JNE XIANG CF1 CMP CL,0 ;設(shè)置整點報時 JNE CF CMP DH,0 JNE CF XIANG: CALL OPEN ;打開揚聲器 PUSH DX PUSH CX MOV DX,12H MOV AX,34DEH MOV CX,MUSIC DIV CX OUT 42H,AL MOV AL,A

21、H OUT 42H,AL MOV AH,1精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè) INT 21H POP CX POP DX CALL CLOSE ;關(guān)閉揚聲器CF: POP BX POP AX RETCHECK ENDP6)開啟和關(guān)閉揚聲器子程序open和closeOPEN PROC PUSH AX IN AL,61H OR AL,03H OUT 61H,AL POP AX RETOPEN ENDP CLOSE PROC PUSH AX IN AL,61H AND AL,0FCH OUT 61H,AL POP AX RETCLOSE ENDP6)設(shè)置鬧鐘音樂種類子程序editmusicE

22、DITMUSIC PROC PUSH AX ;入棧保護數(shù)據(jù) PUSH BX PUSH CX PUSH DX PUSHF MOV DX,OFFSET MUSICMESS ;顯示修改音樂的種類提示 MOV AH,09H INT 21H MOV DX,OFFSET T_BUFF ;數(shù)據(jù)緩沖區(qū)的數(shù)據(jù)輸入 MOV AH,0AH INT 21H 精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè) AND DX,0H LEA BX,T_BUFF INC BX INC BX INC BX MOV AL,BX CMP AL,1 JE M800TO CMP AL,2 JE M1600TO CMP AL,3 JE M320

23、0TOM800TO: MOV MUSIC,800 JMP TM1600TO: MOV MUSIC,1600 JMP TM3200TO: MOV MUSIC,3200 T: POPF ;出?;謴?fù)數(shù)據(jù) POP DX POP CX POP BX POP AX JMP START RET EDITMUSIC ENDP五、測試數(shù)據(jù)及其結(jié)果分析五、測試數(shù)據(jù)及其結(jié)果分析1)運行畫面精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)2)測試結(jié)果A)鍵入 c 或 C 會出現(xiàn)提示“PLEASE INPUT THE NEW TIME (HH:MM:SS):”再輸入 19:08:40?;剀嚱Y(jié)束后,在 19:08:40 時,鬧

24、鐘會鳴叫。B)鍵入 m 或 M 會出現(xiàn)提示“PLEASE CHOOSE THE TYPE OF MUSIC:1(FAST) 2(MIDDLE) 3(SLOW):” 回車后會設(shè)定此時的鬧鈴鳴叫的頻率六、調(diào)試過程中的問題六、調(diào)試過程中的問題本次程序設(shè)計中遇到了很多的問題,在設(shè)計每一個模塊都有遇到了一定的難度。首先關(guān)于,如何獲得系統(tǒng)當前的時間,查閱了 INT 21H,21H 的 2CH 可以返回的的 CH,CL,DH 中分別為時,分,秒但是都是二進制的,故需要的進行二進制的碼制,寫代碼時發(fā)現(xiàn)通過寄存器移位的可以十分的節(jié)省寄存器的使用數(shù)目。 其次在寫 EDITTIME 的子程序是發(fā)生了一個錯誤,很久才改正。我在使用 21H 的 0AH 向 T_BUFFER 內(nèi)存空間輸入字符串是,第一個位置是初始化時精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)設(shè)定的 T_BUFFER 的最大長度,第二個位置是實際輸入的長度,我于是 INC BX 兩次(BX 發(fā)的 T_BUFFER 的地址),以為能夠得到我的輸入的第一個字符,但是結(jié)果是錯誤的,查了了很久才發(fā)現(xiàn),其實我在調(diào)用該子程序前的一個控制已經(jīng)輸入了一個字符,該字符已經(jīng)存入了 T_BUFFER,故此處應(yīng)該在INC BX。在 EDITMUSIC 的子程

溫馨提示

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

評論

0/150

提交評論