数电设计数字钟.docx
- 文档编号:10182385
- 上传时间:2023-02-09
- 格式:DOCX
- 页数:24
- 大小:209.05KB
数电设计数字钟.docx
《数电设计数字钟.docx》由会员分享,可在线阅读,更多相关《数电设计数字钟.docx(24页珍藏版)》请在冰豆网上搜索。
数电设计数字钟
大连理工大学本科实验报告
题目:
数字钟
课程名称:
数字电路课程设计
学院(系):
专业:
班级:
学生姓名:
学号:
完成日期:
成绩:
题目:
数字钟
1设计要求
1.个具有‘时’、‘分’、‘秒’的十进制数字显示(小时从00~23)计时器。
2.具有手动校时、校分的功能。
3.定时与闹钟功能,能在设定的时间发出闹铃声。
(以指示灯代替)
4.能进行整点报时。
要求发出仿中央人民广播电台的整点报时信号,即从59分50秒起,每隔2秒钟发出一次低音“嘟”的信号,连续5次,最后一次要求高音“嘀”的信号,此信号结束即达到整点。
(以指示灯闪烁代替)
5、设计一个秒表,显示1%秒、60秒、手动停止
6、设计一个倒计时,显示小时、分钟、秒(具有一小时的倒计时功能)。
2设计分析及系统方案设计
该程序有4种状态,用状态变量STA表示,通过按键STATU改变,不同大小STA有相应的功能,其状态转换图及功能模块如下。
statu上升沿
时钟模块:
3系统以及模块硬件电路设计
4系统的VHDL设计
系统的各个部分如何用VHDL设计出来的应该有说明,包括论述以及真值表或者状态图等。
要求:
(1)源代码,在第一行开始,要用注释语句注明程序条数,不允许有空格行;
LIBRARYIEEE;
USEIEEE.STD_lOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYhomeworkis
port(statu,clk,key1,key2:
instd_logic;
--包括时钟,状态,设定键的输入
voice,ok:
outstd_logic;
--闹钟与整点的输出
seco1,seco2,mino1,mino2,ho1,ho2:
outstd_logic_vector(6downto0));
--驱动7段LED的输出显示
endhomework;
architecturertlofhomeworkis
signaln,intmp,sec,min,min1,hour,hour1,
--输出信号
wm1,wm2,wh1,wh2,
--闹钟下的分、时信号(worn)
set,set1,
--校时与闹钟是设定时间的信号(set)
cm1,cm2,cs1,cs2,ch1,ch2,
--记时时的时钟信号(clock)
ss1,ss2,sm1,sm2,sh1,sh2,
--设定的时间信号(setting)
ts1,ts2,tm1,tm2,th1,th2,
--倒计时信号
s1,s2,s3,s4:
std_logic_vector(3downto0);
--秒表信号
signaloutmp,outmp1,outmp2,outmp3,outmp4,outmp5:
std_logic_vector(6downto0);
--译码管驱动信号
signalcp,cp1,cp2,cp3,cp4,cp5,cp6,alarm,alarm2,turn:
std_logic;
--秒、分、时的进位信号以及闹钟的状态信号
signalsta:
std_logic_vector(1downto0);
--状态选择信号
signalp,p2:
std_logic_vector(2downto0);
--设定时间的位选信号
begin
--状态选择信号
process(statu)
begin
ifrising_edge(statu)then
ifsta="11"then
sta<="00";
else
sta<=sta+1;
endif;
endif;
endprocess;
--校时模块
--选位进程。
当key2上升沿时,被设定的为右移一位
process(sta,key2)
begin
ifsta="01"then
ifkey2'eventandrising_edge(key2)then
ifp="101"thenp<="010";
elsep<=p+1;
endif;
endif;
endif;
endprocess
;
--设定进程。
当KEY1上升沿时,被选中设定位加1
process(key1)
begin
ifsta="01"then
ifkey2='0'then
set<="0000";
elsifrising_edge(key1)then
casepis
when"010"=>
ifset="1001"then
set<="0000";
elseset<=set+1;
endif;
sm1<=set;
when"011"=>
ifset="0101"then
set<="0000";
elseset<=set+1;
endif;
sm2<=set;
when"100"=>
ifset="0011"andsh2="0010"
thenset<="0000";
elseifset="1001"then
set<="0000";
elseset<=set+1;
endif;
endif;sh1<=set;
when"101"=>
ifset="0010"then
set<="0000";
elseset<=set+1;
endif;sh2<=set;
whenothers=>n<="0000";
endcase;
endif;
endif;
endprocess;
--整点报时模块
process(sta,cp)
variablen:
integerrange0to1;
begin
ifsta="00"then
ifrising_edge(cp)then
ifn=1thenn:
=0;
elsen:
=n+1;
endif;
endif;
ifcm1="1001"andcm2="0101"andcs2="0101"andn=1then
alarm<='1';
elsealarm<='0';
endif;
endif;
endprocess;
--闹钟设定模块
--闹钟设定,与校时内容相同
process(sta,key2)
begin
ifsta="10"then
ifkey2'eventandrising_edge(key2)then
ifp2="101"thenp2<="010";
elsep2<=p2+1;
endif;
endif;
endif;
endprocess;
process(sta,key1,key2)
begin
ifsta="10"then
ifkey2='0'then
set1<="0000";
elsifrising_edge(key1)
then
casep2is
when"010"=>
ifset1="1001"then
set1<="0000";
elseset1<=set1+1;
endif;
wm1<=set1;
when"011"=>
ifset1="0101"then
set1<="0000";
elseset1<=set1+1;
endif;
wm2<=set1;
when"100"=>
ifset1="0011"andsh2="0010"
thenset1<="0000";
elseifset1="1001"then
set1<="0000";
elseset1<=set1+1;
endif;
endif;wh1<=set1;
when"101"=>
ifset1="0010"then
set1<="0000";
elseset1<=set1+1;
endif;wh2<=set1;
whenothers=>n<="0000";
endcase;
endif;
endif;
endprocess;
--报时模块
process(sta,cp)
variablen:
integerrange0to1;
begin
ifsta="00"then
ifrising_edge(cp)then
ifn=1thenn:
=0;
elsen:
=n+1;
endif;
endif;
ifcm1=wm1andcm2=wm2andch1=wh1andwh2=ch2andn=1then --与闹钟相等的时候发出一个信号
alarm2<='1';
elsealarm2<='0';
endif;
endif;
endprocess;
--秒表模块
process(sta,clk,key1)
variablenum:
integerrange0to499999;
begin
ifsta="11"then
ifclk'eventandrising_edge(clk)then
ifnum=499999then
cp6<='1';num:
=0;
else
cp6<='0';num:
=num+1;
endif;
endif;
ifkey1='1'then–暂停信号
ifrising_edge(cp6)then
ifs1="1001"then
s1<="0000";
ifs2="1001"then
s2<="0000";
ifs3="1001"then
s3<="0000";
ifs4="0101"then
s4<="0000";
else
s4<=s4+1;
endif;
elses3<=s3+1;
endif;
elses2<=s2+1;
endif;
elses1<=s1+1;
endif;
endif;
endif;
else--手动清零
s1<="0000";
s2<="0000";
s3<="0000";
s4<="0000";
endif;
endprocess;
--记时模块
--clock
process(sta,clk)
variablenum:
integerrange0to49999999;
begin
ifclk'eventandrising_edge(clk)then
ifnum=49999999then
cp<='1';num:
=0;
else
cp<='0';num:
=num+1;
endif;
endif;
endprocess;
process(cp)
begin
ifsta="00"then
ifcp'eventandrising_edge(cp)then
ifcs1="1001"then
cs1<="0000";cp1<='1';
else
cs1<=cs1+1;cp1<='0';
endif;
endif;
endif;
endprocess;
process(cp1)
begin
ifsta="00"then
ifcp1'eventandrising_edge(cp1)then
ifcs2="0101"then
cs2<="0000";cp2<='1';
else
cs2<=cs2+1;cp2<='0';
endif;
endif;
endif;
endprocess;
process(cp2)
begin
ifsta="01"andp="010"then
cm1<=sm1;
elsifcp2'eventandrising_edge(cp2)then
ifcm1="1001"then
cm1<="0000";cp3<='1';
else
cm1<=cm1+1;cp3<='0';
endif;
endif;
endprocess;
process(cp3)
begin
ifsta="01"andp="011"thencm2<=sm2;
elsifcp3'eventandrising_edge(cp3)then
ifcm2="0101"then
cm2<="0000";cp4<='1';
else
cm2<=cm2+1;cp4<='0';
endif;
endif;
endprocess;
process(cp5)
begin
ifsta="01"andp="101"thench2<=sh2;
elsifcp5'eventandrising_edge(cp5)then
ifch2="0010"then
ch2<="0000";
else
ch2<=ch2+1;
endif;
endif;
endprocess;
process(cp4)
begin
ifsta="01"andp="100"thench1<=sh1;
elsifcp4'eventandrising_edge(cp4)then
ifch2="0000"orch2="0001"then
ifch1="1001"then
ch1<="0000";cp5<='1';
else
ch1<=ch1+1;cp5<='0';
endif;
elseifch1="0011"then
ch1<="0000";cp5<='1';
else
ch1<=hour+1;cp5<='0';
endif;
endif;
endif;
endprocess;
--倒计时
process(sta,key1)
begin
ifsta="00"then
ifrising_edge(key1)then
turn<=notturn;
endif;
endif;
endprocess;
process(sta,turn,cp1)
begin
ifturn='1'then
th1<="0001";tm2<="0101";tm1<="1001";ts1<="1001";ts2<="0101";
elsifrising_edge(cp)then
ifts1="0000"then
ts1<="1001";
ifts2="0000"then
ts2<="0101";
iftm1="0000"then
tm1<="1001";
iftm2="0000"
thentm2<="0101";
elsetm2<=tm2-1;
endif;
elsetm1<=tm1-1;
endif;
elsets2<=ts2-1;
endif;
elsets1<=ts1-1;
endif;
endif;
endprocess;
--选择显示模块
process(sta)
begin
casestais
when
"00"=>ifturn='1'thenintmp<=cs1;sec<=cs2;min<=cm1;min1<=cm2;hour<=ch1;hour1<=ch2;
elseintmp<=ts1;sec<=ts2;min<=tm1;min1<=tm2;hour<=th1;
endif;
when"01"=>intmp<="0000";sec<="0000";min<=sm1;min1<=sm2;hour<=sh1;hour1<=sh2;
when"10"=>min<=wm1;min1<=wm2;hour<=wh1;hour1<=wh2;intmp<="0000";sec<="0000";
when"11"=>intmp<=s1;sec<=s2;min<=s3;min1<=s4;hour<="0000";hour1<="0000";
endcase;
endprocess;
--led7显示驱动模块
process(intmp,sec,min,min1,hour,hour1)
begin
caseintmpis
when"0000"=>outmp<="0111111";
when"0001"=>outmp<="0000110";
when"0010"=>outmp<="1011011";
when"0011"=>outmp<="1001111";
when"0100"=>outmp<="1100110";
when"0101"=>outmp<="1101101";
when"0110"=>outmp<="1111101";
when"0111"=>outmp<="0000111";
when"1000"=>outmp<="1111111";
when"1110"=>outmp<="1111001";
when"1111"=>outmp<="1110001";
when"1001"=>outmp<="1101111";
when"1010"=>outmp<="1110111";
when"1011"=>outmp<="1111100";
when"1100"=>outmp<="0111001";
when"1101"=>outmp<="1011110";
whenothers=>outmp<="0000000";
endcase;
casesecis
when"0000"=>outmp1<="0111111";
when"0001"=>outmp1<="0000110";
when"0010"=>outmp1<="1011011";
when"0011"=>outmp1<="1001111";
when"0100"=>outmp1<="1100110";
when"0101"=>outmp1<="1101101";
when"0110"=>outmp1<="1111101";
when"0111"=>outmp1<="0000111";
when"1000"=>outmp1<="1111111";
when"1110"=>outmp1<="1111001";
when"1111"=>outmp1<="1110001";
when"1001"=>outmp1<="1101111";
when"1010"=>outmp1<="1110111";
when"1011"=>outmp1<="1111100";
when"1100"=>outmp1<="0111001";
when"1101"=>outmp1<="1011110";
whenothers=>outmp1<="0000000";
endcase;
caseminis
when"0000"=>outmp2<="0111111";
when"0001"=>outmp2<="0000110";
when"0010"=>outmp2<="1011011";
when"0011"=>outmp2<="1001111";
when"0100"=>outmp2<="1100110";
when"0101"=>outmp2<="1101101";
when"0110"=>outmp2<="1111101";
when"0111"=>outmp2<="0000111";
when"1000"=>outmp2<="1111111";
when"1110"=>outmp2<="1111001";
when"1111"=>outmp2<="1110001";
when"1001"=>outmp2<="1101111";
when"1010"=>outmp2<="1110111";
when"1011"=>outmp2<="1111100";
when"1100"=>outmp2<="0111001";
when"1101"=>outmp2<="1011110";
whenothers=>outmp2<="0000000";
endcase;
casemin1is
when"0000"=>outmp3<="0111111";
when"0001"=>outmp3<="0000110";
when"
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 设计 数字