产品选型

单片机 小数点 扫盲教程:深入浅出讲解单片机控制单只数码管循环显示0~F

小编 2024-10-12 产品选型 23 0

扫盲教程:深入浅出讲解单片机控制单只数码管循环显示0~F

最近有好多小伙伴留言说,我发的项目很难,他们都是刚入门的,希望我写一些入门级的教程,那么今天我就从硬件和软件两个方面来给大家讲一下最基本也是十分重要的电路 单片机驱动数码管显示电路。

要弄清楚单片机控制数码管显示字符的原理我们首先要知道:三个概念

单片机:通俗的讲单片机是一种集成电路芯片,利用一些特殊工艺把许多不同功能的模块集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。单片机可以烧进程序,然后从不同的IO口输出规定的电平信号。

七段数码管(如下图):

数码管是一类价格便宜 使用简单,通过对其不同的管脚输入相对的电流,使其发亮,从而显示出数字能够显示 时间、日期、温度等所有可用数字表示的参数的器件。一般的七段数码管拥有七个发光二极管(三横四纵)用以显示十进制0至9的数字外加小数点,也可以显示英文字母 A 至 F(b、d 为小写,其他为大写)。现时大部分的七段数码管会以斜体显示。

好了,上面是单片机和数码管的概念,下面说一下单片机的工作原理:

一个单片机要想能正常工作必须满足它工作的最小系统,这个最小系统包括,电源电路,晶振电路,复位电路等,当电源电路给单片机正常供电后,在上电的一瞬间会给复位电容充电从而完成上电复位的动作。单片机复位结束后,我们把需要控制数码管显示的代码烧进单片机,这时候单片机就会根据写的代码从不同的IO口输出不同的电平,从而控制七段数码管每一段的亮灭,而达到显示不同数字的目的。

好了说了半天理论了,下面我们开始实践一下吧!

首先用PROTEUS仿真软件画好单片机最小系统和LED数码管驱动原理图:本项目中用STC89C52

把程序烧进去以后,数码管开始从0到F显示,适当调整源代码参数可以修改显示不同的数字和不同的时间间隔。

51单片机参考源代码如下:

/*单只数码管循环显示0~F 作者 科技小伟1*/

#include <reg51.h>

typedef unsigned char uint8;

typedef unsigned int uint16;

code uint8 LED_CODE[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,

0x80,0x90,0x88,0x83,0xA7,0xA1,0x86,0x8E};

void delay(uint16 x)

{

uint16 i,j;

for(i = x; i > 0; i --)

for(j = 114; j > 0; j --);

}

void main()

{

uint8 i = 0;

while(1)

{

for(i = 0; i < 16; i ++) //i = (i + 1) % 16

{

P0 = LED_CODE[i];

delay(500);

}

}

}

好了以上就是单片机控制数码管显示的全部内容了,本文从软件和硬件两个角度分别讲解,如果有任何意见或者需要设计文件 欢迎留言或者私信,如果你也对单片机感兴趣,那么快点行动起来吧!我们下期再见!

详解数码管显示控制

数码管种类繁多,按外观来划分,可以分为七段数码管、米字型数码管、点阵块等。图8-5所示为各种不同形状的数码管。

图8-5 各种不同形状的数码管

LED数码管结构与工作原理

单片机系统中常用的是七段数码管,它由8个发光二极管(以下简称字段)构成,如图8-6(a)图所示(注:由于小数点字段不常用,所以一般称为七段),通过不同的组合可以显示数字0~9、字符A~F、H、L、P、U、符号“-”及小数点“.”。

根据发光二极管物理连接的不同,七段数码管可以分为共阴极和共阳极两种结构。共阴极型数码管如图8-6(b)所示,所有字段的阴极均连接低电平,因此在使用共阴极数码时,需要在相应字段上加高电平,才会使其发光。共阳极数码管如图8-6(c)所示,所有字段的阳极均连接高电平,在使用时,需要在相应字段上加低电平。

图8-6 7段数码管结构

LED数码管字型编码

