實驗七段數碼管靜動態顯示_第1頁
實驗七段數碼管靜動態顯示_第2頁
實驗七段數碼管靜動態顯示_第3頁
實驗七段數碼管靜動態顯示_第4頁
實驗七段數碼管靜動態顯示_第5頁
已閱讀5頁,還剩1頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、微機實驗報告書學號: 姓名: 班級: 同組名單: 實驗日期: 實驗題目: 七段數碼管的靜態顯示 實驗目標: 掌握數碼管顯示數字的原理 (功能:鍵盤輸入一位十進制數字(09),用七段數碼管顯示。) 解題思路:1. 靜態顯示:按圖 10(a)連接好電路,將8255的A口PA0-PA6分別與七段數碼管的斷碼驅動輸入端a-g項鏈,位碼驅動輸入端S1接+5V,S0、dp接地。編程從鍵盤輸入一位十進制數字,在七段數碼管上顯示出來。2. 動態顯示:按圖10(b)連接好電路,七段數碼管段碼連接不變,位碼驅動輸入端S1,S0接8255C口的PC1,PC0。編程在兩個數碼管上顯示“56”。程序框圖:靜態顯示見圖1

2、1(a),動態顯示見圖11(b)。關鍵問題分析(靜態顯示):1、 按鍵判斷和程序結束判斷按鍵來說,由于程序中必須輸入數字,所以沒有必要對是否按鍵進行判斷,只需要判斷按鍵是否在0-9之間即可。用以下程序即可:cmp al,'0' jl exit ; jl,條件轉移指令,即在小于時轉移cmp al,'9' jg exit ;jg, 條件轉移指令,即在大于時轉移程序中還要用到“cmp”即比較指令,用來比較輸入數與0、9的大小關系。程序結束:如若輸入的數字小于0或者大于9,必須直接跳出程序,即結束指令必須單獨占用一個程序段,這樣,程序順序執行完畢也可以順利返回DOS。2

3、、 七段碼顯示。實驗指導書中給出了七段碼的字型代碼。這樣一來,七段碼的顯示只需要用換碼指令“XLAT”便可以輕松實現。前提是必須將七段碼字型編成數碼表以字符串的形式寫進程序中。3、 數字鍵ASCII碼與數值間的轉換。因為0的ASCII碼為30H,所以數字鍵ASCII碼與數值間的轉換時只需減去30H即可,可用下列語句實現:sub al,30h程序清單: 靜態顯示:data segmentioportequ 0c800h-0280hio8255aequ ioport+288hio8255bequ ioport+28bhled db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7

4、fh,6fhmesg1 db 0dh,0ah,'Input a num (0-9h):',0dh,0ah,'$'data endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov dx,io8255b ;使8255的A口為輸出方式mov al,80h ;10000000B,控制字PA以方式0輸出out dx,alzby: mov dx,offset mesg1 ;顯示提示信息mov ah,09hint 21hmov ah,01 ;從鍵盤接收字符int 21hcmp al,'0

5、' ;是否小于0jl exit ;如若小于0,則跳轉到exit退出程序cmp al,'9' ;是否大于9jg exit ; 如若大于9,則跳轉到exit退出程序sub al,30h ;將所得字符的ASCII碼減30H,數字鍵ascii碼同數值轉換mov bx,offset led ;bx為數碼表的起始地址xlat ;求出相應的段碼mov dx,io8255a ;從8255的A口輸出out dx,aljmp zby ;轉zbyexit: mov ah,4ch ;返回DOSint 21hcode endsend start動態顯示:data segmentioportequ

6、 0c800h-0280hio8255aequ ioport+28ahio8255bequ ioport+28bhio8255cequ ioport+288hled db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh ;段碼buffer1 db 5,6 ;存放要顯示的個位和十位bz dw ? ;位碼data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axmov dx,io8255b ;將8255設為A口輸出mov al,80h ;10000000B,控制字PA以方式0輸出out

7、dx,almov di,offset buffer1 ;設di為顯示緩沖區loop2:mov bh,02zby: mov byte ptr bz,bhpush didec diadd di, bzmov bl,di ;bl為要顯示的數pop di mov al,0 mov dx,io8255a out dx,almov bh,0mov si,offset led ;置led數碼表偏移地址為SIadd si,bx ;求出對應的led數碼mov al,byte ptr simov dx,io8255c ;自8255A的口輸出out dx,almov al,byte ptr bz ;使相應的數碼管亮

8、mov dx,io8255aout dx,almov cx,3000delay:loop delay ;延時mov bh,byte ptr bzshr bh,1jnz zbymov dx,0ffhmov ah,06int 21hje loop2 ;有鍵按下則退出mov dx,io8255amov al,0 ;關掉數碼管顯示out dx,almov ah,4ch ;返回int 21hcode endsend start運行結果:靜態顯示:在鍵盤上輸入一個0-9的任意數字,會顯示在數碼管上。動態顯示:在程序中寫入6,5,讀取順序是第一位是個位,第二位是十位,數碼管上顯示56.問題與討論:1、鍵盤輸

9、入不符合要求如何處理?如若鍵盤輸入不符合要求,則立即跳到結束程序段,返回到DOS。2、用8255的其他端口輸出怎么處理?由于其他端口輸出并沒有用到,控制字中寫成0或者1都行,一般習慣上不用到填0即可。3、在兩位七段數碼管間切換顯示怎么處理?通過硬件連線即可實現。七段數碼管連接和S1連接不變。將S0不接地,接到+5V,并同時將S1和S0接到兩個不同的邏輯開關。程序LINK運行完畢。當S1邏輯開關為高電平時(S0邏輯開關為低電平),在第一個數碼管顯示;當S0邏輯開關為高電平時(S1邏輯開關為低電平),在第二個數碼管顯示,這樣便實現了在兩位數碼管間的切換。小結(體會和收獲)靜態顯示是從鍵盤獲取一個數值,然后通過程序比較得出鍵盤輸入的數字量,由PA端口輸出到數碼管上。而動態顯示是將兩個數字寫入程序中,由程序讀取數字然后按位輸出到數碼管上顯示。原理說得簡單,但是程序本身個人感覺還是相當復雜的,尤其動態顯示,程序如何讀取已輸入的數字,以及讀取數字的順序都會影響到數碼管的顯示。 靜態顯示過程中,我們碰到數碼管一直顯示8的狀態,這并不是預期的效果。后來發現,由于在程序中用符

溫馨提示

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

評論

0/150

提交評論