搜索
bottom↓
回复: 4

数码管动态扫描的问题

[复制链接]

出0入0汤圆

发表于 2011-9-9 15:46:51 | 显示全部楼层 |阅读模式
如下程序没有问题,显示12345678
---------------------------------
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity scan8led is
port(clk:in std_logic;
     led_adder:out std_logic_vector(7 downto 0);
     seg7_data:out std_logic_vector(6 downto 0));
end entity;
architecture wen of scan8led is
signal data_temp:std_logic_vector(7 downto 0):="11111110";
signal clk1:std_logic;
begin
  process(clk)
  variable Q:std_logic_vector(16 downto 0);
  begin
    if clk'event and clk='1' then
      if(Q="11000011010100000") then
           Q:="00000000000000000";
      else Q:=Q+1;
      end if;
     end if;
       clk1<=Q(16);
   end process;
  process(clk1,data_contral)is
  variable c: integer range 1 to 8 :=1;
  begin
    if(clk1'event and clk1='1')then
      led_adder<=data_temp;
      data_temp<=data_temp(6 downto 0)&data_temp(7);
      case c is
        when 1=>seg7_data<="1111001";
        when 2=>seg7_data<="0100100";
        when 3=>seg7_data<="0110000";
        when 4=>seg7_data<="0011001";
        when 5=>seg7_data<="0010010";
        when 6=>seg7_data<="0000010";
        when 7=>seg7_data<="1111000";
        when 8=>seg7_data<="0000000";
      end case;
      c:=c+1;
      if(c=9)then
        c:=1;
      end if;
    end if;
  end process;
end architecture wen;
-----------------------------------------
但做如下修改后本想显示三位动态扫描,结果位码就乱了,数码不能在固定的位显示,三个位轮流跑,而且会出现一个没有设置过的码夹杂在中间,请高手看看怎么回事情?
-----------------------------------------
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity scan3led is
port(clk:in std_logic;
     led_adder:out std_logic_vector(2 downto 0);
     seg7_data:out std_logic_vector(6 downto 0));
end entity;
architecture wen of scan3led is
signal data_temp:std_logic_vector(2 downto 0):="110";
signal clk1:std_logic;
begin
  process(clk)
  variable Q:std_logic_vector(16 downto 0);
  begin
    if clk'event and clk='1' then
      if(Q="11000011010100000") then
           Q:="00000000000000000";
      else Q:=Q+1;
      end if;
     end if;
       clk1<=Q(16);
   end process;
  process(clk1,data_contral)is
  variable c: integer range 1 to 3 :=1;
  begin
    if(clk1'event and clk1='1')then
      led_adder<=data_temp;
      data_temp<=data_temp(1 downto 0)&data_temp(2);
      case c is
        when 1=>seg7_data<="1111001";
        when 2=>seg7_data<="0100100";
        when 3=>seg7_data<="0110000";
      end case;
      c:=c+1;
      if(c=4)then
        c:=1;
      end if;
    end if;
  end process;
end architecture wen;

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2011-9-10 23:02:16 | 显示全部楼层
话说 ,没有谁会愿意帮你分析这一大段代码的 , VHDL这东西 ,最好是插个核用 chipscope看看波形 ,很快就找到问题了 ,另外 ,一般不要用变量 ,推荐用信号

出0入0汤圆

 楼主| 发表于 2011-9-12 13:28:01 | 显示全部楼层
大侠,怎么插个核?chipscope是什么?本人新手请赐教!

出0入0汤圆

发表于 2011-9-12 15:56:46 | 显示全部楼层
Chipscope是 Xilinx的片内逻辑分析工具 ,找本书看看吧 ,如果你用的是 Altera ,也有类似的工具

出0入0汤圆

发表于 2011-9-12 17:54:35 | 显示全部楼层
先送数据,再打开显示的位
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 13:25

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表