在单片机与数码管组成的应用系统中,一般将单片机的一个并口与数码管的8个段控制引脚连接,且按照口线位的顺序由低到高与a、b、c、d、e、f、g、h连接,这样,若要显示不同字符,只需应用单片机的口线输出相应的控制的电平就可以实现。向口线送的数据就是LED的字型编码。共阴和共阳的字型编码如表8-2所示。

表8-2 共阴和共阳的字型编码表

LED数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数位,因此根据LED数码管的驱动方式的不同,可以分为静态显式和动态显式两类。

LED数码管静态显示

静态驱动也称直流驱动。静态驱动是指每个数码管的每一个段码都由一个单片机的I/O口线进行驱动,或者使用如BCD码、二–十进位解码器解码进行驱动。

静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O口较多,如驱动5个数码管静态显示则需要5×8=40根I/O口线来驱动,而1个89S51单片机可用的I/O口线才32个。

2位共阳极数码管的静态显示电路如图8-7所示。

图8-7 2位共阳极数码管的静态显示电路原理图

显示数字12的C51程序如下:

LED数码管动态显示

数码管动态显示是单片机中应用最为广泛的显示方式,动态驱动是将所有数码管的8个同名端“a,b,c,d,e,f,g,h”连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制。

当单片机输出字形码时,所有数码管都接收到相同的字形码,究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制。通过分时轮流控制各个LED数码管的COM端,就使各个数码管轮流受控显示。

在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极体的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示,不会有闪烁感,动态显示的效果和静态显示相同,并且能够节省大量的I/O口线,降低功耗。

2位共阳极数码管动态显示电路如图8-8所示。

显示数字12的C51程序如下:

图8-8 2位共阳极数码管动态显示电路原理图

相关问答

在C语言计算出的结果中怎么保留 小数点 后两位?

可以在输出的时候限制小数点位数。当输出单精度浮点型float变量f时,可以用printf("%.2f",f);来使输出结果保留两位有效数字。其中.2就是代表保留两位,如果要...

51 单片机 通常如何输入浮点数?

单片机处理浮点数效率不高,一般是浮点数乘以10的n次方变成整数进行计算等处理,在输出的时候再次处理小数点。比如,你输入的是1234.567,1234保存到2个unsigne...

一般 单片机 代码对变量有什么要求吗?

C语言中,变量一般有两种属性,分别是:存储类别、数据类型。例如定义一个变量:staticunsignedcharvar=0;上述语句中,static(静态的)为变量的存储类别,...

数码管段选和位选在接线上怎么体现,求大神,感激不尽?

单片机和数码管的动态扫描接口时,用到段选与位选的概念,段选用一个输出口(8位二进制数0-7,不用小数点为7位,用小数点8位),位选用一个输出口(可根据数码管...

如何确定数码管段码表 - s丸子 的回答 - 懂得

数码管的最常见形式有10个阴极,形状为数字0到9,某些数码管还有一个或两个小数点。然而也有其他类型的数码管显示字母、标记和符号。如一种“数码管...

C语言中的 -是什么意思 - 150****7497 的回答 - 懂得

C语言中的%2d是printf()函数的输出格式中的%a.bf。表示将数字按宽度为2,采用右对齐方式输出,若数据位数不到2位,则左边补空格。如:1、“%8d”要求...

c语言中怎样设置计时器?-ZOL问答

实用单片机电子钟的制作;主程序(MAIN),如下:ORG0000HAJMPMAINORG000BH...DISP:ANL2FH,#10H;处理小数点MOVA,21H;处理...

12.1k电阻可以用多大的电阻代替?

不同的电路要求有不同的代用方法。在普通的电路中用12K左右代替就行了,但你这个电阻是有小数点的高精度电阻可能会有误差要求,如果找不到12.1K的电阻,看看能...

哪位童鞋在线等!急急急!湖南优质手持式超声测厚仪厂家,手...

随着电子技术的不断进步。尤其是单片机技术的飞速发展,对超声波测厚仪的智能化改造已成为必然。采用单片机设计制作的超声波测厚仪,可以使测厚仪的...

没接大功率电器,电表走字太快是什么原因造成的?

应"悟空小秘书"邀答!没接大功率电器,把表走字太快是什么原因造成的?1⃣️听电站的老干部讲过,过去的老式电表时代,总表与分表总和悬殊特大,当然有电损...应"悟.....

猜你喜欢