嵌入式秒表的设计Word下载.docx
- 文档编号:13453479
- 上传时间:2022-10-10
- 格式:DOCX
- 页数:14
- 大小:65.37KB
嵌入式秒表的设计Word下载.docx
《嵌入式秒表的设计Word下载.docx》由会员分享,可在线阅读,更多相关《嵌入式秒表的设计Word下载.docx(14页珍藏版)》请在冰豆网上搜索。
数字钟计数电路的设计可用反馈归零法。
当计数器正常读数时,反馈门不起作用,只有当进位脉冲到来时,反馈信号随即将计数电路清零,实现相应模的循环计数。
以六十进制为例,当计数器从00,01,02,⋯,59计数时,反馈门不起作用,只有当第60个脉冲到来时,反馈信号随即将计数电路清零,实现模为60的循环计数。
通过对设计题目的分析,我将整体电路划分为5个子电路来设计,及分频、按键处理、时间计数、数据选择和显示模块,而且还设置了复位信号,随时可以对电路进行复位。
1)分频模块通过对主频信号50MHZ的分频来得到所需的1000HZ的时钟信号,并将此作为之后子电路的标准时钟,实现同步电路的要求,主要采用的是计数的方法,当寄存器记满50000时产生输出脉冲;
2)按键处理模块通过对SW1按键的判别,并采用双D寄存器的应用,在标准时钟的触发下产生starop脉冲,通过判别starop脉冲是否有高电平使mode信号发生高低电平的翻转,mode为高电平时允许计数,为低电平时停止计数;
3)时间计数模块以10进制计数器为基础,10计数器设置了en_in的接收进位和en_out产生进位,实现了全加器的功能;
然后用10进制的计数器产生了100进制的,再而产生8位10进制的计数器子电路,取其中的低7位完成计数模块子电路的设计;
4)数据选择模块式通过安检处理模块中产生的mode信号和SW2按键对计数器产生的数据进行处理,当mode为高电平的时候将计数器的产生的结果存入lcd_data_in寄存器中;
为低电平时,lcd_data_in内容保持不变;
SW2为高电平时进行清零操作,使得lcd_data_in寄存器中的内容全部清零。
5)显示模块是运用LCD显示器的显示原理,将lcd_data_in寄存器中的数据按4位一组的模式赋值给lcd_data_out8位寄存器的低4位,高四位为4'
b
0011,选择的是数字字库,实现LCD的数据输入,并且产生RS,RW,en,cont这4位控制信号,控制LCD的显示。
三、实验程序
1)顶层文件
modulems_clock(clk_50M,SW1,SW2,SW3,//SW1暂停/继续SW2清零SW3复位lcd_data_out,RS,RW,en,cont
);
inputclk_50M;
//系统时钟
inputSW1,SW2,SW3;
//按键
output[7:
0]lcd_data_out;
outputRS,RW;
outputen,cont;
wireclk_50M;
wireSW1,SW2,SW3;
wireclk_1000;
wire[3:
0]ms_1,ms_2,ms_3,s_1,s_2,s_3,s_4;
wire[27:
0]lcd_data_in;
wire[7:
wiremode;
wirestarop;
//分频模块,把50MHZ的时钟分频为1000HZ用于计数器计数
f_divm1(clk_50M,SW3,clk_1000);
//按键处理模块
anjianm2(clk_1000,SW3,SW1,mode,starop);
//时间计数主模块
time_counterm3(mode,clk_1000,SW3,ms_1,ms_2,ms_3,s_1,s_2,s_3,s_4);
//数据选择模块
kongzhi
m4(clk_1000,SW3,SW2,mode,ms_1,ms_2,ms_3,s_1,s_2,s_3,s_4,
lcd_data_in);
//显示模块
displaym5(clk_1000,SW3,lcd_data_in,lcd_data_out,
RS,RW,en,cont);
endmodule
2)按键处理模块
moduleanjian(clk,rst,SW1,mode,starop);
inputclk,rst,SW1;
outputmode,starop;
reg[1:
0]DQ1;
regmode;
always@(posedgeclkornegedgerst)if(~rst)
DQ1=2'
b00;
else
DQ1<
={DQ1[0],SW1};
assignstarop=~DQ1[0]&
DQ1[1];
always@(posedgeclkornegedgerst)if(~rst)
mode<
=1'
b0;
elseif(starop)mode<
=~mode;
endmodule编译结果:
仿真:
3)分频模块
modulef_div(clk_50M,clr,clk_1000);
inputclr;
outputclk_1000;
regclk_1000;
reg[15:
0]cnt_div;
always@(posedgeclk_50Mornegedgeclr)
begin
if(~clr)
begin//复位信号cnt_div<
=16'
end
elseif(cnt_div==49999)beginclk_1000<
=~clk_1000;
cnt_div<
elsebegincnt_div<
=cnt_div+1'
b1;
endmodule编译结果:
4)数据选择模块
modulekongzhi(clk,rst,clear,mode,ms_1,ms_2,ms_3,s_1,s_2,s_3,s_4,lcd_data_in);
input[3:
inputclear,mode,clk,rst;
output[27:
reg[27:
always@(posedgeclkornegedgerst)
if(~rst)
lcd_data_in[27:
0]<
=28'
elseif(clear)//clear
beginlcd_data_in[27:
end
else//noaction
case(mode)
1'
b1:
//startbeginlcd_data_in[3:
0]<
=ms_1;
lcd_data_in[7:
4]<
=ms_2;
lcd_data_in[11:
8]<
=ms_3;
lcd_data_in[15:
12]<
=s_1;
lcd_data_in[19:
16]<
=s_2;
lcd_data_in[23:
20]<
=s_3;
lcd_data_in[27:
24]<
=s_4;
b0:
//stopbeginlcd_data_in[27:
=lcd_data_in[27:
0];
endcase
5)时间计数模块
moduletime_counter(EN,clk,clr,ms_1,ms_2,ms_3,s_1,s_2,s_3,s_4);
inputEN,clk,clr;
output[3:
0]ms_1,ms_2,ms_3;
0]s_1,s_2,s_3,s_4;
wireen1,en2,en3,en4;
0]s_5;
counter_1U0(EN,clk,clr,ms_1,ms_2,en1);
counter_1U1(en1,clk,clr,ms_3,s_1,en2);
counter_1U2(en2,clk,clr,s_2,s_3,en3);
counter_1U3(en3,clk,clr,s_4,s_5,en4);
endmodule
a.counter_1子电路
modulecounter_1(EN,clk,clr,ms_1,ms_2,EO);
inputclk,clr,EN;
0]ms_2;
0]ms_1;
outputEO;
wireld,en1,en2;
assignld=1'
assignEO=en2;
cont_10u0(clk,clr,ld,EN,ms_1,en1);
cont_10u1(clk,clr,ld,en1,ms_2,en2);
b.cont_10子电路
modulecont_10(clk,rst,ld,en_in,data_out,en_out);
inputclk,rst,ld,en_in;
0]data_out;
outputen_out;
reg[3:
assignen_out=en_in&
data_out[3]&
data_out[0];
always@(posedgeclkornegedgerst)if(~rst)
data_out<
=4'
b0000;
elseif(ld)
elseif(en_in)
if(data_out[3]&
data_out[0])data_out<
=data_out+1'
编译结果:
6)显示模块
moduledisplay(clk,rst,lcd_data_in,lcd_data_out,RS,RW,en,cont);
inputclk,rst;
input[27:
wireen_out;
regRS,RW;
reg[3:
0]count;
reg[7:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 秒表 设计