合肥工業(yè)大學微機原理課程設計數字鬧鐘_第1頁
合肥工業(yè)大學微機原理課程設計數字鬧鐘_第2頁
合肥工業(yè)大學微機原理課程設計數字鬧鐘_第3頁
合肥工業(yè)大學微機原理課程設計數字鬧鐘_第4頁
合肥工業(yè)大學微機原理課程設計數字鬧鐘_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、合肥工業(yè)大學計算機與信息學院課程設計課 程:微機原理與接口技術設計專業(yè)班級:計算機科學與技術13-1班學 號:2013211601姓 名: 康安一、 設計題目及要求:1通過8253 定時器產生1秒脈沖定時中斷。在中斷服務程序中實現秒、分、小時的進位( 24小時制)。2在七段數碼管上顯示當前的時分秒(例如, 12點10分40秒顯示為121040)。3按“ C”鍵可設置時鐘的時間當前值(對準時間)。4按“ D”鍵設置鬧鈴時間。5. 按“E”鍵表示時鐘開始運行。6. 程序運行時,首先按“D”鍵設置鬧鈴時間,然后按“ C”鍵設置時鐘的時間,再按“E”讓時鐘開始運行。當前時間運行到鬧鈴時間時,6 個數碼

2、管全部閃爍顯示“8”。二、 設計思想:總體思想:1、功能概述:實驗箱連線:本實驗建立在Dais實驗箱基礎上完成的基本連線及程序如下:138譯碼器:A,B,C,D,分別連接A2,A3,A4,GS;y0連接8253的CS片選信號;y1連接8259的CS片選信號;8253連線:分頻信號T2接8253的 CLK0;8253的OUT0接8259的IR7;8253的gate信號接+5V;8259連線:8259的數據線接入數據總線;本程序包括顯示模塊,鍵盤掃描模塊,時間計數模塊,設置模塊等幾個模塊,(1)程序運行后,LED顯示000000初始值,并且開始計數(2)按C鍵設置初始時間,LED清零,顯示待輸入狀

3、態(tài)“-”,之后用戶輸入數字,更改LED顯示內容。考慮到第一個數只能是0,1,2,當第一個數顯示2時第二個數只能顯示04,同理下面各位應滿足時鐘數值的合理的取值;(3)按D鍵設置鬧鐘時間,清除LED顯示內容,顯示待輸入狀態(tài)“-”,之后用戶輸入數字,更改LED顯示內容。數字的取值情況和按C鍵設置初始時間相同。(4)按E鍵運行時鐘,LED顯示內容恢復為按C鍵設置的時間,并開始計時。(5)當LED顯示的數字和預先設置好的鬧鐘相同時,更改LED顯示狀態(tài),改為“888888”,閃爍顯示10秒后恢復原來的時間,繼續(xù)計數。2、主程序設計(他人完成)主程序中完成通過調用子程序完成對8253及8259的初始化,對

4、8259進行中斷設置。主要在顯示子程序和鍵盤子處理程序之間不斷循環(huán),8253每一秒給8259一個刺激,當8259接受到刺激后會給CPU一個中斷請求,CPU會轉去執(zhí)行中斷子程序,而中斷子程序設置成時間計數加,即完成電子表的整體設計。當LED顯示的時間達到預先設置的時間,關閉中斷,更改顯示內容,在顯示一段時間后恢復顯示,打開中斷,使電子表恢復運行。3、LED顯示子程序設計(他人完成)本程序顯示部分用了6個共陽極LED作為顯示管,顯示程序要做到每送一次段碼就送一次位碼,每送一次位碼后,將位碼中的0右移1位作為下次的位碼,從而可以實現從左到右使6個LED依次顯示出相應的數字。雖然CPU每隔一定時間便執(zhí)

5、行顯示程序,但只要這個時間段不太長,由于人眼的視覺作用,就可以在6個LED上同時見到數字顯示。4、鍵盤掃描子程序設計(他人完成)本程序主要實現對鍵盤的按鍵進行掃描,判斷用戶是否按下的鍵值,并將按下的鍵值作為參數返回。5、時鐘功能設置(獨立負責)本程序段負責實現判斷用戶按下的鍵值,根據按下的鍵值轉入不同的程序段執(zhí)行相應的功能設置。判斷鍵值的方法為設置三個標志位,三個標志位分別對應3個按鍵,當按鍵被按下時,將對應的標志位置為1,在程序段中對三個標志位進行判斷,從而實現不同的功能設置。首先調用鍵盤掃描子程序GetKey獲取用戶輸入的鍵值,之后將鍵值分別與0ch, 0dh, 0eh比較:若鍵值為C,則

