复习单片机:静态数码管(内含1 数码管介绍+2 硬件设计+3 软件设计+4.原始代码+5 实验现象) (注:数码管介绍和硬件设计是重点)

简介: 复习单片机:静态数码管(内含1 数码管介绍+2 硬件设计+3 软件设计+4.原始代码+5 实验现象) (注:数码管介绍和硬件设计是重点)

1 数码管介绍


1.1 数码管简介


数码管是一种半导体发光器件,其基本单元是发光二极管。 数码管也称 LED


数码管.按发光二极管单元连接方式可分为共阳极数码管和共阴极


数码管。


共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数


码管,共阳数码管在应用时应将公共极 COM 接到+5V,当某一字段发光二极管的


阴极为低电平时,相应字段就点亮,当某一字段的阴极为高电平时,相应字段就


不亮。


共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数


码管,共阴数码管在应用时应将公共极 COM 接到地线 GND 上,当某一字段发光


二极管的阳极为高电平时,相应字段就点亮,当某一字段的阳极为低电平时,相


应字段就不亮。


不同位数的数码管实物图如下所示:


7bcc9de0a5b54d43bae525ab846f4dc2.png


1.2 数码管显示原理


8618929479dd4870af37968d2e113370.png


从上图可看出,一位数码管的引脚是 10 个,显示一个 8 字需要 7 个小段,


另外还有一个小数点,所以其内部一共有 8 个小的发光二极管,最后还有一个


公共端,多数生产商为了封装统一,单位数码管都封装 10 个引脚,其中第 3 和


第 8 引脚是连接在一起的。而它们的公共端又可分为共阳极和共阴极,图中间


为共阳极内部原理图,右图为共阴极内部原理图。


对共阴极数码来说,其 8 个发光二极管的阴极在数码管内部全部连接在一起,


所以称“共阴”,而它们的阳极是独立的,通常在设计电路时一般把阴极接地。


当我们给数码管的任意一个阳极加一个高电平时,对应的这个发光二极管就点亮


了。如果想要显示出一个 8 字,并且把右下角的小数点也点亮的话,可以给 8


个阳极全部送高电平,如果想让它显示出一个 0 字,那么我们可以除了给第“g,


dp” 这两位送低电平外,其余引脚全部都送高电平,这样它就显示出 0 字了。


如果使用共阴数码管,需要注意增加单片机 IO 口驱动电流,因为共阴数码


管是要靠单片机 IO 口输出电流来点亮的,但单片机 I/O 口难以输出稳定的、如


此大的电流,所以数码管与单片机连接时需要加驱动电路,可以用上拉电阻的方


法或使用专门的数码管驱动芯片,比如 74HC573、74HC245 等,其输出电流较大,


电路接口简单。


共阳极数码管其内部 8 个发光二极管的所有阳极全部连接在一起,电路连接


时,公共端接高电平,因此我们要点亮哪个发光管二极管就需要给阴极送低电平,


此时显示数字的编码与共阴极编码是相反的关系,数码管内部发光二极管点亮


时,也需要 5mA 以上的电流,而且电流不可过大,否则会烧坏发光二极管。因此


不仅要防止数码管电流过大,同时要防止流经数码管的电流集中到单片机时电流


不能过大,否则会损坏主芯片。


一般共阳极数码管更为常用,为什么呢? 这是因为数码管的非公共端往往


接在 IC 芯片的 I/O 上,而 IC 芯片的驱动能力往往是比较小的,如果采用共阴极


数码管,它的驱动端在非公共端, 就有可能受限于 IC 芯片输出电流不够而显示


昏暗,要外加上拉电阻或者是增加三极管加大驱动能力。但是 IC 芯片的灌电流,


即输入电流范围比较大。所以使用共阳极数码管的好处是:将驱动数码管的工作


交到公共端(一般接驱动电源),加大驱动电源的功率自然要比加大 IC 芯片 I/O


口的驱动电流简单许多。另一方面,这样也能减轻主芯片的负担。


我们开发板上使用的数码管是 2 个四位一体的共阴极数码管(即 8 个 LED


的阳极全部并联一起引出,阴极分别引出如 A、 B...DP),本章实验也是在该


数码管上实现单个的静态显示。如果要让共阴数码管显示数字 0,即对应的段


ABCDEF 要点亮即给它高电平,其他的段熄灭即给它低电平。其他的数字显示方


式一样,这里就不多说。下面给出共阴和共阳数码管的 0-F 段码数据表,如下所


示:


e7d8c831b4484ee1a4fc9ee9714ac34c.png


9eb44530140e4fa7938c09ceab111a54.png


从上述共阳和共阴码表中不难发现,它们的数据正好是相互取反的值。比如


共阴数码管数字 0 段码:0x3f,其二进制是:0011 1111,取反后为:1100 0000,


转换成 16 进制即为 0XC0。其他段码依此类推。该段码数据由来,是将 a 段作为


最低位,b 段作为次低位,其他按顺序类推,dp 段为最高位,共 8 位,正好和


51 单片机的一组端口数一样,因此可以直接使用某一组端口控制数码管的段选


数据口,比如 P0 口。


1.3 数码管静态显示原理


LED 数码管显示器工作方式有两种:静态显示方式和动态显示方式。静态显


