![匯編語言課程設(shè)計(jì)電子鬧鐘_第1頁](http://file2.renrendoc.com/fileroot_temp3/2021-7/10/614a7358-c37d-4922-aeb3-ac331e23061f/614a7358-c37d-4922-aeb3-ac331e23061f1.gif)
![匯編語言課程設(shè)計(jì)電子鬧鐘_第2頁](http://file2.renrendoc.com/fileroot_temp3/2021-7/10/614a7358-c37d-4922-aeb3-ac331e23061f/614a7358-c37d-4922-aeb3-ac331e23061f2.gif)
![匯編語言課程設(shè)計(jì)電子鬧鐘_第3頁](http://file2.renrendoc.com/fileroot_temp3/2021-7/10/614a7358-c37d-4922-aeb3-ac331e23061f/614a7358-c37d-4922-aeb3-ac331e23061f3.gif)
![匯編語言課程設(shè)計(jì)電子鬧鐘_第4頁](http://file2.renrendoc.com/fileroot_temp3/2021-7/10/614a7358-c37d-4922-aeb3-ac331e23061f/614a7358-c37d-4922-aeb3-ac331e23061f4.gif)
![匯編語言課程設(shè)計(jì)電子鬧鐘_第5頁](http://file2.renrendoc.com/fileroot_temp3/2021-7/10/614a7358-c37d-4922-aeb3-ac331e23061f/614a7358-c37d-4922-aeb3-ac331e23061f5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、電子鬧鐘電子鬧鐘一、一、課題內(nèi)容和要求課題內(nèi)容和要求題目描述:利用匯編語言實(shí)現(xiàn)一個(gè)可以在顯示器上顯示時(shí)、分、秒的電子時(shí)鐘,并能提供整點(diǎn)報(bào)時(shí)功能?;疽螅海?)設(shè)計(jì)一個(gè)基本的具有顯示時(shí)、分、秒的電子時(shí)鐘。(2)到整點(diǎn)或預(yù)定的報(bào)警時(shí)間,能夠以不同的音樂進(jìn)行報(bào)時(shí),可以自行設(shè)置鬧鐘報(bào)警時(shí)間; (3)實(shí)物演示時(shí)要求講出程序原理和設(shè)計(jì)思想;(4)程序運(yùn)行良好、界面清晰。提高要求:設(shè)計(jì)一個(gè)具有鐘面、分針、秒針的指針式鐘表,在圓盤上有均勻分布的 60 根刻度,對(duì)應(yīng)小時(shí)的刻度用不同顏色的長刻度區(qū)別,并且將12、3、6、9 對(duì)應(yīng)的拉丁文繪制于表盤外。設(shè)計(jì)提示:(1)指針式鐘表的繪制。將屏幕設(shè)置成圖形顯示方式,通
2、過畫點(diǎn)、畫線,畫圓等基本程序完成鐘表的繪制。表盤圓周上刻度線段兩端點(diǎn)坐標(biāo)計(jì)算是鐘表繪制的核心部分。 (2)秒針、分針、時(shí)針的轉(zhuǎn)動(dòng)。是經(jīng)過一定的延時(shí)時(shí)間,通過在下一位置重新畫一個(gè),在原來的位置用背景色覆蓋的方法實(shí)現(xiàn)。 (3)音樂的演奏。利用 cpu 支持的外圍電路 8254 與 8255,通過匯編程序改變 8255 的 pb0,pb1 口,接通揚(yáng)聲器,使得計(jì)算機(jī)能夠發(fā)出一定頻率的聲音,同時(shí)通過 8254 的與 8255 連接的 2 號(hào)計(jì)數(shù)器控制指定頻率,從而達(dá)到控制揚(yáng)聲器的音樂的效果。通過建立適當(dāng)?shù)难訒r(shí)程序達(dá)到一定時(shí)間后則改變 2號(hào)計(jì)數(shù)器產(chǎn)生的方波的頻率,實(shí)現(xiàn)音樂程序的演奏。二、需求和思路分析二
3、、需求和思路分析經(jīng)分析本次程序設(shè)計(jì)的主要內(nèi)容主要分為如下的幾個(gè)模塊:當(dāng)前時(shí)間的獲取并顯示,碼制轉(zhuǎn)換,設(shè)定鬧鐘報(bào)鳴的時(shí)間,不同頻率的鬧鈴聲,鐘表的繪制和并實(shí)現(xiàn)動(dòng)態(tài)等模塊。其中鐘表的繪制和動(dòng)態(tài)走動(dòng)部分比較難是本次課程設(shè)計(jì)的提高部分,且改模塊可單獨(dú)形成一個(gè)模塊,所以放到最后進(jìn)行考慮1 時(shí)間的獲取可以用 int 21h 的 2ch 功能,該功能調(diào)用 dos 時(shí)間調(diào)用功能,功能號(hào):2ch,小時(shí),分鐘,秒數(shù)分別保存在,保存的形式是以二進(jìn)制的形式,故顯示時(shí)要2 碼制轉(zhuǎn)化利用 ascii 碼與二進(jìn)制碼的關(guān)系 ascii=二進(jìn)制+30h3 鬧鐘鳴叫主要利用 8254 的二號(hào)計(jì)數(shù)器和 8255 的 pb0 和 p
4、b1 來設(shè)定4 鬧鐘的表盤,指針的繪制,并實(shí)現(xiàn)時(shí)針,分針,秒針的走動(dòng)。主要通過過圖形的畫點(diǎn)進(jìn)行操作,并通過在固定的區(qū)域內(nèi)不斷的刷屏來實(shí)現(xiàn)。三、概要設(shè)計(jì)三、概要設(shè)計(jì) (一)算法設(shè)計(jì)及重要程序流程圖1)程序整體流程check display int 21h 2ch call bctd ascii clear or esccall editmusic call edittime 2)edittime子程序流程圖calledittime (int 21h 9 )int 21h0ah hh:mm:sst_buffer ascii 30h-dhadd dh,10 30h-dladd dl,10 inc b
5、x()mov al,dhadd al,dlmov temphor,al2)editmusic子程序calleditmusic (int 21h 9 ) int 21h 0ah t_buffer music 12 3 movmusic,800 movmusic,3200 movmusic,1600 3)打開和關(guān)閉揚(yáng)聲器此處重要用到了8254和8255的相關(guān)知識(shí),書中p238有相關(guān)代碼首先,應(yīng)該讀出8255的pb端口當(dāng)前的狀態(tài),將pb0和pb1分別置1,以讀修改寫的方式修改pb0和pb1接通揚(yáng)聲器。其次,利用8254的2號(hào)計(jì)數(shù)器產(chǎn)生xxx hz 的方波,此處計(jì)數(shù)初值利用公式 n=fclk1 /fo
6、ut2 對(duì)8254先寫低8位,再寫高8位,out2輸出方波最后,將8255的pb0和pb1回復(fù)位00,用and al,11111100b來修改call opencall close8254 4)bctd子程序的流程圖該子程序程序功能主要是實(shí)現(xiàn)二進(jìn)制轉(zhuǎn)化成相應(yīng)bcd碼ax輸入?yún)?shù) ax輸出參數(shù),存放調(diào)整過的bcd碼 mov dx,axmov ax,0mov cx,16 - xchg al,ah ; adc al,aldaaxchg al,ahclc ; crcl dx,1 ; - adc al,al ; daa ; call bctdloop bctd1(二)變量名聲明data segmentm
7、ess1 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,0dhdb *press esc button to exit* ,0ah,0dh,$tn db please input the new time (hh:mm:ss):,0dh,0ah,$musicmess db please c
8、hoose the type of music:1(fast) 2(middle) 3(slow),0dh,0ah,$mess2 db *time is:,0ah,0dh,$t_buff db 40 ;在數(shù)據(jù)段開一段時(shí)間顯示緩沖區(qū)db ?db 40 dup (?)temphor db ? ;存放鍵入的定時(shí)時(shí)間的小時(shí)tempmin db ? ;存放鍵入的定時(shí)時(shí)間的分鐘tempsec db ? ;存放鍵入的定時(shí)時(shí)間的秒數(shù)music dw 800 ;存放默認(rèn)音樂的頻率數(shù)data endsstack segment db 100 dup(?) stack ends 四、詳細(xì)設(shè)計(jì)四、詳細(xì)設(shè)計(jì) 課題任務(wù)實(shí)
9、現(xiàn)的源程序(可以是一組源程序,每個(gè)功能模塊采用不同的函數(shù)實(shí)現(xiàn)) ,源程序要按照寫程序的規(guī)則來編寫。要結(jié)構(gòu)清晰,重點(diǎn)函數(shù)的重點(diǎn)變量,重點(diǎn)功能部分要加上清晰的程序注釋。 (一)1 主函數(shù)代碼code segment assume cs:code,ss:stack,ds:data ;確定各個(gè)邏輯段的類型 start: mov ax,data mov ds,ax call clear ;調(diào)用清屏子程序 display: ;時(shí)間顯示部分 mov ax,data mov ds,ax mov bx,offset t_buff ;送t_buff的偏移地址到bx mov ah,2ch ;調(diào)用dos時(shí)間調(diào)用功能,
10、功能號(hào):2ch,小時(shí),分鐘,秒數(shù)分別保存在ch,cl,dh中 int 21h ;判斷時(shí)間是否相等sub dh,1 ;秒鐘+1修正call checkmov al,ch ;小時(shí)數(shù)設(shè)定 mov ah,0 call bctd ;調(diào)用進(jìn)制轉(zhuǎn)換子程序 二進(jìn)制轉(zhuǎn)bcd碼子程序push ax and al,0f0h ;選取al高四位 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,指針指向下一個(gè)緩沖區(qū)的下一個(gè)地址 pop ax and al,0fh ;選取
11、低四位 or al,30h mov bx,al ;將轉(zhuǎn)換后的低四位值送入緩沖區(qū)的第二個(gè)地址 inc bx ;- mov al,: ;顯示分隔符號(hào) mov bx,al inc bx ;- mov ah,2ch int 21h mov al,cl ;分鐘數(shù)設(shè)定 mov ah,0 call 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,: ;顯示分隔符號(hào) mov bx,al inc bx ;- m
12、ov 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 mov bx,al inc bx pop ax and al,0fh or al,30h mov bx,al inc bx ;- mov al,$ ;將字符串的結(jié)束位送至顯示緩沖區(qū)的最后一位 mov bx,al ;- push bx ;置光標(biāo)位置 ,ah=2,bh=0,dh跟dl分別為行號(hào)與列號(hào),并入棧保護(hù)bx mov ah,2 ;01用于此程序快下邊的 在下面的兩個(gè)置光標(biāo)位置mov bh,0
13、mov dh,17 mov dl,41 int 10h pop bx lea dx,t_buff ;送t_buff偏移地址到dx,并調(diào)用dos顯示功能,功能號(hào)為9 mov ah,9 int 21h ;至此當(dāng)前事前時(shí)間的顯示功能結(jié)束!push bx ;置光標(biāo)位置 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 ;置光標(biāo)位置 mov ah,2 mov bh,0 mov dh,17 mov dl,21 int 10h pop bx lea dx,mess
14、2 mov ah,9 int 21h ; 顯示mess2;- call delay1 mov ah,1 ;調(diào)用鍵盤i/o中斷功能號(hào)1,獲取鍵值到al int 16h cmp al,c ;是c鍵,轉(zhuǎn)到時(shí)間修改程序 je edittime cmp al,c ;是c鍵,轉(zhuǎn)到時(shí)間修改程序 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 ;程序終止功能號(hào) int 21h
15、 ret 2 功能函數(shù)代碼1) 二進(jìn)制轉(zhuǎn) bcd 碼子程序bctd proc near ;二進(jìn)制轉(zhuǎn)bcd碼子程序 ;ax輸入?yún)?shù) ;ax輸出參數(shù),存放調(diào)整過的bcd碼 mov dx,ax mov ax,0 mov cx,16 ;設(shè)循環(huán)次數(shù) bctd1: clc ;清進(jìn)位標(biāo)志c rcl dx,1 ;通過進(jìn)位的循環(huán)右移 adc al,al ;帶進(jìn)位加法 daa ;加法的十進(jìn)制調(diào)整 xchg al,ah ;交換高、低八位 adc al,al daa xchg al,ah loop bctd1 ;循環(huán)次數(shù)保存在cx里 ret bctd endp 2)清屏clear子程序clear proc near
16、push ax ;入棧保護(hù)現(xiàn)場 push bx push cx push dx mov ax,0600h ;ah=06(滾動(dòng))al=00(全屏空白) mov 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)精確延遲時(shí)間子程序 delay1delay1 proc ;精確延遲時(shí)間子程序 mov dx,04ffh ;循環(huán)次數(shù) up: xor cx,cx a: nop loop a dec dx jnz up ret delay1
17、endp 4)設(shè)定定時(shí)時(shí)鐘 edittime 子程序edittime proc ;時(shí)間修改子程序 push ax ;入棧保護(hù)數(shù)據(jù) push bx push cx push dx pushf mov dx,offset tn ;顯示修改時(shí)間的格式提示 mov ah,09h int 21h mov dx,offset t_buff ;數(shù)據(jù)緩沖區(qū)的數(shù)據(jù)輸入 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 m
18、ov al,dh mul cl add al,dlmov ch,al mov temphor,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 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 add al,dl mov dh,al mov tempsec,alpop
19、f ;出?;謴?fù)數(shù)據(jù) pop dx pop cx pop bx pop ax jmp start ret edittime endp5)檢驗(yàn)定時(shí)時(shí)間是否到check子程序check proc push ax push bx cmp ch,temphor ;設(shè)置定點(diǎn)報(bào)時(shí) jne cf cmp cl,tempmin jne cf cmp dh,tempsec jne xiang cf1 cmp cl,0 ;設(shè)置整點(diǎn)報(bào)時(shí) jne cf cmp dh,0 jne cf xiang: call open ;打開揚(yáng)聲器 push dx push cx mov dx,12h mov ax,34deh mov
20、cx,music div cx out 42h,al mov al,ah out 42h,al mov ah,1 int 21h pop cx pop dx call close ;關(guān)閉揚(yáng)聲器cf: pop bx pop ax retcheck endp6)開啟和關(guān)閉揚(yáng)聲器子程序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è)置鬧鐘音樂種
21、類子程序editmusiceditmusic proc push ax ;入棧保護(hù)數(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 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 m3200tom800t
22、o: 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ùn)行畫面2)測試結(jié)果a)鍵入 c 或 c 會(huì)出現(xiàn)提示“please input the new time (hh:mm:ss):”再輸入 19:08:40?;剀嚱Y(jié)束后,在 19:08:40 時(shí),鬧鐘會(huì)鳴叫。b)鍵入 m 或 m 會(huì)出現(xiàn)提示“please
23、choose the type of music:1(fast) 2(middle) 3(slow):” 回車后會(huì)設(shè)定此時(shí)的鬧鈴鳴叫的頻率六、調(diào)試過程中的問題六、調(diào)試過程中的問題本次程序設(shè)計(jì)中遇到了很多的問題,在設(shè)計(jì)每一個(gè)模塊都有遇到了一定的難度。首先關(guān)于,如何獲得系統(tǒng)當(dāng)前的時(shí)間,查閱了 int 21h,21h 的 2ch 可以返回的的 ch,cl,dh 中分別為時(shí),分,秒但是都是二進(jìn)制的,故需要的進(jìn)行二進(jìn)制的碼制,寫代碼時(shí)發(fā)現(xiàn)通過寄存器移位的可以十分的節(jié)省寄存器的使用數(shù)目。 其次在寫 edittime 的子程序是發(fā)生了一個(gè)錯(cuò)誤,很久才改正。我在使用 21h 的 0ah 向 t_buffer 內(nèi)存空間輸入字符串是,第一個(gè)位置是初始化時(shí)設(shè)定的 t_buffer 的最大長度,第二個(gè)位置是實(shí)際輸入的長度,我于是 inc bx 兩次(bx 發(fā)的 t_buffer 的地址),以為能夠得到我的輸入的第一個(gè)字符,但是結(jié)果是錯(cuò)誤的,查了了很久才發(fā)現(xiàn),其實(shí)我在調(diào)用該子程序前的一個(gè)控制已經(jīng)輸入了一個(gè)字符,該字符已經(jīng)存入了 t_buffer,故此處應(yīng)該在inc bx。在 editmusic 的子程序中同樣會(huì)遇到類似問題。在編寫程
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度文化創(chuàng)意產(chǎn)業(yè)投資借款協(xié)議延期補(bǔ)充條款
- 2025年度新材料研發(fā)與應(yīng)用股權(quán)合作開發(fā)協(xié)議
- 2025年度基礎(chǔ)設(shè)施抵押擔(dān)保建設(shè)合同范本
- 2025年度虛擬現(xiàn)實(shí)內(nèi)容制作合同變更
- 2020-2025年中國精油提取設(shè)備市場運(yùn)行態(tài)勢及行業(yè)發(fā)展前景預(yù)測報(bào)告
- 2025年工業(yè)燃油項(xiàng)目可行性研究報(bào)告
- 2025年工地因甲方責(zé)任停工賠償條款約定書
- 2025年度新能源車輛充電樁建設(shè)工程款抵押貸款合同
- 標(biāo)準(zhǔn)化養(yǎng)老服務(wù)機(jī)構(gòu)建設(shè)的評(píng)估與監(jiān)督機(jī)制
- 教育內(nèi)容與產(chǎn)業(yè)需求精準(zhǔn)對(duì)接實(shí)施方案
- QC成果地下室基礎(chǔ)抗浮錨桿節(jié)點(diǎn)處防水施工方法的創(chuàng)新
- 第一章:公共政策理論模型
- 中藥審核處方的內(nèi)容(二)
- (完整)金正昆商務(wù)禮儀答案
- RB/T 101-2013能源管理體系電子信息企業(yè)認(rèn)證要求
- GB/T 10205-2009磷酸一銨、磷酸二銨
- 公司財(cái)務(wù)制度及流程
- 高支模專項(xiàng)施工方案(專家論證)
- 《物流與供應(yīng)鏈管理-新商業(yè)、新鏈接、新物流》配套教學(xué)課件
- 物聯(lián)網(wǎng)項(xiàng)目實(shí)施進(jìn)度計(jì)劃表
- MDD指令附錄一 基本要求檢查表2013版
評(píng)論
0/150
提交評(píng)論