七段数码管显示数字需要自定义一个译码器。把二进制数字转换为对应显示的abcdefgh。例如:想显示‘1’需要给七段数码管(共阴极)输入01100000,‘2’需要11011010等等。如果你设计的译码器能够显示0、1、2、3、4、5、6

entity ymq is port (num:in std_logic_vector(3 downto 0);dout:out std_logic_vector(6 downto 0));end ymq;architecture a1 of ymq is begin with num select dout<="1111110" when "0000","0110000"

when"0110"=>q<="1111101"; --显示6 when"0111"=>q<="0000111"; --显示7 when"1000"=>q<="1111111"; --显示8 when others=>q<="1101111"; --显示9 参考资料:0000

output [7:0] dataout; //8bit位选 reg [7:0] dataout;output [7:0] led_bit; //段码 reg [7:0] led_bit;//timer frequency = 64Hz*8 reg [15:0] cnt_16bit;//for multiple flush frequency

PROCESS (HighCLK) --动态数码管控制显示部分\x0d\x0aBEGIN\x0d\x0a IF HighCLK 'EVENT AND HighCLK ='1THEN\x0d\x0a CASE Q IS\x0d\x0a WHEN 0 => Y Y Y Y Y Y Y Y Q Y<="000";

首先是你要有数码管译码器,以下这个是共阴数码管的译码电路的VHDL。segin是输入的你要显示的二进制数据,比如1001代表的就是9。seg就是输出的点亮七段数码管的信号。library ieee;use ieee.std_logic_1164.all;use ieee.

用VHDL语言编(共八个)七段数码管的随机显示程序

1、绪论 阐述研究电子钟所具有的现实意义。 2、设计内容及设计方案 论述电子钟的具体设计方案及设计要求。 3、单元电路设计、原理及器件选择 说明电子钟的设计原理以及器件的选择,主要从石英晶体振荡器、分频器、计数器、显示器和校时

模块图如图13。用以进行正常计时时间与闹铃时间显示的选择,alarm输入为按键。当alarm按键未曾按下时二选一选择器会选择输出显示正常的计时结果,否则当alarm按键按下时选择器将选择输出显示闹铃时间显示。图13 程序如下:library

就是这一段消抖的,考虑键没有按下的情况,low_sw_r应该是高电平,low_sw一样,这样led_ctrl是0,如果有键按下,low_sw先变成0,而low_sw_r要等到20ms后才置0,因此在这个时间段里led_ctrl就变成1, 因此就检测到了按

1.1 计数器型消抖电路(一)计数器型消抖电路(一)是设置一个模值为(N+1)的控制计数器,clk在上升沿时,如果按键开关key_in='1',计数器加1,key_in='0' 时,计数器清零。当计数器值为2时,key_out输出才为1,

