基于AT89C2051串口的LED数码管显示电路,AT89C2051 LED DISPLAYER
关键字:AT89C2051数码管电路
AT89C2051单片机内有一个串行I/O端口,通过引脚RXD[P3.0]和TXD[P3.1]可与外部电路进行全双工的串行异步通信,发送数据时由TXD端送出,接收时数据由RXD端输入。串口有四种工作方式,通过编程设置,可以使其工作在任一方式以满足不同的场合。其中,方式0是8位移位寄存器输入/输出方式,多用与外接移位寄存器以扩展I/O端口。串口的工作方式可以参看相关的书籍,此处不做详细介绍。方式 0的输出是8位串行数据,通过移位寄存器可将8位串行数据变成8位并行数据输出,也可以将外部的8位并行数据变成8位串行数据输入。因此外接一个移位寄存器就可扩展一个8位的并行输入/输出接口,如果想多扩展几个并口就需要在外部级连几个移位寄存器。但是这种扩展也不是无限的,因为串口的数据是一位一位串行输入/输出的。如果外接的移位寄存器比较多的话那么是必影响数据输入/输出的速度。

串口外接的移位寄存器有两种,一种是“串行输入/并行输出移位寄存器”(如:741一S164),另一种是“并行输入/串行输出”移位寄存器(如: 74LS165)。通过寄存器的名称就可以看出“串行输入/并行输出移位寄存器”是用于串口扩展并行输出接口,“并行输入/串行输出”是用于串口扩展并行输入接口。
图1(a)是串行输入/并行输出移位寄存器74LS164的管脚排列图。其功能表见表1所示。74LS164有两个串行数据A、B输入端,使用时一般把它们连在一起;丽为清零输入端,低电平有效,当该端加入低电平时,寄存器输出Q0~Q7全为低电平。在正常情况下,清零输入端接高电平,当CP信号上升沿到来时,数据从A、B端输入并右移一位; Q0~Q7为并行数据输出端,同时Q7端也是串行数据输出端,对于串行输入的数据,最先输入的从Q7输出,最后进入的从Q0输出。CP为移位脉冲。
图1(b)是另一种常用的“并行(串行)输入/串行输出”移位寄存器74LS165的管脚排列图。该器件的功能表见表2。该器件能在一个信号的控制下并行置入一个8位数据,然后在时钟脉冲的作用下逐位移出,也能使数据从另外一个引脚串行输入。在图1(b)中,DO~D7是并行数据输入端。S/L端是控制信号输入端,当为高电平时,具有移位功能;当为低电平时,将DO~D7端的数据置入到内部的移位寄存器保存。CP端为时钟(即移位脉冲)输入端,当S/L= 1时,CP端的每一次正跳变,都会使已存入内部的数据DO~D7从Q7端移出一位,移位的顺序是D7最先从Q7端移出,Q0最后从Q7端移出。CI端为时钟脉冲禁止端,当该端为低电平时,时钟信号(移位脉冲)不能进入,正常工作时必须接高电平。S1为串行数据输入端,在S/L=1时,SI端的数据在CP脉冲上升沿作用下置入Q0,因此,当CP脉冲上升沿到来时内部的数据DO~D7从Q7端移出一位同时外部数据通过SI移入一位,当经过8次CP上升沿后 DO~D7这8个数据就全部通过Q7输出,而内部的DO~D7全部更新为通过SI的输入的信号。例如:如果SI外接电源电压,那么当CP上升沿到来时,Q7会移出一位数据,而S1会移入一个“1”,当经过8个上升沿后,原先置入的DO~D7全被移出,内部的Q0~Q7全被更新为 “1”。如果CP上升沿再次到来时,输出的就是“1”。因此当8个输入数据都通过Q7输出后,如果还想输入就再次必须置入新的数据

