无锡方舟科技电子-LED数码管,数码管生产
诚信指数 12
一站通留言 客户留言 联系我们 联系我们 收藏此网站
网站首页
公司简介
资质荣誉
产品展示
企业新闻
联系我们
客户留言
English
search 搜索网站中其它产品:
一比多
您现在的位置:无锡方舟科技电子-LED数码管,数码管生产 > 企业新闻
 
企业新闻
VHDL的数码管驱动原理 数码管公司
发布日期:2009-11-04

看下面的程序时一直不明白程序如何实现让8个数码管分别显示,(也就是位控制部分),给出下面的程序,只要大概说明原理,并在程序的关键位置给出提示就好了。

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY SCAN_LED IS                                  
  PORT ( CLK : IN STD_LOGIC;
         SG  : OUT STD_LOGIC_VECTOR(6 DOWNTO 0);--段控制信号输出
        BT  : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) );--位控制信号输出
END;
ARCHITECTURE one OF SCAN_LED IS
    SIGNAL CNT8  : STD_LOGIC_VECTOR(2 DOWNTO 0);
    SIGNAL    A  : INTEGER RANGE 0 TO 15;
BEGIN
P1:process(CNT8)
    BEGIN
        CASE  CNT8  IS
          WHEN "000" =>  BT <= "0000" ; A <= 0 ;
          WHEN "001" =>  BT <= "0001" ; A <= 6 ;
          WHEN "010" =>  BT <= "0010" ; A <= 6 ;
          WHEN "011" =>  BT <= "0011" ; A <= 2 ;
          WHEN "100" =>  BT <= "0100" ; A <= 3 ;
          WHEN "101" =>  BT <= "0101" ; A <= 0 ;
          WHEN "110" =>  BT <= "0110" ; A <= 0 ;
          WHEN "111" =>  BT <= "0111" ; A <= 7 ;
          WHEN OTHERS =>  NULL ;
        END CASE ;
     END PROCESS P1;
  
P2:process(CNT8)
        BEGIN
         IF CLKEVENT AND CLK = 1 THEN CNT8 <= CNT8 + 1; 
         END IF;
    END PROCESS P2 ; 
      P3:process(A)      BEGIN
       CASE  A  IS
        WHEN 0 => SG <= "0111111";  WHEN 1  => SG <= "0000110";
        WHEN 2 => SG <= "1011011";  WHEN 3  => SG <= "1001111";
        WHEN 4 => SG <= "1100110";  WHEN 5  => SG <= "1101101";
        WHEN 6 => SG <= "1111101";  WHEN 7  => SG <= "0000111";
        WHEN 8 => SG <= "1111111";  WHEN 9  => SG <= "1101111";
        --WHEN 10=> SG <= "1110111";  WHEN 11 => SG <= "1111100";
       -- WHEN 12=> SG <= "0111001";  WHEN 13 => SG <= "1011110";
       -- WHEN 14=> SG <= "1111001";  WHEN 15 => SG <= "1110001";
        WHEN OTHERS =>  NULL ;
       END CASE ;
      END PROCESS P3;  
END;


看下面的程序时一直不明白程序如何实现让8个数码管分别显示,(也就是位控制部分),给出下面的程序,只要大概说明原理,并在程序的关键位置给出提示就好了。

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY SCAN_LED IS                                  
  PORT ( CLK : IN STD_LOGIC;
         SG  : OUT STD_LOGIC_VECTOR(6 DOWNTO 0);--段控制信号输出
        BT  : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) );--位控制信号输出
END;
ARCHITECTURE one OF SCAN_LED IS
    SIGNAL CNT8  : STD_LOGIC_VECTOR(2 DOWNTO 0);
    SIGNAL    A  : INTEGER RANGE 0 TO 15;
BEGIN
P1:process(CNT8)
    BEGIN
        CASE  CNT8  IS
          WHEN "000" =>  BT <= "0000" ; A <= 0 ;
          WHEN "001" =>  BT <= "0001" ; A <= 6 ;
          WHEN "010" =>  BT <= "0010" ; A <= 6 ;
          WHEN "011" =>  BT <= "0011" ; A <= 2 ;
          WHEN "100" =>  BT <= "0100" ; A <= 3 ;
          WHEN "101" =>  BT <= "0101" ; A <= 0 ;
          WHEN "110" =>  BT <= "0110" ; A <= 0 ;
          WHEN "111" =>  BT <= "0111" ; A <= 7 ;
          WHEN OTHERS =>  NULL ;
        END CASE ;
     END PROCESS P1;
  
