什么是数码管动态显示
本实验中使用的实验板的资源电路图如下:其中P0端口是一个段代码,在低级别上是有效的。P2 端口是位代码,高级别是有效的。
P2 .0端口控制第一个数字管道到P2 .7 端口,控制了第八个。
该板的片段COD表如下:每个数字管的段代码都是从P0端口发送的,即,从每个数字管道输入段代码是相同的。
动态屏幕可以使用。
在视觉逗留中,只要我们的延迟时间足够短,数字屏幕就可以非常稳定且清晰。
该过程在下面显示。
上述方法和想法写如下:org0000h start:mova,#08 H; 0; 段代码movp0,movp2 ,#01 H; 位代码LCALLDELAY_1 MS MOVA,#0ABH; 1 movp0,一个movp2 ,#02 H lcalldelay_1 ms mova,#1 2 h; 2 movp0,一个movp2 ,#04 H lcalldelay_1 ms mova,#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; 我觉得使用此短语和以上两个句子以相同的方式实现,此习惯在将来可以在Movp2 ,#8 0H lcalldelay_1 ms ljmpstart delome_1 ms:movr6 ,#2 temp:movr5 ,#0ffh djnzr5 ,#0ffh djnzr5 ,#2 它是向董事会获得的,以获得八个$的测试结果 DJNZR6 ,Temp ret将其下载到板上,以分别从低屏幕到高屏幕0到7 分别从八个$ DJNZR6 数字获得测试结果(包括点)。
★该方法超过将值连续分配给P0或P2 如果要更改显示的数字,更改程序非常麻烦。
因此,我们需要在5 1 微控制器中使用经常使用的方法:表查找方法。
例如,当我们在P0端口上发送片段代码时,我们可以添加要在表中显示的段代码,然后每次从该表中获取数字并将其发送到P0端口。
当您在P2 端口上发送BIT代码时,您可以在另一个表中添加要使用的位代码,并每次从该表中获取数字并将其发送到P2 端口。
这样,如果要更改显示的数字,则只需要更改表中的数字即可。
org0000h启动:movr7 ,#0ffh; r7 ,r6 查找表格时,它将发送到索引寄存器A(因为添加1 后为0,因此是预设FFH)movr6 ,#0ffh loop:lcallplay1 ; CallPlay1 ; 呼叫显示段段代码子例程lcallplay2 ; 呼叫播放显示BitCode subroutine lcalldelay_1 ms cjnea,#8 0H,loop; 它是否达到左数,也就是说,第8 位代码ajmpstart Play1 :; 搜索表并查找段代码子例程; Mova,R7 ; 印加; movr7 ,a reg7 ; R7 ; 这里是索引寄存器movdptr,#table1 ; +dptr; 基本寄存器加索引寄存器地址movp0,re ret play2 :; 表搜索表BitCode子例程(原理与Play1 相同)Mova,R6 Inca Movr6 ,A MovdPtr,#Table2 Movca,@A+Dptr movp2 ,ret table1 :db08 h,0abh,0abh,1 2 h,1 2 h,2 2 ,2 2 ,2 2 ,2 2 ,2 4 1 h,2 4 h,2 4 h,2 4 h,2 4 h,2 4 h,2 4 h,2 4 h,2 4 h,2 4 h, 0aah; 段代码表2 :DB01 H,02 H,04 H,08 H,1 0H,2 0H,4 0H,8 0H; 位代码表延迟_1 MS:MOVR5 ,#02 H; 延迟1 MS子例程温度:MOVR4 ,#0FFH DJNZR4 ,$ DJNZR5 ,TEMP RETT将其延迟到董事会以确认并获得预期的结果。
----------------------------------------------------------------------------- -------------------------------------------------------------------------- --------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------- ------ ------------------------------------------------------------------------- ----------------------------------------------------------------------------- -------------------------------------------------------------------------- --------------------------------------------------- 当数字管P2 .0连接到Usignertcharcodedis_code [1 1 ] = {0x08 .0xab,0x1 2 ,0x2 2 .0xa1 ,// // 0.1 ,2 ,3 ,4 0x2 4 ,0x04 ,0x04 ,0x04 ,0xaa,0x00.0x2 0.0x2 0.0xff}; (){p0 = 0xff; //关闭所有数字绳索P2 = 0x00; ] = dis_code [4 ]; 0; //当前位移为0,而(1 ){p0 = dis_buf [dis_ind ex]; //段代码发送p0端口p2 = dis_digit; //选择位(IE BITCODE)延迟(1 ); // delay dis_digit = _crol_(dis_digit,1 ); //位门向左切换,第二个Strobe dis_index ++的下一点; //下一个段代码dis_index&= 0x07 ; //请参阅注释}}无效的所有管道,返回第一个开始下一次扫描。
写回常规形式:dis_index = dis_index&0x07 此方法非常新。
例如,在第一个循环之后,dis_index 0000001 的值是0x07 的值保持不变,仍然是0x01 直到值增加。
可以用(dis_index == 8 )dis_index = 0代替此句子,效果是相同的。
★使用上述方法实现C5 1 时,将序列代码放置在数组dis_code [1 1 ]中,然后通过BufferArray dis_buf []加载了在程序中调用的值,以便订阅(OFFSET)可以使用。
这看起来有些复杂,但是这些想法很清楚,结构很清晰,而且通用性且易于扩展。
★此外,只需扩展程序的延迟,例如延迟(1 000),然后下载到板上,您可以看到数字管实际上从低到高点出现。
----------------------------------------------------------------------------- -------------------------------------------------------------------------- --------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------- ------ ------------------------------------------------------------------------- ----------------------------------------------------------------------------- -------------------------------------------------------------------------- ------------------------------在订阅中标记为0到7 的值,而没有设置缓冲区阵列dis_buf []是实现如下:#include
0x2 2 ,0xa1 ,// 0.1 ,2 ,3 ,4 0x2 4 ,0x04 ,0xaa,0x00.0x2 0.0xff}; // 5 ,6 ,7 ,8 ,9 ,在USIGNEDCHARDATADIS_INDEX上; //显示索引,用于识别其位移目前的索引显示数字管道和缓冲区voidmain(){p0 = 0xff; //关闭所有数字编码器管道P2 = 0x00; 代码发送P2 端口延迟(1 ); 程序(晶体振荡器1 2 m){unsignedChari; dis_index <8 ; dis_index ++){p0 = dis_code [dis_index]; //段代码发送p0端口p2 = dis_index+1 ; // BitCode发送P2 端口延迟(1 ); 0当第二个位置显示三个8 时,第三位数字显示了七个数字,而较高的四位数没有出现。
位观察后的扩展延迟部分发现没有故障,我对Keil错误搜索并不熟悉。
[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 联系起来。
但是,如果您仔细考虑比特码的原理,上面的方法显然是错误的。
dis_index值为2 ,添加1 后,它是3 当您遵循上述方法时,将此3 用作位代码,并且正确的比特码应为4 (000001 00B)。
所以出了点问题。
实际上,这种对应关系存在,但它不仅添加了1 比特码应该是2 的dis_index幂。
也就是说:0--1 1 -2 2 -4 3 -8 4 --1 6 功率操作功能floatpow(floatx,floaty)包含在Math.h,返回值为XY(float类型):for(dis_index = 0; dis_index <8 ; dis_index ++){p0 = dis_code [dis_index]; //段代码发送p0端口p2 =(char)pow(2 ,dis_index); // BitCode发送P2 补贴(2 5 5 ); 再次将其下载到董事会,发现仍然存在一个问题,也就是说,当延迟很小时,显示器很混乱,但是如果延迟时间增加(例如程序的价值),您可以看到数字管的显示正确。
此外,此方法生成的代码量也很大(从写作速度来看很明显)。
这里只有一个想法,它仅在本实验中重要,这并不重要,因此仅此而已。
[附加端] ------------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------- ------ ------------------------------------------------ ----------------------------------------------------------------------------- -------------------------------------------------------------------------- --------------------------------------------------------------------------- ---------------------------------------------------------------------------- ------- --------------------------- ----------------------------------------------------------------------------- -------------------------------------------------------------------------- --------------------------------------------------------------------------- ---- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------》中的参考修改为以下程序:#include
当晶体振荡器为1 2 m时,入口脉冲周期间隔为1 U。
机器周期为1 U。
假设T0的原始值为X,是计算原始值的方法:在此示例中,计时器使用方法1 ,即1 6 位计时器,即导致中断并输入中断处理程序。
在这里,如果您想用1 ms推迟它,即1 000US,则是公式2 1 6 -X = 1 000,您可以获得x = 6 4 5 3 6 ,该x = 6 4 5 3 6 ,它转换为十六进制到fc1 8 ,即第一个值th0 = 0xfc, TL0 = 0x1 8 也就是说,计时器从6 4 5 3 6 开始计数,1 000个计数后的值为6 5 5 3 6 在上面的示例中是加载的初始值,而不是FC1 8 (6 4 5 3 6 ),而是FC1 7 (6 4 5 3 5 )。
我认为这可能是计数区域的原因是0〜6 5 5 6 5 ,我也没有随机地考虑了这个问题,我写了更多书籍,但是前者使用了更多,我认为前者更明智,因为在计算机中,1 6 位二进制二进制无法代表6 5 5 3 6 所有位均为1 ,是代表6 5 5 3 5 的值,即6 5 5 3 5 H = 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 B,也可以说6 5 5 3 6 是通过 溢出。
当响应中断时,钥匙就会变成。
以上面的示例为例,如果起始值为6 4 5 3 5 (FC1 7 ),则计数为6 5 5 3 5 ,则计数为1 000,即1 ms,但目前没有溢出。
也没有触发中断。
它仅在下一个计数之后发生。
确切的值应为1 001 U。
如果起始值为6 4 5 3 6 (FC1 8 ),则正是所需的值,则上面示例中的原始值应为FC1 8 而不是FC1 7 这只是我自己的看法。
----------------------------------------------------------------------------- -------------------------------------------------------------------------- --------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------- -------- ##################### (特定条件的屏幕):★电路段代码对应于机上织物的连接方法, 也就是说,先前与段代码表顺序的连接。
此外,这八个数字模拟的数字管的左端是第一个位置,右端是第八位,与板上的顺序相反,因此为了统一,该数字是基于数字的。
在板上。
上图还可以模拟结果而不添加草稿电阻,但是P0门的高水平显示为灰色,即高电阻。
数字电子技术实验设计,两位数码管动态扫描显示
有两种重置柜台的方法吗? 一个连接到负载引脚,另一个连接到第一个引脚。1 6 1 需要在系列中连接,以获得5 2 的数量。
特别是,先前的CLK手表连接到时钟信号,上一个COUT连接到下一个CLK,并且两个计数信号的输出通过输出门电路连接到负载引脚或第一个引脚。
只需自己计算预定的数字即可。
以下是清晰的设置数字,设定的数字限制由两个QA,QB,QC和QD控制。
U2 控制高四位数,U1 的四位数较少,从0开始。
7 4 LS02 CLR连接到末端。
还有另一种类型的预设编号,与上面的电路图相似,只是ABCD必须设置第一个数字。
然后将7 4 LS02 连接到负载端子,该负载端子将2 5 6 转换为十进制8 位输出号(QA,QB,QB, .)。
单片机数码管动态扫描
您的延迟功能太短。让我们谈谈下面的工作流程。
首先,将位选择线激活到第一个数字管道,以便选择第一个数字管。
然后关闭位线路的选择,并激活段线选择以将数据发送到数字管道。
发送数据后,该段的段关闭。
目前,延迟为5 毫秒(请注意,人眼具有视觉保留效果,约为0.1 至0.4 秒。
如果您的延迟时间太短,则两个数字管道将接一个地点亮,而第一个数字管道会点亮数字管将是第一个。
段线的选择是打开的,并且数据发送到了第二个数字管道。
数字管有8 个段选择,总共需要3 2 个I/O端口。
动态扫描的另一个优点是,即使在高速扫描期间,由于人眼的视觉存储效果,用户也不会注意到闪烁。
这对于显示不断变化的值(例如,时间,温度等)非常有用。
此外,动态扫描也可以提高数字管道的亮度,因为每个扫描周期下的每个数字管都会在一段时间内点亮。
但是,动态扫描也有其局限性。
由于每个数字管道仅在每个扫描周期的短时间内点亮,因此如果扫描速率太低,可能会闪烁。
通常,扫描速率必须保持在大约上方。
5 00Hz以避免用户对闪烁的看法。
此外,动态扫描也可能导致数字管中的亮度不均匀,尤其是在高速扫描时,某些数字管道可能具有较低的亮度。
为了达到最佳的动态扫描效果,有必要合理设置延迟和扫描频率。
通过实验和调整,可以找到适当的平衡点,以使数字管道显示出稳定且更明亮。
简述LED数码管动态,扫描的原理及其实现方式?
LED数字管道的动态扫描原理实际上是通过使用“人眼视觉临时存储”现象来实现的。相框的时间为1 /2 4 秒,约为4 1 毫秒。
数字管道控制模式很容易更改。
不同的复杂项目。
数字管道,控件和电源与标准的男性和女性插头连接,这些插头是实用且快速的,具有独特的设计以及全新的室外防水结构。
扩展信息:LED数字管使用光发射二极管作为发光设备,颜色包括单红色,黄色,蓝色,蓝色,绿色,白色,白色,黄色和绿色效果。
单色,分段的完整颜色的管道在建筑物,道路和河岸配置文件中可以更明亮,并且可以均匀布置LED数字管,以形成大面积,显示图案和文本以及以不同格式的视频文件的播放。
使用Flash,Animation,Text和其他文件通过计算机设计个人动画,或使用动画设计软件来播放不同的动态色彩变化图形效果。
参考来源:百度百科全书 - LED数字管