版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、嵌入式系统及应用 秒表设计专 业: 班 级: 姓 名: 学 号: 201*年*月一、设计要求1、 秒表计时范围0999.999秒;2、 计时值采用字符型LCD显示;3、 具有计时开始、停止、复位等功能。4、 设计中时钟输入采用验证电路板上的50MHz作为基准;5、 程序设计尽可能考虑模块化、参数化设计思想,并遵循基本的格式规范,添加适当的注释及文档说明;6、 采用模块化设计方式,底层模块必须进行功能仿真;7、 编写设计总结报告。二、设计原理数字钟的读数电路是用两个六十进制和一个二十四进制(或十二进制)计数器实现的。六十进制计数器应由一个十进制计数器与一个六进制计数器组成,分别对秒(或分)的个位
2、和十位进行计数。本实验用二十四进制计数器作为“时”位计数器,它的计数序列是00,01,02,23,00,也就是当计数器计到23时59分59秒时,若再输入一个秒脉冲,计数器就进到00时00分00秒。数字钟计数电路的设计可用反馈归零法。当计数器正常读数时,反馈门不起作用,只有当进位脉冲到来时,反馈信号随即将计数电路清零,实现相应模的循环计数。以六十进制为例,当计数器从00,01,02,,59计数时,反馈门不起作用,只有当第60个脉冲到来时,反馈信号随即将计数电路清零,实现模为60的循环计数。通过对设计题目的分析,我将整体电路划分为5个子电路来设计,及分频、按键处理、时间计数、数据选择和显示模块,而
3、且还设置了复位信号,随时可以对电路进行复位。1)分频模块通过对主频信号50MHZ的分频来得到所需的1000HZ的时钟信号,并将此作为之后子电路的标准时钟,实现同步电路的要求,主要采用的是计数的方法,当寄存器记满50000时产生输出脉冲;2)按键处理模块通过对SW1按键的判别,并采用双D寄存器的应用,在标准时钟的触发下产生starop脉冲,通过判别starop脉冲是否有高电平使mode信号发生高低电平的翻转,mode为高电平时允许计数,为低电平时停止计数;3)时间计数模块以10进制计数器为基础,10计数器设置了en_in的接收进位和en_out产生进位,实现了全加器的功能;然后用10进制的计数器
4、产生了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_out 8位寄存器的低4位,高四位为4b 0011,选择的是数字字库,实现LCD的
5、数据输入,并且产生RS,RW,en,cont这4位控制信号,控制LCD的显示。三、实验程序1)顶层文件module ms_clock(clk_50M,SW1,SW2,SW3, /SW1暂停/继续 SW2清零 SW3复位 lcd_data_out,RS,RW,en,cont ); input clk_50M;/系统时钟 input SW1,SW2,SW3; /按键output7:0 lcd_data_out; output RS,RW; output en,cont; wire clk_50M; wire SW1,SW2,SW3; wire clk_1000; wire 3:0 ms_1,ms_
6、2,ms_3,s_1,s_2,s_3,s_4; wire 27:0 lcd_data_in;wire 7:0 lcd_data_out; wire mode; wire starop;/分频模块,把50MHZ的时钟分频为1000HZ用于计数器计数 f_div m1(clk_50M,SW3,clk_1000);/按键处理模块 anjian m2(clk_1000,SW3,SW1,mode,starop);/时间计数主模块 time_counter m3(mode,clk_1000,SW3, ms_1,ms_2,ms_3,s_1,s_2,s_3,s_4);/数据选择模块 kongzhi m4(cl
7、k_1000,SW3,SW2,mode,ms_1,ms_2,ms_3,s_1,s_2,s_3,s_4, lcd_data_in);/显示模块 display m5(clk_1000,SW3,lcd_data_in,lcd_data_out, RS,RW,en,cont);endmodule 2)按键处理模块module anjian(clk,rst,SW1,mode,starop); input clk,rst,SW1; output mode,starop; wire starop; reg 1:0 DQ1; reg mode; always (posedge clk or negedge
8、rst) if (rst) DQ1=2'b00; else DQ1<=DQ10,SW1; assign starop=DQ10&DQ11; always (posedge clk or negedge rst) if (rst) mode <= 1'b0; else if(starop) mode <= mode; endmodule编译结果:仿真: 3)分频模块module f_div(clk_50M,clr,clk_1000); input clk_50M; input clr; output clk_1000; reg clk_1000; reg
9、 15:0 cnt_div; always (posedge clk_50M or negedge clr) begin if(clr) begin /复位信号 cnt_div <= 16'b0; end else if(cnt_div = 49999) begin clk_1000 <= clk_1000; cnt_div <= 16'b0; end else begin cnt_div <= cnt_div+1'b1; end end endmodule编译结果:仿真:4)数据选择模块module kongzhi(clk,rst,clear,
10、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; input clear,mode,clk,rst; output 27:0 lcd_data_in; reg 27:0 lcd_data_in; always (posedge clk or negedge rst) begin if(rst) begin lcd_data_in 27:0 <=28'b0; end else if (clear) /clear begin lcd_data_in
11、27:0 <=28'b0; end else /no action begin case(mode) 1'b1: /start begin lcd_data_in3:0<= ms_1; lcd_data_in7:4<= ms_2; lcd_data_in11:8<= ms_3; lcd_data_in15:12<= s_1; lcd_data_in19:16<= s_2; lcd_data_in23:20<= s_3; lcd_data_in27:24<= s_4; end 1'b0: /stop begin lcd_da
12、ta_in27:0<=lcd_data_in27:0; end endcase end end endmodule编译结果:仿真:5)时间计数模块module time_counter(EN,clk,clr,ms_1,ms_2,ms_3,s_1,s_2,s_3,s_4); input EN,clk,clr; output 3:0ms_1,ms_2,ms_3; output 3:0s_1,s_2,s_3,s_4; wire en1,en2,en3,en4; wire 3:0s_5; counter_1 U0(EN,clk,clr,ms_1,ms_2,en1); counter_1 U1(e
13、n1,clk,clr,ms_3,s_1,en2); counter_1 U2(en2,clk,clr,s_2,s_3,en3); counter_1 U3(en3,clk,clr,s_4,s_5,en4);endmodule a. counter_1子电路module counter_1(EN,clk,clr,ms_1,ms_2,EO);input clk,clr,EN;output 3:0 ms_2;output 3:0 ms_1;output EO; wire ld,en1,en2; assign ld=1'b0; assign EO=en2; cont_10 u0(clk,clr
14、,ld,EN,ms_1,en1); cont_10 u1(clk,clr,ld,en1,ms_2,en2);endmoduleb. cont_10子电路module cont_10(clk,rst,ld,en_in,data_out,en_out);input clk,rst,ld,en_in;output 3:0data_out;output en_out;reg 3:0data_out;assign en_out=en_in & data_out3 & data_out0;always(posedge clk or negedge rst)if(rst) data_out&
15、lt;=4'b0000;else if(ld) data_out<=4'b0000;else if(en_in) begin if(data_out3 & data_out0) data_out<=4'b0000; else data_out<=data_out+1'b1; endendmodule编译结果:仿真:6)显示模块module display(clk,rst,lcd_data_in,lcd_data_out,RS,RW,en,cont); input clk,rst; input 27:0 lcd_data_in; outp
16、ut7:0 lcd_data_out; output RS,RW; output en,cont; wire en_out; reg RS,RW; reg3:0 count; reg7:0 lcd_data_out; reg3:0 state; wire clk_out,clk_en,cont; reg en_tmp; parameter Warmup = 4'b0000, Funcset = 4'b0001, Dspoff = 4'b0011, Clsdsp = 4'b0010, Modeset = 4'b0110, Dspon = 4'b01
17、11, Setaddr1 = 4'b0101, Indata1 = 4'b0100, Setaddr2 = 4'b1101, Indata2 = 4'b1100, Idle = 4'b1000; clkdiv U1(clk,clk_out); assigncont = 1'b0; always (posedge clk or negedge rst) if(!rst) en_tmp<=0; else en_tmp<=clk_out; assign en= clk_out &en_tmp; assign clk_en = en_
18、tmp & clk_out; always(posedge clk or negedge rst) begin if(!rst) begin count<=0; state<=Warmup; end else begincase(state) Warmup: begin if(clk_en) begin if(count=4'b0111)beginstate<=Funcset;count<=0;endelsebeginstate<=Warmup;count<=count+4'b0001;end end endFuncset: begi
19、n if(clk_en) begin if(count=4'b1111)beginstate<=Dspoff;count<=0;endelsebeginstate<=Funcset;count<=count+4'b0001;endend endDspoff: state<=Clsdsp;Clsdsp: begin if(clk_en) beginif(count=4'b0101)beginstate<=Modeset;count<=0;endelsebeginstate<=Clsdsp;count<=count+4&
20、#39;b0001;end end end Modeset: begin if(clk_en) state<=Dspon; endDspon: begin if(clk_en) beginif(count=4'b0100)beginstate<=Setaddr1;count<=0;endelsebeginstate<=Dspon;count<=count+4'b0001;endend endSetaddr1: begin if(clk_en) state<=Indata1; endIndata1: begin if(clk_en) begin
21、if(count=4'b1101)beginstate<=Setaddr2;count<=0;endelsebeginstate<=Indata1;count<=count+4'b0001;endend endSetaddr2: begin if(clk_en) state<=Indata2; endIndata2: begin if(clk_en) beginif(count=4'b1001)beginstate<=Setaddr1;count<=0;endelsebeginstate<=Indata2;count<
22、;=count+4'b0001;endend end default:state<=Warmup; endcase endendalways (state or count or lcd_data_in)begincase(state)Warmup: beginRS<=0;RW<=0;lcd_data_out<=8'b00000000;endFuncset:lcd_data_out<=8'b00111000;Dspoff: lcd_data_out<=8'b00001000;Clsdsp: lcd_data_out<=8
23、'b00000001;Modeset:lcd_data_out<=8'b00000110;Dspon: lcd_data_out<=8'b00001100;Setaddr1:beginRS<=0;RW<=0;lcd_data_out<=8'b10000000;endIndata1:beginRS<=1;RW<=0;case(count)4'b0000:lcd_data_out<=4'b0011,lcd_data_in27:24;4'b0001:lcd_data_out<=4'b
24、0011,lcd_data_in23:20;4'b0010:lcd_data_out<=4'b0011,lcd_data_in19:16;4'b0011:lcd_data_out<=4'b0011,lcd_data_in15:12; 4'b0100:lcd_data_out<=8'b00101110;4'b0101:lcd_data_out<=4'b0011,lcd_data_in11:8;4'b0110:lcd_data_out<=4'b0011,lcd_data_in7:4;4
25、39;b0111:lcd_data_out<=4'b0011,lcd_data_in3:0; 4'b1000:lcd_data_out<=8'b00100000;4'b1001:lcd_data_out<=8'b00100000;4'b1010:lcd_data_out<=8'b00100000;4'b1011:lcd_data_out<=8'b00100000; 4'b1100:lcd_data_out<=8'b00100000;default:lcd_data_out
26、<=8'b00100000;endcaseendSetaddr2:beginRS<=0;RW<=0;lcd_data_out<=8'b11000000;endIndata2:beginRS<=1;RW<=0;case(count)4'b0000:lcd_data_out<=8'b00100000;4'b0001:lcd_data_out<=8'b00100000;4'b0010:lcd_data_out<=8'b00100000;4'b0011:lcd_data_out<=8'b
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 总经理助理转正工作总结8篇
- 数学教学工作总结(汇编15篇)
- 小学生读书演讲稿4篇
- 2017年寒假综合实践作业总结
- 将精神抚慰金列入刑事附带民事诉讼
- 做幸福教师演讲稿(4篇)
- 2025年文旅小镇合作协议书
- 停车场地出租合同(2篇)
- 2025年CBZ-5-苯基-L-半胱氨酸项目发展计划
- 个人车辆出租合同
- GB/T 397-2009炼焦用煤技术条件
- GB/T 13384-2008机电产品包装通用技术条件
- 《中考体育项目跳绳》教案
- 增服叶酸预防神经管缺陷理论知识考核试题及答案
- 新业娱乐安全评价报告
- 医保工作自查表
- 小学-英语-湘少版-01-Unit1-What-does-she-look-like课件
- 单证管理岗工作总结与计划
- 安全安全隐患整改通知单及回复
- 国有检验检测机构员工激励模式探索
- 采购部年终总结计划PPT模板
评论
0/150
提交评论