BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / circuit / #1179同步于 2007/6/7
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Circuit机器人发帖

[合集] VHDL问题-七段数码管轮流移位显示

pooh1949
2007/6/7镜像同步0 回复
☆─────────────────────────────────────☆ race (race) 于 (Fri May 25 18:42:36 2007) 提到: 下面的程序是为了实现在六个七段数码管上轮流显示012345,并移动,即012345--〉123450--〉234501--〉345012--〉……-: library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_unsigned.all; entity disp_inturn is port( rest,clk: in std_logic; cats: out std_logic_vector(0 to 5); a2g: out std_logic_vector(0 to 6) ); end disp_inturn; architecture v of disp_inturn is signal flag,flag1 : integer range 0 to 5; signal num : integer range 0 to 1200; begin process (rest,clk) begin if (rest='1') then cats<="111111"; elsif (clk'event and clk='1') then case flag1 is when 0 => a2g<="1111110"; when 1 => a2g<="0110000"; when 2 => a2g<="1101101"; when 3 => a2g<="1111001"; when 4 => a2g<="0110011"; when 5 => a2g<="1011011"; when others => null; end case; if (num = 1000) then num <= 0; flag1 <= flag1 + 1; else num <= num+1; end if; --num <= num mod 1000; if (flag1 = 5) then flag1 <=0; else flag1 <= flag1 + 1; end if; --flag1 <= flag1 mod 6; end if; end process; process (clk) begin case flag is when 0 => cats<="011111"; when 1 => cats<="101111"; when 2 => cats<="110111"; when 3 => cats<="111011"; when 4 => cats<="111101"; when 5 => cats<="111110"; when others => null; end case ;if (flag =5) then flag <=0; else flag <= flag+1; end if; --flag <= flag mod 6; end process; end; ☆─────────────────────────────────────☆ race (race) 于 (Fri May 25 18:49:46 2007) 提到: 我都晕死了,为什么没有实现预期的效果?我的想法是:开始在六个数码管上显示012345,当num到1000时,再把lflag1 加1,把flag与flage1错位一个,实现显示123450,但是结果为什么没有错位,显示一直不变,请高手指教 ☆─────────────────────────────────────☆ race (race) 于 (Fri May 25 22:08:25 2007) 提到: cats 分别对应六个数码管的共阴极cat1,cat2,cat3,cat4,cat5,cat6; a2g分别对应七段数码管的a,b,c,d,e,f,g段,rest对应BTN2,clk是时钟 谢谢,请你帮我看一下吧,我快疯了 ☆─────────────────────────────────────☆ pandawxb (^翔^) 于 (Sat May 26 02:01:46 2007) 提到: 初步分析是SINAL信号:FALG1的在一个PROCESS中两次赋值是不对的(反正我仿真出来NUM的变化对FALG1并没有任何影响,在NUM 记数到1000的时候,我加了一个FLAG2标志,表示错位即IF(NUM=1000)NUM<=0; FLAG2<=‘1’;然后在FALG1的判断语句中加上 IF (flag2='1') falg1<=flag1+2 ; else flag1<=flag1+1; 这样就实现了错位了。
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。