P2:process(CNT8)
        BEGIN
         IF CLKEVENT AND CLK = 1 THEN CNT8 <= CNT8 + 1; 
         END IF;
    END PROCESS P2 ; 
      P3:process(A)      BEGIN
       CASE  A  IS
        WHEN 0 => SG <= "0111111";  WHEN 1  => SG <= "0000110";
        WHEN 2 => SG <= "1011011";  WHEN 3  => SG <= "1001111";
        WHEN 4 => SG <= "1100110";  WHEN 5  => SG <= "1101101";
        WHEN 6 => SG <= "1111101";  WHEN 7  => SG <= "0000111";
        WHEN 8 => SG <= "1111111";  WHEN 9  => SG <= "1101111";
        --WHEN 10=> SG <= "1110111";  WHEN 11 => SG <= "1111100";
       -- WHEN 12=> SG <= "0111001";  WHEN 13 => SG <= "1011110";
       -- WHEN 14=> SG <= "1111001";  WHEN 15 => SG <= "1110001";
        WHEN OTHERS =>  NULL ;
       END CASE ;
      END PROCESS P3;  
END;


这是一个8位数码管动态扫描显示电路:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY SCAN_LED IS                                  
  PORT ( CLK : IN STD_LOGIC;
         SG  : OUT STD_LOGIC_VECTOR(6 DOWNTO 0);--段控制信号输出
        BT  : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) );--位控制信号输出
END;
ARCHITECTURE one OF SCAN_LED IS
    SIGNAL CNT8  : STD_LOGIC_VECTOR(2 DOWNTO 0);
    SIGNAL    A  : INTEGER RANGE 0 TO 15;
BEGIN
P1:process(CNT8)
    BEGIN
        CASE  CNT8  IS
          WHEN "000" =>  BT <= "0000" ; A <= 0 ;
          WHEN "001" =>  BT <= "0001" ; A <= 6 ;
          WHEN "010" =>  BT <= "0010" ; A <= 6 ;
          WHEN "011" =>  BT <= "0011" ; A <= 2 ;
          WHEN "100" =>  BT <= "0100" ; A <= 3 ;
          WHEN "101" =>  BT <= "0101" ; A <= 0 ;
          WHEN "110" =>  BT <= "0110" ; A <= 0 ;
          WHEN "111" =>  BT <= "0111" ; A <= 7 ;
          WHEN OTHERS =>  NULL ;
        END CASE ;
     END PROCESS P1;
  
P2:process(CNT8)        --当时钟上升沿来到时进行加1,是一个模8的计数器。作用是产生扫描时钟----
        BEGIN
         IF CLKEVENT AND CLK = 1 THEN CNT8 <= CNT8 + 1; 
         END IF;
    END PROCESS P2 ; 
      P3:process(A)       ----译码电路----- 
BEGIN  
       CASE  A  IS
        WHEN 0 => SG <= "0111111";  WHEN 1  => SG <= "0000110";
        WHEN 2 => SG <= "1011011";  WHEN 3  => SG <= "1001111";
        WHEN 4 => SG <= "1100110";  WHEN 5  => SG <= "1101101";
        WHEN 6 => SG <= "1111101";  WHEN 7  => SG <= "0000111";
        WHEN 8 => SG <= "1111111";  WHEN 9  => SG <= "1101111";
        --WHEN 10=> SG <= "1110111";  WHEN 11 => SG <= "1111100";
       -- WHEN 12=> SG <= "0111001";  WHEN 13 => SG <= "1011110";
       -- WHEN 14=> SG <= "1111001";  WHEN 15 => SG <= "1110001";
        WHEN OTHERS =>  NULL ;
       END CASE ;
      END PROCESS P3;  
END;


  8个数码管分别由位选BT0-BT2控制。如果希望在8个数码管显示希望的数据,就必须使得8个数码管分别被单独选通;同时有段信号输入口加上希望在该对应数码管上显示的数据,于是随着选通信号的变化(加上人眼的视觉残留效果),实现了数码管动态扫描显示的目的。
  此例中显示的是:70032660

方舟科技专业提供数码管

 

免责声明:本商铺所展示的信息由企业自行提供,内容的真实性、准确性和合法性由发布企业负责,一比多公司对此不承担任何保证责任。

友情提醒:为保障您的利益,降低您的风险,建议优先选择商机宝付费会员的产品和服务。


无锡方舟科技电子-LED数码管,数码管生产    地址:江苏省宜兴市   邮政编码:214231
联系人:朱佳丽   电话:0510-82416467   手机:18806177363   传真:0510-82415542
技术支持:一比多  |  免责声明 | 隐私声明
增值电信业务经营许可证:沪B2-20070060     网站Icp备案号:沪ICP备05000175号
<%---站点编号 ----%> <%---页面编号 ----%> <%---页面参数1 ----%> <%---页面参数2----%> <%---页面参数3 ----%>