8255實現數碼顯示管顯示兩位數字
本程式實現8255基本輸入輸出實驗,即傳遞一個待顯示引數,實現數碼顯示管顯示該引數(即顯示兩位),其中8255ABC三口均為輸出
實驗步驟:
1.初始化8255
2.將要顯示的數分割成數碼管對應的數
3.利用餘輝效應,讓數碼管顯示對應得數字
注意:讓數碼管顯示時,每次顯示一位時,先關閉數碼管顯示,然後送段位,最後送位選通,由於人的大腦在2毫秒的情況下,未能反應,故看到數碼顯示管顯示的是兩位,其實在程式碼控制中是一位一位顯示的
程式碼如下:
1 ;巨集定義,8255口地址
2 ioy1 equ 0640H ;片選ioy1對應的埠始地址
3 my8255_a equ ioy1+00H*2 ;8255的A口地址
4 my8255_b equ ioy1+01H*2 ;8255的B口地址
5 my8255_c equ ioy1+02H*2 ;8255的C口地址
6 my8255_mode equ ioy1+03H*2 ;8255的制暫存器地址
7 data segment
8 array1 db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,
9 times db 90 ;數碼管要現實的數字
10 num1 db 0 ;用來儲存十位數字
11 num2 db 0 ;用來儲存個位數字
12 dataends
13 sstack segment stack
14 dw 32 dup(?)
15 sstack ends
16 code segment
17 assume cs:code,ds:data
18 start:
19 main:
20 mov ax,data
21 mov ds,ax
22 call init
23 call divide
24 call show
25
26 ;*****************************************
27 ;初始化8255,向8255送控制字,abc均為輸出口
28 init proc near
29 mov ax,80h
30 mov dx,my8255_mode
31 out dx,ax
32 ret
33 init endp
34 ;*****************************************
35
36 ;*****************************************
37 ;向bx和si中傳入要顯示的數值的地址
38 show proc near
39 ;顯示管熄滅
40 mov dx,my8255_c
41 xor ax,ax
42 mov al,11b
43 out dx,al
44 ;顯示十位
45 mov dx,my8255_b
46 xor ax,ax
47 lea bx,num1
48 mov al,[bx]
49 out dx,ax
50 mov dx,my8255_c
51 xor ax,ax
52 mov al,10b
53 out dx,al
54 ;延時處理
55 call delay
56 ;顯示管熄滅
57 mov dx,my8255_c
58 mov al,11b
59 out dx,al
60 ;顯示個位
61 mov dx,my8255_b
62 xor ax,ax
63 lea si,num2
64 mov al,[si]
65 out dx,ax
66 mov dx,my8255_c
67 mov al,01b
68 out dx,al
69 ret
70 show endp
71 ;*****************************************
72
73 ;*****************************************
74 ;將給定的要顯示的十進位制數轉換為數碼管對應的0~9
75 ;思路是用十進位制數除以10,商儲存在al中,餘數儲存在ah中
76 ;利用偏移量取出數碼管對應的要顯示的編碼
77 divide proc near
78 ;儲存資訊
79 push di
80 push ax
81 push bx
82 push cx
83 push si
84 ;將數字初除以10 商儲存在al中,餘數儲存在ah中
85 xor ax,ax
86 xor bx,bx
87 xor cx,cx
88 mov al,times[0]
89 mov bl,0ah
90 div bl
91 mov cx,ax
92 lea bx,array1
93 xor ax,ax
94 mov al,cl
95 ;獲得實際待顯示的數碼管的地址
96 add bx,ax
97 lea si,num1
98 mov ax,[bx]
99 ;將該地址中的值賦值給num1,即十位
100 mov [si],al
101 lea bx,array1
102 xor ax,ax
103 mov al,ch
104 ;獲得實際待顯示的數碼管的地址
105 add bx,ax
106 lea si,num2
107 mov ax,[bx]
108 ;將該地址中的值賦值給num2,即個位
109 mov [si],al
110 pop si
111 pop cx
112 pop bx
113 pop ax
114 pop di
115 ret
116 divide endp
117 ;***************************************
118
119 ;***************************************
120 ;延時處理
121 delay proc near
122 push cx
123 mov cx,10
124 mylelay:
125 loop mylelay
126 pop cx
127 ret
128 delay endp
129 ;****************************************
130 codeends
131 end start