数码管动态显示的实验中用到了消影技术,何为消影,举例说明如何消影?
动态屏幕的设计主要是使用人眼的视觉感觉。此外,根据我的经验,如果您在后卫上模拟,因为计算机的速度和频率非常快,您都不会感觉到无论延迟,它仍然会保持稳定。
但是,如果将其替换为真实对象,则将不再显示。
。
什么是数码管动态显示
该实验的实验地图上的板周围的资源如下:其中P0端口是一个段代码,在低级别上有效。P2 端口是一个位代码,价值高。
P2 .0端口将第一个数字管控制到P2 .7 端口控制第八个。
该板的片段代码表如下:每个数字管的段代码都是从P0端口输出的,即每个数字管的段代码输入段是相同的。
为了单独显示不同的数字,可以采用动态显示,即只显示最低位置(包括点),在延迟一段时间后,然后仅显示第二个低位置1 ,依此类推。
只要延迟时间短,足够的数字显示就可以查看稳定且清晰的,只要延迟时间停留。
该过程在下面。
上述方法和想法如下:org5 00h启动:#08 H; 代码LCALLDELAY_1 MS MOVA,#0ABH; ay_1 ms mova,#2 2 H; 4 H,VVP0,A MOV3 ,#2 0H lcalldelay_1 ms Mova,#04 H,6 movp0,a movp2 ,#0aah,7 ,我将来将在未来#0 8 0H中有用,#8 0H,将来#8 0H在将来很有用 In the future, # 8 0h is useful in the future, # 0 8 0h, # 0 8 0h lcaldeley_1 ms, # 0 8 0h lcaldeley_1 ms, # 0 8 0h, # 8 0h, # 0aah, # 0 Move: Pstartarsors, Mogr6 , # 2 Temp: Mogr6 , # 2 Temp: Mogr6 , # 2 Temp: Mogr5 , # 2 Temp: DJNZR5 ,$ DJNZR6 ,TEMP R下载到板上,分别从0到7 (包括点)从0到高。
★上限一个接一个地将值分配给P0或P2 一方面,复杂的程序在另一方面增加,该程序的灵活性将降低。
如果要更改显示号码,更改程序非常麻烦。
因此,我们需要在5 1 微控制器,表查找方法中使用共同模式。
对于P0端口中的输出段代码,我们可以分割表上显示的代码,然后从该表中的数字发送并发送P0端口。
通过在P2 端口中输出一些代码,您可以在此表中放置一些位代码,并在此表中从该表中拿出一个数字,然后发送P2 端口。
这意味着,如果您想更改数字,则只需要更改表上的数字即可。
org00000,movr7 ,#0ffh,r7 ,r6 查看桌子时,是索引寄存器(0fallPlay1 ,callplay1 ,callplay1 ,callplay1 ,callplay1 ,#0ffh,#0ffh saffola_2 ; callplay1 ; callplay1 ; callplay1 ; callplay1 ; callplay_cea,#0ffh saffran_2 ; Play1 )MOVA,R6 INC MOVR6 ,A MOVDPTR,#TABLE2 MOVCA, @ A + DPTR MOVP2 ,A ret table1 :DB08 H,0ABH,1 2 H,2 4 H,04 H,04 H,04 H,04 H,02 H,02 H,04 H,04 H,1 0H,1 0H,2 0H,2 0H,4 0H,4 0H,8 0H; table delay_1 ms:movr5 ,#02 H;延迟1 ms子例程临时:movr4 ,#0ffh djnzr4 ,$ djnzr5 ,temp,将其下载到板上以验证并获得预期的结果。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------ 0x1 2 ,02 ,04 ,0a1 , // 0,1 ,2 ,3 ,4 0x2 4 ,0x04 ,0aa, 0x08 ,0,4 , 0x2 4 ,0x04 ,04 ,0,8 , 0x2 4 ,0x0004 ,0EA, 0x00,02 0XF 0x2 4 ,0x04 ,04 ,8 ,8 , 0x02 ,0xff; 0x2 4 ,0x04 ,04 ,8 ,0x00,0x0,0ffff,}; // [8 ]:// dis_buf以缓冲级电子邮件unsignedchardatadis_index显示; //推送显示索引以识别当前显示的数字管和缓冲区vougmain(){p0 = 0xff; //所有numer. -tubing p2 = 0x00; dis_buf [0] = dis_code [0]; dis_buf [1 ] = dis_code [1 ]; dis_buf [2 ] = dis_code [2 ]; dis_buf [3 ] = dis_code [3 ]; dis_buf [4 ] = dis_code [4 ]; dis_buf [5 ] = dis_code [5 ]; dis_buf [6 ] = dis_code [6 ]; dis_buf [7 ] = dis_code [7 ]; dis_digit = 0x01 ; //第一个strobe p2 .0 dis_index = 0 {p0 = dis_buf [p0 = dis_buf [p0 = dis_buf [dis_ind ex]:// segmentum,// dis_index ++是://段代码dis_index&= 0x07 ;} voidDelayms(unsignedCharms){unsignedCharma){unsignedCharri){unsignedCharri){unsignedCharri){unsignedcharri){unsignedCharri){unsignedcharri){for(for) 下一个扫描。
操作保留在第二个循环中,其值为0x02 ,在相同的循环之后,它仍然保持不变,直到其值增加到0x07 但是,在循环再次为0x8 0之后,在相同的循环后,它变为0x00,这是原始循环。
如果(dis_index == 8 )dis_index = 0,效果是相同的。
★当通过上述度量的方法实现时,其段代码将放置在dis_buf [1 1 ]的数组中,而dis_buf []的值很明显,很明显,只要延迟(m)就可以进一步扩展。
董事会,您可以看到一些高度显示器。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //位门值传输到门口的P2 端口到当前数字管的值。
//如果等于0.1 ,0,0xAb,则为0x2 4 ,02 ,04 ,02 ,02 ,02 ,4 0.1 ,2 ,2 ,3 ,4 0x08 ,4 ,0x2 4 ,0x4 ,0,02 ,02 ,02 ,4 0.1 ,2 ,2 ,3 ,3 ,4 0x08 ,3 ,3 ,3 ,4 0x2 0,4 0x2 0,0xf}; // unsignedchardatadis_index折扣5 ,6 ,7 ,8 ,9 ; //显示索引以确定当前显示数字管和缓冲区vougmain(){p0 = 0xff; //所有代码管P2 = 0x00; dis_index = 0; //当前偏移量为0 dis_digit = 0x01 ; (1 ){p0 = dis_code [dis_index]; //段代码发送P0 P2 p2 = dis_digit; dis_digit = _crol_(dis_digit,1 ); dis_index&= 0x07 ; }}}} voidDelayms(unsignedcharms)//程序下的延迟(Crystal 1 2 m){unsignedChari; while(ms--){for(1 = 0; 1 <1 2 0; 1 ++); ★1 最初想通过以下方法实现一个循环:for(dis_index = 0; dis_index <8 ; dis_index ++){p0 = dis_code [dis_index]; }可以获得的结果总是错误的:从0到2 的三位数显示三个8 ,第三位数字显示了7 个,并且未显示较高的四位数。
延迟延迟一点观察,您会发现一些错误,并且不熟悉Keil调试。
我第一次在这里留下了这个问题,然后是在发现案件之后。
[2 006 .5 .2 ]找出系统,补充:我今天再次看一看,我在上面的错误中发现了。
当时,我想将dis_index的值对一个位代码使用,这是当第一个位显示0时,段代码为dis_code [0,在此时间为1 的值。
当第二位显示1 时,段代码为dis_code [1 ],ERI_INDEX的值为1 ,此时间为2 因此,简单地使用添加1 个活动将偏移值端口P0与P2 的位代码相关联。
但是,如果您仔细考虑位代码的原理,则上述方法显然是错误的。
只需再验证它,您就会理解。
也就是说,当第三位显示2 时,段代码为dis_code [2 ],dis_index值为2 ,在添加1 时,它是3 当按照位代码遵循时,正确的位代码应为4 (000001 00B)。
所以出了点问题。
实际上,这些对应关系是关系,但不仅添加了I。
位代码是dis_index virtue 2 那是0--1 1 -2 2 -4 3 --8 4 ---1 6 功率操作函数floatpow(floatx,floaty)包含在Math.h中,返回值为XY(float Type):for(dis_index = 0; dis_index ++) P2 端口P2 端口延迟(2 5 5 ); }再次将其下载到板上,发现仍然存在问题,也就是说,当延迟很小时,显示器是混乱的,但是如果程序的延迟)可以看出,数字管正确显示了位。
此外,该方法生成的代码量也非常重要(显然写速)。
这里只提出了一个,并且在本实验中不适用,并且有一点意义,因此所有这些。
[Supplementum finem] ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //位P2 到当前数字管的大门。
//如果等于0x01 ,0x08 ,02 .02 ,0a1 ,// 0,1 ,2 :3 ,4 0x2 4 ,0x04 ,0aA,0x00,0x2 0,0,0ff}; // 5 ,6 ,7 ,8 ,9 折扣unsigningChardAtAdis_Buf [8 ]: // dis_buf以缓冲基础地址显示了当前Ostentatus数字和当前ostentatatus数字和buffer dialding and Buffer的unsignedChardis_festSets insports odders odder offer odders odvers odvers odder odignedChardis_festSetsset。
//关闭所有数字管P2 = 0x00; tmd = 0x01 ,// 000000001 b模式0x1 0 = 0x8 0 =; // = 1 ms IE = 0x8 2 ; 中断权限dis_buf [0] = dis_code [0x0]; dis_buf [1 ] = dis_code [0x1 ]; dis_buf [2 ] = dis_code [0x2 ]; dis_buf [3 ] = dis_code [0x3 ]; dis_buf [4 ] = dis_code [0x4 ]; dis_buf [5 ] = dis_code [0 x5 ]; dis_buf [6 ] = dis_code [0x6 ]; dis_buf [7 ] = dis_code [0x7 ]; dis_digit = 0x01 ; 时间 /计数器重新安装初始值TL0 = 0x1 7 ; p2 dis_digit(dis_digit,1 )//明天的bit porta valeria interpolabant,并首次中断}★在当时,开始时和恐惧中的输入,这与时钟振动频率的苍白1 /1 2 相同。
晶体振荡器为1 2 m,输入脉冲周期间隔为1 U。
1 us和周期是一个周期。
假设T0的初始值为1 0,计算初始值的方法:在此示例中,计时器使用方法1 ,即1 6 位计时器,即最大值为2 1 6 = 6 5 5 3 6 如果此值超过此值,则会发生溢出,导致中断并输入中断处理程序。
在这里,如果您想保持1 ms(即1 000,1 ,000),则没有2 1 6 -x = m的公式,您可以获得x = 6 4 3 6 ,它在刺激中th0 = 0xfc,即初始= 0x1 8 也就是说,恐惧从6 4 3 3 6 开始计算,而1 ,000个计数后6 5 5 3 6 的价值。
狮子中断并完成。
输入SubRoutin的启动过程后,替换了初始值和循环。
在上面的示例中,加载的初始值或FC1 8 (6 4 5 3 6 ),但FC1 7 (6 4 5 3 5 )。
我认为这是计数范围为0〜6 5 的原因,我还考虑了这个问题,如果您使用初始值的2 1 6 分数,因为初始值无法在A(6 5 ):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 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 3 6 (FC1 8 ),则确切的必需值,因此示例的初始值为FC1 8 而不是FC1 7 这意味着我的意见。
好像在这种情况下,仍然需要验证。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------- 统一性,与董事会有关的数字。
上图它还可以在不增加电阻的情况下模拟结果,但是高水平的P0端口显示为灰色,即高电阻。
数字电子技术实验设计,两位数码管动态扫描显示
有两种重置柜台的方法吗? 一个连接到负载脚,另一个连接到第一脚。1 6 1 必须串联连接以达到5 2 计数。
特别是,以前的clk连接到时钟信号,上一个代表连接到下一个clk,并且两个计数信号的输出通过门电路连接到负载铅笔或第一个引脚。
只需计算默认设置本身即可。
U2 控制高四位数,U1 是低四位数,从0.7 4 LS02 开始连接到CLR端。
与上述电路图相似的默认类型不同,只是ABCD必须首先设置数字。
然后将7 4 LS02 连接到负载夹,该负载夹被2 5 6 采用,其小数为8 位输出数(QA,QB,QB,QC, )