设计与开发

单片机显示技术 单片机开发——动态显示的基本原理

小编 2025-08-26 设计与开发 23 0

单片机开发——动态显示的基本原理

我们在上一章学习数码管静态显示的时候说到,74HC138 只能在同一时刻导通一个三极管,而我们的数码管是靠了 6 个三极管来控制,那我们如何来让数码管同时显示呢?这就用到了动态显示的概念。多个数码管显示数字的时候,我们实际上是轮流点亮数码管(一个时刻内只有一个数码管是亮的),利用人眼的视觉暂留现象(也叫余辉效应),就可以做到看起来是所有数码管都同时亮了,这就是动态显示,也叫做动态扫描。例如:有 2 个数码管,我们要显示“12”这个数字,先让高位的位选三极管导通,然后控制段选让其显示“1”,延时一定时间后再让低位的位选三极管导通,然后控制段选让其显示“2”。把这个流程以一定的速度循环运行就可以让数码管显示出“12”,由于交替速度非常快,人眼识别到的就是“12”这两位数字同时亮了。

那么一个数码管需要点亮多长时间呢?也就是说要多长时间完成一次全部数码管的扫描呢(很明显:整体扫描时间=单个数码管点亮时间*数码管个数)?答案是:10ms 以内。当电视机和显示器还处在 CRT(电子显像管)时代的时候,有一句很流行的广告语——“100Hz无闪烁”,没错,只要刷新率大于 100Hz,即刷新时间小于 10ms,就可以做到无闪烁,这也就是我们的动态扫描的硬性指标。那么你也许会问,有最小值的限制吗?理论上没有,但实际上做到更快的刷新却没有任何进步的意义了,因为已经无闪烁了,再快也还是无闪烁,只是徒然增加 CPU 的负荷而已(因为 1 秒内要执行更多次的扫描程序)。所以,通常我们设计程序的时候,都是取一个接近 10ms,又比较规整的值就行了。我们开发板上有 6 个数码管,那么我们现在就来着手写一个数码管动态扫描的程序,实现兼验证上面讲的动态显示原理。

我们的目标还是实现秒表功能,只不过这次有 6 个位了,最大可以计到 999999 秒。那么现在要实现的这个程序相对于前几章的例程来说就要复杂的多了,既要处理秒表计数,又要处理动态扫描。在编写这类稍复杂的程序时,建议初学者们先用程序流程图来把程序的整个流程理清,在动手写程序之前先把整个程序的结构框架搭好,把每一个环节要实现的功能先细化出来,然后再用程序代码一步一步的去实现出来。这样就可以避免无处下笔的迷茫感了。如图 6-1 就是本例的程序流程图,大家先根据流程图把程序的执行经过在大脑里走一遍,然后再看接下来的程序代码,体会一下流程图的作用,看是不是能帮助你更顺畅的理清程序流程。

这段程序,大家自己抄到 Keil 中,然后边抄边结合程序流程图来理解,最终下载到实验板上看一下运行结果。其中下边的 if...else 语句就是每 1ms 快速的刷新一个数码管,这样 6个数码管整体刷新一遍的时间就是 6ms,视觉感官上就是 6 个数码管同时亮起来了。在 C 语言中,“/”等同于数学里的除法运算,而“%”等同于我们小学学的求余数运算,这个前边已有介绍。如果是 123456 这个数字,我们要正常显示在数码管上,个位显示,就是直接对 10 取余数,这个“6”就出来了,十位数字就是先除以 10,然后再对 10 取余数,以此类推,就把 6 个数字全部显示出来了。

单片机实例分享,3D旋转显示装置

从电影、电视到数码相机等都在发展应用3D技术。在看到此技术在各领域的应用后,我就想到用单片机来控制一个旋转装置,显示简单的3D图像。

显示原理

3D图形就是在X、Y、Z三个坐标轴所确定的三维空间中将一个画面表现出来。一般情况下,我们用LED点阵模块来显示平面方向的二维文字和图形,只是缺少了Z轴。所以,在本制作中我采用旋转方式,利用人眼的视觉暂留产生Z轴,就能显示3D图形,显示原理见图26.1。

