要求:0~9这10个数字的8段LED显示代码被定义在一个名为LED_DATA的数据段中,LED_TAB存放在内存中,我们将0
~9显示段码存放在内存中的LED_TAB字段中。要显示的4位十进制数以2字节(16位)组合(压缩)BCD码形式由DisBuf变量指示,现要求显示这4个数字,已知LED显示器的地址为0x80001003(千位)、0x80001002(百位)、0x80001001(十位)、0x80001000(个位)。
汇编程序如下:
AREA Display,CODE,READONLY
ENTRY
CODE32
START LDR R1,=0X80001000
LDR R0,=DisBuf
MOV R3,#0
MOV R4,#0X0000000F
LDR R2,[R0]
MainLP AND R2,R2,R4
LDR R5,=LED_TAB
MOV R4,R4,LSL#4
MOV R6,R3,LSL#2
MOV R2,R2,LSR R6
ADD R5,R5,R2
LDR R6,[R5]
STR R6,[R1]
ADD R1,R1,#1
ADD R3,R3,#1
CMP R3,#3
BMI MainLP
B START
AREA LED_DATA,DATA,READWRITE
LED_TAB DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
DisBuf DCW 0x1234
END
其中,3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH分别代表8段LED显示的数字0~9。8段LED数码显示管如下所示:

对于共阴极数码管,只有当引脚a~g为高电平(即为1)时,二极管才能被点亮,而共阳极数码管则恰好相反。此题默认为是共阴极数码管。所以当要显示数字0时,a,b,c,d,e,f段数码管应该被点亮,对应的字节即为0011 1111换算成16进制即为3FH,这里a充当最低位,最高位是小数点位Dp。其他情况同理。
本文介绍了一段用于8段LED显示器的汇编程序,该程序通过读取压缩BCD码显示4位十进制数。详细解析了如何从内存中读取数据,并通过位操作选择正确的显示段码,最终将结果显示在共阴极LED显示器上。

3万+

被折叠的 条评论
为什么被折叠?



