搜索
bottom↓
回复: 2

VHDL数码管扫描程序调不过……

[复制链接]

出30入25汤圆

发表于 2011-12-7 12:56:18 | 显示全部楼层 |阅读模式
在我的开发板上这个程序可以让数码管显示22222222:

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

entity shumaguan is
port(
  clk:in std_logic;
  wei:out std_logic_vector(7 downto 0);       
  duan:out std_logic_vector(6 downto 0)
);
end entity shumaguan;

architecture shumaguan of shumaguan is
signal wei0:std_logic_vector(7 downto 0) := "01111111";
signal duan0:std_logic_vector(3 downto 0) := "0000";
begin
clk0:process(clk)
begin
  wei <= "00000000"; --位选,低电平有效
end process clk0;
       
clk1:process(clk)
begin
  duan <= "0100100"; --段选,顺序是GFEDCBA,不含小数点
end process clk1;
end architecture shumaguan;

======================================================================

但是把位选和段选换成扫描的方式之后,就什么都不显示了

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

entity shumaguan is
        port(
                clk:in std_logic;
                wei:out std_logic_vector(7 downto 0);       
                duan:out std_logic_vector(6 downto 0)
                );
end entity shumaguan;

architecture shumaguan of shumaguan is
signal wei0:std_logic_vector(7 downto 0) := "01111111";
signal duan0:std_logic_vector(3 downto 0) := "0000";
begin
clk0:process(clk)
begin
  if (wei0="01111111") then
   wei0 <= "10111111";
  elsif (wei0="10111111") then
   wei0 <= "11011111";
  elsif (wei0="11011111") then
   wei0 <= "11101111";
  elsif wei0="11101111" then
   wei0 <= "11110111";
  elsif wei0="11110111" then
   wei0 <= "11111011";
  elsif wei0="11111011" then
   wei0 <= "11111101";
  elsif wei0="11111101" then
   wei0 <= "11111110";
  else
   wei0 <= "01111111";
  end if;
  wei <= wei0;
end process clk0;

clk1:process(clk)
begin
  duan0 <= "0010";
  if duan0="0000" then
   duan <= "1000000";
  elsif duan0="0001" then
   duan <= "1111001";
  elsif duan0="0010" then
   duan <= "0100100";
  elsif duan0="0011" then
   duan <= "0110000";
  elsif duan0="0100" then
   duan <= "0011001";
  elsif duan0="0101" then
   duan <= "0010010";
  elsif duan0="0110" then
   duan <= "0000010";
  elsif duan0="0111" then
   duan <= "1011000";
  elsif duan0="1000" then
   duan <= "0000000";
  elsif duan0="1001" then
   duan <= "0010000";
  else
   duan <= "1000000";
  end if;
end process clk1;
end architecture shumaguan;

不知道写错了哪里,急求帮助啊。。。。。。

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

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2011-12-7 22:29:08 | 显示全部楼层
感觉语法上没什么问题 等大神

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-8-27 12:34

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

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