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字节缓冲区中后面几个对应的字形码为不显示(暗)就是了。