6、跳入下一個程序段SETC,將對應的標志位ButtonC置為1,其余兩個標志ButtonD和ButtonE為0;若鍵值為D,則跳入下一個程序段SETD,將對應的標志位ButtonD置為1,其余兩個標志ButtonC和ButtonE為0;若鍵值為E,則跳入下一個程序段SETE,將對應的標志位ButtonE置為1,同時由于要更改顯示的時間狀態(tài),將使用到的一個臨時緩沖區(qū)buff的取出標志位flag也置為1,表示E鍵被按下后,要將buff緩沖區(qū)內存的時間轉移到LedBuff上來顯示用戶設置的時間。其余兩個標志ButtonD和ButtonE為0;若鍵值為數字,則跳入下一個程序段NEXT。NEXT程序段負責

7、完成三個功能:設置時間、置鬧鐘以及時鐘運行。此程序段通過判斷三個標志是否為1,來實現不同的功能。若ButtonC為1,意味著當前是設置時鐘模式,用戶在按下C鍵之后輸入的6位數字鍵為設置的時間;若ButtonD為1,意味著當前是設置鬧鐘模式,用戶在按下C鍵之后輸入的6位數字鍵為設置好的鬧鐘時間;若ButtonE為1,意味著時鐘開始運行。詳情見圖6、鬧鐘顯示功能(他人完成)本程序段負責實現時間達到鬧鐘設置時間的操作,對LED顯示的內容進行判斷,當6個二極管顯示的數字完全相同時,即滿足鬧鐘響的條件,此時關閉中斷,并將LED顯示內容更改為“888888”,顯示10S后將LED恢復為響之前的狀態(tài),打開中

8、斷,繼續(xù)運行時鐘7、8259初始化及中斷設置(獨立負責)8259芯片:在該系統(tǒng)中,8259主要擔負著處理8253的一秒時間的脈沖信號,通過8253的每秒的刺激下向CPU發(fā)送中斷請求,進而CPU處理擔負時間計算的中斷子程序,即可完成每秒鐘時間自加1秒的功能,因此8259的初始化設置應為:MOV AL,13HMOV DX,Port0OUT DX,AL ;icw1MOV AL,08HMOV DX,Port1OUT DX,AL ;icw2MOV AL,0BHOUT DX,ALMOV AL,7FH ;IRQ7OUT DX,AL在接收到8253的脈沖后,需要執(zhí)行的中斷程序功能為對LED顯示的數字進行判斷,

9、顯示合理的數值,即要滿足顯示秒的LED管顯示的最大值為59,顯示分鐘的最大值為59,顯示時鐘的最大值為23,最大時間不能超過23:59:59。具體判斷方法見“時間值合理的判斷”8、8253定時器設置(他人完成)8253芯片:在系統(tǒng)中定時/計數芯片8253主要與CPU及中斷擴展芯片8259之間存在著連接關系。8253主要擔負著時間計時的功能,通過對分頻單元提供的頻率信號進行方法產生一秒時間為周期的脈沖信號。 三、功能流程圖:1、主程序流程圖(他人完成) 2、LED顯示子程序流程圖(他人完成) 3、 按鍵處理子程序流程圖(獨立負責)4、中斷子程序-時間計數子程序流程圖(合作完成) 4、 結果討論:

10、1、 實驗結果:程序運行,數碼管開始從000000走表,按C鍵后顯示開始對時鐘進行初始值設置,設置完成后按D鍵后,LED顯示進入鬧鐘設置狀態(tài),在設置完鬧鐘后按E鍵開始運行,LED管顯示為設置好的時間并接收8253的中斷,實現不斷走表。當顯示時間達到鬧鐘時間時,LED管顯示888888,在閃爍10S結束鬧鐘狀態(tài),再次顯示時間,并開始走表。2、 問題解決:自己遇到的問題:在測試C、D、E三個功能鍵時常常出現誤輸入的情況,為便于查看用戶輸入的值,在用戶按下相應的功能鍵時,將LED顯示為此時顯示,用戶依次輸入6個數字,相應地,在LED上由左向右依次顯示用戶輸入的數字,方便查看用戶是否輸入了自己想測試的