图26.1 显示原理

LED显示平面构成了坐标系的X、Y轴,它绕旋转轴进行高速旋转,每秒转数应在20圈以上,相当于每秒20帧,这样才能保证人眼能看到连续的图形。每帧的3D图形在设定的起始位置开始显示第一幅画面,经过几毫秒(具体时间由电机转速而定)后,LED显示平面转过约3°,再显示第二幅画面,依此类推,直到把这一帧所有画面显示完为止,然后到第二圈开始显示下一帧3D图形,3D显示效果图见图26.2,分解图见图26.3。

图26.2 显示效果

图26.3 3D房屋的分解图

装置组成

整套电路主要由底座盒(内有电机、电源供给板、电机开关等)、电源接收板、左右显示板、控制板组成,整体结构见图26.4。由电源供给板产生的高频脉冲电流通过发送线圈,利用电磁感应传递到接收线圈,然后电源接收板进行整流、滤波,提供5V直流电压分两路供给2块显示板,再经2块显示板供给控制板。由于电机转动过程中转速不是很稳定,例如转速为1200r/min的电机,在旋转时转速大概会在1190~1210r/min之间变化,只是转动的速度很快,人的眼睛不会察觉到,但这种变化在高速显示图形时会产生不同步的现象。因此我又设计了2个光电对管用于2块显示板的位置检测,见图26.5,即电机每转半圈到达特定位置时才开始显示,在电源接收板上设计了用于位置定位的光电对管,检测到的信号也经2块显示板接入控制板上的单片机,单片机收到信号后立即将显示数据传递给2块显示板进行显示。采用2块显示板的目的有2个:一是这样的结构可以保持平衡,便于旋转的稳定性;二是每转动1圈显示2次图形,可以降低显示过程中的图形闪动。

图26.4 整体结构

图26.5 光电对管

硬件制作

1. 电源供给和接收板

因为显示部分是旋转的,所以如何给它供电是个问题。若采用电池供电方式的话,使用时间长了还得更换电池,并且会增加设备的重量,非常不合适。如果采用电刷供电的话,转动的时间就长了,会出现磨损的现象,并且增加了加工难度,最后我决定采用无线供电方式,电源供给电路和接收电路原理图见图26.6和图26.7,因为手头有现成的无刷电机驱动板,就顺手用其改装了。利用原先板子上的ATmega8单片机通过程序产生时序脉冲,驱动2对MOS管组成的H桥电路,进而将产生的高频电流供给无线发送线圈,产生高频磁场,图26.6所示的是改造后的原理图,实际电路板见图26.8。板子上原有3对MOS管,其中1对没有使用。由于电流较大,实际工作中MOS管会发热,最好加上散热片。当然,你也可以使用其他的电路,最好有无线电源模块。图26.6中所示的SX1是程序下载接口,SX2接DC12V,SX3接发送线圈;图26.7中所示的SX101-1、SX101-2接显示板。发送和接收线圈直径为60mm,发送线圈用Φ0.45mm的漆包线绕80匝,接收线圈用Φ0.31mm三线并绕120匝,2个线圈外形见图26.9。制作无线电源发送板与接收板的元件清单参见表26.1和表26.2。

图26.6 无线电源供给板原理图

图26.7 无线电源接收板原理图

图26.8 无线电源供给板

图26.9 供电线圈

表26.1 无线电源发送板元件清单

表26.2 无线电源接收板元件清单

2. 显示板

这是动态扫描电路,X轴(行扫描)显示用两个74HC595串联驱动,Y轴(列扫描)用两块74LS138输出驱动MOS管4953,见图26.10。特别注意的是,LED点阵没有加限流电阻,由于是动态扫描,在正常工作时每个LED只占整个扫描周期1/16的时间,所以LED模块不会被烧坏,但在程序调试的时候别让扫描停止了,否则的话会烧坏LED模块。其实,在实际调试的时候,应先调试无线供电部分。由于无线供电受到功率限制,峰值工作电压会降到3V左右,对LED模块影响不大,但是如果你用外接电源单独调试显示部分的话,就得注意了。焊接的时候注意上下两个IDC-10插座,位置要准确,最好用尺子定位焊。如果位置偏差过大,旋转起来平衡性就会变差。焊接示意图见图26.11,制作显示板所需的元件清单见表26.3。