按键未按前是低电平0(若是高电平需把底层文件1中的clr<='0'改为clr<='1')底层文件1(1-9计数器)library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt is port(clk:in std

用VHDL语言编写1-9计数器,要求没有按键按下之前,显示0而不是9,同时按键消抖!谢谢!

include define N 1000 void main() { int i,k;for ( i=0;i

ELSIF EN='0' THEN NULL;ELSIF CLK'EVENT AND CLK='1' THEN IF TMP=9 THEN OC<='1';TMP:="0000";--这儿有个9,改成15就是十六进制啦,当然其他的也行啊 ELSE TMP:=TMP+1;OC<='0';END IF;END IF;Q<

PORT(clk:IN std_logic;counter_out:OUT std_logic_vector(3 DOWNTO 0));END double_counter;ARCHITECTURE bhv OF double_counter IS SIGNAL counter:std_logic_vector(3 DOWNTO 0):=(OTHERS => '0');SIGNAL adder

你的程序进程(PROCESS)中用到了类型转换函数 CONV_INTEGER(A);应在开始将包含此函数的包打开,即 在第二条语句(USE ieee.std_logic_1164.all;)后加上下面语句:USE IEEE.STD_LOGIC_UNSIGNED.ALL;

PORT(clk:IN std_logic;counter_out:OUT std_logic_vector(3 DOWNTO 0));END double_counter;ARCHITECTURE bhv OF double_counter IS SIGNAL counter:std_logic_vector(3 DOWNTO 0):=(OTHERS => '0');SIGNAL adder

signal num1 : std_logic;begin a: process(clock,en)variable num : std_logic_vector(3 downto 0);begin if en='1' then --如果en为高电平时,允许七段数码管显示数字 if rising_edge(clock) then if co

VHDL循环显示0~9十个数字程序

时钟信号 clk触发 ,count=0,sum=0 每个clk event 变量 count=count+1,如果count小于等于100,则 sum=count+sum; 有段日子没用了,我说下思想吧

给你讲下思路吧,,对于数码管显示,用动态扫描法,对应的二极管亮法对应着一个数字,这个网上随便搜就有了!!在程序中你可以用case when语句来实现,而对于外部输入的三个控制信号,也就相当于是一个计数器的控制信号,

count1 <= count1+1;clk1 <= '0';end if;if count2 = 50000 then clk2 <= '1';---1000hz,此频率可利用人的视觉误差扫描数码管 count2 <= 0;else count2 <= count2+1;clk2 <= '0';end if;end

七段数码管显示数字需要自定义一个译码器。把二进制数字转换为对应显示的abcdefgh。例如:想显示‘1’需要给七段数码管(共阴极)输入01100000,‘2’需要11011010等等。如果你设计的译码器能够显示0、1、2、3、4、5、6

when"0001"=>q<="0000110"; --显示1 when"0010"=>q<="1011011"; --显示2 when"0011"=>q<="1001111"; --显示3 when"0100"=>q<="1100110"; --显示4 when"0101"=>q<="1101101"; --显示

if en='1' then --如果en为高电平时,允许七段数码管显示数字 if rising_edge(clock) then if counter=2 then counter<=0;else counter<=counter+1;end if;case counter is when 0=> enout<="110";num:=

PROCESS (HighCLK) --动态数码管控制显示部分\x0d\x0aBEGIN\x0d\x0a IF HighCLK 'EVENT AND HighCLK ='1THEN\x0d\x0a CASE Q IS\x0d\x0a WHEN 0 => Y Y Y Y Y Y Y Y Q Y<="000";

用VHDL语言,设计一个数码管显示的程序

LIBRARY IEEE; USE IEEE.Std_logic_1164.ALL; ENTITY ls49 IS PORT(bl_n:IN Std_logic; bi:IN Std_logic_vector(3 DOWNTO 0); a,b,c,d,e,f,g:OUT Std_logic); END ls49; ARCHITECTURE behave_49 OF ls49 IS SIGNAL s:Std_logic_vector(6 DOWNTO 0); BEGIN PROCESS(bi,bl_n) BEGIN IF bl_n = ′0′ THEN s ′0′); ELSE CASE bi IS WHEN ″0000″ => s <= B″011_1111″; WHEN ″0001″ => s <= B″000_0110″; WHEN ″0010″ => s <= B″101_1011″; WHEN ″0011″ => s <= B″100_1111″; WHEN ″0100″ => s <= B″110_0110″; WHEN ″0101″ => s <= B″110_1101″;
首先编写分频计程序(50M或27M分频到1HZ) 编写减法器,预置数为9。减法器减到0时,设一个输出为,例如为OUTY,减到0时候,OUTY为高电平(设置让其持续几秒)。 当前计数器数字输出通过数码管译码程序,使其在数码管显示。 数码管显示程序,书上网上很多。但要注意FPGA板子是共阴极还是共阳极解法。 OUTY引脚锁定的时候应该锁定到音频解码输出引脚,让其发音。alter的DE2板是AUD_DACDAT(PIN_C6)
这个好弄啊,十进制计数器,然后把clk锁定到按键上就能实现啊,给你一个通用的计数器吧,带复位,使能,进位的,将数直接改下就变成其他进制的了 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY counter IS PORT( RST,EN,CLK:IN STD_LOGIC; OC:OUT STD_LOGIC; Q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END counter; ARCHITECTURE bhv OF counter IS BEGIN PROCESS(RST,EN,CLK) VARIABLE TMP:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN IF RST='1' THEN TMP:="0000";OC<='0'; ELSIF EN='0' THEN NULL; ELSIF CLK'EVENT AND CLK='1' THEN IF TMP=9 THEN OC<='1';TMP:="0000";--这儿有个9,改成15就是十六进制啦,当然其他的也行啊 ELSE TMP:=TMP+1;OC<='0'; END IF; END IF; Q<=TMP; END PROCESS; END bhv;
你不说是要显示什么还有显示的具体方式怎么写程序?
写两个进程,一个进程是分频器,将工作主频分频至后成为周期为10ms的方波。另一个进程是一个状态机,有4个状态:1.没有按键的状态S0,2.按下按键的状态S1,3.维持按键的状态S2,4.松开按键的状态S3。
#include#define uchar unsigned charsbit P32=P3^2;uchar num[10]={0xc0,0x5b}; /*具体值记不得了,可以百度,就是0-9,这里就写了俩还不一定是对的,就那意思*/void delay50us(void){ uchar i,j; for(i=0;i<100;i++) { for(j=0;j<19;j++){;} }}void main(void){ uchar s1; s1=0;P0=num[s1]; while(1){ if(P32==1)//如果p32是高电平 { delay50us();//延时防抖动 if(P32==1) { while(P32); /*这是个很常用的处理方法,P32=1则会一直在循环里,P32=0则进行下一步,在串口双机通信实验里也许还能用上 */ if(s1==9){s1==0;}//如果是9就下一个显示0 else{s1++;}//如果不是正常加一 } } P0=num[s1];//刷新7seg值}}这程序我刚打的,我也不知道能不能行,你看看吧,试试。能帮上点算点。 不好意思我没好好看清题目 !我没用计数器,sorry耽误你时间了
PROCESS (HighCLK) --动态数码管控制显示部分 BEGIN IF HighCLK 'EVENT AND HighCLK ='1' THEN CASE Q IS WHEN 0 => Y<="000"; VIEW<=h(7 DOWNTO 4); Q<= 1; WHEN 1 => Y<="001"; VIEW<=h(3 DOWNTO 0); Q<= 2; WHEN 2 => Y<="010"; VIEW<=c(7 DOWNTO 4); Q<= 3; WHEN 3 => Y<="011"; VIEW<=c(3 DOWNTO 0); Q<= 4; WHEN 4 => Y<="100"; VIEW<=s(7 DOWNTO 4); Q<= 5; WHEN 5 => Y<="101"; VIEW<=s(3 DOWNTO 0); Q<= 6; WHEN 6 => Y<="110"; VIEW<="0000"; Q<= 7; WHEN 7 => Y<="111"; VIEW<="0000"; Q<= 0; WHEN OTHERS => Q <= 0; END CASE; ELSE NULL; END IF; END PROCESS; 给分吧 HighCLK是扫描时钟设一个较高的时钟就行,我一般是设定为2000 HZ,VIEW 接你要显示的信号,Y 控制第几个数码管显示,比如你要第一个数码管显示8就把第一条改成: WHEN 0 => Y<="000"; VIEW<="1000"; Q<= 1;
PROCESS (HighCLK) --动态数码管控制显示部分 BEGIN IF HighCLK 'EVENT AND HighCLK ='1' THEN CASE Q IS WHEN 0 => Y<="000"; VIEW<=h(7 DOWNTO 4); Q<= 1; WHEN 1 => Y<="001"; VIEW<=h(3 DOWNTO 0); Q<= 2; WHEN 2 => Y<="010"; VIEW<=c(7 DOWNTO 4); Q<= 3; WHEN 3 => Y<="011"; VIEW<=c(3 DOWNTO 0); Q<= 4; WHEN 4 => Y<="100"; VIEW<=s(7 DOWNTO 4); Q<= 5; WHEN 5 => Y<="101"; VIEW<=s(3 DOWNTO 0); Q<= 6; WHEN 6 => Y<="110"; VIEW<="0000"; Q<= 7; WHEN 7 => Y<="111"; VIEW<="0000"; Q<= 0; WHEN OTHERS => Q <= 0; END CASE; ELSE NULL; END IF; END PROCESS; 给分吧 HighCLK是扫描时钟设一个较高的时钟就行,我一般是设定为2000 HZ,VIEW 接你要显示的信号,Y 控制第几个数码管显示,比如你要第一个数码管显示8就把第一条改成: WHEN 0 => Y<="000"; VIEW<="1000"; Q<= 1;