嵌入式秒表的设计Word下载.docx

上传人:b****0 文档编号:13453479 上传时间:2022-10-10 格式:DOCX 页数:14 大小:65.37KB
下载 相关 举报
嵌入式秒表的设计Word下载.docx_第1页
第1页 / 共14页
嵌入式秒表的设计Word下载.docx_第2页
第2页 / 共14页
嵌入式秒表的设计Word下载.docx_第3页
第3页 / 共14页
嵌入式秒表的设计Word下载.docx_第4页
第4页 / 共14页
嵌入式秒表的设计Word下载.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

嵌入式秒表的设计Word下载.docx

《嵌入式秒表的设计Word下载.docx》由会员分享,可在线阅读,更多相关《嵌入式秒表的设计Word下载.docx(14页珍藏版)》请在冰豆网上搜索。

嵌入式秒表的设计Word下载.docx

数字钟计数电路的设计可用反馈归零法。

当计数器正常读数时,反馈门不起作用,只有当进位脉冲到来时,反馈信号随即将计数电路清零,实现相应模的循环计数。

以六十进制为例,当计数器从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:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 畜牧兽医

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1