什么是数码管动态显示
本实验中使用的实验费的资源方案如下:其中端口P0是段代码,在低级别上有效。端口P2 是一个位代码,高级别是有效的。
端口P2 .0控制第一个数字管道,直到P2 .7 端口控制第八个。
该板段的代码如下:每个数字管的段的代码均显示在P0 P0中,即引入每个数字管的片段是相同的。
随着视觉停留,虽然我们的延迟时间很短,但数字显示器看起来非常稳定且清晰。
该过程如下所示。
上述方法和想法写如下:org0000h start:mova,#08 H; 0; 片段MOVP0的代码,movp2 ,#01 H; 位代码LCALLDLAVI_1 MS MOVA,#0ABH; 1 movp0,一个movp2 ,#02 H lcalldelay_1 ms mova,#1 2 h; 2 movp0,一个movp2 ,#04 hallay_ lova,#1 2 H; 2 movp0,一个movp2 ,#04 hallay_ lova,#1 2 H; ,#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; 我觉得该提案的使用将与上述提案相同,也许将来会很有用。
s ljmpstart delay_1 ms:movr6 ,#2 温度:movr5 ,#0ffh djnzr5 ,$ djnzr6 ,temp temp temp load the the板上将测试结果分别从0到7 (包括点),分别从低到高到高。
★上面给出的方法一个接一个地分配了P0或P2 的值。
如果要更改显示的数字,更改程序非常困难。
因此,我们需要在方法5 1 微控制器:表中使用通常使用的方法。
例如,在端口P0中显示片段时,我们可以将段代码放在表中显示,然后每次从该表中获取数字,然后将其发送到PID P0。
在Porto P2 中显示位代码时,您可以使用位于另一个表中的位代码,并且每次从该表中获取一个数字并将其发送到P2 端口。
因此,如果要更改显示的数字,则只需更改表中的数字即可。
org0000h启动:movr7 ,#0ffh; r7 ,r6 搜索表时,它转到索引寄存器a(因为添加1 后为0,因此ffh是预设)movr6 ,#0ffh循环:lcallplay1 ; CallPlay1 ; CallPlay2 ; 呼叫播放显示BitCode subroutine lcallay_1 mscjnea,#8 0,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#8 0; 他是否达到左数,也就是说,第8 位AJMPSTART PLAY1 的代码:; 搜索表的子程序子程序 - +dptr; 基本地址注册和注册索引,地址为MOVP0,RT PLAY2 :; 表表的表的表是表(原理与Play1 相同)MOVA,R6 INCA MOVR6 ,A MOVDPTR,#TABLE2 MOVCA,@A+DPTR MOVP2 ,ARET Table1 :DB08 H,1 2 2 H,2 2 H,2 2 H,2 2 H,0A1 h,2 4 h,04 h,0aah; 段的代码表2 :DB01 H,02 H,04 H,08 H,1 0H,2 0H,4 0H,8 0H; 位代码dolade_1 ms:movr5 ,#02 H; 延迟1 ms subrautine温度:movr4 ,#0ffh djnz4 ,$ djnzr5 ,temp tempts temptortortorst temptorst temptorst tempst tempst tempst tempst it tempst it tempst it tempst it tempst it tempst it tempst it tempst it tempst it tempst it tempst it tempst tempst it tempst it tempst it tempst it tempst。
------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------- 当沉淀p2 .0数字管unsignedchodedis_code [1 1 ] = {0x08 ,0xab,0x1 2 ,0x2 2 .0xa1 ,// 0.1 ,2 ,4 ,4 ,4 0x2 4 .0x04 .0x0x0xaa, 0x00.0x2 0xff}; // // 6 ,6 ,9 ,9 ,9 ,9 ,9 ,9 ,9 ,9 ,9 ,9 ,9 ,9 ,9 ,9 ,9 ,9 ,9 ,9 ,9 ,9 ,9 ,9 ,9 ,9 ,9 ,9 ,9 ,9 ,9 ,9 ,9 ,9 ,9 ,9 ,9 ,9 ,9 ,9 ,9 ,9 ,9 ,9 ,9 ,9 ,9 ,9 ,9 ,9 ,9 ,9 ,9 ,9 ,二缓冲区 unsignedchardatadis_index; // DIS DISTAIT索引,用于识别显示数字管的当前时间和voidMain(){p0 = 0xff; //关闭所有数字``tubing p2 = 0x00; uf [6 ] = dis_code [6 ]; 前任]; //该段的代码发送端口p0 p2 = dis_digit; //选择一些能力(即位代码)延迟(1 ); // delay dis_digit = _crol_(dis_digit,1 ); //位 - 性能向左移动时,下一个门是由dis_index ++连接的; //下一个分离dis_index&= 0x7 ; } voiddelams(unsignedCharms)// suggram(Crystal 1 2 m){unsignedCharri; 以一般形式写下:dis_index = dis_index&0x07 此方法非常新。
例如,在第一个循环之后,dis_index的值为0000001 ,在操作之后,该值保持不链接,并且该操作的值保留为0x01 在第二个循环中,其值为0x02 ,在相同的循环之后,它的值仍然Unchand unchand的值增加到0x07 但是,在循环再次为8 0之后,在相同的循环之后,ITSOMES 0x00,这再次是原始循环。
该建议可以用if(dis_index == 8 )dis_index = 0代替,效果是相同的。
★在使用上述方法实现C5 1 期间,其段代码放在dis_code [1 1 ]数组中,然后将其在程序中引起的值放置在通过dis_buf [] buffer massif []的数组加载中,以便可以使用订阅(置换)访问它。
看起来有些复杂,但是他的想法很清楚,结构很清楚,并且它是普遍的,很容易扩展。
★此外,只需延长程序中的延迟,例如延迟(1 000),然后将其加载到板上,您可以看到数字管实际上从低水平到高水平显示。
------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------- is_digit; //位值发送到端口P2 ,以降低当前数字管的值。
0.0x2 0.0xff}; // 5 ,6 ,7 ,8 ,9 ,unsignedchardatadis_index; //显示索引用于识别当前显示的数字管和缓冲液的位移(){p0 = 0xff; //关闭所有数字代码管P2 = 0x00; IFT下次将继续进行GATE DIS_INDEX ++; 程序(Crystal 1 2 m){unsignedChari; 结果始终可能是不正确的:从0到2 的三位数字显示三个8 ,第三位数字显示了7 个,没有显示较高的四位数。
通过观察蝙蝠没有发现任何错误,延伸延迟,我对Cale的揭穿并不熟悉。
[2 006 .5 .2 ]找出原因,补充:我今天再次查看,找出上面错误的位置。
那时,我想将dis_index的值用作位代码,也就是说,当第一个位显示0时,段代码为dis_code [0],也就是说,dis_index值为0,当前位值为1 当前,位代码的值为2 因此,我只是使用1 个操作的添加来将端口P0的位移与P2 P2 端口的代码结合。
但是,如果您考虑到位代码的原理,则上述方法显然是不正确的。
所以出错了。
实际上,该对应关系的比率存在,但它不仅是添加1 位代码应该是dis_index 2 的幂。
也就是说:0--1 1 --2 2 -4 3 --8 4 --1 6 floatpow Power Operation(floatx,floatx,floety)在Math.h.h中包含,以及返回值-XY(type -Xy(type floot): (dis_index = 0; dis_index <8 ; dis_index ++){p0 = dis_code [dis_index];端口P2 端口P2 端口端口端口端口p2 ),发现仍然存在问题,也就是说,当延迟很小时,显示器是混乱的,但是如果延迟时间增加(例如,程序中的值),很明显,数字管已正确显示。
此外,该方法生成的代码量也很大(从写作速度来看,这很明显)。
这里只提出了一个想法,它仅适用于本实验,这几乎没有意义,仅此而已。
[补充 结尾] - - - - - - - - - - - - - - - - - - - - - - - - - - - - --------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------- s.h> //包含左移位函数_CROL_()unsignedchardatadis_digit; //位于P2 端口的位栅极值 //如果等于0x01 ,则gate p2 .0端口数字管unsignedchodeedis_code [1 1 ] = {0x08 .0xab,0x1 2 ,0x2 2 .0xa1 ,// 0.1 .2 ,3 .4 0x2 4 .0x04 .0xaa,0x00.0x2 0.0xff}; // 5 ,6 ,7 ,8 ,9 ,在unsignedchardatadis_buf [8 ]; // dis_buf显示在unsignedchardadis_index缓冲区的基本地址中; //在inficead中注入Indited Index索引索引轨道){p0 = 0xfl; //所有数字管的关闭p2 = 0x00; 1 0BT0分辨率分辨率x5 的溢出]; PT1 //计时器0中断用于动态扫描数字管道{Th0 = 0xFC; //中断时间发生/页面重新保存TL0 = 0x1 7 的初始值; //我觉得这里(和更高版本)应该有0x1 8 ,而不是1 7 ,以下分析:p2 = 0x00; //关闭所有数字浴室=发送端口P0 p2 = dis_digit; // /lit代码发送端口p2 dis_digit = _crol_(dis_digit,1 ); //位值向左移动,当下一个中断被dis_index ++中断时,下一个数字管受到限制; 1 2 个手表振动的频率。
当结晶发生器为1 2 m时,输入脉冲循环的间隔为1 U。
1 US的机循环。
Suppose that the initial value of the T0 is, the method of calculating the initial value: in this example, Timer uses method 1 , which is a 1 6 -bit timer, that is, the maximum value is 2 1 6 = 6 5 5 3 6 here, if you want to postpone it by 1 ms, that is, formula 2 1 6 -x = 1 000, you can get x = 6 4 5 3 6 , which is converted into six-focused into sixteen-core in the sixteen-core in the sixthFC1 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 的原因,我还考虑了这个问题,我使用2 1 6 th帐户的初始值=中断或使用的间隔(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 b,我们还可以说6 5 5 3 6 是通过溢出获得的。
当响应中断时,将成为关键。
这仅在下一个计数之后才会发生。
确切的值应为1 001 U。
如果初始值为6 4 5 3 6 (FC1 8 ),则完全是必要的值,因此,上面示例中的初始值应为FC1 8 而不是FC1 7 这只是我自己的看法。
------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------- 此外,这个八位数字管的最左端是第一个位置,也是最正确的最终位置,与董事会的顺序相反,因此,为了统一性,该数字是根据董事会建立的。
上面的图还可以在不增加牵引力的情况下模拟结果,但是端口P0的高水平显示为灰色,即高电阻。
汇编语言数码管显示数字
在第6 课中,我们检查了数字管的静态显示方法。通过控制列表选择和段选择,可以显示任意数量的具有任意字符的数字管。
但是,所有位的共同选择意味着只能同时显示相同的数字,例如: 如果数字管必须同时显示不同的数字,例如 B. 1 ,2 ,3 ,4 ,5 ,6 等,无法实现静态显示方法。
因此,我们设置了一个动态显示方法来解决此问题。
在解释动态显示方法之前,我们最初将在数字管道编程 - 数组编码方法中引入一种常用的方法。
阵列编码可以编码数字管或段的位。
在这里,我们以段编码为例来解释它。
在以前的学习中,我们知道P0在0x8 0(显示数字8 )时的值以及显示数字3 时,P0 0xB0的值为。
这意味着0xB0和0x8 0对应于数字3 或8 根据这种方法,我们可以显示数字管的1 6 个数字,从0到F,每个数字都以十六进制数字表示。
这些十六进制的数字称为数字管,显示从0到f的相应编码。
在编程中,这些编码的表示如下: unsignedcodtable [] = {0xc0.0xf9 ,0xa4 .0x9 9 ,0x8 2 .0xf8 .0x9 0.0x8 3 .0xc6 .0xa1 ,0x8 6 .0x8 e}; 在这里,CodTable是数组名称,并且需要在其之后添加相应的数组元素。
阵列编码方法的引入使我们能够更有效地控制数字管的显示。
接下来,我们将详细讨论数字管动态显示的原理和程序实现方法。
七段数码管动态显示实验问题怎么办
测试1 实验2 试验的开始(3 )。在(2 )使用扫描扫描模块(2 )中,您可以通过FPGA设计过程了解并了解更有用的日期的设计。
ACE电路控制了8 笔,看起来像所有数字管的名称,每个数字管都由独立的柱管控制。
当将字形代码发送到数字管时,所有数字管都会获得相同的雕文代码。
动态扫描接受时间共享方法。
每个LED都可以控制转弯。
在转动轻扫描过程中,每个监视器的轻度时间非常短。
但是,4 实验要求:实施显示0000-9 9 9 9 的十进制辅导员。
5 步骤1 建立一个项目并建立一个名为Landedisplay的项目,并构建顶级地图。
2 这是个好主意。
Desolution Technology创建云设计分隔线,计数器允许计数器以缓慢的速度以缓慢的速度促进计数器。
打开文件.. new .v创建一个新文件。
输入以下程序: inputcluccdivitivipd; adplosclkegdiviviviviv; parameterclk_detivivivivivivivivivivivivivivivivivivivivivivivivivivivivivivivivivivivivivivivivivivivic //系统clock_diq ='d0_000_000; // mose频率 @ dgeclk)启动:clk_div <= clk_div + 1 ; untegetClk_div + 1 ; fincendMods <= 0; 将命令设置为思想级实体。
ဒီဇိုင်းဖိုင်ကိုခွဲခြမ်းစိတ်ဖြာရန်“ startangars&natthesis命令按钮ကို执行wistain,seg_dat a,seg_com); inputpceset_n; inputpre set_n; input [7 :0] seg_data;ung_7 :7 :0] segment_ch; interm_com; interm_com; interm_com; @(3 6 :0] seg_data(2 :3 0; endtalway +(1 4 :3 ] endTemp = temp [3 :0]; seg_com = 8 'B1 1 1 1 1 1 ; end3 'b01 0:beg_ch01 1 1 :begtemp = 8 'b1 1 1 1 1 1 1 1 ; begintemp = temp 1 00000/1 0000; 0000000000; bcd_led = temp [3 :0] EndDademp = 8 'B01 1 1 1 1 1 ; EndedDademp = 1 000000)4 'H4 :SEG_DATA = 8 'HB:SEG_DATA = 8 'HB:SEG_DATA = 8 'H8 8 'H8 ; seg_data = 8 'h8 ; seg_data = 8 'H8 ; 4 'hc:seg_data = 8 'hc6 ; seg_data = 8 'h8 6 ; seg_data = 8 'hc0; seg_data = 8 'hc0; endcr_data = 8 'hc0; 输入完成后,将ULE定义为顶级嵌套并生成符号符号。
4 调用宏功能模块设计计数器。
双击顶部图的空置空间,展开对话框并找到LPM_Counter。
步骤步长制作4 位BCD代码和计数器。
5 设计顶层。
重新启动顶层。
请小心将顶层重置为顶层。
双击级别的自由空间; 您可以看到以上步骤创建的某些部分。
单击确定,安装相关零件,安装其他零件,安装其他零件,并完成下图的连接。
6 :6 要配置芯片引脚并打开下面的TCLScript文件以打开TCL脚本。
#setup.tclset_global_assignment-namesterve_all_unated_pins“ asinputtri stated” set_global_assignment-nameenable_initable_init_done_o_o utpunffoffset_location_assignment_location_assignment #location_assignment#ledset_location_location_location_location_location_location_location_location_location_location_location_location_location_location_location_location_location_location_location_location_location_location dcoc_lock_loctmone_asstoctmandomedcon_1 6 0 toessixmandomedcomed_1 6 0-toectmentcom ED_1 6 2 -TO7 8 8 8 8 8 2 -TO7 8 8 8 8 8 2 -TO7 8 8 8 8 8 8 2 1 -TO7 8 8 8 8 8 8 2 2 2 - TO7 8 8 8 8 8 1 6 2 - TO7 8 8 8 8 [5 ] set_location_sestletcomကျွန်တော်gnmentpin_1 6 6 -1 6 6 -to7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 DDATATATA [0 set_lotation_assignmentpin_1 4 3 -to7 8 dletdata [1 ] set_location_standdata [1 ] set_location_sstanddata [1 ] set_location_sstanddata,[1 ] set_location_sest_sestanddata,[1 ] _location_secignmata set_location_asignmantata [2 ] set_loctdmatitata [2 ] set_loctdmatepinda(2 ] set_luction_location_assignmendata [5 ] set_location_location_assignment_assignmentpin_1 4 6 -to [5 ] set_location_stocin_1 3 5 -to7 8 dleddata [7 ] set_location_tossigndata [7 ] set_location_tossignddata [7 ] 7 相图,然后编译。
8 .下载1 )设置:下载设置:下载设置:下载线下载行以下载下载到FPGA。
2 )下载后,您可以找到测试过程。
数字管知道一个显示0000-9 9 9 9 的数字管。
6 试验摘要(1 )这是我们现代电子测试的第一个测试报告。
特别是在Quartusii的先前测试中;(2 )在首次测试中,只要每个操作和操作都是由屏幕截图制成的,教科书和喷气机的引入就会非常详细。
(3 )该测试基于LED的主要控制。
以前的实验的整合。
在我的实验项目中发现错误令人不安。
这些错误似乎很重要,但是他们很难检查它们(4 ),我们希望为未来奠定坚实的基础。
¥5 .9 Baidu Wenku VIP限制现在正在开放开放时间两个Segitali软件在2 个测试中使用了三个FPGA设计数据。
动态扫描显示器熟悉具有宏观操作的数字设计。
(3 )研究动态扫描数字管的社会法。
在焦式块状守则中,每个数字管都具有相同名称的相同条件。
当将字形代码发送到数字管时,所有数字管都会获得相同的雕文代码。
动态扫描接受时间共享方法。
每个LED都可以控制转弯。
旋转扫描过程中每个监视器的轻度时间确实很短,每个监视器都无法包围光线,但是扫描速度尽可能快地。
数字电子技术实验设计,两位数码管动态扫描显示
有两种恢复柜台的方法吗? 一个连接到负载引脚,另一个连接到第一个引脚。1 6 1 必须以串联连接到数字5 2 具体来说,上一个clk连接到时钟信号,先前的代表连接到另一个clk,并且两个计数信号的产生连接到负载销或通过门电路的第一个销钉。
只需自己计算预定的数字即可。
以下是清晰的数字集,指定数字的范围由两个QAS,QB,QC和QD控制。
U2 控制了四个高数,U1 是四个低数字,从0。
7 4 LS02 开始连接到CLR的末端。
还有另一种类型的预定数字,这与上面的电路图相似,只是ABCD必须首先设置数字。
然后将7 4 LS02 连接到负载端子,该端子是2 5 6 转换为十进制8 位输出号(QA,QB, )