您的位置:首页 > 其它

The Hard Week---嵌入式系统实验2---两位计数器

2012-12-27 22:38 183 查看

起这样的题目倒不是因为这个实验有多难,而是自己经历了很难熬的一周,这是个怀疑自己,不知道怎么走的一周。消极的话就不说了,继续努力向前走吧,就像泰囧里2b的"泰国传奇"组合,不管有多2b,路还是要走下去的。

这几周特忙,博客拖了很久了,这个实验也是半辈子前的事了,放这充充数,要写的有很多,有技术含量的也很多,没时间搬上来,看元旦怎么样吧。

这次实验要实现两位计数器,就是在在七段译码器上以十进制显示:0、1、2、3、0、...的循环计数显示,开始自己以为是两位十进制数,从1计到了99,最后发现没那个必要,代码挺简单,没什么好讲的,就是得注意数码管的使能,我是在Quartus 2软件下设计的,在Altera的FPGA平台下烧制运行的,所以要移植,可能兼容性有点问题,硬件在这方面就不如软件了,但代码中大致思路还是较清晰的,所以就放在这了。

计数器在时钟信号的驱动下,可以依次的按照顺序循环进行计数,本次实验设计的计数器是一个两位计数器,在计数时在七段译码器上以十进制显示:0、1、2、3、0、...,循环计数。

该计数器共有时钟输入信号clk,复位信号clr,L2输出端控制数码管和enable信号使能数码管。clr复位信号为0时,计数器复位为0;否则进行计数,通过case…when语句,在除了‘11‘状态下进行加1,在’11‘时计数器返回为0;

在连接硬件平台时,enable信号置为0,使能选中的数码管。将得到的结果用数码管来表示,可以看到随着时间的进行,数码管发生变化: 0、1、2、3、0、…。

library ieee;
use ieee.std_logic_1164.all;
use  ieee.std_logic_arith.all;
use  ieee.std_logic_unsigned.all;

entity test is
port(clk,clr:in std_logic;
L2:out std_logic_vector(7 downto 0);
enable:out std_logic);
end test;
architecture count of test is
signal Low,L1: std_logic_vector(1 downto 0);
signal num:integer;
begin
process(clk,Low,clr)
begin
enable <= '0';
if(clr = '0') then Low <= "00";L2 <= "11000000";num <= 0;
else
if(clk'event and clk = '1') then
if(num < 50000000) then num <= num + 1;
end if;
if(num = 50000000) then
num <= 0;
case Low is
when "00" =>  Low <= Low + 1;L2 <= "11111001";
when "01" =>  Low <= Low + 1;L2 <= "10100100";
when "10" =>  Low <= Low + 1;L2 <= "10110000";
when "11" =>  Low <= "00";L2 <= "11000000";
end case;
end if;
else
Low <= Low;
end if;
L1 <= Low;
end if;
end process;
end count;


波形图明天再传,寝室要熄灯了,最近状态不好,需要调整调整,另外最近在看 30天制作操作系统, 随后的博客和大家一起分享每一天。祝好!



在clr为1的情况下,我们可以看到随着时钟信号上升沿的不断产生,向数码管输出的状态不断发生着变化:从初始的”11111001"即数码管的1,到”10100100",数码管的2,到 "10110000"(3),再到"11000000"(0)。





上面两图均可以看出计数器不断循环计数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