表26.3 显示板元件清单

表26.4 控制板元件清单

3. 控制板

控制板部分的原理图见图26.12,其中SX1是程序下载接口,SX201-1、SX201-2是连接左、右显示板的。为了提高显示速度,晶体就选用16MHz的。有兴趣的读者可以将此电路板进行扩展,加上串行储存器、时钟电路或者温度传感器等,这些就任你自由发挥了。我的控制板已经加上了串行储存器、时钟电路的位置了,只是还没有使用。特别注意SX201-1、SX201-2两个IDC-10插座,应安装在焊接面,见图26.13,制作控制板所需的元件清单见表26.4。

程序框图

void main(viod)

{

init_devices( );//初始化端口

while(1)

{

FETS_OFF; //关闭所有MOS管

delay_nms(1);//延时

POS_A_ON; //A+开

NEG_C_ON; //B-开

delay_nms(1);//延时

FETS_OFF; //关闭所有MOS管

delay_nms(1); //延时

POS_C_ON //B+开

NEG_A_ON //A-开

delay_nms(1);//延时

}

}

图26.11 焊接示意图

图26.12 控制板原理图

图26.13 SX201-1、SX201-2的安装方向

4. 电机

要旋转就得有电机,由于手头有废旧硬盘的主轴电机,因此,线路板排版的时候就根据它的尺寸设计的。直到调试的时候才发现硬盘电机的扭矩实在太小了,将电路架上去居然启动不起来,还好手头有从同事报废的打印机上拆下的直流电机,这才得以解决。两种电机的外形见图26.14。注意本装置的旋转方向是逆时针的,如果你的电机是正转的,就把电机的正、负电源颠倒一下;驱动硬盘电机的线路板经过改造就变成了电源供给板,用在无线供电上了。

图26.14 两种电机的外形

5. 底座盒

我选择的是100mm×90mm×50mm的铝合金盒,内部装上电机、电源发送板,侧面装电机开关、电源插座,表面有电机主轴、发送线圈和定位铜片等,见图26.15。

图26.15 底座盒内部

程序部分

程序可分为2部分:一个是无线电源供给程序,按照时序编写,主要程序见程序框图;第二个是3D显示程序,先编了个简单的,可以显示几个结构简单的图形。程序初始化后,检测光电对管测出的起始位置,然后逐帧显示每一屏图形,再返回到检测光电对管就行了,程序流程见图26.16。难一点的是图形点阵数据转换,我用的是PCtoLCD2002这个软件,设置界面见图26.17。绘图前脑海里一定要构造出一个虚拟的三维图形来,照着脑海里的图形去画,空间感不强的可能要费点劲儿。

图26.16 显示程序流程

图26.17 PCtoLCD2002的设置界面

安装调试

(1)焊完所有的线路板。

(2)先调通电源供给板、电源接收板,确认线路板无短路、断路,所有元件焊接正确。给无线电源供给板接上12V直流电源,连接下载线,设置熔丝位,下载烧入程序,断电后给供给板接上发送线圈,接收板接上接收线圈,两个线圈放置成同心状态,给供给板通电,测接收板稳压管两端电压应该为5.1V左右,否则电路出错,重新查找。

(3)将整套装置安装起来,注意定位铜片在光电对管之间应无碰撞。电机开关处于关闭状态,接通电源,控制板连接下载线,下载并烧入程序,然后去掉下载线,打开电机开关,效果就出来了。显示板转动时要注意安全,显示效果见图26.18。

需要改进的地方

(1)程序里应加上图形失真校正的算法,否则在实际观看中图形稍微有些变形。

(2)现在的电机是碳刷直流电机,运转了几天都很正常,但还是用无刷直流电机比较好,选功率大一点的,以保证能长时间稳定运转。

图26.18 旋转显示效果图

