【FPGA至简设计原理与应用】书籍连载14第三篇FPGA至简设计项目 第五章数码管动态扫描
FPGA设计原理和应用第5 章数字管的动态扫描1 简介数字管,无论它们是常见的阳极还是常见的阴极类型,都是电子显示器中必不可少的组件。常见的阳极数字管需要 +5 V电源,而阴极的低水平表示明亮。
共同阴极相反,阳极的高水平是明亮的。
例如,ABCDEFG代码输入1 001 1 1 1 显示数字1 从0-9 了解二进制或十六进制代码至关重要。
2 动态和静态驱动 LED数字管驱动方法是静态的和动态的。
静态驱动器占据了更多的I/O资源,而动态驱动器通过定时控制降低了硬件的复杂性,这适用于实际应用。
例如,数字管的动态显示是通过由 /O线控制的动态位门电路来实现的,并且每秒逐个切换。
,显示稳定。
3 .设计目标我们的任务是设计一个FPGA项目,允许根据时间模式动态地在板上动态显示8 个常见的正数字管,并从0-7 开始循环。
设计的关键是要彻底了解每个步骤,并确保每个步骤都有明确的目标取向。
4 实现步骤 top级设计:创建my_seg.v文件,定义4 个密钥信号:clk,rst_n,seg_sel,seg_sel,seg_ment,相应的设备引脚,用于控制数字管的位选择和段选择。
代码编写:使用Verilog语言定义MY_SEG模块,以实现每秒显示数字管的顺序,并在Counters CNT0和CNT1 的帮助下确保周期性显示。
计数器设计:CNT0代表房间号和地板数,CNT1 控制地板计数以确保简洁明了的代码结构。
编程示例:根据CNT1 值,SEG_SEL输出与数字管相对应的显示代码,例如“ 2 ”至“ 9 ”时,它是通过移动和反转操作实现的。
5 练习和简化综合和上板:在Quartus中,设计是通过编译,配置引脚和下载.sof文件在开发板上实现的。
图3 .5 -1 1 至2 7 显示了详细的步骤。
扩展和学习:完成项目后,您可以尝试调整参数,以进一步了解动态扫描的原理。
论坛MDY老师Yi和Mingdeyang科学技术教育提供了更多深入的讨论。
摘要 fpga-simple设计项目中数字管的动态扫描不仅练习编程技能,而且通过仔细的计划步骤加深对硬件原理的理解。
每个阶段都清楚地指出了目标,使初学者逐渐掌握并将其应用于实际项目。
本人在用C语言编一段三位一体数码管动态显示程序,求高手指点
如果您的设备连接且完美,则编程需要:1 动态扫描:在时间t内选择1 位数字管(可能是几个ms),并强调相应的数字管代码和其他封闭(不要光); 下一个T时间必须照亮另一个数字管 等等。该t可以由计时器准确控制。
当然,如果您只想表现出3 个数字管的外观,则无法完全有时间和周期(只需确保延迟的屏幕时间小于识别肉眼的时间,它似乎不会灯); 2 屏幕:在大多数情况下,要出现的字符/数字被编码为数字的定义并存储在表中。
根据您的编程,请根据需要从桌子上提取。
当然,如果这只是一个简单的实验,并且显示的是固定的,则还可以使用程序中的即时数字。
尝试更多。
数码管动态显示原理 (如何让数码管的动态扫描慢一点)
也可以在不中断的情况下进行:1 ,初始化2 ,显示第一个位3 ,延迟(2 ms)4 ,显示第二位5 ,延迟(2 ms)6 ,显示第三位7 ,延迟(2 ms) )8 ,显示第四位9 ,延迟(2 ms)1 0,增加数字(在此处定义寄存器以添加1 ,并且仅在1 000处计数时显示的值 将会增加,以便在4 秒增加1 )1 1 时显示的值,跳到步骤2单片机汇编实例代码
使用中断机制构建9 9 个秒的计时器,并动态扫描两个数字数字管。首先,段代码闩锁和标志位代码闩锁表示P2 .2 和P2 .3 表示标志位代码锁存。
使用位准则定义Latch1 和Latch2 在程序的起始位置中,使用开始标签跳跃。
在开始标签中,初始化R3 为0,指示中断循环的数量。
将DPTR设置为指向表。
堆栈指针SP设置为4 0h,计时器操作模式为1 ,并且设置了计时器初始值。
启动计时器并打开中断。
更新计时器的初始值,并增加TIM0标签中R3 的数量。
当R3 计数达到2 5 0时,这意味着要通过1 秒,重置R3 并执行时间转换。
执行少数族裔转换,获得单个数字和1 0位数字,然后分别将其保存在2 0h和2 1 h寄存器中。
当计数达到1 00时,增加R4 的数量并重新安装R4 调用扫描子例程进行数字管扫描。
首先,将Latch1 设置为高级,然后删除Latch1 ,用P0设置1 1 1 1 1 1 1 1 0B并运行扫描序列。
将Latch2 设置为高水平,然后删除Latch2 ,用P0设置1 1 1 1 1 1 1 1 1 1 B并运行扫描激增线。
要控制数字管的扫描和延迟,请定义一般的延迟程序延迟和扫描延迟程序延迟1 在数字管显示器上定义一个常见的声音字符代码表。
整个程序通过中断机制实现了9 9 秒的时间,并动态扫描了两个数字管。
用单片机控制2位数码管,不用锁存器能显示动态扫描码?比如说从0到99。 如果能程序怎么写?
编写一个程序以使用微控制器来控制2 位数字管以查看动态扫描代码,例如从0到9 9 ,并且不必使用拘留。这是一个简单的示例程序:我们首先定义一个数组来存储每个数字的段代码:charcodeduanxuan [] = {0x3 f,0x06 .0x5 b,0x4 f,0x6 6 .0x6 d,0x7 d,0x07 .0x7 .0x7 f,0x6 f,0x6 f} Chari,J,X; inty; :voidmain(){y = 3 0000; 而(y-){for(i = 0; i <9 ; i ++){p2 1 = 1 ; //如果您使用的数字管是通用阳极,则税1 .p0 = duanxuan [i]; Yanshi(5 ); p0 = 0x00;} for(j = 0; j <9 ; j ++){p2 0 = 1 ; p0 = duanxuan [j]; Yanshi(5 ); P0 = 0x00;}}}}该程序使用动态扫描技术来通过控制PIN P2 1 和P2 0的状态来更改数字管的显示。
每个数字以5 毫秒的pp P0显示在PP P0上。
您可以根据需要调整延迟时间和数字间隔。
我希望这个示例对您有帮助。
请记住,不同类型的数字管道(常见阳极或公共阴极)需要调整相应的引脚设置。
如果使用常见的阴极数字管,则必须将P2 1 和P2 0设置为低水平。
如果您对此方法感兴趣,也可以尝试编写其他示例程序,以加深对MicroControlleri控制的数字管的理解。