博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
4位共阴极数码管的动态扫描电路VHDL设计
阅读量:5788 次
发布时间:2019-06-18

本文共 3900 字,大约阅读时间需要 13 分钟。

library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;--功能:利用4位共阴极动态数码管实现模值为100的计数器,计数区间0~99,无进位输出--原理:动态扫描电路,时钟分频,段选位选entity led isport (    clkin:in std_logic;--时钟输入,也是唯一的输入    clkout:out std_logic_vector(6 downto 0);--段选输出    enout:out std_logic_vector(3 downto 0)--位选输出);end entity;architecture behav of led is    signal q1: std_logic_vector(6 downto 0);--存储1号管的选段(低位)    signal q2: std_logic_vector(6 downto 0);--存储2号管的选段(高位)    signal qout: std_logic_vector(6 downto 0);--存储2号管的选段(高位)    constant led_num: integer := 2;--使用的数码管数量,限选1~4位,这里使用2个    constant freq: integer := 1000 / led_num;--分频公式,用于计算每秒多少次脉冲,这里以1KHz时钟为准begin     process(clkin)--对时钟脉冲进行处理        variable var_bit: integer range 0 to led_num+1:=0;--变量,用于选位,0代表初始化        variable var_cnt_bit1 : integer range 0 to freq:=0;--变量,用于1号管(低位)的时钟计数        variable var_cnt_bit2 : integer range 0 to freq*10:=0;--变量,用于2号管(高位)的时钟计数        variable var_num1 : integer range 0 to 10:=0;--变量,存储1号(低位)管的值,格式为十进制        variable var_num2 : integer range 0 to 10:=0;--变量,存储2号(高位)管的值,格式为十进制    begin        if(clkin'event and clkin='1')then --开始等待和处理脉冲            --循环选位,从1开始,1-2交替------------            var_bit := var_bit + 1;            if(var_bit=3) then                var_bit := 1;            end if;            ------------------------------------                        --进位时,更新高位数码管的值------------            if(var_num1=10)then                var_bit := 2;            end if;            ------------------------------------                        --判断位值---------------------------            case var_bit is                when 1=> --低位管                    enout <="0001";                    var_cnt_bit1 := var_cnt_bit1 + 1;                    if(var_cnt_bit1=freq)then                        var_num1:= var_num1 + 1;                        case var_num1 is--低位计数,段选,实现译码功能                            when 1=> q1<="0000110";                            when 2=> q1<="1011011";                            when 3=> q1<="1001111";                            when 4=> q1<="1100110";                            when 5=> q1<="1101101";                            when 6=> q1<="1111101";                            when 7=> q1<="0000111";                            when 8=> q1<="1111111";                            when 9=> q1<="1101111";                            when 10=> q1<="0111111";var_num1:=0;--逢10归0                            when 0=> q1<="1111111";var_num1:=0;--这个0永远不显示,加上它是为了避免报错                        end case;                        var_cnt_bit1:=0;--时钟计数清0                    end if;                    qout <= q1;--clkout对外输出                when 2=> --高位管                    enout <="0010";                    var_cnt_bit2 := var_cnt_bit2 + 1;                    if(var_cnt_bit2=freq*10 or var_num1=10)then                        var_num2:= var_num2 + 1;                        case var_num2 is--高位计数,段选,实现译码功能                            when 1=> q2<="0000110";                            when 2=> q2<="1011011";                            when 3=> q2<="1001111";                            when 4=> q2<="1100110";                            when 5=> q2<="1101101";                            when 6=> q2<="1111101";                            when 7=> q2<="0000111";                            when 8=> q2<="1111111";                            when 9=> q2<="1101111";                            when 10=> q2<="0111111";var_num2:=0;--逢10归0                            when 0=> q2<="1111111";var_num1:=0;--这个0永远不显示,加上它是为了避免报错                        end case;                        var_cnt_bit2:=0;--时钟计数清0                    end if;                    qout <= q2;--clkout对外输出                when others=>var_bit:=var_bit;--防止报错            end case;            ---------------------------判断位值--        end if;    end process;    clkout <= qout;end behav;

 

转载于:https://www.cnblogs.com/nester/p/10939463.html

你可能感兴趣的文章
【人物志】美团前端通道主席洪磊:一位产品出身、爱焊电路板的工程师
查看>>
一份关于数据科学家应该具备的技能清单
查看>>
机器学习实战_一个完整的程序(一)
查看>>
Web框架的常用架构模式(JavaScript语言)
查看>>
如何用UPA优化性能?先读懂这份报告!
查看>>
这些Java面试题必须会-----鲁迅
查看>>
Linux 常用命令
查看>>
CSS盒模型
查看>>
ng2路由延时加载模块
查看>>
使用GitHub的十个最佳实践
查看>>
脱离“体验”和“安全”谈盈利的游戏运营 都是耍流氓
查看>>
慎用!BLEU评价NLP文本输出质量存在严重问题
查看>>
JAVA的优势就是劣势啊!
查看>>
ELK实战之logstash部署及基本语法
查看>>
帧中继环境下ospf的使用(点到点模式)
查看>>
BeanShell变量和方法的作用域
查看>>
LINUX下防恶意扫描软件PortSentry
查看>>
由数据库对sql的执行说JDBC的Statement和PreparedStatement
查看>>
springmvc+swagger2
查看>>
软件评测-信息安全-应用安全-资源控制-用户登录限制(上)
查看>>