单片机第四课:数码管显示原理详解——普中单片机指南
数码管显示
上一次我们学习了如何运用矩阵按键,今天,我们就来学习单片机一个新的模块数码管,同时学习如何控制数码管显示。
所需材料清单:
软件:Keil uVision5(程序编写软件)
stc-isp(烧录软件)
硬件:普中单片机开发板
USB数据线(用于供电和编程)
一、单个数码管
① 结构组成
一个数码管是由a、b、c、d、e、f、g、dp八个二极管组成,八个LED的相同一端连接在一起,另一端引脚引出来作为控制端口。
② 工作方式
共阳数码管:所有阳极连接在一起接高电平,通过控制阴极的低电平来点亮对应的段。
共阴数码管:所有阴极连接在一起接低电平,通过控制阳极的高电平来点亮对应的段。
图1
③ 工作原理
如图2为一个共阳极数码管,要使数码管显示不同的数字,只需要将对应的LED灯点亮即可。例如我们想要显示数字“6”,则需要将“a、f、g、e、d、c”这6个LED点亮,“b、dp”这2个LED熄灭即可显示数字“6”。
图2
二、多位数码管
① 结构组成
在普中单片机上用的是两组4位数码管,多位数码管所有线码端共用1个I/O口,该图12、9、8、6端是位码端,用于控制哪个数码管显示。
图3
② 多位数码管的连接方式
(1)静态显示:是指数码管直接显示特定的数字。每一位数码管的段选线(控制段亮灭的线)都需要独立的I/O口来控制,这种方式简单但占用大量I/O口。
(2)动态显示:通过将所有数码管的段选线并联,利用位选线(控制哪一位数码管有效的线)来动态切换显示内容。这种方式利用人眼的视觉暂留效应,通过快速切换显示内容,使人感觉所有数码管同时亮起。
③ 位选段选
在使用时,需要程序选定使用哪几个数码管,这就是“位选”;需要程序数码管显示什么数字,这就是“段选”。
④ 138译码器
图4
单片机上的的8个数码管连向138编码器的输出端,138编码器可以将八个端口控制的数码管转变为3个端口控制,138编码器的输入端由P2的引脚接入。当我们想控制其中一个数码管数码管时,可以通过P2来控制。例如我想控制第4个数码管,就需要在P2利用二进制输入100(4的二进制)来控制。
⑤ 数码管显示数字或字母时芯片引脚的状态值
图5
控制P0的状态值来控制数码管具体显示哪个数字(二进制转为十六进制来控制)
若显示数字“0”,则abcdef亮,状态值为00111111(指十六进制0x3f)
显示数字“1”,bc亮,状态值00000110(指十六进制0x06)
显示数字2~9以此类推。
显示字母“A”,abcefg亮,状态值01110111(指十六进制0x77)
显示字母“B”,cdefg亮,状态值01111100(指十六进制0x7c)
显示其他字母以此类推。
三、数码管的控制
① 静态数码管显示控制
第一步:首先新建工程,点击左上角的Project,选择新建工程。
图6
第二步:开始编写代码。
图7
第三步:点击编译按钮,若出现0Error 0Warning就是完成啦。接着就是烧录程序看效果。
图8
效果展示:(第六个数码管显示数字“0”)
图9
② 动态数码管显示控制
与静态数码管显示的区别:
若我们直接将两个子函数连接起来想达到同时出现数字的效果,会造成多个数码管同时显示,产生错位的现象。为了解决这种现象,我们要使数码管的“消影”。
产生错位的原因:
没有消影时单片机的运行是(位选→段选→位选→段选)。由于单片机的运行很快,会导致段选的数据蹿到下一个位选,造成两个数据重叠。所以我们要在段选后加一个清零。(位选→段选→清零→位选→段选)。为了避免每一次使用都要在子函数添加清零,可以选择在子函数中添加延迟后清零,这样子的操作就称为数码管“消影”。
对Niexe子函数进行修改,添加清零的过程。
图10
对主函数进行修改,添加子函数Niexe使多个数码管发亮。
图11
效果展示:
图12
学完矩阵按键和数码管,那让我们将其联动起来吧!
要求:前四位数码管在对应的矩阵按键按下时显示对应的数字。如按下第16位按键时数码管显示数字“0016”。后四位数码管在200ms的间隔实现自增,满60归0。(实现效果如0..1..2..3..4..5.. .60..0..1)
总 结
在每次学习中,收获到新知识就算是一次成功,一次突破。今天我们学习了单片机数码管的静态显示和动态显示,不仅是对单片机新模块的开发和实践,更是激发了对单片机的好奇心。在今后的学习中我们不会忘记学习时的激情和好奇,同时在学习结束后要进行复习和练习才能更好的掌握新知识。
若文章有出现纰漏还请大佬指正
作者:lhy
作者:LL工作室