ImageVerifierCode 换一换
格式:DOCX , 页数:52 ,大小:341.36KB ,
资源ID:23070990      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/23070990.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于LCD1602的简易秒表的设计与实现.docx)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于LCD1602的简易秒表的设计与实现.docx

1、基于LCD1602的简易秒表的设计与实现 数字电路与逻辑设计实 验 报 告学院: 电子工程学院班级: 2014211212姓名: 学号: 班内序号:一、设计课题的任务要求简易秒表的设计与实现设计制作一个计时精度为百分之一秒的计时秒表基本要求:1.用LCD1602液晶屏显示计时;2.秒表计时长度为23小时59分59.99秒;3.用BTN0作为启动/停止开关;4.用BTN1作为复位开关,在任何情况下,只要按下复位开关,秒表都要无条件执行清零操作。提高要求:1.增加定时器功能,可根据用户设定的时间进行倒计时,时间到0后蜂鸣器报警提示;2.自拟其他功能。二、系统设计(设计思路、总体框图、分块设计)1.

2、设计思路:分别设计6进制计数器、10进制计数器和24进制计数器用于秒表计时部分。具体来说:将两个10进制计数器级联分别作为秒表的十分秒位(最小单位为0.1秒)和百分秒位(最小单位为0.01秒);将一个10进制计数器和6进制计数器级联,分别作为秒表秒钟部分的个位(最小单位为1秒)和十位(最小单位为10秒);再将一个10进制计数器和6进制计数器级联,分别作为秒表分钟部分的个位(最小单位为1分钟)和十位(最小单位为10分钟);将24进制计数器作为秒表小时部分,其中低位输出作为秒表小时部分的个位(最小单位为1小时),高位输出作为秒表小时部分的十位(最小单位为10小时)。最后把秒表百分秒、十分秒部分、秒

3、钟部分、分钟部分、小时部分这四部分级联起来便构成了简易数字秒表的计时部分。将各个计数器部分的输出信号通过译码模块,变成LCD1602液晶屏能够读取并从而显示相关字符的8位二进制数据。再定义一个存储器ram,存储各个计数器部分的输出信号经过译码部分之后得到的数据,然后将这个存储器ram代表的数据在LCD1602液晶屏上显示。考虑到秒表的最小计时长度为0.01秒(频率为100HZ),如果系统时钟设置为50MHZ,则需要500000分频;实验时发现LCD1602液晶屏的时钟在1KHZ时,显示效果较好,故需要在系统时钟为50MHZ的基础上进行50000分频。考虑到基本要求中需要用BTN0作为启动/停止

4、开关,用BTN1作为复位开关,所以需要设计相应的按键防抖电路,这里我采用的是计数型防抖。2.总体框图:图1 系统结构框图3.分块设计:系统共通过9个模块实现,分别是:500000分频模块 fpq50000分频模块 fpq16进制计数器模块 cnt610进制计数器模块 cnt1024进制计数器模块 cnt24译码模块 yimaLCD1602显示模块 LCD1602BTN0启动/停止开关消抖模块 xiaodouBTN1复位开关消抖模块 fuweixiaodou具体设计如下:500000分频模块fpq 输入端口:clk : in std_logic; 输出端口:clkout : out std_lo

5、gic; 生成符号: 设计思路:利用计数法实现分频 主要代码:(完整代码请见源程序)signal clktmp : std_logic;signal tmp : integer range 0 to 249999; begin process (clk) begin if clkevent and clk=1 then if tmp=249999 then -500000分频 tmp=0; clktmp=not clktmp; else tmp=tmp+1; end if; end if; end process; clkout=clktmp;50000分频模块fpq1:输入端口:clk :

6、in std_logic; 输出端口:clkout : out std_logic;生成符号:设计思路:利用计数法实现分频 主要代码:(完整代码请见源程序)signal clktmp : std_logic;signal tmp : integer range 0 to 24999; begin process (clk) begin if clkevent and clk=1 then if tmp=24999 then -50000分频 tmp=0; clktmp=not clktmp; else tmp=tmp+1; end if; end if; end process; clkout

