51单片机之外设——玩转数码管

发布者:Qingfang最新更新时间:2020-04-06 来源: eefocus关键字:51单片机  外设  数码管 手机看文章 扫描二维码
随时随地手机看文章

这篇博文,将对数码管进行介绍和驱动,与之所关联的芯片,亦是前面所讲的74HC138译码器、74HC02或非门74HC573锁存器,所用的 I/O 口,依然是11个——P2.5P.6P2.7以及P0~P7。


首先,什么是数码管?


数码管是由多个发光二极管封装在一起,而组成的“8”字型元器件。一般开发板上所用到的是四位共阳极(或者共阴极)的数码管,也就是说,是将数码管四个四个的连在一起,并将引脚引出。下面附上四位一体的数码管以及单个数码管的原理图:

这里写图片描述这里写图片描述

其实物图如下所示:

这里写图片描述

可见,四位一体的数码管,只是将四个数码管封装在一起,同时将所有数码管的段选引脚一起引出,位选引脚仍然单独引出而已(什么是段选?位选?接下来会介绍)。


上面说到了共阳极,那自然会有共阴极吧?是的!那什么是共阳极和共阴极呢?让我们看看他们的内部原理图就一目了然了!

这里写图片描述

其中a,b,c,d,e,f,g,dp即为数码管中每个 LED 灯(共8个),COM口是位选端。单个数码管(一位数码管)的COM口有两个(可以起到分流以及让引脚分布均匀的作用,因为元器件的引脚分布多为偶数个)。


再来看下,数码管显示的工作状态:静态数码管和动态数码管。


静态数码管:当多位数码管连接在一起时,它们的“位选”是可单独控制的,但是他们的“段选”都是连接在一起的(比如说,我们控制四位数码管的“a”灯亮,假如我们位选是选择了四位,那么四个数码管的“a”灯都会亮)。所以当我们将所有的位选一起控制时的数码管显示的模式即为“静态数码管”,此时所有的数码管显示的值都相同。


动态数码管:数码管工作时,让数码管显示出来的数值不尽相同(意思就是,我们不把所有数码管的位选一起控制)。但是这里我们会想到,明明段选是在一起的,为什么会显示的不一样呢?这里我们利用数码管的余晖效果以及人眼视觉的暂时停留现象,使人们感觉各位数码管同时再显示。而实际上,我们每次单独对一位数码管操作,再给出段选,本质上是一位一位轮流显示的,只是速度十分快,我们看不出来而已。当然,假如时不时控制位选和段选,就会造成一起不清晰的现象——这样就是我们所说的“鬼影”。所以我们在使用数码管工作时,时常要注意的操作就是“消影”。意思是每次操作完一个数码管的位选和整个数码管的段选后,操作所有的数码管进行短暂的“熄灭”。这里在后面的代码会有有分析。


下面看一下,开发板上对应的数码管的原理图(所用的是共阳极数码管):

这里写图片描述
这里写图片描述

可见,我们仍是通过138和或非门,锁存器进行控制。其中箭头所指的是网络标号的连接处,锁存器输出端的“abcdefgdp”并不是直接连接数码管的段选的“abcdefgdp”。


下面,将数码管动态显示的部分代码给出:(P2口控制数码管位选和段选的选择,P0口负责往数码管送相应的位选和段选码)


#define unsigned char

//数码管的段码:0   1     2    3    4    5    6    7    8    9   消影

uchar tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff}; //用一个数组,存好数码管的十六进制段选编码

uchar dspbuf[]={10,10,10,10,10,10,10,10};   //

uchar dspcom = 0;


void display()

