单片机数码管显示。为什么会一个亮其他的都暗呢?+100

来源:百度知道 编辑:UC知道 时间:2024/06/24 12:28:17
MOV R0,#6
MOV R2,#1
MOV A,#01H
CLR C
MOV R1,#30H
XLED: MOV P2,A
MOV P0,@R1

INC R1

RLC A
DJNZ R0,XLED
MOV R1,#30H
一共六个数码管,数据显示缓冲区是从30H~35H 六个数码管是并行数据输入。P2口是位选。01H 02H 40H 80H 10H 20H对应每个数码管
你看我这里
XLED: MOV P2,A
MOV P0,@R1

INC R1

RLC A
DJNZ R0,XLED
没循环一次 一个数码管被选通,相应的数据寄存器内容被送入数码管显示!

你这个不完整..看不出所有的..

不过就你这个代码.肯定实现不了你 数码管动态显示的目的

如果你的p2 的 0,1,2,3,4,5,6 脚控制数码管的公共端的话.
你这个代码.只会导致最后一个脚也就是6脚的led亮.
其他的都不亮了..
因为..显示led后面肯定还有其他代码.
那些代码在运行的时候只有6脚的公共端选通了.
因为前面的5个led都是只通电一下.很短时间..根本没用..

要实现数码管都亮,,并需6个数码管选通的时间基本一样才行.
比如都导通5ms 10ms之类的..

你这样.想到相当于 01234导通x(us),5导通 x(ms)
导通时间不是一个数量级的.
但愿你能明白,代码我就不写了,祝你好运

如果你要修改的话.

最好是用一个中断..
隔5ms选通一个数码管就好了.
5ms 0
10ms 1
15ms 2
这样循环就好了.