注册 登录
编程论坛 汇编论坛

请高手指教

cyh2926 发布于 2008-10-18 12:49, 932 次点击
我做了个8位数码管,拿8个74HC164来做的,数据引脚(P0.2),时钟引脚(P0.3),
但是不懂怎么控制位的显示,就比如说我想要第一个数码管显示,第2个不显示。有那位高手能编个0~20循环变化的程序示范一下不,谢谢
2 回复
#2
cnhanxiao2008-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
cyh29262008-10-26 10:07
谢谢你
呵呵  非常感谢你 .
1