{

    P2 = (P2 & 0x1f)|0xE0;          //通过138,或非门,打开Y7C所在的锁存器,操作数码管的段选

    P0 = 0xff;                      //通过P0口给数码管送段码0xff,让数码管熄灭,也就是“消影”操作

    P2 &= 0x1f;                     //关闭段选锁存器


    P2 = (P2 & 0x1f)|0xC0;          //打开Y6C所在锁存器,操作数码管位选

    P0 = (1 << dspcom);             //通过P0口给数码管送位码,每次只选中一位数码管(共阳极数码管,给1是选中)

    P2 &= 0x1f;                     //关闭位选锁存器


    P2 = (P2 & 0x1f)|0xE0;          //打开段选锁存器

    P0 = tab[dspbuf[dspcom];        //通过P0给数码管送段码,具体数值由dspbuf[]数组而定

    P2 &= 0x1f;                     //关闭段选锁存器


    if(++dspcom == 8)

        dspcom = 0;               //上面的代码每次选中一位数码管,当display函数操作了7次之后,dspcom的值为8(每次先让dspbuf自加1,再与“8”做比较),若满足条件,则让dspcom重新置零,再让数码管从第一位开始扫描至最后一位,以此类推……


}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

由上可见,每次通过P0 = (1 << dscom)选中数码管一位,经过dspcom加1后,再选中下一位数码管(1左移dspcom位,1后面的二进制数都是0,例如 1 << 5,即为 0010 0000;1 << 2 ,即为 0000 0100)。

而一直以来未被操作的数码管(未被位选)的段码值一直默认为“tab[dspbuf[10]]”,也就是0xff(熄灭状态),这也是一开始就把dspbuf[]数组全部赋值为“10”的原因。

例如我们这样这样写:


void main()

{

    while(1)

    {

        dspbuf[0] = 1;

        dspbuf[1] = 2;

        dspbuf[2] = 3;

        dspbuf[3] = 10;  //其实也要我们未对第4位数码管进行操作,则其段码默认为tab[dspbuf[10]]

        dsobuf[4] = 4;

        dspbuf[5] = 5;

        dspbuf[6] = 6;

        dspbuf[7]  7;

        display();

    }

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

则,以上现象便是让数码管第1~3位分别显示“0、1、3”,第四位熄灭,第5~8位分别显示“4、5、6、7”。

而静态数码管,一般用的很少,它的存在只是为了引出动态数码管。对于它的操作,那需要把位选全部选中,再控制段选即可。当然,这样下来我们也不需要“消影”的处理了。


未完待续……

关键字:51单片机  外设  数码管 引用地址:51单片机之外设——玩转数码管

上一篇:51单片机入门教程(3)——数码管显示
下一篇:51例程---字模

推荐阅读最新更新时间:2024-11-13 22:59

C51单片机头文件和启动文件
STARTUP.A51//启动文件. 清理RAM.设置堆栈等.即执行完start.a51后跳转到.c文件的main函数 reg51.h //特殊寄存器的字节地址和位地址,sfr定义字节变量、sbit定义位变量,用通俗名作为变量名,并赋地址值,从而用名称来使用这些特殊寄存器。 intrins.h //定义了一些外部函数,在 C51 单片机编程中,头文件INTRINS.H的函数使用起来,就会让你像在用 汇编 时一样简便. /*-- REG51.H Header file for generic 80C51 and 80C31 microcontroller. Copyright (c) 1988-2002 Keil Ele
[单片机]
51单片机多机通信原理
一、多机通信原理 在多机通信中,主机必须要能对各个从机进行识别,在51系列单片机中可以通过SCON寄存器的SM2位来实现。当串口以方式2或方式3发送数据时,每一帧信息都是11位,第9位是数据可编程位,通过给TB8置1或置0来区别地址帧和数据帧,当该位为1时,发送地址帧;该位为0时,发送数据帧。 在多机通信过程中,主机先发送某一从机的地址,等待从机的应答,所有的从机接收到地址帧后与本机地址进行比较,若相同,则将SM2置0准备接收数据;若不同,则丢弃当前数据,SM2位不变。 二、多机通信电路图 此处,U1作为主机,U2为从机1,U3为从机2。 三、C语言程序 (1)主机程序 #include#include #define
[单片机]
<font color='red'>51单片机</font>多机通信原理
51单片机定时器和中断的介绍
最近在学习51单片机,学到了定时器这块,由于自己的基础不太扎实,在这方面花了很多时间,这里通过对定时器和中断的介绍,用简易时钟这个例子来对学习的内容进行加深巩固,把自己的经验分享给大家,希望对大家能够有帮助。 一、定时器的功能以及定时器的结构 定时器的功能 其实就是单片机的内部,通过系统时钟的每一个机器周期产生一个记数脉冲,即每一个机器周期计数器加一。 比如,这里我的实验板的晶振是12MHZ,1MHZ信号每个脉冲的持续时间为1us,如果定时器T0对1MHZ的信号进行计数,从0~65536us,当达到最大的65536us的时候,定时器计数达到最大值,会溢出,于是产生中断信号,向中断系统申请中断,中断系统接受中断请求,执行中断
[单片机]
<font color='red'>51单片机</font>定时器和中断的介绍
51单片机基础点亮第一个LED实验
/************************************************************************************** * 点亮第一个LED实验 * 实现现象:下载程序后D1指示灯点亮 注意事项:无 ***************************************************************************************/ #include reg51.h //此文件中定义了单片机的一些特殊功能寄存器 sbit led=P2^0; //将单片机的P2.0端口定义为led
[单片机]
<font color='red'>51单片机</font>基础点亮第一个LED实验
8051单片机的结构与原理
单片机的基本结构包括中央处理器(CPU) 、存储器、定时/计数器、输入输出接口、中断控制系统和时钟电路六部分。 一、基本组成 中央处理器(CPU) 包括运算器和控制器两部分,是单片机的核心。运算器可用于各种运算,控制器用于控制单片机各部分协调工作。 存储器 用于存放程序和原始数据。 时钟电路 时钟电路产生单片机运行的控制信号,控制单片机严格按时序执行指令。 定时/计数器:实现定时或计数功能。 输入输出接口(I/O)实现单片与其他设备之间的数据传送。 中断控制系统: 用于响应中断源的中断请求; 二、单片机引脚 双列直插式封装(DIP,Dual Inline Package) 方形封装(PLCC,Plastic
[单片机]
80<font color='red'>51单片机</font>的结构与原理
51单片机波形发生器程序设计
一、 作品简介:可以通过按键控制STC89C52单片机输出 不同波形 信号。通过usb给pcb板通5v的电压可以发出方波,三角波,锯齿波,正弦波并在LCD显示屏上显示波形类别,频率和幅值。通过按键可调波形类别,可调节频率步进值有1Hz,10Hz和50Hz。最低频率为10Hz最高频率为800Hz。 二、设计原理:将各种波形的每个周期平均分成255份,把每份的值依次发给P0口,每份的时间间隔通过开启定时器0来控制,当定时时间到时单片机就产生中断,在中断服务程序里面通过P0口将每份的值发出去,这个值通过向D/A换器的输入端按一定的规律发生数据,从而在转换电路的输出端得到相应的电压波形。 三、 功能说明:能够产生方波、锯齿
[单片机]
<font color='red'>51单片机</font>波形发生器程序设计
基于51单片机的电动车手机充电器设计
0 引言 众所周知,现在车载充电器在汽车产业中是非常普遍。在全球提倡环保和低碳节能的重要时期,骑自行车或电动自行车的人也越来越普遍,然而,现在的电动自行车都没有为手机充电的功能,因此,设计一种电动自行车车载手机充电器无疑是非常有必要的。本文就是利用电动车的太阳能电池板作为电源,设计一种种电动车车载手机充电器,以使骑电动车的人不再为手机充电发愁。 1 系统原理 在电动车的车篮上方位置处安装一块太阳能电池板套件,再将单片机控制电路与套件通过线路相连接,在太阳光充足的情况下,太阳能电池板可以工作,将吸收来的光辐射转换电能,为单片机控制电路提供电流和电压,再通过单片机控制电路为手机充电。太阳能电池板套件工作时,既可以为充电器单路
[单片机]
基于<font color='red'>51单片机</font>的电动车手机充电器设计
解读51单片机LED系统电路
LED 旋转显示器时基于视觉暂留原理,开发的一种旋转式LED 显示屏。其在具有一定转速地载体上安装16 个LED 发光器件,各LED 发光管等间距排位一条直线,随着旋转速度的加快,在计算机软件精确的时序控制下,不断扫描出预设的文字,图案等。使用一个光耦(U 型槽的红外对管)作为定位传感器,当旋转一周时,挡光板遮挡光源,光敏三极管的集电极输出高电平,当离开挡光板时,集电极再次输出低电平,从而给单片机一个下降沿的跳变型号,产生一个中断,从而更新显示。供电部分,因为整个装置是在不停的高速旋转当中,所以我们做了一个简单的电刷装置,把220V 的交流电通过变压器变成12V 的交流电,再由桥式整流电路,和滤波电路,变为平滑的直流电,最后通过7
[电源管理]
解读<font color='red'>51单片机</font>LED系统电路
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved