嵌入式秒表的设计.docx
- 文档编号:526143
- 上传时间:2022-10-10
- 格式:DOCX
- 页数:14
- 大小:65.37KB
嵌入式秒表的设计.docx
《嵌入式秒表的设计.docx》由会员分享,可在线阅读,更多相关《嵌入式秒表的设计.docx(14页珍藏版)》请在冰豆网上搜索。
嵌入式秒表的设计
嵌入式系统及应用》
——秒表设计
专业:
班级:
姓名:
学号:
201*年*月
一、设计要求
1、秒表计时范围0—999.999秒;
2、计时值采用字符型LCD显示;
3、具有计时开始、停止、复位等功能。
4、设计中时钟输入采用验证电路板上的50MHz作为基准;
5、程序设计尽可能考虑模块化、参数化设计思想,并遵循基本的格式规范,添加适当的注释及文档说明;
6、采用模块化设计方式,底层模块必须进行功能仿真;
7、编写设计总结报告。
二、设计原理
数字钟的读数电路是用两个六十进制和一个二十四进制(或十二进制)计
数器实现的。
六十进制计数器应由一个十进制计数器与一个六进制计数器组成,分别对秒(或分)的个位和十位进行计数。
本实验用二十四进制计数器作为“时”位计数器,它的计数序列是00,01,02⋯,23,00,⋯,也就是当计数器计到23时59分59秒时,若再输入一个秒脉冲,计数器就进到00时00分00秒。
数字钟计数电路的设计可用反馈归零法。
当计数器正常读数时,反馈门不起作用,只有当进位脉冲到来时,反馈信号随即将计数电路清零,实现相应模的循环计数。
以六十进制为例,当计数器从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:
0]lcd_data_out;
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;
wirestarop;
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);
inputclk_50M;
inputclr;
outputclk_1000;
regclk_1000;
reg[15:
0]cnt_div;
always@(posedgeclk_50Mornegedgeclr)
begin
if(~clr)
begin//复位信号cnt_div<=16'b0;
end
elseif(cnt_div==49999)beginclk_1000<=~clk_1000;cnt_div<=16'b0;
end
elsebegincnt_div<=cnt_div+1'b1;
end
end
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:
0]ms_1,ms_2,ms_3,s_1,s_2,s_3,s_4;inputclear,mode,clk,rst;
output[27:
0]lcd_data_in;
reg[27:
0]lcd_data_in;
always@(posedgeclkornegedgerst)
begin
if(~rst)
begin
lcd_data_in[27:
0]<=28'b0;
end
elseif(clear)//clear
beginlcd_data_in[27:
0]<=28'b0;end
else//noaction
begin
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;
end
1'b0:
//stopbeginlcd_data_in[27:
0]<=lcd_data_in[27:
0];end
endcase
end
end
endmodule编译结果:
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;
output[3:
0]s_1,s_2,s_3,s_4;
wireen1,en2,en3,en4;
wire[3:
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;
output[3:
0]ms_2;
output[3:
0]ms_1;
outputEO;
wireld,en1,en2;
assignld=1'b0;
assignEO=en2;
cont_10u0(clk,clr,ld,EN,ms_1,en1);
cont_10u1(clk,clr,ld,en1,ms_2,en2);endmodule
b.cont_10子电路
modulecont_10(clk,rst,ld,en_in,data_out,en_out);
inputclk,rst,ld,en_in;
output[3:
0]data_out;
outputen_out;
reg[3:
0]data_out;
assignen_out=en_in&data_out[3]&data_out[0];always@(posedgeclkornegedgerst)if(~rst)
data_out<=4'b0000;
elseif(ld)
data_out<=4'b0000;
elseif(en_in)
begin
if(data_out[3]&data_out[0])data_out<=4'b0000;
else
data_out<=data_out+1'b1;
end
endmodule
编译结果:
仿真:
6)显示模块
moduledisplay(clk,rst,lcd_data_in,lcd_data_out,RS,RW,en,cont);inputclk,rst;
input[27:
0]lcd_data_in;
output[7:
0]lcd_data_out;
outputRS,RW;
outputen,cont;
wireen_out;
regRS,RW;
reg[3:
0]count;
reg[7:
0]lcd_data_out;
reg[3:
0
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 秒表 设计