7、1-2-3-4-5-0-1; 当计数到5时,进位信号变为1;否则状态自增,进位信号保持在0 主要代码:(完整代码请见源程序) SIGNAL qs :STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL ca :STD_LOGIC;BEGIN PROCESS(clk)begin IF(reset=1)THEN qs=0000; ELSIF(clkEVENT AND clk=1)THEN IF(en=0) THEN IF(qs=0101) THEN -计数到5 qs= 0000; ca=1; ELSE qs=qs+1; ca=0; END IF; END IF; END IF;

8、 END PROCESS; PROCESS(ca,en) BEGIN q=qs; carry1-2-3-4-5-6-7-8-9-0-1 当计数到9时,进位信号变为1;否则状态自增,进位信号保持在0 主要代码:(完整代码请见源程序) SIGNAL qs :STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL ca :STD_LOGIC;BEGIN PROCESS(clk)begin IF(reset=1)THEN qs=0000; ELSIF(clkEVENT AND clk=1)THEN IF(en=0) THEN IF(qs=1001) THEN -计数到9 qs= 00

9、00; ca=1; ELSE qs=qs+1; ca=0; END IF; END IF; END IF; END PROCESS; PROCESS(ca) BEGIN q=qs; carry1-2-3-4-5-6-7-8-9-0-1 高位qb状态变化:0-1-2-0-1 当低位qa计数到9时,qb自增,进位信号保持在0 当低位qa为3且高位qb为2时,进位信号变为1, 同时qa变为0、qb变为0主要代码:(完整代码请见源程序) SIGNAL ca :STD_LOGIC;BEGINprocess(clk,Reset,en)variable tma: STD_LOGIC_VECTOR(3 DOW

10、NTO 0);variable tmb: STD_LOGIC_VECTOR(3 DOWNTO 0);beginIf Reset = 1 then tma:=0000; tmb:=0000; else if clkevent and clk=1 then IF(en=0) THEN-当BTN0键没有第一次按下时,正常计数 if tma=1001 then tma:=0000;tmb:=tmb+1; elsif tmb=0010 and tma=0011 then -计数到23 tma:=0000;tmb:=0000; ca=1; else tma:=tma+1; end if; end if;

11、end if; end if; qa=tma;qb=tmb;carry=ca; end process;译码模块yima: 输入端口:carry: in STD_LOGIC;data: in std_logic_vector(3 downto 0); 输出端口: dataout: out std_logic_vector(7 downto 0); 生成符号: 设计思路: 根据输入信号的不同,使用case语句进行不同的译码操作即可。具体来说: 0(四位二进制)译为30(八位二进制)1(四位二进制)译为31(八位二进制)2(四位二进制)译为32(八位二进制)3(四位二进制)译为33(八位二进制)4

12、(四位二进制)译为34(八位二进制)5(四位二进制)译为35(八位二进制)6(四位二进制)译为36(八位二进制)7(四位二进制)译为37(八位二进制)8(四位二进制)译为38(八位二进制)9(四位二进制)译为39(八位二进制)其他译为20(八位二进制)主要代码:(完整代码请见源程序) signal dis:std_logic_vector(7 downto 0);begin process(data) begin if(carry=1) then disdisdisdisdisdisdisdisdisdisdisdis=00100000;-其他译为20 end case; end if; en

13、d process;dataout=dis;LCD1602显示模块LCD1602: 输入端口:YIMA_DATA1: in std_logic_vector(7 downto 0); -译码数据信号1 YIMA_DATA2: in std_logic_vector(7 downto 0); -译码数据信号2 YIMA_DATA3: in std_logic_vector(7 downto 0); -译码数据信号3 YIMA_DATA4: in std_logic_vector(7 downto 0); -译码数据信号4 YIMA_DATA5: in std_logic_vector(7 dow

14、nto 0); -译码数据信号5 YIMA_DATA6: in std_logic_vector(7 downto 0); -译码数据信号6 YIMA_DATA7: in std_logic_vector(7 downto 0); -译码数据信号7 YIMA_DATA8: in std_logic_vector(7 downto 0); -译码数据信号8LCD_Clk : in std_logic; -状态机时钟信号,同时也是液晶时钟信号,其周期应该满足液晶数据的建立时间 carry : in STD_LOGIC; 输出端口: LCD_RS : out std_logic; -寄存器选择信号

