版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录
一、设计题目和要求............................................2
二、设计思路...................................................2
三、单元模块设计...............................................3
-------------------------------------------------------------------------------------------------------------------------8
3.1、FENPIN模块设计...................................(3,4)
3.2、FIRST模块设计....................................(4,5)
3.3、JIANJISHU模块设计................................(5,6)
3.4、CHOICE和VIEW模块设计............................(7,8)
四、硬件实验....................................................8
五、心得体会...................................................9
附页:程序代码................................................10
............................................................................................................................7
一、设计题目和要求
设计题目为:微波炉定时控制器
要求:1、复位开关:
2、启动开关:
3、烹调时间设置:
4、烹调时间显示:
5、七段码测试:
6、启动输出:
7、按TEST键可以测试七段码管,显示为“8888”;
8、设定时间后,按启动键开始烹调,同时七段码显示剩余时间,
时间为0时,显示烹调完成信息“CDEF,
二、设计思路
A.先有一个大概的模块话设计,就如下图:
)
输出数据
B:再在上面大模块的基础上进行改进
增加复位端和测试端
友位
C:具体的设计过程:
1、刚开始设计是先完成了FENPIN模块的设计,因为这个模块比较简
单。
2、然后是对设初值大模块的设计,在这一部分的设计遇到两方案:
(1)设计四个按钮的初始话模块,四个按钮分别控制秒,十秒,
分,十分4个数值的初始化加;
(2)设计两个按钮的初始化模块,两个按钮分别提供一个移位信号和
一个加信号;
两个方案都用了一下,发现还好是2号方案比较好,不仅程序上比较简单
而且省了很多按钮的使用,比较符合实际应用的要求;
3、在完成了初始话模块的设计之后,接下来就是减计数模块的设计,
只要把由初始化模块所提供的数据进行减计数即可;
4、在完成以上三个模块时,程序的已经初见雏形了,然后把这三个模
块连接起来,添加上复位和测试按钮就可以了;
5、用动态扫描的方法队数据进行输出,其中在输入数据是使相应的数
据进行闪烁。
三.单元模块设计
单元模块设计部分主要有4部分组成:
(一)、FENPIN模块,用于给后面的JIANJISHU模块和VIEW模块提
供合适的频率。
(二)、FIRST模块,用于设定微波炉的初试时间而用。
(三)、JIANJISHU模块,配合FENPIN模块提供的时钟频率实现每秒
减一的计数。
(四)、CHOICE模块和VIEW模块,利用动态扫描的方法显出对应数
字。
3.1FENPIN模块的设计
FENPIN模块主要利用IKhz的时钟信号进行分频。得到1s的outlck时
钟信号(用于后期JIANJISHU模块的使用)和0.5s的screen的时钟信号(用
于VIEW的显示闪烁使用)。
输出1s的时钟信号
说明:试验箱上有IKhz,2Khz等多个时钟信号。而在这里采用IKhz的信
号使用。lKhz/1000=1s,所以采用IKhz进行千分频得到1s的信号。
first:u2
01[3.0|
able
c2[3OJ输出初始数据
elk
03[3.0]
res
04,.0]
test
06[3..0]|
说明:开始设计时,由于没有考虑全面设计了一个有4个按键分别控制秒,
十秒,分,十分的方案,因为课设要接近与实际设计,而实际不可能
给予如此多的按键,这样不仅占用大量空间而且产品也是非常的不美
观,所以之后就改成现在的由ABLE控制移位,再由CLK给予时钟
脉冲的方式进行设计,最后发现这样的设计不仅没有上述的缺点更加
使我的程序变的更加的简单。
波形图仿真:
每个上升沿都会进行加计数
当res和test为零时输出分别是
“0000”和“8888”
Able在每个脉冲到来是都会进行移位,而05正好显示出正在加的位
数
注意:编写此段代码是要注意秒位和分位都是记从1记到9然后进位自己
变成0的,
而十秒位和十分位是记到5然后变成0的。
(程序代码见附页)
3.3JIANJISHU模块的设计
JIANJISHU模块的主要用于对FIRST的数据进行选择性的处理和输
出:
(一)、当JIANJISHU模块中的res=O时,由于res作为输入同样也连接
这FRIST模块中
的res,他们是由一个输入共同控制的,所以此时输出的就是“0000”;
(二)、当JIANJISHU模块中的lesl=0时,同res一样的道理,此时输
出为“8888”;
(三)、当q4=15(输出为F)或start=0时,LED就不会亮了,表示工
作完成或处
于等待状态,此时不对FIRST模块中的数据进行任何处理就直接输出;
(四)、在以上条件都不满足的情况下,若此时start=l,那么JIANJISHU
模块才
开始了真正的工作状态,即配合FENPIN模块中时钟outclk开始每秒减一
的记时计数;
jianjishu:u3
本程序中复位键res和test的详细说明:
这里的res和test和模块FRIST中的res和test是用同一个控制端,而
且JIANJISHU的res和test是必不可少的。因为每次进行计数完后由于是
利用信号进行减计数,在记完一次数之后ql,q2,q3和q4都会保持最后
一次的状态,如果不及时清零的话,那么下一次的res,test以及加计数就
是只能对前一级的输入进行复位和测试,输出的将是前一级的各个位数减
去ql,q2,q3和q4的值,所以在JIANJISHU模块中进行清零是十分重要
的。
波形图仿真:
输入初值为“0015”
'与start=1时开始配合elks的始终上升沿开始戏计数
LTLrmnjmrLn
这就是上次提到的复位是清零了所有的中间信号,这样输出为FIRST中提
供原始数据
(程序代码见附页)
3.4CHOICE模块和VIEW模块
CHOICE模块和VIEW模块必须放在一起进行使用,CHOICE模块是
进行数据选则而使用的,VIEW模块是用于在相应的为进行输出对应的数,
两者和起来就是一个动态扫描的过程。
A:CHOICE模块:
choice:u4
说明:这里的elk时钟信号是使用和FENPIN模块中一样的时钟信号
(IKhz),因为人
的眼睛对时间的分辨为20个微秒,用IKhz的信号完全能满足这样的
要求;要注意CHOICE有两个输出,o2显然输出的是对应的数据信
号,而要输出的是一个位选信号,是为下一个模块VIEW显示而
用。
B:VIEW模块;
view:u5
^^segp.O]
{~Jsel[2..O]
说明:fl是接受位信号用的,Q是接受数据而用的。
详细说明一bscreen和able的作用:
Screen是有FENPIN模块通过对时钟信号分频得到的,当在模块FRIST
选中某一
进行加数初始化是,VIEW就可以在时钟screen在为1是正常输出able所
指的那位,
当screen为0时,able所指的那位不能对应输出,这样就能达到让相应的
数码管闪烁
的效果C
波形图:
(程序代码见附页)
四.硬件实验
管脚设置
ToLocationIN)/0Standard
Bank
1ClklPIN_1523LVTTL
2CIk2PIN1353LVTTL
3MovePIN」363LVTTL
4RestPIN_1373LVTTL
5TesttPIN1383LVTTL
6StarttPIN_1563LVTTL
7LightoPIN」653IVTTL
8Sei[2]PTN_51LVTTL
9Sel[l]Pl\11LVTTL
10Sel[0]PIN_31LVTTL
11Seg[7]PIN21LVTTL
12Seg[6]PTN_11LVTTL
13Seg[5]PIN_1803LVTTL
14Seg[4]PIN_1793IVTTL
15Seg[3]PIN_1783LVTTL
16Scg[2]PIN.1773LVTTL
17Seg[l]PIN_1763LVTTL
18Seg[0]PIN_1753LVTTL
注释:Clkl:选用的是IKhz的信号;
Clk2,Move,Rest,Testt:选用的是按钮信号;
Startt:使用的是开关信号;
Lighto:LED输出;
五、心得体会
这次我独立完成了一次完整的程序设计,在整个的设计过程中我感觉我
的动手能力得到了比较高的提高吧,学了的东西如果连这么一个比较简单
的课设都不能完成的话我感觉是比较羞愧的一件事情。
在整个的设计过程中现在回头好好回想一下我觉得还是有很多不足的,
做任何事情起步的时候就应该有一个全局观,但是刚开始由于我没有考虑
完全,在FIRST模块种设计了有四个按键控制的初始化程序,之后发现这
样不仅程序非常的繁琐,而且这种课设应该和实际好好联系一下,有谁家
的微波炉就光是刚开始设定初值都有这么多按钮,那么不仅难看而旦比较
耗资源,使用也不是最方便的,所以之后经过分析后选择了现在使用的由
两个按钮就能事先数据初始化的功能。因此在以后的设计工作中也要学会
有大局观。
同是在编写复位和测试两个按键的功能是遇到了比较大的麻烦,总是输
出一些莫名其妙的数据,之后发现是由于在J1ANJISHU模块的中的中间信
号没有清零而导致的,这样的一个遇到困难然后去解决这个问题的过程让
我对中间信号有了比较深刻的理解。
在完成大半个程序之后,我发现在初始化数据的时候没有任何的提示是
在对哪以为进行加,所以就去请教了老师,以老师的方案就是用一个时间
较长的时钟信号对输出数码管的管脚进行或操作(数码管是共阴),当时我
嫌这么方法写的代码比较长,所以我就尝试了一下在输出数码管的位选上
做文章,用这个较长的时钟信号和位信号进行位操作,这样可以实现闪烁,
但是在时钟信号为’1'时输入的位信号是,由于实验箱上的数码管都
进行了引脚的锁定,所以会让第8个数码管点亮,所以这个方案宣告失败,
最后就采用了现程序使用的方法,和老师的差不多,写起来也比较方便,
总的来说这样的课程设计比上课有意思多了,在实际中还是有很多不是
在课本上能学的到的东西,这个需要自己去理解,去总结的。
附页:
一微波炉定时控制器程序代码-
第一部分:TOP(顶层文件)
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all:
entitytopis
port(rest,clk1,clk2,move,startt,testt:instdjogic;
lighto:outstdjogic;
selloutstd_logic_vcctor(2downto0);
seg:outstd_logic_vcctor(7downtoO))
end;
architecturethreeoftopis
componentfenpinis
port(clk:instd_logic;分频
outelkscreenioutstt
endcomponent;
componentfirstis
初始化
port(clk,able,res,test:instd」ogic;
数据
ol,02,03,04,05:outstd_logic_vcctor(3downtoO));
endcomponent;
componentjianjishuis
port(clks,start.res,test:instdjogic;
减计数
inl,in2,in3,in4;instd_logic_vectortwntoO);
lighcoutstdjogic;
outl,out2,out3,out4:outstd_logic_vector(3downing°))
endcomponent;
componentchoiceis
porl(clk:sld」ogic;
用:instd_lcog
位选
okoutstdlogicvector"。downto(1)
o2:outstd—loDgicr(3downto0));
endcomponent;
componentviewis
port(screen:instd_logic;
fl:instd_logic_vector(ldownto0);显示输出
f2,able:instd_logic_vector(3downto0);
segout:outstd_logic_vector(7downto0);
selout:outstd_logic_vector(2downto0);
endcomponent;
signalb,c,d,e,f,g,h,i,j:std_logic_vector(3downto0);
signala,k:std_logic;
signalq:std_logic_vcctor(1downto0);
signalp:std_logic_vector(3downto0);
begin
ukfcnpinportmap(clk=>clk1,outclk=>a,scrccn=>k);
u2:firstportmap(clk=>clk2,res=>rest,test=>testt,able=>move,
ol=>b,02=>c,o3=>d,()4=>e,05=>j);
u3:jianjishuportmap(clks=>a,start=>startt,res=>rest,test=>testt,in1=>b,in2=>c,
in3=>d,in4=>e,light=>Iighto,outl=>f,out2=>g,out3=>h,0
ut4=>i);
u4:choiceportmap(clk=>clk1,fl=>f,f2=>g,f3=>h,f4=>i,01=>q,()2=>p);
u5:viewportmap
(able=>j,screen=>k,fl=>q,f2=>p,segout=>seg,selout=>sel);
end;
第二部分:FENPIN(时钟分频)
libraryieee:
useiccc.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityfenpinis
port(clk:instd」ogic;
outclk,screen:outstd」ogic);
end;
architecturefirstoffenpinis
signalQl,Q2:std_logic;
begin
one:process(clk)
variablecount1:integerrange0to1002;
begin
QVO';
ifcountl>1000thenQl<=l;countl:=0;
elsifclk^ventandelk-1'thencountl:=count1+1;分出1
秒信号
endif;
endprocess;
two:process(clk)
variablecount2:integerrange0to500;
begin
ifclk'eventandelk-Tthen
ifcount2<250thenQ2<='1;count2:=coun2+1;
elseQ2<='0';count2:=count2+1;闪烁信号
endif;
endif;
ifcount2>499thencount2:=0;
endif;
endprocess;
outclk<=Ql;
scrccn<=Q2;
end;
第三部分:FIRST(数据初始化)
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityfirstis
port(clk,able,res,test:instdjogic;
o1,02,03,04,05:outstd」ogic_veclor(3downtoO));
end;
architecturetwooffirstis
signalq1,q2,q3,q4,q5;std_logic_vector(3downto0);
begin
process(able)
begin
ifablet.vc
f位选信号,选择相应的位
进行初始
elseq5<="0000";化,其中“0000”为空位。
endif;
endif;
endprocess;
process(clk,res,test,q4)
begin
ifres='0'thenql<="00(X),';q2<=t€0000,,;q3<=,,0000n;q4<=,,0000";
复位键
elsiftest='O'thenql<=n1000u;q2<="1000',;q3<=n1000";q4<="1000";
一测试键
elsifclk'eventandclk-l'then
caseq5is
秒位加数
Vhen"0010"=>ifc<5thenc92<=
十秒位加数
ehcg?^-o00°;
when"001l"=>ifq3<9thenq3<=q
分位加数
ehdt?<=(X)OO°;
when"0100'->ifq4<5thenq4<=q4
elseq4<=n0000";十分位加数
whenothers=>null;
endcase
endif:
endprocess;
ol<=ql;
o2<=q2;
o3<=q3;
o4<=q4;
05cq5;-在VIEW模块中选择
闪烁位
end;
第四部分:JIANJISHU(数据按秒倒计时)
libraryieee;
useieee.std_logic_l164.all;
useiccc.std_logic_unsigncd.all;
entityjianjishuis
port(clks,startles,test:instdjogic;
ini,in2,in3,in4:instd_Iogic_vector(3downto0);
lighCoutstdjogic;
out1,out2,out3,out4:outstd_logic_vector(3downto0));
end;
architectureoneofjianjishuis
signalqI,q2,q3,q4:std_logic_vector(3downto0);
begin
process(start,clks,res,test,q4)
variablea:std_logic_vector(1downto0);
begin
ifres='O'Ortest='O'then
ql<="0000'';q2<=n0000',;q3<="0000',;q4<="0000";
一对信号都清零设置
clsifq4=(in4-15)orstart='O'thcna:="00";light<='0';
一当q4=15或start=O时不进行减计数,同时LED不
亮
elsifstart=Tthena:=“1l”;light<=T;
一当start=l时LED点亮同时开始倒计时
caseais
whenclks'eventandelks-1'then
if(inl-ql)=0thenql<=(in1-9);q2<=q2+1;
elseql<=ql+l;
endif;
-ql开始为0,当ql=inl时,对ql赋值为(inl-9),
为负数,
同时对q2进行加1,那么(in2-q2)就可以视线减1,若不是那么ql<=q1+1,
可以实现
(inl-ql)从9开始的倒计数
if(in2-q2)=0and(inl-ql)=Othen
q3<=q3+1;q2<=(in2-5);ql<=(in1-9);
endif;
一当输出out1=0和out2=0时进位减1,同时outl=9,
out2=5;
if(in3-q3)=0and(in2-q2)=0and(inI-q1)=0then
q4<=q4+1;q3<=(in3-9);q2<=(in2-5);ql<=(inl-9);
endif;
if(in4-q4)=0an(l(in3-q3)=0and(in2-q2)=0and
(inl-ql)=0
then
q4<=(in4-l5);q3<=(in3-14);q2<=(in2-l3);ql<=(in1-12);
endif;
一当所有计数完毕(都为0)时,实现输出FEDC;
endif;
whenothers=>null;
endcase;
endif;
endprocess;
outl<=(inl-ql):
out2<=(in2-q2);
out3<=(in3-q3);
out4<=(in4-q4);
end;
第五部分:CHOICE(数据选择模块)
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitychoiceis
port(clk:std_logic;
fl,f2,f3,f4:instd_logic_vector(3dovvnto0);
ol:outstd_logic_vector(1downto0);
o2:outstd_logic_vector(3downtoO));
end;
architectureoneofchoiceis
signalq:std_logic_vector(Idownto0);
begin
process(clk)
begin
ifclk'eventandelk-1'thenq<=q+l;
endif;
caseqis
whenR00w->o2<-f1;、
whenH0l*«>
whenKIOH=>o2<=B;>选择输出数据
when"ir=>o2<=f4;
whenothers=>null:)
endcase;
efkiprocess;
ol<=q:一位选信号
end;
第六部分:VIEW(显示模块)
libraryieee;
useieee.std」ogic_1164.all;
useieee.std_logic_unsigned.all;
entityviewis
port(screen:instd_logic;
fl:instd_logic_vector(1downto0);
f2,able:instd_logic_vector(3downto0);
segout:outstd_logic_vector(7downto0);
selout:outstd_logic_vector(2downto0));
end;
architectureoneofviewis
signalseg:stdJogic_vector(6downto0);
signalsel:std_logic_vector(2downto0);
begin
selout<=sel:
scgoui(6downio
sel<="000wwhenfl^0els;
"OOI"whenfl«lelse
"010"whenfl=2elve>相应的数据选择对应的位进行输出
"Otrwhenfla3eke
"000":J
segout(7)<=,l'whenfl=2else'O';一在第三个数码管输出小数点
process(f2,able,sei)
begin
if(ablc="OODl"andscl="000")or(able="0010Mandsel="001")or
(able=nOOIT'andsel="010")or(able="0100"andsel=MOIl")then
ifscreen-Tthenseg<-'0000000'';一无输出
else
casef2is
when"0000,'=>seg<="01111ir,;
when〃0001〃=>seg〈二〃0000110〃;
when"()()1()"二>seg<=〃1011()11":
when,,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025~2026学年湖北恩施土家族苗族自治州利川市度上学期期末学业质量监测九年级英语试卷
- 2025~2026学年新疆阿克苏地区第一学期期末质量监测试七年级英语试卷
- 2026江苏入团考试题及答案
- 2026会计初级自考试题及答案
- 2026护士训练考试题及答案
- 2026上半年四川南充市南部县事业单位考核招聘研究生6人备考题库附答案详解(综合题)
- 2026浙江绍兴市镜湖开发集团有限公司下属企业招聘2人备考题库附答案详解(模拟题)
- 2026年5月江苏连云港市妇幼保健院招聘合同制医疗卫生专业技术人员3人备考题库附答案详解(基础题)
- 2026广西来宾市兴宾三利湖国家湿地公园管理局招聘编外人员1人备考题库及1套完整答案详解
- 2026四川省达州市“达人英才计划”上半年引才688人备考题库附答案详解(培优)
- 江苏交控招聘笔试试题及答案
- 食堂厨房卫生安全制度
- 高血压培训课件教学
- (正式版)DB44∕T 2749-2025 《黄金奈李生产技术规程》
- 工业厂房地面找平施工流程
- 2026年焊工资格证考试试题及答案
- 小学安全伴我成长课件
- 刷单协议书合同范本
- 运输生猪合同范本
- 2025年重庆市新能源年度开发建设方案
- 科技写作与文献检索课程论文试题(卷)及答案
评论
0/150
提交评论