11、時間。 組員遇到的問題:調試程序時發(fā)現時鐘初始值可以設置,但是初始值設置完后時鐘并沒有走表,于是將8253的輸出端的線接入至手動的單脈沖的發(fā)生器,進行手動給8259刺激,結果時鐘開始隨手按動開始走表,可以斷定該8253芯片可能已經損壞,換了個試驗箱后遇到了同樣的情況,直至換了功能正常的實驗箱后實驗現象才正確展現。附錄:實驗代碼:(完整的源程序)CODE SEGMENTASSUME CS:CODE,DS:CODE,ES:CODE; org 5000hPort0 EQU 0FFE0HPort1 EQU 0FFE1Hport00 equ 0FFF0Hport33 equ 0FFF3HOUTSEG e

12、qu 0ffdch ;段控制口OUTBIT equ 0ffddh ;位控制口/鍵掃口IN_KEY equ 0ffdeh ;鍵盤讀入口org 3400hLedBuf db 6 dup(?) ;顯示緩沖CBuf db 6 dup(0fh)buf db 6 dup(?) ;臨時存放時刻buttonC DB 02H ;若C鍵被按則置1buttonD DB 03H ;若D鍵被按則置1buttonE DB 00H ;若E鍵被按則置1flag DB 00h ;時間從BUF取出到LEDBUF標志cflag DB 00hStart:;mov cflag,00mov LedBuf+0,00h ;開啟時顯示&quo

13、t;000000"mov LedBuf+1,00hmov LedBuf+2,00hmov LedBuf+3,00hmov LedBuf+4,00hmov LedBuf+5,00hmov si,0;初始化;push axpush dxMOV DX,port33MOV AL,36HOUT DX,ALMOV DX,port00MOV AL,00HOUT DX,ALMOV AL,4BHOUT DX,ALpop dxpop axCLIMOV AX,OFFSET INT8259MOV BX,003CHMOV BX,AXMOV BX,003EHMOV AX,0000HMOV BX,AXCALL F

14、OR8259STI;con8:CALL DIScall GetKey;掃描鍵盤并讀取鍵值cmp al,20h;檢測是否按下按鍵jz con8and al,0fh ;顯示鍵碼cmp al,0dh ;d:設置鬧鐘jz setDcmp al,0ch ;c:設置時鐘 先時后分jz setCcmp al,0eh;e:時鐘運行jnz zhong ;CDE均不是,則跳轉到NEXTjmp setEsetD: mov buttonD,01hMOV buttonC,00hMOV buttonE,00hhui:mov cx,6mov si,6push axmov al,LedBufsi ;之前代碼聲明過,si為0,

15、所以此處si將依次為0,1,2,3,4,5mov bufsi,al ;依次把LEDBUF里的時分秒存到BUFpop axinc siloop huimov si,00hmov LedBuf+0,11h ;開啟時顯示"-"mov LedBuf+1,11hmov LedBuf+2,11hmov LedBuf+3,11hmov LedBuf+4,11hmov LedBuf+5,11hcall disCLI ;關中斷,進入設置鬧鐘模式jmp con8zhong:jmp nextsetC: MOV buttonC,01hMOV buttonD,00hMOV buttonE,00hmo

16、v si,00hmov LedBuf+0,11h ;開啟時顯示"-"mov LedBuf+1,11hmov LedBuf+2,11hmov LedBuf+3,11hmov LedBuf+4,11hmov LedBuf+5,11hcall disCLI ;關中斷,進入設置當前時間模式jmp con8setE:MOV buttonE,01hMOV buttonD,00hMOV buttonC,00hcmp flag,01hjz nextSTI ;開中斷,即確認C、D的輸入值next:mov bl,buttonD ;通過判斷三種標志,跳轉到響應設置上cmp bl,01hjz wr

17、iteDEmov bl,buttonCcmp bl,01hjz writeCmov bl,buttonEcmp bl,01hjz writeDEjmp con8;writeC:mov LedBuf+si,alinc siPUSH CXMOV CX,100DELAYc: call disLOOP DELAYCPOP CXcmp si,06hjnz overCmov buttonC,00hoverC: jmp con8;writeDE:cmp flag, 01h ;若取出BUF內時間標志與E鍵標志均為1,則把BUF的內容取回LEDBUFjnz goDcmp buttonE,01hjz recove

18、rLEDgoD:cmp si,06hjnb overDmov LedBuf+si,al ;顯示當前按下的鍵值mov Cbuf+si,al ;存入鬧鐘緩沖區(qū)inc siPUSH CX ;鍵盤防抖MOV CX,100DELAYd: call disLOOP DELAYDPOP CXcmp si,06hjnz overd ;若SI不等06h即小于6,則跳到con8處,繼續(xù)獲取鍵值,直至6位鬧鐘設置完畢MOV BUTTOND,00H ;鬧鐘設置完畢,使D鍵標志失效,使其不會繼續(xù)設置鬧鐘,并將取出BUF內時間標志置1mov flag,01hoverD: JMP con8recoverLED: cli ;

