编程论坛
注册
登录
编程论坛
→
汇编论坛
请高手指教
cyh2926
发布于 2008-10-18 12:49, 932 次点击
我做了个8位数码管,拿8个74HC164来做的,数据引脚(P0.2),时钟引脚(P0.3),
但是不懂怎么控制位的显示,就比如说我想要第一个数码管显示,第2个不显示。有那位高手能编个0~20循环变化的程序示范一下不,谢谢
2 回复
#2
cnhanxiao
2008-10-18 23:08
164芯片是串转并,通常使用单片机串口(Rxd/Txd)串行发送数据给它,由它来转成并行信号驱动LED显示。
如果你采用静态显示接口的话,其实很容易实现,显示子程序如下(硬件线路必须保障):
;功能:把数据从显示缓冲区送到数码管
;入口:把要显示的数据放在一个8字节显示缓冲区Buf中。
;出口:把预置的数输出以更新原有显示
display: SETB RS0 ;保护第0组工作机存器
PUSH ACC
PUSH DPH
PUSH DPL ;保护现场
MOV R2,#08h ;显示8个数码管
MOV R0,#Buf7 ;显示缓冲区最后一个数据的地址送入R0
L1: MOV A,@R0
MOV DPTR,#Tab
MOVC A,@A+DPTR ;译码
MOV SBUF,A ;发送
JNB TI,$ ;等待发送完一帧
CLR TI ;清中断标志
DEC RO ;继续下个字符
DJNZ R2,L1 ;没有传输完所有要显示字符则继续
CLR RS0 ;回复第0组寄存器
POP DPL
POP DPH
POP ACC ;恢复现场
RET
Tab: ;这是你定义的0~9还有不显示(暗)的字形表
这里面我只想说,调用上面这段子程序时候,先关掉显示,等子程序返回,再开显示。
因为LED的光滞留现象和人的视觉暂留,显示看着是很平稳的。但是你要不先关闭显示,就调用这段程序,肯定感到很闪烁——164是一级一级传送数据的。
至于第二个数码管甚至后面都不显示,其实就是8字节缓冲区中后面几个对应的字形码为不显示(暗)就是了。
#3
cyh2926
2008-10-26 10:07
谢谢你
呵呵 非常感谢你 .
1