"); //-->
关键词:单片机;串行口;LED显示;89C51
在单片机系统中,数码管(LED)是一种常用的显示器。一般的显示器为4位或8位,实现这种显示的方法比较多,也比较简单。但是,对于多个LED显示,由于单片机本身提供的1/O口有限,就必须采取必要的措施才能实现。本文介绍一种设计方法,利用该方法设计的多路LED显示系统具有硬件结构简单,软件编程方便,价格低廉等特点,经常应用在车站、银行的显示屏中,效果很好。
1硬件电路的设计
AT89C51单片机是美国ATMEL公司生产的51系列单片机,应用广泛。89051单片机串行口除了可用于串行通讯,它在方式0状态下,还可以扩展并行I/O口,能够实现多个LED显示,其硬件原理如图1所示。其中,74LS164为8位串入并出移位寄存器,可以级连使用二LED采用LG5011AG型共阴极数码管。
其中的74L5164引脚功能为;QO-Q7并行输出端;A, B串行输入端;CR清除端,低电平时输出端清零;CLK时钟脉冲输入端,在脉冲的上升沿实现移.位,当CLK=0且CR=1时,74LS164保持原有的数据状态。
2时序分析
当89051单片机复位时,串行口为方式0状态,即工作在移位寄存器方式,TXD作同步移位脉冲,RXD作数据端;发送/接受8位数据,低位在前,高位在后;时钟速率为单片机晶振频率的十二分之一。单片机执行MOV SBUF,A指令的S6P2时.出现写SBUF信号。一个机器周期后,TXD输出移位脉冲,RXD同步串行发送SBUF中的数据。每个机器周期TXD发送一个移位脉冲,每个移位脉冲RXD发送一位数据。发送完8位数据后自动置TI为1,请求中断。时序如图2‑
第一个74LS164把第一帧数据并行输出,LED1显示该数据.然后,在中断服务程序中用软件将竹清零,发送第二帧数据。第二帧数据发送完毕,LED1显示第二帧数据,第一帧数据串行输入给第二个74LS164;LED2显示第一帧数据,以此类推。
3参考程序
电路如图1所示,驱动10个LED循环显示数字0-9(每秒移动一位)的部分参考程序如下:
主程序为:
START:MOV SP,#30H
MOV TMOD ,#01H;定时器0方式1
MOV TLO,#OOH
MOV THO,#4BH;初值,定时SOms
MOV R0,#OOH
MOV TIMER,#20
MOV SCON,#OOH;串口的工作方式0
CLR TI
CLR RI;清发送接受标志位
SETB TRO;启动定时
SETB ETO;开中断
SETB EA
S1MP$
中断服务程序:
INTTO:PUSH ACC
PUSH PSW
CLR EA
CLR TRO
MOV TLO,#OOH
MOV THO,#4BH
SETB TRO
DJNZ TIMER,EXIT
MOV TIMER,#20
MOV DPTR,#TABLE
MOV A,RO
MOVC A,@A+DPTR
CLR TI
MOV SBUF ,A
INC RO
CJNE R0,#OAH,EXTT
MOV R0,#OOH
TABLE:DB OCOH,OF9H旧A4H,OBOH,99H,92H‑82H,OF8H,80H,90H
END
4结束语
采用74LS164驱动多个LED,有效地解决了动态显示需要CPU时刻对显示器进行数据刷新。显示数据有闪烁感,占用的CPU时间多的弊端。其不足之处是使用硬件电路较多,并且速度慢,所以适用于速度要求不是很快的场合
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。