通过对两种移位寄存器的分析可以得出。通过串口扩展单片机的I/O口的具体电路如图2所示:
图2(a)是通过串口扩展的并行输出接口。RXD作为数据输出线,TXD作为移位时钟脉冲。每一个时钟信号的上升沿加到74LS164的CP端时,移位寄存器将串口输出的数据移入一位,8个时钟脉冲过后串口输出的8位二进制数全部移入74LS164,通过Q0-Q7并行输出。
图2(b)是通过串口扩展的并行输入接口。同样RXD作为数据输入线,TXD作为移位时钟脉冲。每一个时钟信号的上升沿加到74LS165的CP端时,移位寄存器就将内部的数据向外移一位,通过Q7输出。8个时钟脉冲过后,并行输入的8位二进制数全部移出,通过Q7串行输入。
基于串口的LED数码管静态显示电路
在串口扩展中最常用的就是基于串口的LED数码管显示电路。在单片机应用系统中,LED数码管的显示常用两种方法:静态显示和动态扫描显示。所谓静态显示,就是每一个显示器都要占用单独的具有锁存功能的I/O接口用于笔划段字形代码。这样单片机只要把要显示的字形代码发送到接口电路,就不用管它了,直到要显示新的数据时,再发送新的字形码,因此,使用这种方法单片机中CPU的开销小。可以提供单独锁存的I/O接口电路很多,常用的就是通过串口外接串并转换器74LS164,扩展并行的I/O口。需要几个数码管就扩展几个并行接口,数码管直接接在74LS164的输出脚上,单片机通过串口将要显示数据的字形码逐一的串行移出至74LS164的输出脚上数码管就可以显示相应的数字。
1. 硬件设计
单片机AT89C2051的串口外接1片74LS164作为LED显示器的静态显示接口,把AT89C2051的RXD作为数据输出线,TXD作为移位时钟脉冲。Q0-Q7(第3—6和10—13引脚)并行输出端分别接LED显示器的DP---A各段对应的引脚上。图中采用的是共阴极数码管,因而各数码管的公共极接电源GND,要显示某字段则相应的移位寄存器74LS164的输出线必须是高电平。P1口接8个按键,分别编号为KEY1--KEY8。当某个按键按下时。某个数就显示在数码管上。
2. 软件设计
软件设计流程图如图4所示。图(a)为主程序流程图,图(b)为显示子程序流程图。
开机时,初始化数码管,通过串口将“0”的字形码输出使数码管显示“O”。然后判断P1口是否有键按下,如果没键按下继续判断。
当确认有键按下后单片机将P1口的值赋给累加器A,由于按键没被按下时是低电平,被按下后为高电平因此判断A中哪一位为高电平就能得出哪个按键被按下。将此按键的编号读入显示缓冲区65H中,然后调用显示子程序将按键编码显示在数码管上。这样程序就完成了一次的执行过程。

显示子程序首先初始化串口,使串口工作在方式0,再读取显示缓冲区内的数据(显示缓冲区主要是用来存放即将要显示的数据),然后通过查表的方式找到对应的字形码,最后把字形码写入串口寄存器SBUF通过串口方式0发送出去。当8个时钟脉冲后,字形码都移至74Ls164的Q0-Q7,数码管就显示相应按键的编码。
显示子程序是怎么将显示缓冲区中的数据变成相应的字形码呢?具体的方法是将每个数字的字形码以16进制数从小到大的次序依次存放在存储器中的固定区域中,构成显示代码表。当要显示某字符时,把表格的起始地址送入数据指针寄存器DPTR中作为基址,将显示缓冲区内的数据作为偏移量送入变址寄存器A,执行查表指令“MOVCA,@A+DPTR”,则累加器A中得到的结果即表格中取出的对应数字的字形码。
注意:MOVC指令是将程序存储器内相应地址的值赋给累加器A。MOVC指令只有两种,一种是:MOVCA,@A+DPTR,将程序存储器中地址为A+ DPTR内的数据赋给A,例如:累加器A内的数据为01H,而DPTR内的数据为2000H,程序存储器中地址2001H内的数据为50H,那么执行 MOVCA,@A+DPTR指令后,累加器A内的数据变为50H。另一种是MOVCA,@A+PC。将程序存储器中地址为A+PC内的数据赋给A。两种指令的功能基本是一样。只是第一种中的地址是存放在DPTR中,而第二种是直接使用PC指针的地址。
对于电路中的74LS164共阴极数码管数据位和字形的对应关系如下表。

