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,7fh,6fh;数码显示管对应的0~9

  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     jmp main

 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 code ends

131     end start             



  • 8
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值