10_关于数码管动态扫描的问题
- 格式:doc
- 大小:111.00 KB
- 文档页数:3
实验三准时器和中止实验一、实验目的1、学习 51 单片机内部准时器的使用方法。
2、掌握中止办理程序的方法。
3、掌握数码管与单片机的连结方法和简单显示编程方法。
4、学习和理解数码管动向扫描的工作原理。
二、实验内容1、使用准时器T0,准时1秒,控制P1口发光管循环点亮。
2、使用准时器 T0,准时 1 秒,控制 1 个数码管循环显示数字 0~9,每秒钟数字加一。
3、使用软件准时 1 秒,控制 2 个数码管循环显示秒数 0~59,每秒钟数字加一。
4、使用准时器 T0,准时 1 秒,控制 2 个数码管循环显示秒数 0~59,每秒钟数字加一。
三、实验电路图四、实验说明1、数码管的基本观点(1)段码数码管中的每一段相当于一个发光二极管, 8 段数码管则拥有 8 个发光二极管。
本次实验使用的是共阴数码管,公共端是 1、6,公共端置 0,则某段选线置 1 相应的段就亮。
公共端1 控制左面的数码管;公共端6 控制右边的数码管。
正面看数码管的引脚、段选线和数据线的对应关系为:图1数码管封装图图2数据线与数码管管脚连结关系段码是指在数码管显示某一数字或字符时,在数码管各段所对应的引脚上所加的高低电平按次序摆列所构成的一个数字,它与数码管的种类(共阴、共阳)和与数据线的连结次序相关。
对应数据线D7D6D5D4D3D2D1D0对应显示段e f DP g c d b a显示数字段码00CFH11001111103H0000001125DH0101110135BH01011011493H1001001150DAH1101101060DEH11011110743H0100001180DFH1101111190DBH11011011( 2)位码位码也叫位选,用于选中某一位数码管。
在实验图中要使第一个数码管显示数据,应在公共端 1上加低电平,即便 P2.7 口为 0,而公共端 6上加高电平,即便口为 1。
位码与段码相同和硬件连结相关。
数码管动态扫描实验一、实验目的学习计数器的设计、分析合测试方法。
学习硬件扫描显示电路的设计方法。
二、实验仪器1、PC机2、SW-51PROC单片机综合实验平台三、实验内容编写一段程序,用单片机P0口和P2口的I/O输出去控制8位的数码管显示,实现如下功能:使数码管上显示1、2、3、4、5、6、7、8。
四、实验步骤:1、用Protues设计数码管动态扫描显示电路;2、在KeilC51中编写识别程序,通过后与Protues联合调试;3、启动仿真,观察数码管显示是否正确;4、用Protues设计脉冲计数电路,仿真调试、运行程序并查看效果。
五、电路设计及调试:1、实验电路:2、程序设计与调试:①实验程序:【12345678】#include<reg52.h>#define uintunsigned int#define ucharunsigned charuchar codeDisplsy[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80}; uchar codeTemble[]={0,1,2,3,4,5,6,7};void delay(uint z){uchar t;while(z--) for(t=120;t>0;t--);}void main(){uchar i;P0=0xff;P1=0;while(1){if(i==8)i=0;P1=Temble[i];P0=~Displsy[i+1];i++;delay(2);}}【脉冲计时】#include<reg52.h>#define uintunsigned int#define ucharunsigned charucharcodeDisplay[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; uchar codeTemble[]={0,1,2,3,4,5,6,7};uchar Flag;uint Num;void delay(uint z){uchar t;while(z--) for(t=120;t>0;t--);}voidTest2(void){TR1 = 1;while(1){Num = TH1;Num = Num << 8;Num |= TL1;P1 = 7;P0 = ~Display[Num%10];delay(3);P1 = 6;P0 = ~Display[Num%100/10];delay(3);P1 = 5;P0 = ~Display[Num%1000/100];delay(3);P1 = 4;P0 = ~Display[Num%10000/1000];delay(3);P1 = 3;P0 = ~Display[Num%100000/10000];delay(3);P1 = 2;P0 = ~Display[Num%1000000/100000];delay(3);P1 = 1;P0 = ~Display[Num%10000000/1000000];delay(3);P1 = 0;P0 = ~Display[Num%100000000/1000000];delay(3);}}void main(){TMOD = 0x50;TH1 = 0x00;TL1 = 0x00;EA = 1;ET1 = 1;TR1 = 0;while(1){Test2();}}②调试:③实验结果:1、数字1~8分别显示在8个数码管上,显示无闪烁。
数码管动态扫描原理一、引言数码管是一种常见的数字显示设备,它由多个发光二极管组成,可以显示数字、字母、符号等信息。
数码管动态扫描技术是一种常用的驱动方法,它能够实现多个数码管在同一时刻显示不同的数字,从而节省了硬件资源和功耗。
本文将详细介绍数码管动态扫描原理。
二、数码管基础知识1. 数码管结构数码管由多个发光二极管组成,每个发光二极管代表一个数字或字符。
常用的数码管有共阳极和共阴极两种类型。
共阳极数码管是指所有发光二极管的阳极连接在一起,而共阴极数码管则是指所有发光二极管的阴极连接在一起。
2. 数字编码方式对于一个七段式数码管来说,每个数字都可以用七位二进制代码来表示。
常用的编码方式有BCD编码和ASCII编码等。
三、静态驱动与动态驱动1. 静态驱动静态驱动是指将每个数码管的控制信号直接连接到单片机的IO口上,并通过程序控制IO口输出高低电平来实现数码管的显示。
静态驱动的优点是驱动简单,控制精度高,但缺点是需要大量的IO口资源,不适用于多数码管显示。
2. 动态驱动动态驱动是指将多个数码管的控制信号通过共用的引脚来传输,并通过程序控制引脚输出高低电平来实现数码管的显示。
动态驱动的优点是可以减少硬件资源和功耗,适用于多数码管显示。
四、数码管动态扫描原理1. 原理概述数码管动态扫描原理是指在一定时间内,依次对多个数码管进行刷新并显示不同数字。
具体实现方式为:将每个数码管与一个引脚相连,并通过程序控制该引脚输出高低电平,在一定时间内循环切换各个引脚的状态,从而实现多个数码管之间的切换和显示。
2. 实现步骤(1)将所有数码管连接到单片机IO口;(2)定义一个循环计时器,在一定时间内循环切换各个IO口状态;(3)对于每一个计时器周期内需要显示的数字进行编码;(4)根据编码结果,在每个IO口上输出对应数字需要显示的控制信号;(5)循环刷新各个数码管,实现动态扫描。
五、动态扫描的优化1. 亮度控制由于数码管的发光强度与电流大小成正比,因此可以通过调节每个数码管的亮度来实现不同数字之间的明暗程度差异。
字形代码,用来控制显示的字形,称为段码;另一组是位输出口输出的控制信号,用来选择第几位数码管工作,称为位码。
由于各位数码管的段线并联,段码的输出对各位数码管来说都是相同的。
因此,在同一时刻如果各位数码管的位选线都处于选通状态的话,8位数码管将显示相同的字符。
若要各位数码管能够显示出与本位相应的字符,就必须采用扫描显示方式。
即在某一时刻,只让某一位的位选线处于导通状态,而其它各位的位选线处于关闭状态。
同时,段线上输出相应位要显示字符的字型码。
这样在同一时刻,只有选通的那一位显示出字符,而其它各位则是熄灭的,如此循环下去,就可以使各位数码管显示出将要显示的字符。
虽然这些字符是在不同时刻出现的,而且同一时刻,只有一位显示,其它各位熄灭,但由于数码管具有余辉特性和人眼有视觉暂留现象,只要每位数码管显示间隔足够短,给人眼的视觉印象就会是连续稳定地显示。
数码管不同位显示的时间间隔可以通过调整延时程序的延时长短来完成。
数码管显示的时间间隔也能够确定数码管显示时的亮度,若显示的时间间隔长,显示时数码管的亮度将亮些,若显示的时间间隔短,显示时数码管的亮度将暗些。
若显示的时间间隔过长的话,数码管显示时将产生闪烁现象。
所以,在调整显示的时间间隔时,即要考虑到显示时数码管的亮字型 dp g f e d c b a 段码0 1 1 0 0 0 0 0 0 0C0H1 1 1 1 1 1 0 0 1 0F9H2 1 0 1 0 0 1 0 0 0A4H3 1 0 1 1 0 0 0 0 0B0H4 1 0 0 1 1 0 0 1 99H5 1 0 0 1 0 0 1 0 92H6 1 0 0 0 0 0 1 0 82H7 1 1 1 1 1 0 0 0 0F8H8 1 0 0 0 0 0 0 0 80H9 1 0 0 1 0 0 0 0 90Ha 1 0 0 0 1 0 0 0 88Hb 1 0 0 0 0 0 1 1 83Hc 1 1 0 0 0 1 1 0 0C6Hd 1 0 1 0 0 0 0 1 0A1HE 1 0 0 0 0 1 1 0 86Hf 1 0 0 0 1 1 1 0 8EH举例:如果你想让图1最右边的数码管显示“0”的话,首先将段码“0C0H”送达P0口,然后将P2.7清为低电平。
数码管动态扫描频率
数码管的动态扫描频率是指数码管在单位时间内刷新显示的次数。
动态扫描频率通常以赫兹(Hz)为单位表示,其数值越高,显示就会越稳定,不易出现闪烁现象。
动态扫描频率受到驱动电路的影响,一般来说,数码管的动态扫描频率应该大于人眼的闪烁融合频率,以确保人眼无法感知到刷新的过程,从而实现稳定的显示效果。
一般来说,动态扫描频率应该大于50Hz,这样人眼就无法察觉到闪烁了。
在设计电子产品时,需要考虑动态扫描频率对功耗的影响。
较高的动态扫描频率会导致驱动电路消耗更多的能量,因此在功耗和显示效果之间需要进行权衡。
另外,动态扫描频率还与数码管的驱动方式有关,常见的有静态驱动和动态驱动两种方式。
静态驱动指所有的数码管同时点亮,而动态驱动则是通过快速切换不同数码管的显示,这也会影响到动态扫描频率的设计和实现。
总的来说,数码管的动态扫描频率是确保显示稳定性和功耗之
间的平衡,需要根据具体的应用场景和产品需求进行合理的设计和选择。
数码管的动态扫描与驱动数码管的基本原理 关于数码管,⼀个单个的数码管可以看做是多个led灯的集合,如下图所⽰其中的8和。
都是LED组成的,通过引脚上电即可点亮不同的LED然后组成不同的数字,这个过程在数码管的设计中叫做段选。
在多个数码管的情况下,需要选择哪个数码管点亮,这个在数码管设计中称作位选,多个数码管可以通过位选和段选完成电⼦时钟设计等功能。
下⾯通过项⽬对于多个数码管进⾏点亮,让其在开发板上显⽰不同的数据。
预计实验现象: 在quartus的in system source and probes editor ⼯具,输⼊需要显⽰在数码管上的数据,则数码管显⽰对应数据。
相关知识点: 数码管动态扫描的实现、in system source and probes editor调试⼯具的使⽤。
设计过程: 1、数码管动态扫描实现。
2、In system sources and probes edit (ISSP)调试⼯具的使⽤ 3、4输⼊查找表,6位输出。
4、分频模块,从系统时钟分频得到1KHz的扫描时钟 5、6选⼀多路选择器,选择为当前数码管的位置。
驱动模块逻辑电路图:下⾯就是照着逻辑电路图来编写程序了。
创建⼯程,添加⽂件module segment(disp_data,rst_n,clk,en ,sel,seg);input clk;//50Minput rst_n;input en;input [23:0]disp_data;output [5:0]sel;//位选(控制哪个数码管亮)output reg [6:0]seg;//段选(控制数码管显⽰什么数据)//分频器的代码,这⾥为了完整,不做多个⽂件来写模块了reg[14:0] diviter_cnt; //25000-1reg clk_1k;reg [5:0]sel_r;reg [3:0]data_temp;//待显⽰数据缓存//⽣成⼀个分频计数器计数always@(posedge clk or negedge rst_n)if (!rst_n)diviter_cnt<=15'd0;else if (!en)diviter_cnt<=15'd0;else if (diviter_cnt==24999)diviter_cnt<=15'd0;elsediviter_cnt<=diviter_cnt+1'b1;//1k扫描时钟⽣成always@(posedge clk or negedge rst_n)if (!rst_n)clk_1k<=1'b0;else if (diviter_cnt==24999)clk_1k<=~clk_1k; //⼤型设计中,这种产⽣分频器的⽅法是不可以的//位选移位寄存器always@(posedge clk_1k or negedge rst_n)if (!rst_n)sel_r<=6'b000_001;else if(sel_r==6'b100_000)sel_r<=6'b000_001;elsesel_r<=sel_r<<1;//设计⼀个6选⼀多路器always@(*)case(sel_r)6'b000_001:data_temp=disp_data[3:0];6'b000_010:data_temp = disp_data[7:4];6'b000_100:data_temp=disp_data[11:8];6'b001_000:data_temp=disp_data[15:12];6'b010_000:data_temp=disp_data[19:16];6'b100_000:data_temp=disp_data[23:20];defaultdata_temp<=4'b0000;endcase//译码器always@(*)case (data_temp)4'h0:seg=7'b1000000;//这⾥按数码管码表来4'h1:seg=7'b1111001;4'h2:seg=7'b0100100;4'h3:seg=7'b0110000;4'h4:seg=7'b0011001;4'h5:seg=7'b0010010;4'h6:seg=7'b0000010;4'h7:seg=7'b1111000;4'h8:seg=7'b0000000;4'h9:seg=7'b0010000;4'ha:seg=7'b0001000;4'hb:seg=7'b0000011;4'hc:seg=7'b1000110;4'hd:seg=7'b0100001;4'he:seg=7'b0000110;4'hf:seg=7'b0001110;endcase//⼆选⼀多路器assign sel=(en)?sel_r:6'b000_000;endmodule编写testbench⽂件来进⾏仿真`timescale 1ns/1ns`define clk_period 20module HXE_tb;reg Clk; //50Mreg Rst_n;reg En; //数码管显⽰使能,1使能,0关闭reg [31:0]disp_data;wire [7:0] sel;//数码管位选(选择当前要显⽰的数码管)wire [6:0] seg;//数码管段选(当前要显⽰的内容)HXE8 HXE8(.Clk(Clk),.Rst_n(Rst_n),.En(En),.disp_data(disp_data),.sel(sel),.seg(seg));initial Clk = 1;always#(`clk_period/2) Clk = ~Clk;initial beginRst_n = 1'b0;En = 1;disp_data = 32'h12345678;#(`clk_period*20);Rst_n = 1;#(`clk_period*20);#20000000;disp_data = 32'h87654321;#20000000;disp_data = 32'h89abcdef;#20000000;$stop;endendmodule点击仿真运⾏,可以看到sel和seg的输出与我们期望的是⼀样的,即位选进⾏移位操作,段选显⽰123456和abcdef。
【技术分享】数码管显示常见问题总结2015-03-30吴鉴鹰(原创)一、数码管显示原理我们最常用的是七段式和八段式LED数码管,八段比七段多了一个小数点,其他的基本相同。
所谓的八段就是指数码管里有八个小LED发光二极管,通过控制不同的LED 的亮灭来显示出不同的字形。
数码管又分为共阴极和共阳极两种类型,其实共阴极就是将八个LED的阴极连在一起,让其接地,这样给任何一个LED的另一端高电平,它便能点亮。
而共阳极就是将八个LED的阳极连在一起。
其原理图如下。
其中引脚图的两个COM端连在一起,是公共端,共阴数码管要将其接地,共阳数码管将其接正5伏电源。
一个八段数码管称为一位,多个数码管并列在一起可构成多位数码管,它们的段选线(即a,b,c,d,e,f,g,dp)连在一起,而各自的公共端称为位选线。
显示时,都从段选线送入字符编码,而选中哪个位选线,那个数码管便会被点亮。
数码管的8段,对应一个字节的8位,a对应最低位,dp对应最高位。
所以如果想让数码管显示数字0,那么共阴数码管的字符编码为00111111,即0x3f;共阳数码管的字符编码为11000000,即0xc0。
可以看出两个编码的各位正好相反。
如下图。
二、数码管出现暗红现象现象描述:单片机穿行口的范式0为同步移位寄存器方式,外接一个串入并出的移位寄存器,可以扩展为一个并行口。
但是发现数码管显示数据的时候,出现暗红现象。
电路连接图原因:数据在串行输出期间,输出允许控制端没有关闭,从而导致串口输出端不稳定产生暗红现象。
三、数码管闪烁1:动态扫描驱动的时候,时间调整的不对,时间太短,就会闪烁,时间太长,就会出玩不应该亮的位微亮,所以,这是调整延时时间的事2:有可能是程序要求这样闪烁吧,别说不可能,有时候在某些系统中,还故意设有这种功能。
3:即使用专用芯片,只要是扫描式的驱动,他也会闪烁,只是我们看起来不太明显。
4:如果从程序中讲的话,即使扫描时间合理,也有可能会因为程序的不合理性而出现闪动,这种情况一般为两种失误:a中断时间影响了扫描周期的时间,即中断时间长于扫描周期,就会出现闪烁 b闪烁的常用数据内存被快速更改后又改过来,属于寄存器的重复使用,这两种情况我都碰到过。
简述数码管动态显示的工作原理及特点研究了这么久数码管动态显示的工作原理及特点,总算发现了一些门道。
先说说这工作原理吧。
你看啊,数码管动态显示呢,就是让多个数码管逐个快速闪亮,但是速度特别快,咱们的眼睛就感觉它们是同时亮着的。
比如说,就好像有一排小灯,其实每次只亮一个,但是飞快地轮流点亮,咱们看起来就觉得这一排小灯都一直亮着呢。
这是为啥呢?其实就是利用了咱眼睛的视觉暂留特性。
就像看电影,电影其实是一张张照片快速播放,咱们眼睛就觉得画面是连续的,数码管动态显示也是这个道理。
它的原理还有一个关键就是利用了扫描的方式,就像扫地一样,从第一个数码管开始,然后快速地扫到下一个,再下一个,这样轮着来。
那它的特点呢?首先就是节省硬件资源。
你想啊,如果不用动态显示,每个数码管都单独弄线路来控制亮灭那些的,那得多复杂,要好多好多线啊。
打个比方,就像你有好多个玩具娃娃,每个娃娃都要单独弄一套衣服,那得费多少布料。
但是用动态显示,就像几个娃娃穿同一套衣服,轮流穿,只需要一套就行了,这就节省了很多资源。
再一个特点呢,它显示的效果其实还挺好的,虽然是这种快速轮流闪亮的方式,但看起来就跟同时亮着差不多。
不过呢,这里头也有我不太理解的地方。
比如说这个速度到底怎样才是最合适的呢?要是太快了,会不会对数码管本身有啥不好的影响啊?我之前还以为只要能让眼睛看着是同时亮就可以了,但是后来发现可能没那么简单。
这个速度可能还得根据数码管的类型啊,使用的环境啊,甚至是电源供应的稳定性啥的来调整呢。
我还发现啊,数码管动态显示还有个特点就是编写程序的时候稍微有点复杂。
跟静态显示比起来,就像一个是走直路,一个是走弯路。
因为你得把那个扫描顺序啊,每个数码管显示的时间间隔啊这些东西都得安排好,要是安排不好,显示就可能出错。
就像穿珠子似的,珠子的顺序要是穿错了,那最后的项链就不好看了,甚至做不出来是个项链了。
不过呢,复杂归复杂,掌握了其中的窍门,也就能运用自如了。
数码管鬼影产生原因及消除方法十进制数码管显示小模块---解决动态扫描中的消隐问题//*===============================//接线要求:P0口分时复用输出,P2.6,P2.7做74ls573片选//入口参数:0000--9999范围内的二进制或十进制数//出口参数:无//函数功能:数码管实现小于9999数的十进制显//by Oliver 21/03,21:59//==================================#include <AT89X52.H>#define uchar unsigned charsbit WEI=P2^7;sbit DUAN=P2^6;sbit LED=P1^4;uchar wei[]={0xfe,0xfd,0xfb,0xf7};uchar duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};void delay(void) //误差 0us{unsigned char a,b,c;for(c=1;c>0;c--)for(b=222;b>0;b--)for(a=12;a>0;a--);}//--------------6ms延时void undo(void){WEI=1;P0=0xff;WEI=0;}//使位选失效void wei_cs(uchar a){P0=wei[a];//=====关键之处---------------------------------------------------消隐------ WEI=1;WEI=0;}//-------------------位选---------void duan_cs(uchar a){P0=duan[a];DUAN=1;DUAN=0;}//-------------------段选---------void show(int DATA){uchar qian,bai,shi,ge;uchar duan_flag=0;if(DATA>9999){LED=0;P0=0xfe;}//判断是否超出显示范围else{qian=DATA/1000;bai=DATA%1000/100;shi=DATA%100/10;ge=DATA%10;//-------------各位分离if(qian!=0){duan_cs(qian);wei_cs(duan_flag++);}delay();if((bai|qian)!=0){duan_cs(bai);wei_cs(duan_flag++);}delay();if((shi|bai|qian)!=0){duan_cs(shi);wei_cs(duan_flag++);}delay();if(1){duan_cs(ge);wei_cs(duan_flag);}}}void main(void){while(1)show(1545);}消隐的研究:隐红的出现:1 ,段码改变时,位码未变,在位码变化之前,会在前一个位码处产生残影;2 ,位码改变时,如先使P2^7有效,则段码在位码写入之前会在新的位码处产生残影。
数码管动态扫描实验报告数码管动态扫描实验报告引言:数码管是一种常见的显示器件,广泛应用于电子设备中。
动态扫描技术是一种常见的驱动数码管的方法。
本实验旨在通过动态扫描技术实现数码管的显示,并对其原理进行深入研究。
一、实验目的本实验的主要目的是掌握数码管的动态扫描原理,并通过实践验证其可行性。
具体目标如下:1. 理解数码管的基本工作原理;2. 熟悉动态扫描技术的实现方法;3. 掌握使用单片机驱动数码管的方法;4. 通过实验验证动态扫描技术的可行性。
二、实验器材与原理1. 实验器材:- 单片机开发板;- 4位共阳数码管;- 连接线。
2. 实验原理:数码管是由多个发光二极管组成的,每个发光二极管对应一个数字或符号。
共阳数码管的阳极连接在一起,而阴极分别与单片机的IO口相连。
动态扫描技术是通过快速切换数码管的显示,从而形成连续的显示效果。
具体原理如下:- 单片机通过IO口输出高电平或低电平控制数码管的显示;- 通过快速切换数码管的显示,使得人眼感觉到数码管同时显示多个数字。
三、实验步骤1. 连接电路:将4位共阳数码管的阳极分别连接到单片机的IO口,阴极连接到GND。
确保连接正确,避免短路或接反。
2. 编写程序:使用单片机开发板的编程软件,编写程序控制数码管的显示。
通过循环控制IO 口输出高低电平,实现动态扫描的效果。
3. 上传程序:将编写好的程序上传到单片机开发板中,确保程序能够正确运行。
4. 运行实验:将单片机开发板连接到电源,观察数码管的显示效果。
通过动态扫描技术,数码管会以一定的频率显示不同的数字。
四、实验结果与分析通过实验,我们成功实现了数码管的动态扫描显示。
数码管以一定的频率切换显示不同的数字,形成了连续的显示效果。
通过改变程序中的循环次数和延时时间,我们可以调整数码管显示的速度和亮度。
动态扫描技术的优点是可以通过少量IO口驱动多个数码管,节省了硬件资源。
同时,由于数码管的刷新速度较快,人眼无法察觉到闪烁的现象,使得显示效果更加平滑和稳定。
数码管动态显示的原理
数码管动态显示的原理是通过不断改变显示的数字或字符,使得各个数码管依次显示不同的内容,从而实现动态显示的效果。
数码管是一种由多个发光二极管(LED)组成的显示器件,常用的有7段数码管和8段数码管。
每个数码管都由7或8个小灯泡组成,分别代表显示的数字或字符的不同段位。
通过控制这些小灯泡的亮灭来实现不同的显示效果。
动态显示常用的方法是采用扫描技术。
具体步骤如下:
1. 将要显示的数字或字符进行数字转换,得到对应的码值。
2. 将码值按照数位顺序分割成各个段位的码值。
3. 按照顺序控制每个数码管的对应段位小灯泡的亮灭,使其显示对应的数字或字符。
4. 开启当前数码管,使其对应的段位小灯泡亮起。
5. 等待一段时间(通常是几毫秒)后,关闭当前数码管,熄灭对应的段位小灯泡。
6. 切换到下一个数码管,重复步骤4和5,直到所有数码管都显示完毕。
7. 不断重复以上步骤,使得数码管能够连续显示各个数字或字符。
通过不停地切换数码管显示的内容,人眼会感知到数码管在不断变化的效果,从而实现了动态显示的效果。
这种扫描技术在人眼的视觉暂留效应下,给人一种连
续、流畅的显示体验。
多位数码管的动态显示原理今天来聊聊多位数码管的动态显示原理。
前段时间我在捣鼓一个小电子制作,用到了多位数码管,当时就被这个动态显示的机制给难住了。
不过经过不断地摸索和学习,也算是有点心得啦。
你看,咱们平时在大街上看到那些数字显示牌,就像公交车牌显示线路啥的,一溜看过去数字特别清晰,其实这里面可能就用到了多位数码管的动态显示原理。
我们先来看看数码管是个啥。
简单来说,数码管就是能够显示出数字或者一些简单符号的小器件。
那多位数码管呢,就是好几个这样的小数码管凑在一起,可以用来显示多位数字,像时钟上显示时分秒的那些小数字,就是多位数码管在起作用。
多位数码管的动态显示,打个比方就像是一群小朋友轮流当代表发言。
数码管有好几个位,比如一位数码管显示个位数字,另一位显示十位数字等等。
在动态显示的时候,并不是所有的数码管同时亮起显示完整的数字的。
就像一群小朋友站成一排,老师要让他们顺次报自己的名字,一个说完下一个再说,但是因为说得很快,我们就感觉他们像是一起说的。
这就要说到具体的实现过程了。
在电路里,其实就是通过快速地扫描各个数码管。
比如说,先让显示个位数字的数码管亮起来,给出个位对应的信号,这时候十位、百位等其他数码管暂时是暗的,然后再非常快的速度切换到十位数码管,给它十位对应的信号让它亮起来,这样快速地循环扫描这些数码管。
人的眼睛有视觉暂留现象,就好像咱们看电影似的,虽然电影是一格一格的画面快速闪过,但是我们看到的好像是连贯的画面。
同样的道理,因为这个扫描速度非常快,我们眼睛就感觉这些数码管好像是同时显示出完整的数字啦。
有意思的是,在这个过程中,如果扫描速度慢了点儿,我们就会看到数码管显示会闪烁,或者显示不完全准确。
我一开始也不明白为啥有时候我做的小装置显示老是出问题,经过查阅资料和反复试验才发现是扫描速度的事儿。
这里的扫描速度就是一个很关键的因素,就像小朋友发言的时候,如果小朋友之间间隔的时间太长,那就不像一组连贯的信息了,看起来就很奇怪。
实验三定时器和中断实验一、实验目的1、学习51单片机内部定时器的使用方法。
2、掌握中断处理程序的方法。
3、掌握数码管与单片机的连接方法和简单显示编程方法。
4、学习和理解数码管动态扫描的工作原理。
二、实验内容1、使用定时器T0,定时1秒,控制P1口发光管循环点亮。
2、使用定时器T0,定时1秒,控制1个数码管循环显示数字0~9,每秒钟数字加一。
3、使用软件定时1秒,控制2个数码管循环显示秒数0~59,每秒钟数字加一。
4、使用定时器T0,定时1秒,控制2个数码管循环显示秒数0~59,每秒钟数字加一。
三、实验电路图四、实验说明1、数码管的基本概念(1)段码数码管中的每一段相当于一个发光二极管,8段数码管则具有8个发光二极管。
本次实验使用的是共阴数码管,公共端是1、6,公共端置0,则某段选线置1相应的段就亮。
公共端1控制左面的数码管;公共端6控制右面的数码管。
正面看数码管的引脚、段选线和数据线的对应关系为:图1 数码管封装图图2 数据线与数码管管脚连接关系段码是指在数码管显示某一数字或字符时,在数码管各段所对应的引脚上所加的高低电平按顺序排列所组成的一个数字,它与数码管的类型(共阴、共阳)(2)位码位码也叫位选,用于选中某一位数码管。
在实验图中要使第一个数码管显示数据,应在公共端1上加低电平,即使P2.7口为0,而公共端6上加高电平,即使P2.6口为1。
位码与段码一样和硬件连接有关。
(3)拉电流与灌电流单片机的I/O 口与其他电路连接时,I/O 电流的流向有两种情况:一种是当该I/O 口为高电平时,电流从单片机往外流,称作拉电流;另一种是该I/O 口为低电平时,电流往单片机内流,称为灌电流。
一般I/O 的灌电流负载能力远大于拉电流负载能力,对于一般的51 单片机而言,拉电流最大4mA,灌电流为20mA。
一般在数码管显示电路中采用灌电流方式(用共阳数码管),可以得到更高的亮度。
本实验电路中采用拉电流方式(用共阴数码管)。
《单片机原理与应用》考核试题三注意事项1、考试时间:120分钟。
2、请首先按要求在试卷的标封处填写您的姓名、准考证号和所在单位的名称。
3、请仔细阅读各种题目的回答要求,在规定的位置填写您的答案。
占用cpu时间少。
D、动态显示占用硬件少。
6.独立按键与矩阵键盘区别如下不正确的是()。
A、独立按键与矩阵键盘相比电路更复杂。
B、独立按键占用输入口较多C、矩阵键盘编程较复杂D、独立键盘更适合在按键较少或操作速度较高的场合。
7.关于按键抖动下面说法不正确的是()A、每个开关都存在按键抖动B、抖动时间一般为5-10msC、通常用软件来消除按键抖动D、必须消除按键抖动8.下列不是键盘输入容易出现的问题的是()A、重键B、键抖动C、按键持续时间长短不一D、扫描键盘9.下列代码中能使共阳极数码管正确显示6,小数点不亮的是()A、60HB、82HC、02HD、FEH9.矩阵键盘闭合键的键号等于低电平的列号加上低电平的行的首键号。
10.数码管实际就是8个发光二极管组成的器件。
三、填空题(每空1分,共16分)1.若led为共阳极接法,则显示字符P的七段代码值应为 H2.LED显示器的显示控制方式有显示和显示两大类。
3.LED显示器根据二极管的连接方式可以分为和两大类。
4.若led为共阴极接法,则显示数字5则亮,灭。
5.当单片机某一端口输出一组显示数据之后,该端口一直保持该数据输出,维持数码管的显示数字,这种显示称为显示。
3.简述矩阵键盘扫描法的接口特点。
4.矩阵键盘的工作方式有哪三种。
5.如何解决按键输入中重键的问题。
《单片机原理与应用》考核试题三答案一、选择题1.C 2.A 3.B 4.D 5.C 6.A 7.A 8.D 9.B 10.A二、判断题1.√2.√3.错4.√5.√6.错7.√8.错9.√ 10.√三、填空题1.8C2.静态,动态3.共阴极,共阳极4.a、c、d、e、g亮b、f灭5.静态6.独立键盘、式键盘7.低电平8.段选、位选9.矩阵键盘 10.扫描法、反转法四、简答题1.若用软件实现闭合键识别的,称为非编码键盘。
第1篇一、实验背景随着科技的不断发展,数码管在电子设备中的应用越来越广泛。
动态扫描数码管作为一种高效、实用的显示方式,在电子设备中扮演着重要角色。
本实验旨在通过设计并实现动态扫描数码管电路,深入了解动态扫描原理,掌握动态扫描数码管的设计与实现方法。
二、实验目的1. 理解动态扫描数码管的工作原理。
2. 掌握动态扫描数码管电路的设计方法。
3. 学会使用Verilog HDL进行层次化设计电路。
4. 通过仿真验证动态扫描数码管电路的正确性。
三、实验内容1. 动态扫描数码管原理介绍动态扫描数码管由多个七段数码管组成,通过位选线和段选线分别控制数码管的位和段。
动态扫描数码管显示时,先选中某个数码管,然后显示该数码管的段码,随后快速切换到下一个数码管,重复此过程,使多个数码管轮流显示,从而实现多位数码管的显示。
2. 动态扫描数码管电路设计本实验采用Verilog HDL进行动态扫描数码管电路的设计。
主要设计内容包括:(1)位选信号生成模块:生成动态扫描数码管的位选信号,控制数码管的显示顺序。
(2)段选信号生成模块:生成动态扫描数码管的段选信号,控制数码管的显示内容。
(3)七段数码管驱动模块:将段选信号和位选信号转换为数码管的段码,驱动数码管显示。
3. 动态扫描数码管电路仿真使用Verilog HDL进行动态扫描数码管电路的仿真,验证电路的正确性。
主要仿真内容包括:(1)位选信号和段选信号的波形分析。
(2)数码管显示内容的波形分析。
(3)动态扫描数码管电路的整体性能分析。
四、实验结果与分析1. 仿真结果分析通过仿真实验,验证了动态扫描数码管电路的正确性。
位选信号和段选信号波形正常,数码管显示内容正确,动态扫描数码管电路整体性能良好。
2. 实验结果分析(1)动态扫描数码管电路设计过程中,位选信号和段选信号生成模块是关键部分。
位选信号需要满足轮流显示的要求,段选信号需要满足数码管显示内容的要求。
(2)动态扫描数码管电路在实现多位数码管显示时,可以有效减少引脚数量,降低硬件成本。
数码管动态显示和静态显示的原理
数码管动态显示和静态显示都使用LED数码管作为显示器件。
不同之处在于,动态显示是通过周期性地刷新数码管来实现显示效果,而静态显示则是通过直接将数码管接通电源来实现显示效果。
具体原理如下:
动态显示:在动态显示中,每个数码管都有一个独立的控制信号,也就是所谓的扫描信号。
控制信号的频率通常在几十赫兹到几千赫兹之间,可以忽略不计的频率,因为人眼无法分辨过于频繁的变化。
每次扫描信号到来时,只有一个数码管会被点亮,显示当前需要呈现的数字。
为了实现连续的数字显示,控制信号在所有数码管之间轮流切换,切换速度快到人眼无法察觉。
这就像是在快速地切换电影幻灯片,使得不同的图片连续呈现在眼前的感觉。
这种方法的好处是可以极大地减少需要的控制信号线的数量,实现简单而经济的数字显示。
静态显示:与动态显示相比,静态显示不需要扫描信号,也就不需要周期性地刷新数码管。
数字显示的实现过程更加简单直接,只需要将数字和相应的管脚连接即可。
尽管静态显示需要更多的针脚,但是它的显示效果更加稳定和清晰。
同时,它可以承载更多的信息,并且在视觉效果上更加炫酷。
总之,无论是使用动态显示还是静态显示,都在数码管的控制信号和显示电路之间建立了一条有用的桥梁,使得我们可以方便地将数字信息呈现给用户。
关于数码管动态扫描的问题
关于数码管的动态扫描,相信玩单片机的都不陌生。
而什么是动态扫描,怎样扫描,扫描时间为多少最佳,这是一个值得深究的问题。
大家知道驱动一个或者两三个数码管,如果单片机有足够的IO口,我们可以用静态显示,至于什么是静态显示(动态显示的基础),这里不做阐述。
但如果,或者假如我们要点亮8个数码管或者更多,而恰恰单片机IO口不够用的情况下(扩展IO口的不讲),这是就必须用到动态扫描的显示方式了。
什么是数码管动态扫描?所谓的数码管动态扫描,就是在静态显示的基础上,逐一点亮每个数码管,由于点亮的时间非常短暂,由于人眼暂留现象使得我们看到所有的数码管像被点亮一样。
其中还有一点就是数码管熄灭后的余晖现象的关系。
那么,这又牵扯到一个问题了,什么是人眼暂留现象,我也码了一下解释,如下:
(Visual staying phenomenon,duration of vision)
人眼在观察景物时,光信号传入大脑神经,需经过一段短暂的时间,光的作用结束后,视觉形象并不立即消失,这种残留的视觉称“后像”,视觉的这一现象则被称为“视觉暂留”。
是光对视网膜所产生的视觉在光停止作用后,仍保留一段时间的现象,其具体应用是电影的拍摄和放映。
原因是由视神经的反应速度造成的.其时值是二十四分之一秒。
是动画、电影等视觉媒体形成和传播的根据。
视觉实际上是靠眼睛的晶状体成像,感光细胞感光,并且将光信号转换为神经电流,传回大脑引起人体视觉。
感光细胞的感光是靠一些感光色素,感光色素的形成是需要一定时间的,这就形成了视觉暂停的机理。
物体在快速运动时, 当人眼所看到的影像消失后,人眼仍能继续保留其影像0.1-0.4秒左右的图像,这种现象被称为视觉暂留现象。
是人眼具有的一种性质。
人眼观看物体时,成像于视网膜上,并由视神经输入人脑,感觉到物体的像。
但当物体移去时,视神经对物体的印象不会立即消失,而要延续0.1 -0.4秒的时间,人眼的这种性质被称为“眼睛的视觉暂留”。
很简单,说白点,就是逐一显示数码管,根据图像在人眼的暂留时间0.1-0.4秒计算,如果要点亮10个数码管,那动态扫描的时间只要在0.1秒之内就可以看到全部点亮的数码管了。
(这里以位来扫描,就是所有ABCDEFGH段并联做段选,留下每个数码管COM端做位选)
操作流程如下:
1.送数码管段码
2.打开位选(点亮数码管)
3.延时点亮(具体情况具体分析)
4.关闭位选(熄灭数码管)
接着就进行下一个数码管的显示了
也就是在某个时刻,只有一个数码管被点亮。
当这个时间在人眼暂留现象的时间之内,人就能看到连续点亮的数码管了。
这个是我将扫描时间片加到0.2秒的效果(也就是0.2*17=3.4秒钟扫完17个数码管)。
而大家看到数码管全部亮,是因为将扫描时间片降低到0.0005秒(500微秒),由于人眼暂留现象,所以看到数码管全部亮了。
关于动态扫描的时间片问题,是的,这个问题非常关键。
时间片也就是点亮一个数码管的时间,由于时间比较短,所以称为时间片。
时间片对于点亮数码管的亮度有影响,也同时会影响整体动态扫描的时间,或许造成动态扫描闪烁也与此有关。
掌握适合的时间片,对于动态扫描的效果尤为重要。
时间片过短,数码管太暗了。
(至于为什么暗,这里可以想象一下PWM的方式,与PWM具有异曲同工之妙)。
时间片太长,数码管就可能会闪烁。
经验分享:由于我扫的是17个数码管,在没有加数码管驱动芯片的情况下,全部扫描的时候很暗,逐个点亮的时候又正常了。
所以如果超过8个(或者12个)数码管,建议使用专门的驱动芯片,或者采用段扫。