由于单片机在以方式0串行发送数据的时候数据从RXD引脚从低位到高位依次输出,而最先输出的数据经过74LS164串转并后到达Q7,也就是说单片机内的DO通过串口发送并经过74LS164后到达74LS164的Q7脚即数码管的A脚,因此在单片机内字型码与74LS164所对应的字型码正好相反,所以在单片机内O-8所对应的字型码分别是:
3FH,06H,5BH,4FH,66H,6DH,7DH,07H.7FH。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
发布评论请先 登录
相关推荐
热点推荐
FZH183 带键盘扫描接口的LED(发光二极管显示器)驱动控制专用电路--方中禾科技
℃(存储)。典型应用电路共阴数码管连接:SEG接LED阳极,GRID接阴极,通过寄存器数据控制显示。共阳数码管连接:GRID接
发表于 11-28 09:31
FZH119 一种LED(发光二极管显示器)驱动控制与用电路,内部集成有MCU 数字接口、数据锁存器、 LED 驱动等电路
屏驱动。采用SOP28的封装形式。 主要特性集成功能内置MCU数字接口、数据锁存器、LED驱动电路,支持动态扫描显示。支持8段×16位的显示模式,适用于多位
发表于 11-20 09:55
原厂 FZH114C 一款LED(发光二极管、数码管、点阵屏)驱动控制专用芯片
FZH114C通过灵活的亮度调节、单线通讯和动态扫描设计,显著简化了多位数码管或LED点阵屏的驱动电路设计。其独特的引脚排列(如VDD位于引脚13)和SOP16封装,使其在紧凑型设计中
发表于 11-19 14:43
FZH114 LED(发光二极管、数码管、点阵屏)驱动控制专用芯片,集成数字通讯电路、 解码电路、数据锁存器、震荡器
)FZH114 是一款LED(发光二极管、数码管、点阵屏)驱动控制专用芯片,内部集成了数字通讯电路、解码电路、数据锁存器、震荡器、
发表于 11-19 11:13
点阵数码管显示芯片高抗干扰数显IC芯片VK1S68C
产品品牌:永嘉微电/VINKA
产品型号:VK1S68C
封装形式:SSOP24
产品年份:新年份
简介:VK1S68C是一种带键盘扫描接口的数码管或点阵LED驱动控制专用芯片,内部集
发表于 11-06 17:45
级联动态扫描显示数码管问题
GD32F103C8T6
硬件SPI连接移位寄存器74HC595级联,动态扫描显示五位数码管
是否需要电平转换芯片TXB0104
数码管选择共阴极和共阳极区别是什么
若使用TXB010
发表于 10-07 20:36
防干扰数码管驱动LED数码管驱动芯片VK1668
产品型号:VK1668
产品品牌:永嘉微电/VINKA
封装形式:SOP24
概述
VK1668是一种带键盘扫描接口的数码管或点阵LED驱动控制专用芯片,内部集成有3线串行接口、数据锁存器、LED
发表于 03-25 17:13
数码管的结构与原理
数码管,也被称作辉光管或LED数码管,是一种能够显示数字、字母、符号等信息的电子设备。它广泛应用于各种电子设备中,如计算器、电子钟表、电子秤
数码管共阴和共阳的区别
在电子设备的众多显示元件中,数码管以其简单直观、成本低廉等特点,广泛应用于各类电子仪器仪表、数码时钟、电子秤等设备上,承担着数字和简单字符的显示任务。对于电子工程师和电子爱好者而言,深
求解答!用STC89C51系列数字秒表
实验室学51单片机,用STC89C51系列,作业太难了,求佬给源代码帮助一下谢谢
1.通过定时器,8位数码管,8个独立按键完成1000秒以内的数字秒表,最小分辨0.1秒,设置启动计秒键,暂停计秒键
发表于 12-08 16:48

基于AT89C2051串口的LED数码管显示电路,AT89C2051 LED DISPLAYER
评论