怎么用VHDL语言编写数码管的动态显示
发布时间:2010-06-13 21:44:30 文章来源:www.iduyao.cn 采编人员:星星草
如何用VHDL语言编写数码管的动态显示
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity led is
port(
clk:in std_logic;
wx:out std_logic_vector(7 downto 0);
dx:out std_logic_vector(6 downto 0));
end led;
architecture one of led is
signal cnt,cnt2:integer:= 0;
--signal count:std_logic(2 downto 0);
begin
process(clk)
begin
if clk'event and clk = '1' then
cnt <= cnt+1;
if cnt = 50000 then
cnt2 <= cnt2+1;
if cnt2 = 1000 then
wx <= "11111110";
dx <= "0000001";
elsif cnt2 = 2000 then
wx <= "11111110";
dx <= "1001111";
elsif cnt2 = 3000 then
wx <= "11111110";
dx <= "0010010";
elsif cnt2 = 4000 then
wx <= "11111110";
dx <= "0000110";
elsif cnt2 = 5000 then
wx <= "11111110";
dx <= "1001100";
elsif cnt2 = 6000 then
wx <= "11111110";
dx <= "0100100";
elsif cnt2 = 7000 then
wx <= "11111110";
dx <= "0100000";
elsif cnt2 = 8000 then
wx <= "11111110";
dx <= "0001111";
elsif cnt2 = 9000 then
wx <= "11111110";
dx <= "0000000";
elsif cnt2 = 10000 then
wx <= "11111110";
dx <= "0000100";
cnt2 <= 0;
end if;
elsif cnt = 100000 then
cnt2 <= cnt2+1;
if cnt2 = 1000 then
wx <= "11111101";
dx <= "0010010";
elsif cnt2 = 2000 then
wx <= "11111101";
dx <= "0000001";
elsif cnt2 = 3000 then
wx <= "11111101";
dx <= "1001111";
elsif cnt2 = 4000 then
wx <= "11111101";
dx <= "0100100";
elsif cnt2 = 5000 then
wx <= "11111101";
dx <= "0000110";
elsif cnt2 = 6000 then
wx <= "11111101";
dx <= "0001111";
elsif cnt2 = 7000 then
wx <= "11111101";
dx <= "1001100";
elsif cnt2 = 8000 then
wx <= "11111101";
dx <= "0100000";
elsif cnt2 = 9000 then
wx <= "11111101";
dx <= "0000000";
cnt2 <= 0;
end if;
cnt <= 0;
end if;
end if;
end process;
end one;
这是我的程序,但是要等到第一个管亮后,第二个管才亮,而且第二个管亮时,第一个管又不亮了!!应该怎么修改,忘路过的高人指点指点!!谢谢1!
------解决方案--------------------
这是我写的一个8位数码管动态显示的例子可以看一下。
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity led_move is
port(clk : in std_logic; --输入时钟50Mh
reset: in std_logic; --复位
post: out std_logic_vector(7 downto 0); --位选输出
part: out std_logic_vector(7 downto 0)); --段选输出
end led_move;
architecture behave of led_move is
signal count :integer range 0 to 250000;
--signal count1 :integer range 0 to 99999999;
signal clk2 :std_logic;
signal s0,s1,s2,s3,s4,s5,s6,s7 :integer range 0 to 9; --状态控制信号
type state2 is(g,s,b,q,w,sw,bw,qw);
signal part_state:state2:=g;
type play is array (0 to 9)of std_logic_vector(7 downto 0);
--led显示字符码0 1 2 3 4 5 6 7 8 9
constant a:play:=("00111111","00000110","01011011","01001111","01100110","01101101","01111101","00000111","01111111","01101111");
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
DSP运算错误
在CCS3.3环境下对TMS320C6416进行编程和在线调试,莫名其妙地几个三角函数不能正常运算出结果,有的是运算错了,有的直接...
-
谁用过AD7714模数转换芯片的请进来指教
各位硬件高手,我是第一次用AD7714芯片,这个程序已经调试很久了,一直没有调试成功。
所以我把...
-
有没有给个模型文件就能用一定的材料造出来这个东西的工厂?
应该有吧?叫什么?比如用金属或者塑料造出这种东西。
就像给个PCB文件就...
-
我想获得380v三相电机的电流,一般是怎么个思路?
我想获得380v三相电机的电流,一般是怎么个思路?
数据在51单片机里计算,然后输出到液晶...
-
求模拟可视对讲系统整体实现方案
要开发一套模拟可视对讲系统,寻求成熟方案合作,合作方式灵活,可以委外开发、可以出售方案等!
有意向...
-
关于书上的用vhdl做t触发器的例子的问题
代码如下
library ieee;
use ieee.std_logic_1164.all;
entity tff is
port(
t,clk,rese...
-
2440的掉电复位电压和时间是多少
在手册上居然没有找到,在这里咨询一下了,帮帮忙,在线等待···
在手册的哪里,电压和最...
-
求助ARM程序中断后跑飞问题
小弟刚学ARM,自己编了下列程序,用ADS编译下载到裸板后,指示灯轮流闪,程序运行正常,给外部中...
-
FPGA用AS模式下载的问题
请教一下quartus下下载的问题
用jtag模式都正确,下载.jic文件也可以
但是用as模式后就会出现不能识别id...
-
有关系统软硬件划分建模
现在在进行一个研究,想对一个小型的嵌入式操作系统进行软硬件划分,将操作系统中的部分功能用FPGA上的硬件...