1、最后,在基本功能完成之后,我开始考虑提高要求部分的功能,由于第一项要求较难,所以我首先依次利用多个LED灯实现了功能显示、状态显示、时间提示、结束提示等功能。最后,在认真思考之后完成了最后一个功能:进度条功能的添加。总体框图 : 是 是 否 是分块设计(基本功能):时间设定部分:在此部分,若开始键及复位键未按下,则不断检测各输入按键是否按下,之后根据检测结果控制各位数字的变化,并将该数字送显。倒计时控制及数码管显示部分:在此部分,若开始键按下,则时间需减1/秒,且需不断检测复位键是否按下以及倒计时是否结束。火力控制部分:在此部分,若未开始,则需不断检测火力控制键是否按下并送显。三、仿真波形及波
2、形分析上面的就是时间设定以及显示的波形。从上图中可以看出随着time1、time2、time3、time4的上升沿,f各位的数值在不断变化,而sell则岁clk的上升沿30依次显0,说明各位在依次点亮,而f与数码管显示数字是相对应的。所以相关输入检测代码以及数码管显示代码是正确的。上面的就是火力设定以及送显的波形。从上图中可以看出s对应的是各行依次扫描送0,而q对应的则是各行图案,且当输入改变时,所显示图案改变。所以相关输入检测代码以及点阵显示代码是正确的。四、源程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSI
3、GNED.ALL;-实体定义ENTITY s31s1 IS PORT(clk: IN STD_LOGIC; -pin18 输入时钟信号huoliin: -火力调整按钮 输入time1in,time2in,time3in,time4in:IN STD_LOGIC; -时间设定四位调整按钮 输入startin,resetin: -开始、复位按钮输入gongnengin: -功能键对应输入sell: OUT STD_LOGIC_VECTOR(5 downto 0); -数码管显示扫描选择 输出f: OUT STD_LOGIC_VECTOR(6 downto 0); -数码管显示控制 输出r: OUT
4、 STD_LOGIC_VECTOR(7 DOWNTO 0); -点阵显示列控制(列red)g: -点阵显示列控制(列grenn)fengming : OUT STD_LOGIC; -蜂鸣器对应输出weiboout : OUT STD_LOGIC:=1; -微波加热功能对应输出(LED)shaokaoout:0 -烧烤加热功能对应输出(LED)zuihou: -提示加热进入最后一分钟输出(LED)shijianjieshu: -加热结束,LED闪烁提示(与蜂鸣器一致)daiji: -说明当前处于待机状态,可以调整工作状态的LED输出jiare: -说明当前处于加热状态的LED输出LED1: LE
5、D2:s: OUT STD_LOGIC_VECTOR(7 DOWNTO 0); - 点阵显示行扫描 输出END s31s1;- ARCHITECTURE定义ARCHITECTURE a OF s31s1 ISTYPE all_state IS (S0,S1,S2);SIGNAL state: all_state:=S2; -火力状态信号 SIGNAL saomiaolie: integer range 0 to 7; -点阵显示扫描选择控制信号SIGNAL timenow1: integer range 0 to 5:=5; -数码管第一位(分十位)(倒计时逻辑部分使用)SIGNAL time
6、now2: integer range 0 to 9:=9; -数码管第二位(分个位)SIGNAL timenow3: -数码管第三位(秒十位)SIGNAL timenow4: -数码管第四位(秒个位)SIGNAL timenow11: -数码管第一位(分十位)(时间设定部分使用)SIGNAL timenow21:SIGNAL timenow31:SIGNAL timenow41:SIGNAL timewei: integer range 0 to 3;SIGNAL COUNT: integer range 0 to 24999; -产生clock过程中用到的信号SIGNAL COUNT1:
7、integer range 0 to 100; -产生延迟过程中用到的信号SIGNAL COUNT2: integer range 0 to 360000:=0; -产生clock1过程中用到的信号SIGNAL timezong:SIGNAL timepast1:SIGNAL timepast2:SIGNAL timepast:SIGNAL q: STD_LOGIC_VECTOR(7 DOWNTO 0); -点阵显示列控制信号SIGNAL clock: STD_LOGIC; -1Hz时钟信号SIGNAL clock1: -100Hz时钟信号SIGNAL kaishi: STD_LOGIC: -
8、表示已经开始,进入加热状态SIGNAL jieshu: -表示倒计时结束SIGNAL sheding: -表示reset键被按下,进入设定状态SIGNAL fengmingjishu: -使用蜂鸣器的时候使用的计数SIGNAL fengming1: -表示蜂鸣器使能,当前蜂鸣器处于使用状态SIGNAL weibo: -控制功能输出时使用SIGNAL shaokao:SIGNAL LED1s:SIGNAL LED2s:SIGNAL resetmp11,resetmp21,time1 : -防抖部分使用SIGNAL resetmp12,resetmp22,time2 :SIGNAL resetmp
9、13,resetmp23,time3 :SIGNAL resetmp14,resetmp24,time4 :SIGNAL resetmp15,resetmp25,huoli :SIGNAL resetmp16,resetmp26,start :SIGNAL resetmp17,resetmp27,reset :SIGNAL resetmp18,resetmp28,gongneng :BEGIN -倒计时部分代码-PROCESS(clk,COUNT) -由输入时钟进行分频产生1HZ时钟clock、100HZ时钟clock1BEGINIF (clkEVENT AND clk=) THEN COUN
10、T=COUNT + 1; COUNT2=COUNT2 + 1; IF (COUNT=24999) THEN clock= NOT clock; END IF; IF COUNT2=249 THEN clock1 IF (clockEVENT AND clock= IF timenow4=0 THEN IF timenow3=0 THEN IF timenow2=0 THEN IF timenow1=0 THEN jieshu -即若时间各位均变为0的时候,此时对应的状态是倒计时结束 ELSE timenow1=timenow1-1; -一下各种情况对应各种借位 timenow2 timenow
11、3 timenow4 ELSE timenow2=timenow2-1; ELSE timenow3=timenow3-1; ELSE timenow4=timenow4-1; timenow1 sellf0111111-sell0000110-06 WHEN 2 =1011011-5B1001111-4F WHEN 4 =1100110-66 WHEN 5 =1101101-6D WHEN 6 =1111101-7D WHEN 7 =0000111-07 WHEN 8 =1111111-7F WHEN 9 =1101111-6F END CASE;111101 CASE timenow3 I
12、S111011 CASE timenow2 IS WHEN 9 =110111 CASE timenow1 ISEND PROCESS ;PROCESS(clk,timewei)-改变控制数码管扫描的信号timeweiIF(clkevent and clk= IF(timewei=3) THEN timewei else=timewei+1;-设定时间部分代码-数码管显示部分在倒计时部分的PROCESS部分已有代码 是重复利用的 所以不需重新写PROCESS(time1,start) -第一位时间设定IF start= THEN IF(time1event and time1= IF(time
13、now11=5) THEN timenow11 ELSE =timenow11+1;IF (sheding= OR jieshu=PROCESS(time2,start) IF start= IF(time2event and time2= IF(timenow21=9) THEN timenow21=timenow21+1;PROCESS(time3,start) IF(time3event and time3= IF(timenow31=5) THEN timenow31=timenow31+1;PROCESS(time4,start) IF(time4event and time4= I
14、F(timenow41=9) THEN timenow41=timenow41+1;-火力控制部分代码-PROCESS(clk,saomiaolie)-改变控制点阵扫描的信号saomiaolie IF saomiaolie=7 THEN saomiaolie ELSE saomiaolie CASE saomiaolie IS WHEN 0= 扫描第一行 s01111111-0 q10111111-101111110 WHEN 2=11011111-211111111 WHEN 3=11101111-300011000 WHEN 4=11110111-4 WHEN 5=11111011-500000000 WHEN 6=11111101-6 WHEN 7=11111110-7 WHEN S1=00100100 WHEN S2=
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1