15、LCD_RW : out std_logic; -液晶读写信号 LCD_EN : out std_logic; -液晶时钟信号 LCD_Data : out std_logic_vector(7 downto 0); -液晶数据信号 生成符号: 设计思路:将各个计数器部分的输出信号通过译码模块,变成LCD1602液晶屏能够读取并从而显示相关字符的8位二进制数据。再定义一个存储器ram,存储各个计数器部分的输出信号经过译码部分之后得到的数据,然后将这个存储器ram代表的数据在LCD1602液晶屏上显示。 主要代码: (完整代码请见源程序)type ram is array(0 to 10) of

16、 std_logic_vector(7 downto 0);signal ram1:ram;begin LCD_EN = LCD_Clk ; -液晶时钟信号 LCD_RW = 0 ; -液晶读写信号 ram1(0)=YIMA_DATA8;-译码数据信号8,秒表小时部分十位 ram1(1)=YIMA_DATA7;-译码数据信号7,秒表小时部分个位 ram1(2)=x3a; -显示冒号: ram1(3)=YIMA_DATA6;-译码数据信号6,秒表分钟部分十位 ram1(4)=YIMA_DATA5;-译码数据信号5,秒表分钟部分个位 ram1(5)=x3a; -显示冒号: ram1(6)=YIMA

17、_DATA4;-译码数据信号4,秒表秒钟部分十位 ram1(7)=YIMA_DATA3;-译码数据信号3,秒表秒钟部分个位 ram1(8)=x2e; -显示小数点. ram1(9)=YIMA_DATA2;-译码数据信号2,秒表十分秒位 ram1(10)LCD_RS=0;lcd_dataLCD_RS=0;lcd_dataLCD_RS=0;lcd_dataLCD_RS=0;lcd_dataLCD_RS=0;lcd_dataLCD_RS=1;lcd_dataLCD_RS=1;lcd_dataLCD_RS=1;lcd_dataLCD_RS=1;lcd_dataLCD_RS=1;lcd_dataLCD_

18、RS=1;lcd_dataLCD_RS=1;lcd_dataLCD_RS=1;lcd_dataLCD_RS=1;lcd_dataLCD_RS=1;lcd_dataLCD_RS=1;lcd_dataLCD_RS=1;lcd_dataLCD_RS=1;lcd_dataLCD_RS=1;lcd_dataLCD_RS=1;lcd_dataLCD_RS=1;lcd_dataLCD_RS=0;lcd_dataLCD_RS=1;lcd_dataLCD_RS=1;lcd_dataLCD_RS=1;lcd_dataLCD_RS=1;lcd_dataLCD_RS=1;lcd_dataLCD_RS=1;lcd_da

19、taLCD_RS=1;lcd_dataLCD_RS=1;lcd_dataLCD_RS=1;lcd_dataLCD_RS=1;lcd_dataLCD_RS=1;lcd_dataLCD_RS=1;lcd_dataLCD_RS=1;lcd_dataLCD_RS=1;lcd_dataLCD_RS=1;lcd_dataLCD_RS=1;lcd_data=10100000;-空格 end case; end process;BTN0启动/停止开关消抖模块xiaodou: 输入端口:clk :in std_logic; key_en:in std_logic; 输出端口: en_out:out std_lo

20、gic; 生成符号: 设计思路:采用计数型防抖当key_en第一次为1时,en_out延迟一段时间后变为1, 并且en_out就此保持在高电平1; 直到key_en第二次为1时,en_out延迟一段时间后变为0。 主要代码:(完整代码请见源程序) signal cnt:integer range 0 to 3; -采用计数型防抖 signal en,en_tmp:std_logic; begin p0:process(clk) begin if clkevent and clk =1 then if key_en =1 then if cnt = 3 then en=1; else cnt=cnt+1;en=0; end if; else cnt=0;en=0; end if; end if; end process p0; p1:process(en) begin if enevent and en=1 then en_tmp=not en_tmp; end if; en_out=en_tmp; end process p1;BTN1复位开关消抖模块fuweixiaodou: 输入端口:clk : in std_

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

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