19、實現從BUF知LEDbuf功能的具體代碼區(qū)push sipush cxPUSH BXmov cx,0006hloopD: mov bx,offset LedBufpush cxdec cxmov si,cxpop cxmov bl,Bufsimov LedBufsi,blloop loopDPUSH CX ;鍵盤防抖MOV CX,100DELAYdd: call disLOOP DELAYDdPOP CXMOV BUTTONE,00H ;任務完成,是E鍵標志失效,取出標志失效,鬧鐘響標志生效mov flag,00hMOV Cflag,01hstiPOP BXpop cxpop sistijmp

20、 con8;StartRing:clipush sipush cxcall LEDtoBUF ;啟動鬧鐘顯示前,存儲LEDbufmov cx,08hloopring1:mov LedBuf+0,08h ;開啟時顯示"888888"mov LedBuf+1,08hmov LedBuf+2,08hmov LedBuf+3,08hmov LedBuf+4,08hmov LedBuf+5,08hpush cx ;延時MOV CX,100DELAYring1: call disLOOP DELAYring1pop cxmov LedBuf+0,010hmov LedBuf+1,010

21、hmov LedBuf+2,010hmov LedBuf+3,010hmov LedBuf+4,010hmov LedBuf+5,010hpush cx ;延時MOV CX,100DELAYring2: call disLOOP DELAYring2pop cxloop loopring1call BUFtoLED ;鬧鐘顯示結束,恢復LEDbuf;mov juRing,00hpop cxpop sistiretjudgeclock: cmp Cflag,01h ;判斷是否到達鬧鐘具體代碼區(qū)jnz Noringmov al,LedBufcmp al, CBufjnz Noringmov al,

22、LedBuf+1cmp al,CBuf+1jnz Noringmov al,LedBuf+2cmp al,CBuf+2jnz Noringmov al,LedBuf+3cmp al,CBuf+3jnz Noringmov al,LedBuf+4cmp al,CBuf+4jnz Noringmov al,LedBuf+5cmp al,CBuf+5jnz Noringjmp YesringNoring:jmp returnYesring:call startringreturn:retLEDtoBUF:PUSH sipush axmov si,00hLBloop: mov al,LEDbufsiM

23、OV bufsi,alinc sicmp si,06hjnz LBloopPOP AXPOP SIRETBUFtoLED:push sipush axmov si,00hBLloop: MOV AL,BUFsimov LedBufsi,ALINC SICMP SI,06HJNZ BLlooppop axpop siret;FOR8259:MOV AL,13HMOV DX,Port0OUT DX,AL ;icw1MOV AL,08HMOV DX,Port1OUT DX,AL ;icw2MOV AL,0BHOUT DX,ALMOV AL,7FH ;IRQ7OUT DX,ALRET;中斷子程序;IN

24、T8259:clipush axpush bxpush cxpush si; call judgeclock; cmp juRing,01h; jnz noRing1; call StartRingnoRing1: mov al,LedBuf+5 ;此處往下的代碼區(qū)均無問題,無需更改mov ah,0call judgemov LedBuf+5,almov si,4hcall judge6dec sicall judge9dec sicall judge6dec sicall judge24cmp cflag,01hjnz noringggcall judgeclocknoringgg:pop

25、sipop cxpop bxpop axCALL DISSTIIRET;judge: cmp al,09hjnz LL1mov al,0mov ah,1hjmp judge0LL1: inc aljudge0: retjudge6: mov al,LedBuf+siadd al,ahmov ah,0hcmp al,06hjnz LL2mov al,0mov ah,1hLL2: mov LedBuf+si,alretjudge9: mov al,LedBuf+siadd al,ahmov ah,0hcmp al,0ahjnz LL3mov al,0mov ah,1hLL3: mov LedBuf

26、+si,alretjudge24: mov al,LedBuf+0cmp al,2jz LL4call judge9mov al,LedBuf+0add al,ahmov ah,0hmov LedBuf+0,aljmp L24LL4:mov al,LedBuf+1add al,ahmov ah,0hcmp al,4hjnz LL5mov al,0mov LedBuf+0,almov LedBuf+1,alJMP L24LL5: mov LedBuf+1,alL24: ret;GetKey: ;鍵掃子程序mov al,0ffh ;關顯示口mov dx,OUTSEGout dx,almov bl,0mov ah,0fehmov cx,8key1: mov al,ahmov dx,OUTBITout dx,alshl al,1mov ah,a

溫馨提示

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

評論

0/150

提交評論