(3)显示板上的LED模块焊接在元件面上,从焊接面的方向是看不见的,所以现在的观看视角范围也就是LED模块视角的120°。如果采用普通的LED用镂空的方式,即在线路板的每个LED的位置上钻孔,孔径略大于LED,LED垂直镶嵌在孔内,这样从焊接面的方向也能看得到。也可以在元件面和焊接面相同的位置同时焊贴片的LED,这样的话两个面都能看,就可以在接近360°的范围观看了,只是线路板排版的时候要复杂点。

(4)若平衡性不好,旋转起来后振动幅度就会较大(比手机振动模式要大得多),调平衡的时候费了些时间,主要是垂直度和高度的校准,用绘图的直角三角尺的直角部分一边贴着桌面,另一边靠近显示板的侧面,从正面和侧面两个方向进行垂直校准,调好后用热熔胶固定,见图26.19。

后记

3D旋转装置终于做完了,从一个想法到一个实际的装置,前后用了一个多月的时间,整体出来的效果还是挺满意的。这个装置用电机带动旋转,制作的时候应注意安全,小心手被划伤了,可以加个透明罩提高安全性。兴趣和爱好再加上灵感和知识,创作出自己设想的东西,与他人分享,让别人感受到你的快乐,这或许就是DIY的乐趣。

图26.19 调平衡

■文章相关的源程序和电路图文件可以到qq群657864614进行下载。

■我的淘宝店铺:首页-数码达人小李-淘宝网,主打性价比,品质有保障,您的支持是我继续创作的动力。

相关问答

单片机 秒表 显示 实验中,提高计时精度的方法有哪些?

单片机秒表显示实验中,提高计时精度的方法只有一个(因晶振频率误差也影响计时精度,但是不能调,所以,这不能算一个方法),就是调整定时器的计数的初始值。都...

单片机 用oled和lcd 显示 有什么不同-ZOL问答

OLED多为彩屏,是点阵结构,适于显示图形,其用法和TFT彩屏类似但OLED屏一般尺寸较小,大尺寸较贵,OLED屏无背光,靠像素点的LED自发光,功耗比较低lcd分单色屏和彩...

单片机 如何让液晶 显示 实时数据?

要让单片机控制液晶显示实时数据,需要以下步骤:1.选择合适的液晶屏幕和控制器,根据其接口类型(如SPI、I2C、并口等)连接到单片机上。2.编写单片机程序,...

单片机 接口方式不同可分为什么 显示 ?

单片机接口方式不同,可分为动态显示和静态显示两种,这样就可以实时显示当前单片机的运行数据单片机接口方式不同,可分为动态显示和静态显示两种,这样就可以实...

51 单片机 sr041602液晶屏 显示 原理?

51单片机是一种广泛应用于嵌入式系统的微控制器,SR041602是一种常见的液晶屏模块。液晶屏的显示原理是利用液晶分子的电光特性来实现显示。液晶分子具有两种稳...

单片机 怎么用led灯 显示 电机运动状态?

仿照看门狗的处理方法,零点几秒,能够喂狗一次,这就说明单片机在正常工作。喂狗的操作,如果没有出来,就说明单片机没有正常工作。那么,喂狗同时,令LED...仿...

单片机 控制的16*16点阵 显示 汉字,不知道为什么会出现字体镜像?

16X16点阵是双字节数据。(1)显示程序不变,把点阵字符数据镜像:把D15与D0、D14与D1、D13与D2、D12与D3。。。对调。如:12E8H=00010...

郭天祥51 单片机 的液晶 显示 屏为什么只亮,却不 显示 数字,程序都是对的,请高人相助?

首先确认一下液晶屏的对比度是否已调整正确,如果对比度调整正确,当没有程序的时候,液晶屏上会显示一些黑色的方块。如果调整正确后还不能亮,你需要去查看这...

如何实现 单片机 两个数码管之间单独控制且同时 显示 ?

先让你的第一个数码管显示要显示的第一个数字,其他数码管关闭;然后关闭第一个数码管显示;然后让你的第二个数码管显示要显示的第二个数字,其他数码管关闭;...

用51 单片机显示 角度?

转角传感器,顾名思义,是测量或监控物体转动角度的传感器,例如风力发电机轴转动角度、焊接管转动角度监控、海上定位转角测量等。正如我们所知道的,很多微小的...

猜你喜欢