数码管动态显示原理 (如何让数码管的动态扫描慢一点)
显示值1 ,第一件事显示(2 ms)(2 :1 4 )显示(2 :单词)(2 :单词)。单片机数码管动态扫描
您的延迟功能太短。让我们谈谈下面的工作流程。
首先,第一个数字管的位选择线被激活,因此选择了第一个数字管。
随后,关闭位线路的选择,并激活片段线的选择以将数据发送到数字管。
发送数据后,片段选择行关闭。
目前,延迟为5 毫秒(请注意,人眼具有视觉保留效果,约为0.1 至0.4 秒。
如果晚期太短,两个数字管道一个接一个地点亮,则第一只数字管将点亮,因此第二个数字管将点亮,可以点亮,以延长。
将位置选择线激活,并选择第二个数字管。
请求是因为可以共享每个数字管的段选择。
例如,假设您有4 个数字管道,每个数字管都有8 行选择段,总共需要3 2 个门I/O。
但是,通过动态扫描技术,这4 个数字管只能使用8 个门I/O来控制,从而大大降低了硬件成本。
动态扫描的另一个优点是,即使在高速扫描期间,由于人眼的视觉保留效果,用户也不会注意到闪烁。
这对于在恒定演化中查看值非常有用(例如时间,温度等)。
此外,动态扫描也可以增加数字管的亮度,因为在每个扫描周期中,每个数字管都会在一段时间内照亮。
但是,动态扫描也有其限制。
由于每个数字管仅在每个扫描周期的短时间内被照亮,因此,如果扫描频率太低,则可以从标志期间发生。
通常,扫描频率必须保持在约5 00Hz以上,以避免对机架用户的感知。
此外,动态扫描还会引起数字管的不规则亮度,尤其是在高速扫描过程中,其中一些数字管可能具有较低的亮度。
为了获得最佳的动态扫描效果,有必要合理设置延迟时间和扫描频率。
通过实验和调整,可以找到一个足够的平衡点,从而使数字管显示出稳定且更明亮。
数码管动态扫描冒号怎么显示
数字管显示替代肠道中的两个点。为了达到此显示分数,需要适当的时间表和电路设计。
显示数字浴缸扫描系统存在的方法:决定1 ,包含包含明矾的明矾。
数字管从1 到N.2 的制备 因此,必须准备当前的计数器以控制检查频率。
3 选择一个特定的数字管以在每个数字管中显示数字管。
4 这两个点可以由Athethy的Athethy Arty的两个点控制。
控制一个点以在演示展示中品尝第一点,然后在下次控制另一点。
这迅速控制了导致肠道肠道的两个点的情况。
数字管是一种数字显示设备,其中包括一系列字母和数字。
每个数字管包括七个孤立的气泡部分(A,B,C,D,E)和小数点。
通过控制情况,字母,症状,症状,特殊字符等。
数码管是如何显示的?
测试简介:数字管的动态屏幕是蓝桥杯芯片的竞赛中流行的模块之一。根据不同的连接方法,数字管被分为阳性和常见阴极类型的常见类型。
通用阳极点数字管道图的知识:在公共阳极结构中,所有创造性二极管的阳极都与能量提供的通用终端设备中。
当场的另一端较低时,二极管点亮。
数字管图:DS1 和DS2 的图显示了如何控制数字管以显示数字。
控制字段Y7 C和Y6 C和END COM。
数字0到9 表:通过了解数字管的原理和操作实践,您可以了解如何控制数字管以显示数字。
练习活动显示数字管上的“ F”:解释Y6 C和Y7 C的值可能会使大多数学生感到困惑。
实现Y6 = 0的方法是使用微控制器连接图,当C = H,B =,A = L,Y6 = 0时,获得Y6 C = 1 选择数字管位置:DS1 的第一个位置代码的示例,DS2 的第四位置的第四位置显示了如何通过代码执行特定位置的数字显示。
问题分析和解决方案的示例在DS1 的第四位置在DS1 的第一个位置和第9 号位置显示了第2 号,这提供了实现。
序列显示从0到9 :通过更改字节P0的值,它在序列中实现了从0到9 的显示,并注意数字管道位置的选择。
在了解显示数字管的原理之后,通过熟练的图,接口功能和数字屏幕实现的示例,您可以轻松地掌握数字管的屏幕和闪光灯。
这部分是蓝桥杯比赛中流行的测试点,需要熟练程度。
什么是数码管动态显示
本实验中使用的实验板源电路图如下:其中端口P0是段代码,在低级别上有效。端口P2 是一个位代码,高级别是有效的。
端口P2 .0控制第一个数字管,直至p2 .7 控制第八。
表段代码表如下:每个数字管的段代码是从端口P0输出的,也就是说,每个数字管的输入段代码是相同的。
借助视觉适应性,只要我们的延迟缩短,数字显示器就会看起来非常稳定且清晰。
此过程如下所示。
上述方法和想法写得如下:org0000h start:mova,#08 H; 0; movp0段代码,一个movp2 ,#01 H; 位lcalldelay_1 ms mova,#0abh; ,#2 2 H; 3 movp0,a movp2 ,#08 h lcalldelay_1 ms mova,#0a1 h; 4 movp0,一个movp2 ,#1 0H lcalldelay_1 ms mova,#2 4 H; 5 movp0,一个movp2 ,#2 0H lcalldelay_1 ms mova,#04 H; 6 movp0,一个movp2 ,#4 0H lcalldelay_1 ms; Mova,#0aah; 7 MOVP0,A MOVP0,#0AAH; MS ljmpstart delay_1 ms:movr6 ,#2 温度:movr5 ,#0ffh djnzr5 ,$ djnzr6 ,temp ret下载到董事会中,以从0到7 (包括眼睛)从低至高点获得测试结果。
★上述方法将值一个或P2 一个一个一个。
如果要更改显示的数字,则很难更改程序。
因此,我们需要在5 1 个微控制器中使用常用方法:表搜索方法。
例如,在删除P0端口上的片段代码时,我们可以将段代码放置在表中显示,然后每次从该表中获取数字,然后将其发送到P0端口。
在P2 端口上删除位代码时,您可以将位代码放在另一个表中,并每次从该表中获取数字并将其发送到P2 端口。
这样,如果要更改显示的数字,则只需要更改表中的数字即可。
org0000h启动:movr7 ,#0ffh; R7 ,R6 查看表时,它将发送到列表索引A(添加1 后为0,因此FFH是预设)Movr6 ,#0FFH循环:lcallplay1 ; CallPlay1 ; callplay2 比特码显示是否到达左侧,即位代码-8 ajmpstart Play1 :; subrutin搜索时间表段代码 - +dptr; 基本地址列表添加了索引寄存器索引地址movp0,ret Play2 :; Search Table Bitcode Subroutine Table (Principle is the same as MAIN1 ) Mova, R6 Inca Movr6 , MovdPtr,#Table2 Movca,@A+DPTR MOVP2 , A Ret Table1 : DB08 H, 0abh, 1 2 H, 0abh, 1 2 h, 0abh, 1 2 H, 0abh, 1 2 H, 1 2 H, 0ah, 1 2 H, 0ah, 0 1 2 H,0AH,1 2 H,0AH,1 2 H,0AH,1 2 H,1 2 H,0AH,1 2 H,1 2 H,0AH,1 2 H,1 2 H,1 2 H,1 2 H,0AH,0AH,0AH,1 2 H,0AH,0AH,0AH,0AH,1 2 H,1 2 H,0AH,0AH,0AH,0AH,1 2 H,1 2 H,0AH,0AH,0AH,1 2 H,1 2 H,1 2 H,1 2 H,0AH,0AH,0AH,0AH,1 2 H,1 2 H,1 2 H,1 2 H,1 2 H,1 2 H,1 2 H,1 2 H,1 2 H,1 2 H,HENG,HEN,HENG,HENG,04 H,04 H,0AH,0AH,0AH,0AH,0AH,0AH,0AH,0AH,0AH,0AH,0AH,0AH,0AH,0AH,0AH,0AH; 表2 段代码:DB01 H,02 H,04 H,08 H,1 0H,2 0H,4 0H,8 0H; 位代码表Deled_1 ms:movr5 ,#02 H; ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- When P2 .0 Port Digital Tube UnsignedCharcodedis_Code [1 1 ] = {0x08 ,0xab, 0x1 2 ,0x2 2 2 ,0xa1 , // 0,1 ,2 ,3 ,3 ,4 0x2 4 ,0x04 ,0xaa,0x00,0xff}; ; // dis_buf显示在unsignedchardatadis_index buffer的基本地址; // dis Display索引,用于识别数字管偏移量和voida(){p0 = 0xff; // -. -tubing p2 = 0x00 f [6 ] = dis_code [6 ]; 前任]; //段代码发送p0端口p2 = dis_digit; //选择位功能(即位代码)延迟(1 ); // delay dis_digit = _crol_(dis_digit,1 ){写回通用表单:dis_index = dis_index&0x07 此方法相对较新。
例如,在第一个循环之后,DIS_INDEX值为0000001 ,手术后,该值保持不变,并且柱功能值为0x01 。
可以用(dis_index == 8 )dis_index = 0代替此句子,效果是相同的。
★使用上述方法通过C5 1 实施时,段代码放在数组dis_code [1 1 ]中,然后将要在程序中调用的值通过dis_buf预算阵列加载,以便可与下标(offset)访问。
这看起来有些复杂,但是想法很清楚,结构清晰,它用途广泛且易于生长。
★此外,仅扩大程序中的延迟,例如延迟(1 000),然后将其下载到板上,您可以看到数字管实际上逐渐从低至高显示。
------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------------------- is_digit; //位门价值发送到端口P2 到当前的数字管值入口。
a,0x00,0x2 0,0xff}; // 5 ,6 ,7 ,8 ,9 ,unsignedchardatadis_index; //显示索引,用于识别显示的数字管偏移和voidmain buffer(){p0 = 0xff; //代码管P2 = 0x00; 门向左移动,靠近门旁边的一点dis_index ++; 程序(Crystal 1 2 m){unsignedChari; 结果总是错误的:从0到2 的三位数字显示三个8 ,第三位数字显示了7 个,没有显示四个较高的数字。
一点点观察的漫长延误没有发现任何错误,我对KEM的调试并不熟悉。
[2 006 .5 .2 ]找出原因,添加它:我今天回头找出上面的错误。
当时,我想将dis_index值用作位代码,也就是说,当第一个位显示0时,段代码为dis_code [0],即dis_index值为0,此时的位代码值为1 当第二位显示1 时,段代码为dis_code [1 ],dis_index值为1 ,目前的位代码值为2 因此,我仅使用1 个操作将端口P0偏移值与端口P2 位代码相关联。
但是,如果您仔细考虑BIT代码的原理,则上述方法显然是错误的。
所以出了点问题。
实际上,这封信的这封信存在,但它不仅添加了1 位代码应该是dis_index 2 的力量。
仍然存在一个问题,也就是说,当延迟很小时,这是一个时间问题,但是如果延迟增加(例如程序的值),则可以看出数字管的显示正确。
结尾] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- s.h> //包含左移位函数_crol_()unsignedchardatadis_digit; //位门价值发送到端口P2 到当前的数字管门。
1 ,2 ,0x00,0x2 0x2 0,0xff}; // 5 ,6 ,7 ,8 ,9 ,来自unsignedchardatadis_buf [8 ]){p0 = 0xff; //关闭所有数字管p2 = 0x00 001 0BT0溢出授权干扰dis_buf [0] = dis_code [0x0]; x5 ]; PT1 //计时器0干扰了服务程序,该程序用于数字管动态扫描{Th0 = 0xFC; //发生中断时间/计数器重新安装TL0 = 0x1 7 的初始值; //我认为在这里(及以上)Eggen代码发送P0端口p2 = dis_digit; // /位代码发送端口p2 dis_digit = _crol_(dis_digit,1 ); //位门左移动值,当即将到来的1 /1 2 时钟摆动频率中断时,将获得下一个数字管。
当晶体振荡器为1 2 m时,输入循环间隔为1 U。
机器周期为1 U。
假设T0的初始值是x,是计算初始值的方法:在此示例中,计时器使用方法1 ,这是一个1 6 位计时器,即,最大值为2 1 6 = 6 5 5 3 6 在这里,如果您想用1 ms慢慢速度,则是1 ms,即1 000US,那么有一个2 1 6 -X = 1 000 confort x = 1 000 conforce x = 6 4 5 3 6 ,forx = 6 4 5 3 6 ,forx = 6 4 5 3 6 ,forx = 6 4 5 3 6 ,forx = 6 4 5 3 6 , TL0 = 0x1 8 也就是说,计时器开始计算6 4 5 3 6 ,其价值为6 5 5 3 6 ,经过1 ,000起指控。
在上面的示例中,加载的初始值不是FC1 8 (6 4 5 3 6 ),而是FC1 7 (6 4 5 3 5 )。
我认为这可能是因为计算范围为0〜6 5 5 6 5 的原因,我还考虑了这个问题,如果我使用2 1 6 =中断的初始值,或者使用(2 1 6 -1 ),即6 5 5 3 5 H = 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 b,也可以说,也可以说6 5 5 3 6 是通过溢出获得的。
当响应干扰时是关键。
它仅在下一个计数之后发生。
确切的值应为1 001 U。
如果初始值为6 4 5 3 6 (FC1 8 ),则是必需的值,因此上面示例中的初始值是FC1 8 而不是FC1 7 这只是我自己的看法。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- In addition, the left end of the eight-digit simulation digital tube is the first and the right end is the eighth position, which is contrary to the order on the board, so for the sake of uniformity, the figure is connected by board. 上面的图还可以模拟结果而不添加拉力电阻,但是端口P0的高水平显示为灰色,即高电阻。