本帖最后由 Zhao_kar 于 2023-12-9 22:40 编辑
【Tang Primer25K Dock】四——数码管的动态显示测试
备注:
- 前面讲过数码管原理了,本节就讲一下动态显示,然后本节有两个演示:
- 第一个演示是数码管两个管一起显示,从0-9,同时低四位的led也跟着显示二进制值
- 第二个演示是正常的00-99,然后因为演示问题,低位个位是用0.1s,也就是高位是1s,然后8个led用来显示值,高位四个显示十位,低位四个显示个位的值。
- 下一节打算把按键混进来了,两个数码管显示0-99的数值范围,然后四个按键分别实现+1、2、4、8的加数,然后四个拨码开关,分别为rst,1s+1,1s-1,闪烁。
- 后面真的打算画一个数码管模块,起码四个才能显示时钟吧,画完之后,就按照那个模块来实现,然后去做一个数字时钟,也就是测评计划的最后项目。目前我测试下来,感觉比预期想的快,然后我打算做完数字时钟后,有时间的话,移植一下那个软核,我看有人的计划有,暂时没有移植过,比较感兴趣。
一、动态显示的原理
- 前面说过数码管的原理了,先以最常见的多个位选单独控制的数码管分析,其工作状态应该为:假定我有一个四位的数码管,那么控制数码管的显示的信号是四条位选信号sel,如果我想让他全亮,那就是4‘b1111,如果只要第一位,那就是4’b1000,而又因为四个数码管的数值是同一个值,所以要想让四个数码管显示不同的值,我们要使用动态显示。
- 对于1,假如我想让四个数码管显示1234,那么数码管的显示流程应该如下,先让位选选择第一个,也就是第一个数码管亮,此时给的数值为1,然后让位选变成第二个,第二个数码管开始亮,此时给的是值2,以此类推,如果你给这个位选信号是1s,那么效果应该为每隔1s数码管亮一个,而且从第一个到第四个循环。
- 而在Verilog里面的话,那么我应该给一个reg,存1234这四个值,然后因为数码管译码是4位,所以应该用一个16进制,比如4‘h1234,也就是16’0001_0010_0011_0100,然后用一个高频的信号,一个100hz的信号,为什么用这个频率,是因为这个频率以上,四个位选的变化可以说是0.01s变一次,人是看不出来的,你看到的视觉效果会是四个连续的值,因为是四个位选,所以给一个2位的reg,做计数器,从00-11刚好四个状态,四个状态下,位选信号的值都会变化,而且同时给数码管的数据也跟着变,具体见代码。
- 说了那么多,不如直接上代码+注释直观,往下看吧
二、第一个测试的代码+注释+演示
1、代码+注释
2、演示视频(如下)
鎾斁鍣ㄥ姞杞藉け璐�: 鏈娴嬪埌Flash Player锛岃鍒�
瀹夎
测试1
三、第二个效果的代码
1、这一个是从00+到99,8个led的高位低位显示十位和个位的值
2、代码+注释
3、视频演示
鎾斁鍣ㄥ姞杞藉け璐�: 鏈娴嬪埌Flash Player锛岃鍒�
瀹夎
测试2
四、cst文件,约束文件,两个都是一模一样的
-
-
-
-
-
-
-
-
-
- IO_LOC "sel" K5;
- IO_PORT "sel" PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3;
- IO_LOC "seg_n[6]" L11;
- IO_PORT "seg_n[6]" PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3;
- IO_LOC "seg_n[5]" K11;
- IO_PORT "seg_n[5]" PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3;
- IO_LOC "seg_n[4]" L5;
- IO_PORT "seg_n[4]" PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3;
- IO_LOC "seg_n[3]" E10;
- IO_PORT "seg_n[3]" PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3;
- IO_LOC "seg_n[2]" E11;
- IO_PORT "seg_n[2]" PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3;
- IO_LOC "seg_n[1]" A11;
- IO_PORT "seg_n[1]" PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3;
- IO_LOC "seg_n[0]" A10;
- IO_PORT "seg_n[0]" PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3;
- IO_LOC "led[7]" C10;
- IO_PORT "led[7]" PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3;
- IO_LOC "led[6]" C11;
- IO_PORT "led[6]" PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3;
- IO_LOC "led[5]" B10;
- IO_PORT "led[5]" PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3;
- IO_LOC "led[4]" B11;
- IO_PORT "led[4]" PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3;
- IO_LOC "led[3]" D10;
- IO_PORT "led[3]" PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3;
- IO_LOC "led[2]" D11;
- IO_PORT "led[2]" PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3;
- IO_LOC "led[1]" G10;
- IO_PORT "led[1]" PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3;
- IO_LOC "led[0]" G11;
- IO_PORT "led[0]" PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3;
- IO_LOC "rst" F5;
- IO_PORT "rst" PULL_MODE=NONE DRIVE=OFF BANK_VCCIO=3.3;
- IO_LOC "clk" E2;
- IO_PORT "clk" PULL_MODE=NONE DRIVE=OFF BANK_VCCIO=3.3;
-