51单片机入门——数码管
目录
- 1.数码管
- 1.1.什么是数码管?
- 1.2.数码管的种类
- 1.3.分段式发光二极管数码管
- 1.3.1八段和七段数码管笔画分布
- 1.3.2.TTL 门驱动半导体数码管电路
- 1.3.3.识图方法
- 1.4.荧光数码管
- 1.5.辉光数码管
- 2.数码管仿真
- 2.1. BCD-七段显示译码器 7448
- 2.2. 数码管静态显示
- 2.2.1. 轻触开关与按键消抖
- 2.2.2.原理图与代码
- 2.3. 数码管的动态显示
1.数码管
1.1.什么是数码管?
数码显示器简称数码管,是一种可以显示数字和其他信息的电子设备。它在数字式显示系统中是不可缺少的器件,应用极其广泛,发展速度很快,数码管朝着小型化、 平面化、多功能化和低耗电方面发展。
1.2.数码管的种类
数码管主要有下列三大类。
- 字形重叠式数码管。这种数码管的特点是将不同的数字、字母等符号的电极重叠起来,当需要哪一个符号显示时,就驱动该符号的电极,使之发光显示,此时其他符号电极不发光。 这种数码管有辉光放电管和边光显示管等。
- 分段式数码管。这种数码管的特点是将一个数字分成若干个笔画,通过驱动相应的笔画发光来显示某一个数字,如荧光数码管就是这种类型的。 分段式数码管有八段式和七段式两种。在数字显示方面,分段式数码管是主要显示器件。
- 点矩阵式数码显示器件。这种显示器由一些可发光的点阵排列而成,利用发光点不同排列和组合显示数字或字符,如场致发光数字板就是这种显示器件。
如果按照数码管发光物质不同,数码管可以分成下列 4 种类型。
半导体数码管。这种数码管由半导体 发光二极管(LED)构成,所以又称为发光二极管数码管,或发光二极管显示器。按发光二极管单元连接方式可分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管,共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮,当某一字段的阴极为高电平时,相应字段就不亮。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管,共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮,当某一字段的阳极为低电平时,相应字段就不亮。如图:
这种数码管也是最常用的数码管。荧光数码管。这是一种电真空器件,荧光数码管、场致发光数字板等就是这种显示器件。
液体数码管。如液晶显示器、电泳显示器等就是这种显示器件。
气体放电数码管。例如辉光数码管、 等离子体显示板等就是这种显示器件。
1.3.分段式发光二极管数码管
在进行数字显示时,分段式数码管显示电路最常用。
1.3.1八段和七段数码管笔画分布
下图左边所示是八段数码管各段分布示意图,图中共有a~dp这8段笔画,右边所示是这种数码管显示 0 ~ 9 这 10 个数字时的笔画示意图。
下图为七段数码管各段分布图,与八段的唯一区别是没有右下角的小数点“dp”
1.3.2.TTL 门驱动半导体数码管电路
下图所示是用 TTL 门驱动半导体数码管的电路,这一电路中只画出它的一段驱动电路,其他各段的驱动电路与此相同。
当译码器输出高电平 1 时,与非门 A 输出低电平 0,这样发光二极管 VD1 导通发光。当译码器输出低电平 0 时,与非门输出高电平 1, 这样 VD1 不能导通发光。 电路中,VD1 是数码管中的任一段发光二极管,R1 为限流保护电阻。数码管中的哪几段发光二极管导通发光与不发光由译码器控制。 半导体数码管的工作电压较低,一般为 1.5~ 3V, 所以可以用集成门电路直接驱动。这种半导体数码管的段电流比较大,为几至十几毫安。
1.3.3.识图方法
关于发光二极管数码显示电路主要说明下列几点。
- 下图(a)所示是由发光二极管构成的分段式数码显示器件,这是一个七段式数 码显示器,a ~ g 分别是七段笔画,TP 是小数点。 (b)所示是显示电路,A、B、C 和 D 是二进制数码输入端,该数码首先输入到七段式译码器电路中,其输出信号分别从 7 个输出端 a ~ g 输出,加到各自的驱动三极管基极,由导通的三极管来驱动笔画段发光二极管发光显示。
- 这种显示电路中的显示器件采用发光二极管,发光二极管的驱动电路比较简单,电路分析时要分成输入驱动管的高电平 1 和低电 平 0 两种情况,通过 1 或 0 对驱动管的偏置状态来判断驱动管是否导通。在输入信号给驱动管正向偏置时,驱动管导通,发光二极管发光显示;在输入信号给驱动管反向偏置时,驱动管截止,发光二极管不能发光显示。
- 发光二极管数码管中有许多个单个的发光二极管或 PN 结,它们都有一个相同的驱动电路,分别驱动各自的发光二极管,进行电路分析时只要对其中一个驱动电路分析就行。
- 发光二极管数码管具有亮度强、清晰度高、低电压(1.5 ~ 3V)、 可靠性好、体积小、 寿命长(大于 1000h)等优点,其缺点是工作电流还是比较大了一些,一般加入一个470~800Ω的限流电阻。
1.4.荧光数码管
荧光数码管是分段式的数码管。下图所示是 YS-18-3 型荧光数码管外形和引脚排列示意图。这是一个八段式荧光数码管,图(a)所示是外形示意图,图(b)所示是引脚排列示意图。
荧光数码管是一种电真空器件,其工作原理与普通的电子管相似,它的灯丝就是阴极(为直热式阴极),当灯丝通电后灯丝就会发热(即阴极发热),由于在阴极表面涂有一层逸出功很小的氧化物,于是在阴极发热后会发射大量的电子。 荧光数码管内设置有一个栅极,在栅极上加有 +20V 直流电压,栅极电压相对阴极而言为正电压,这样阴极发射出来的大量电子受到栅极正电场的吸收而得到加速。 荧光数码管的阳极也是接 +20V 直流电压(实际电路中栅极与阳极在外电路中直接相连), 这样受到电场加速的绝大多数电子冲过网状的栅极,高速轰击阳极表面。在阳极表面涂有一 层荧光粉(为氧化锌材料),荧光粉在受到高速轰击的电子作用下而发出光。
荧光数码管内的笔画就是阳极,所以八段式荧光数码管就有 8 个阳极。当某一个或某几个阳极受到高速电子轰击后发光,就能显示出某一个数字。具体有哪几个阳极发光,这是需要译码器输出的信号来控制。 荧光数码管的优点是工作电压低,驱动电流小,显示清晰悦目,视角大,工作可靠性好, 寿命长,但是机械强度差,使用安装不方便。
由于在单片机中不经常使用,所以不再此详述。
1.5.辉光数码管
辉光数码管是一种字形重叠式气体放电显示器件。这种数码管与分段式数码管不同,它 将各种不同的数字或字符直接置于玻璃壳内, 通过译码器和驱动器电路直接将某一数字或字 符点亮即可显示。
下图所示是辉光数码管示意图,图(a)所示是 SZ-1 型辉光数码管的引脚排 列示意图,图 (b)所示是该管显示十进制数 8 时的示意图。辉光数码管外壳为透明的玻璃材料,体形矮胖,管内充有惰性气体,不需要灯丝加热,靠辉光放电来显示数码。
辉光数码管内有一个阳极 a(②脚),另有 10 个阴极 k0 ~ k9,它们分别是数字 0 ~ 9,它们各有一根引脚接到管壳外部。在辉光数码管工作时,阳极上接有 +180V 直流电压,当某一个阴极在外电路中接地时,该阴极与阳极之间有 +180V 直流电压,这样阳极与该阴极之间进行气体放电,此时该接地阴 极就能发出橘红色辉光数字,达到显示目的。在某一个阴极接地时,其他各阴极处于悬空或高电位状态,它们的阴极不能发光显示。
由于在单片机中不经常使用,所以不再此详述。
2.数码管仿真
2.1. BCD-七段显示译码器 7448
7448芯片的内部逻辑图(a)与逻辑框图(b):
该芯片的主要控制电路工作状态和扩展功能。对数码管主要起简化逻辑的功能,在1.3.3.中的驱动芯片即为7448。在Proteus 8 Professional中的 7SEG-BCD 数码管就是普通共阴数码管和7448封装在一起。如图:
四个引脚从左至右分别为 7448 的 A3 ~ A0 .
在Proteus 8 Professional中建立如图所示的原理图:
上述原理图的仿真视频链接
2.2. 数码管静态显示
2.2.1. 轻触开关与按键消抖
轻触开关为机械弹性开关,当机械触点断开、闭合时由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开的时候也不会一下子断开。因为在闭合及断开的瞬间均伴随有一连串的抖动(如下图),这种抖动可能会引起我们芯片进行错误的判断,为了不产生这种现象而作的措施我们称之为按键消抖。
为了解决按键抖动我们有软件消抖和硬件消抖两种方法。
硬件消抖:顾名思义,在电路中添加元器件来达到消抖的目的,例如复位电路的电容,或RS触发器,如图:
软件消抖:我们在使用开关的时候加一个延迟函数,跳过电平的不稳定时间即可:
void delay(){uint i;for(i = 0 ; i < 123 ; i ++);}void key(){if(KEY0 == 0){delay();if(KEY0 == 0){...........}}}
或者使用下面的方法,在开关按下的时候a加一,再判断a和开关的状态,这个方法适用于短按,不适用于长按多少秒之类的。
void key(){if(key0 == 0 && a == 0){a = 1;}if(a == 1 && key0 == 1){a = 0;sum++;}}
2.2.2.原理图与代码
在Proteus 8 Professional中绘制上图所示的原理图。
然后开始写程序。
#include<reg52.h> //此文件中定义了单片机的一些特殊功能寄存器
#define uint unsigned int //对数据类型进行声明定义
#define uchar unsigned char //对数据类型进行声明定义
sbit key0 = P1^0; // 位地址的声明 ,注意:sbit 必须小写 ,P必须大写
uint s[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40,0x40,0x80,0x00}; //共阴数码管0~9 、 A~F 、 - 、 . 熄灭
uint sum = 0; //定义无符号的整型变量 unsigned int 的数据范围为0~65535(2^16 - 1)
uchar a=0; //定义无符号的字符型变量 unsigned char 的数据范围为0~255(2^8 - 1)void delay(uint n) // 延时函数,大约延时 n ms{uint i,j;for(i = 0 ; i < n ; i ++){for(j = 0 ; j < 123 ; j ++);}}void key() // 按钮函数 ,按下开关数码管变换{if(key0 == 0 && a == 0){a = 1;}if(a == 1 && key0 == 1){a = 0;sum++;}}void seg() // 数码管的显示函数{P2 = s[sum];if(sum == 18){sum = 0;}}void main(){while(1){key();seg();}}
上述程序仿真视频链接
2.3. 数码管的动态显示
多个数码管显示数字的时候,实际上是轮流点亮数码管(即一个时只有一个数码管是亮的),利用人眼的视觉暂留现象(也叫余辉效应),就可以做到看起来是所有数码管都同时亮了,这就是动态显示,也叫动态扫描。
假如有两个数码管,要显示“12”这个数字,先让高位的数码管导通,然后控制单片机I/O口让其显示“1”,延时到一定时间后再让低位的数码管导通,控制单片机的I/O口让其显示“2”。把这个流程以一定的速度循环运行就可以让数码管显示出“12”,由于交替速度非常快,人眼识别到的就是“12”这两个数字同时亮了。
如图:
代码:
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned intuchar s[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //共阴数码管0~9
uchar t0 = 0 ,t1 = 0 , t2 = 0 , t3 = 0 , t4 = 0 , t5 = 0 ;
uchar b = 0 , c = 0 , d = 0;void delay(uint n) //延时函数(运行空项目以达到延迟时间的效果)
{uint i,j;for(i = 0 ; i < n ; i ++){for(j = 0 ; j < 120 ; j ++);}
}void display1() //在数码管上显示
{P2 = 0x7f ; //P2^7低电平 0111 1111 控制第一个数码管 P0 = s[t0] ; delay(1) ; //延时大约1msP2 = 0xbf ; //P2^6低电平 1011 1111 控制第二个数码管 P0 = s[t1] ; delay(1) ;P2 = 0xdf ; //P2^5低电平 1101 1111 控制第三个数码管 P0 = 0x40 ; delay(1) ;P2 = 0xef ; //P2^4低电平 1110 1111 控制第四个数码管 P0 = s[t2] ; delay(1) ;P2 = 0xf7 ; //P2^3低电平 1111 0111 控制第五个数码管 P0 = s[t3] ; //用来显示“分”的个位delay(1) ;P2 = 0xfb ; //P2^2低电平 1111 1011 控制第六个数码管 P0 = 0x40 ; delay(1) ;P2 = 0xfd ; //P2^1低电平 1111 1101 控制第七个数码管 P0 = s[t4] ; delay(1) ;P2 = 0xfe ; //P2^0低电平 1111 1110 控制第八个数码管 P0 = s[t5] ; delay(1) ;
}void main() //主函数
{while(1){display1();}
}
51单片机入门——数码管相关推荐
- 51单片机入门————数码管显示
我们在马路上看到的红绿灯,就是由数码管来实现的,就是其中可能加入了一些延时和转换 数码管是通过控制138译码器与74HC245来控制数码管的亮灭与数字的显示 电路原理图 我们先讨论一个数码管 数码管有 ...
- 51单片机入门——矩阵按键
文章目录 1.按键 1.1.独立按键 1.2.矩阵按键 2.按键的扫描与抖动 2.1.独立按键的扫描 2.2.按键抖动与消抖 2.3.矩阵按键的扫描 3.简易计算器 1.按键 1.1.独立按键 常用的 ...
- 51单片机入门学习小结(流水灯与数码管)
51单片机入门学习小结(流水灯与数码管) 对原理图的分析 以下是我所用单片机的原理图 这块51单片机一共有4个I/O口(意思为input/output),也代表着如果我们后续都要用到这四个的话那么功能 ...
- 51单片机入门教程(3)——数码管显示
51单片机入门教程(3)--数码管显示 一.LED数码管简介 二.数码管静态显示 三.数码管动态显示 特别鸣谢:HFUTer-朱聪强 一.LED数码管简介 LED数码管(LED Segment Dis ...
- 51单片机入门教程(6)——外部中断
51单片机入门教程(6)--外部中断 一.外部中断 1.1 中断 1.2 外部中断 二.中断优先级 一.外部中断 1.1 中断 关于中断的概念在上一篇博客中已经提到了.(传送门:51单片机入门教程(5 ...
- 51单片机入门教程(5)——定时器中断
51单片机入门教程(5)--定时器中断 一.中断的概念 二.定时器中断 2.1 软件延时的不足 2.2 中断寄存器 2.2.1 中断允许控制寄存器 IE 2.2.2 定时器工作方式寄存器 TMOD 2 ...
- 51单片机入门——16路抢答器
文章目录 设计要求 电路原理图 硬件原理 时钟信号(晶振) 矩阵按键与独立按键 代码解析 设计要求 同时为16支参赛队提供抢答功能,抢答成功后应能通过数码管显示出参赛队号数,同时点亮发光二极管示意抢答 ...
- 51单片机入门基础介绍
51单片机入门基础介绍 文章目录 51单片机入门基础介绍 前言 常用元器件 发光二极管 数码管 LED数码管的显示方式 按键 定时计数器 串行口控制寄存器SCON 中断系统 中断源及中断请求 中断允许 ...
- 51单片机入门——数字时钟
文章目录 1. 前言 1.1. 设计要求 2. 硬件原理 2.1. 时钟信号(晶振) 2.2. 按键开关 2.3. 数码管显示 3. 原理图 3.1. 仿真原理图 3.2. AD原理图 3.3. PC ...
- 51单片机入门学习笔记(上)
笔记整理自B站UP主江科大自化协教程<51单片机入门教程-2020版 程序全程纯手打 从零开始入门> 所用单片机为普中51 STC89C52单片机2022新款,文中所提到的调试现象及结果也 ...
最新文章
- 百度大脑发挥AI“头雁效应” 王海峰:在AI时代共同推动社会智能化升级
- (一)检测浏览器是否支持websocket
- 快速排序的实现及优化
- #define与const的差别
- memcmp()库函数实现
- bootstrap table 分页_Java入门007~springboot+freemarker+bootstrap快速实现分页功能
- LeetCode 173. 二叉搜索树迭代器(中序遍历)
- 数字化转型知识方法系列之:数字化转型的基本认识与参考架构
- Vue报错'Do not use built-in or reserved HTML elements as component id:解决方法
- 孙鑫VC学习笔记:第十五讲 (三) 增加互斥条件实现线程同步
- Objective-C写出Json文件(可作配置文件)
- matlab查表svpwm,SVPWM的MATLAB仿真实现
- 可解释人工智能XAI
- Unity 之 发布 WebGl 遇到的问题
- 英语语法形容词的顺序
- Jboot整合MySQL
- 关于币圈炒币 你必须要知道的风险
- 【Mysql】SQL语句学习
- Android人脸识别和证件识别
- 利用python进行体重指数计算
热门文章
- java 解析cron_Quartz 源码解析(六) —— 解析Cron表达式
- STC官方软件波特率计算器使用方法
- java整人代码大全_整人代码vbs大全分享
- VB6.0鼠标注册详细教程
- PDFLIB C++修改及使用说明
- poi导出excel 损坏_poi导出excel解决方法
- windows下MATLAB2016a安装配置
- 【HTML简易版“冒险岛”小游戏】(游戏效果展示+全部源代码分享)
- 身份证读取设备开发解决方案:3、单片机读取身份证信息的demo
- 管家婆显示服务器没有加密狗,管家婆软件阿拉丁狗找不到加密狗