
一般是下列7段,构成8字形,最上面一段为a,按顺时针排列构成bcdef,中间一段为g
--a---
f ||b
---g---
e||c
---d---
下面举例说明
假设输入 1,则转换为8421BCD码为0001,译码后输出 为b c亮,其余暗,此时看到的四显示‘1’,以此类推,可得到
84 21 abc d efg
1 00 01 0 11 0 0 00
2 00 10 1 10 1 1 01
3 00 11 1 11 1 0 01
4 01 00 0 11 0 0 11
5 010 1 1 011 0 1 1
6 01 10 1 01 1 1 11
7 0 1 11 1 11 00 00
8 1 0 00 1 111 1 1 1
9 1 0 01 111 10 11
0 0 0 0 0 1111 11 0
从上可以看出,a段在输入不为1,4时点亮
b段在输入不为5,6时点亮
。。。。。。。。。。。
以此类推,可以得到各个输出与输入的关系,从而达到译码的目的。
以上分析都是在‘1’点亮灯时达到的,如果0点亮LED灯,则输出取反,即‘1’取反为‘0’, 0取反后为1
以1567为例,,,我是四川大学的,你也是吧DATAS SEGMENT
buffer1 dw 1657h
buffer2 dw ? 分配两个字节的空间
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
mov ax,[buffer1]
and ax,0f000h
mov cl,12
shr ax,cl
mov dx,ax 至此,已将5678h(BCD)中的5(十进制)取出,并放入dx中
call change 调用chang,将5乘以10
mov ax,dx
mov bx,[buffer1]
and bx,0f00h
mov cl,8
shr bx,cl
add ax,bx
mov dx,ax
call change
mov ax,dx
mov bx,[buffer1]
and bx,00f0h
mov cl,4
shr bx,cl
add ax,bx
mov dx,ax
call change
mov ax,dx
mov bx,[buffer1]
and bx,000fh
add ax,bx 至此,ax中的值已是5678(十进制),但电脑是将其以二进制的形式存储的,故应是0679h,二进制就是0000011001111001
mov buffer2,ax 因为后面会用到ah,为避免在其过程中丢失ax中的数据,故将ax中的数据放入buffer2中
mov cx,16
again:shl buffer2,1将已经转换成二进制的数逐个显示出来
mov dl,0
adc dl,30h
mov ah,2
int 21h
loop again
MOV AH,4CH
INT 21H
change proc子程序change的功能是实现dx乘以10
add dx,dx
mov cx,dx
add dx,dx
add dx,dx
add dx,cx
ret
change endp
CODES ENDS
END START
BCD码与十进制数的转换关系很直观,相互转换也很简单。
将十进制数75.4转换为BCD码:7-》0111,5-》0101,4-》0100所以拼成8421BCD码的结果是:(0111 0101.0100)BCD;若将BCD码1000 0101.0101转换为十进制数:1000-》8,0101-》5,0101-》5所以结果是:(85.5)。
注意:同一个8位二进制代码表示的数,当认为它表示的是二进制数和认为它表示的是二进制编码的十进制数时,数值是不相同的。
扩展资料
看数据的来源和用途。BCD码一般用于输入和输出,例如来自拨码开关的数据是BCD码,送给显示电梯楼层的译码器芯片的是BCD码。
8421 BCD码是最基本和最常用的BCD码,它和四位自然二进制码相似,各位的权值为8、4、2、1,故称为有权BCD码。和四位自然二进制码不同的是,它只选用了四位二进制码中前10组代码,即用0000~1001分别代表它所对应的十进制数,余下的六组代码不用。
BCD码用十六进制格式输入,其最高位(符号位为16#F(2#1111)。BCD码的低3位各位只能是0~9,如果是16#A~16#F则会出错。 计数器的预设值PV是0~999的BCD码,可以用格式为C#的常数(C#1~C#999)作为计数器的预设值。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)