示的特点是每个数码管的段选必须接一个 8 位数据线来保持显示的字形码。当送


入一次字形码后,显示字形可一直保持,直到送入新字形码为止。这种方法的优


点是占用 CPU 时间少,显示便于监测和控制。缺点是硬件电路比较复杂,成本较


高,比如使用 4 个静态数码管,那么就得 32 个 IO 来控制,这对 51 单片机来说


是无法承受的,正因为如此才会有后面章节动态数码实验的讲解。


动态显示的特点是将所有数码管的段选线并联在一起,由位选线控制是哪一


位数码管有效。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位


数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人


的感觉好像各位数码管同时都在显示。动态显示的亮度比静态显示要差一些,所


以在选择限流电阻时应略小于静态显示电路中的。


本章实验使用的数码管虽然是动态数码管电路,但我们依然可以使用数码管


其中一位来学习静态数码管知识。本章实验主要介绍静态数码管的控制,有关动


态数码管控制将在下一章节介绍。有关静态数码管的详细介绍,大家可以在百度


上查找了解


2 硬件设计


开发板上的静态数码管模块电路如下图所示:


ac5305e1a70e46878ecb4dbcab4f0097.png


f95852d24916434ab793e55cf4a267e9.png


上图电路实际上是动态数码管电路,使用的是 2 个四位一体的共阴数码管组


成,即 8 位数码管的段选数据 a-dp 全部并联一起引出,每位数码管的位选即公


共端引出,前面我们也说了,虽然开发板上没有单个的静态数码管,但依然可以


在动态数码管电路中使用其中一个来学习静态数码管显示。本实验使用 SMG1 最


左边那个数码管作为静态数码管,因为单片机 IO 口外部都增加了外部上拉电阻,


因此 P22、P23、P24 引脚默认就是高电平,根据 38 译码器输出特点,此时 Y7


脚(LED8)输出有效,即低电平。而数码管的段选 a-dp 连接在 74HC245 驱动芯


片输出口,由 P0 端口控制。所以只要控制 P0 口输出高电平,SMG1 最左边那个


数码管默认就可以显示。此处暂时不去理会 38 译码器的工作原理,后面动态数


码管实验会专门介绍。74HC245 作为驱动芯片使用,目的是让数码管能获得更大135


的电流,为防止因电流过大烧坏数码管,在 74HC245 芯片输出管脚又串联了 2


个 4 位的 100 欧排阻后连接数码管段码 a-dp 脚本


注:上面这些是第一手资料,虽然写的比较啰嗦,但比较全面,容易理解。不会的可以私聊问我.


3 软件设计


要实现的功能是:控制静态数码管显示数字 0,即让 P0 端口输出数字


0 的段码 0x3f(共阴)。


fe59a5003a284da5a540b724a3a207e5.png


4.原始代码


#include"reg52.h"
#define SMG_A_DP_PORT P0//定义数码管管口
typedef unsigned char u8;
typedef unsigned int u16;
//数码管对应的值,背会最好,不会背
//也要会自己计算或用工具计算
u8 gsmg_code[17]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void main()
{
SMG_A_DP_PORT=gsmg_code[0];
while(1)
{
;
}
}


5 实验现象

使用 USB 线将开发板和电脑连接成功后(电脑能识别开发板上 CH340 串口),

把编译后产生的.hex 文件烧入到芯片内,实现现象如下:最左边那位数码管显

示数字 0。


1489958fca2b42519fdbd5a627a4bffc.png

相关文章
|
2月前
|
传感器
51单片机循迹小车原理介绍和代码示例
51单片机循迹小车原理介绍和代码示例
51单片机循迹小车原理介绍和代码示例
|
2月前
|
传感器
51单片机矩阵键盘超详解!(内含LCD1602代码)
51单片机矩阵键盘超详解!(内含LCD1602代码)
30 0
【51单片机】自定义动态数码管显示(设计思路&原理&代码演示)
【51单片机】自定义动态数码管显示(设计思路&原理&代码演示)
【51单片机】自定义静态数码管显示(设计思路&代码演示)
【51单片机】自定义静态数码管显示(设计思路&代码演示)
|
2月前
|
C++
【51单片机】添加模块代码的常见问题(图示&代码演示)
【51单片机】添加模块代码的常见问题(图示&代码演示)
【51单片机】烧写教程:将代码下载到单片机中(图示&解析)
【51单片机】烧写教程:将代码下载到单片机中(图示&解析)
【51单片机】静态数码管显示(设计思路&原理&代码演示)
【51单片机】静态数码管显示(设计思路&原理&代码演示)
|
2月前
|
芯片 数据格式
【51单片机】要实现动静态数码管,你首先需要知道这些【数码管项目前置知识】
【51单片机】要实现动静态数码管,你首先需要知道这些【数码管项目前置知识】
|
2月前
|
芯片 数据格式
【51单片机】实现一个动静态数码管显示项目(超全详解&代码&图示)(5)
【51单片机】实现一个动静态数码管显示项目(超全详解&代码&图示)(5)
|
2月前
|
编译器 C语言 开发者
单片机原理与应用:探索微型计算机世界
单片机原理与应用:探索微型计算机世界
31 1