




已阅读5页,还剩32页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数字电路与逻辑设计实 验 报 告学院: 电子工程学院班级: 2014211212姓名: 学号: 班内序号:第 37 页 共 37 页一、 设计课题的任务要求简易秒表的设计与实现设计制作一个计时精度为百分之一秒的计时秒表基本要求:1. 用LCD1602液晶屏显示计时;2. 秒表计时长度为23小时59分59.99秒;3. 用BTN0作为启动/停止开关;4. 用BTN1作为复位开关,在任何情况下,只要按下复位开关,秒表都要无条件执行清零操作。提高要求:1.增加定时器功能,可根据用户设定的时间进行倒计时,时间到0后蜂鸣器报警提示;2.自拟其他功能。二、 系统设计(设计思路、总体框图、分块设计)1. 设计思路:分别设计6进制计数器、10进制计数器和24进制计数器用于秒表计时部分。具体来说:将两个10进制计数器级联分别作为秒表的十分秒位(最小单位为0.1秒)和百分秒位(最小单位为0.01秒);将一个10进制计数器和6进制计数器级联,分别作为秒表秒钟部分的个位(最小单位为1秒)和十位(最小单位为10秒);再将一个10进制计数器和6进制计数器级联,分别作为秒表分钟部分的个位(最小单位为1分钟)和十位(最小单位为10分钟);将24进制计数器作为秒表小时部分,其中低位输出作为秒表小时部分的个位(最小单位为1小时),高位输出作为秒表小时部分的十位(最小单位为10小时)。最后把秒表百分秒、十分秒部分、秒钟部分、分钟部分、小时部分这四部分级联起来便构成了简易数字秒表的计时部分。将各个计数器部分的输出信号通过译码模块,变成LCD1602液晶屏能够读取并从而显示相关字符的8位二进制数据。再定义一个存储器ram,存储各个计数器部分的输出信号经过译码部分之后得到的数据,然后将这个存储器ram代表的数据在LCD1602液晶屏上显示。考虑到秒表的最小计时长度为0.01秒(频率为100HZ),如果系统时钟设置为50MHZ,则需要500000分频;实验时发现LCD1602液晶屏的时钟在1KHZ时,显示效果较好,故需要在系统时钟为50MHZ的基础上进行50000分频。考虑到基本要求中需要用BTN0作为启动/停止开关,用BTN1作为复位开关,所以需要设计相应的按键防抖电路,这里我采用的是计数型防抖。2. 总体框图:图1 系统结构框图3. 分块设计:系统共通过9个模块实现,分别是:500000分频模块 fpq50000分频模块 fpq16进制计数器模块 cnt610进制计数器模块 cnt1024进制计数器模块 cnt24译码模块 yimaLCD1602显示模块 LCD1602BTN0启动/停止开关消抖模块 xiaodouBTN1复位开关消抖模块 fuweixiaodou具体设计如下:500000分频模块fpq 输入端口:clk : in std_logic; 输出端口:clkout : out std_logic; 生成符号: 设计思路:利用计数法实现分频 主要代码:(完整代码请见源程序)signal clktmp : std_logic;signal tmp : integer range 0 to 249999; begin process (clk) beginif clkevent and clk=1 thenif tmp=249999 then -500000分频tmp=0; clktmp=not clktmp;else tmp=tmp+1;end if;end if; end process; clkout=clktmp;50000分频模块fpq1:输入端口:clk : in std_logic; 输出端口:clkout : out std_logic;生成符号:设计思路:利用计数法实现分频 主要代码:(完整代码请见源程序)signal clktmp : std_logic;signal tmp : integer range 0 to 24999; begin process (clk) beginif clkevent and clk=1 thenif tmp=24999 then -50000分频tmp=0; clktmp=not clktmp;else tmp=tmp+1;end if;end if; end process; clkout1-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; 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= 0000; 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 DOWNTO 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; 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(四位二进制)译为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; end 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 downto 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; -寄存器选择信号 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 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_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_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_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_data=10100000;-空格 end case;end process;BTN0启动/停止开关消抖模块xiaodou: 输入端口:clk :in std_logic; key_en:in std_logic; 输出端口: en_out:out std_logic; 生成符号: 设计思路:采用计数型防抖当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;beginp0:process(clk)beginif clkevent and clk =1 thenif key_en =1 thenif 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)beginif enevent and en=1 thenen_tmp=not en_tmp;end if;en_out=en_tmp;end process p1;BTN1复位开关消抖模块fuweixiaodou: 输入端口:clk : in std_logic; fuwei: in std_logic; 输出端口:fuwei_out: out std_logic; 生成符号: 设计思路:采用计数型防抖当fuwei为1时,fuwei_out延迟一段时间后变为1, 然后fuwei_out又重新回到低电平0。主要代码:(完整代码请见源程序)signal cnt:integer range 0 to 3; -采用计数型防抖 signal en:std_logic; beginprocess(clk) begin if clkevent and clk =1 then if fuwei =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; fuwei_out1-2-3-4-5-0-1; 当reset信号为1时(此时按下了复位开关BTN1),执行清零操作,状态变为0; 当en信号为1时(此时第一次按下了启动/停止开关BTN0), 状态保持不变,停止计数;当en信号为0时(此时第二次按下了启动/停止开关BTN0), 又继续计数。 10进制计数器模块cnt10:输入端口:reset,en,clk:IN STD_LOGIC; 输出端口:carry :OUT STD_LOGIC; q :OUT STD_LOGIC_VECTOR(3 DOWNTO 0); 仿真波形: 波形分析:正常计数状态变化(16进制表示)是:0-1-2-3-4-5-6-7-8-9-0-1; 当reset信号为1时(此时按下了复位开关BTN1),执行清零操作,状态变为0; 当en信号为1时(此时第一次按下了启动/停止开关BTN0), 状态保持不变,停止计数;当en信号为0时(此时第二次按下了启动/停止开关BTN0), 又继续计数。24进制计数器模块cnt24: 输入端口en,Reset,clk: in STD_LOGIC; 输出端口 carry: out STD_LOGIC;qa: out STD_LOGIC_VECTOR(3 DOWNTO 0); qb: out STD_LOGIC_VECTOR(3 DOWNTO 0); 仿真波形: 波形分析:qa状态变化(16进制表示)是:0-1-2-3-4-5-6-7-8-9-0-1;qb状态变化(16进制表示)是:0-1-2-0-1;且当qa为9(16进制表示)时,qb的状态发生改变。 当reset信号为1时(此时按下了复位开关BTN1),执行清零操作,状态变为0; 当en信号为1时(此时第一次按下了启动/停止开关BTN0), 状态保持不变,停止计数;当en信号为0时(此时第二次按下了启动/停止开关BTN0), 又继续计数。译码模块yima: 输入端口: carry: in STD_LOGIC;data: in std_logic_vector(3 downto 0); 输出端口: dataout: out std_logic_vector(7 downto 0); 仿真波形: 波形分析: 当carry信号为1时,dataout输出为FF(二进制表示为11111111); 当carry信号为0时,正常译码:data为0(二进制表示为0000)时,dataout输出为30(二进制表示为00110000);data为1(二进制表示为0001)时,dataout输出为31(二进制表示为00110001);data为2(二进制表示为0010)时,dataout输出为32(二进制表示为00110010);data为3(二进制表示为0011)时,dataout输出为33(二进制表示为00110011);data为4(二进制表示为0100)时,dataout输出为34(二进制表示为00110100);data为5(二进制表示为0101)时,dataout输出为35(二进制表示为00110101);data为6(二进制表示为0110)时,dataout输出为36(二进制表示为00110110);data为7(二进制表示为0111)时,dataout输出为37(二进制表示为00110111);data为8(二进制表示为1000)时,dataout输出为38(二进制表示为00111000);data为9(二进制表示为1001)时,dataout输出为39(二进制表示为00111001);data为其他数据时,dataout输出为20(二进制表示为00100000); LCD1602显示模块LCD1602:输入端口:LCD_Clk: in std_logic; -状态机时钟信号,同时也是液晶时钟信号,其周期应该满足液晶数据的建立时间 carry: in STD_LOGIC;-前级计数部分输出的进位信号 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 downto 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); -译码数据信号8 输出端口: LCD_RS: out std_logic; -寄存器选择信号 LCD_RW: out std_logic; -液晶读写信号 LCD_EN: out std_logic; -液晶时钟信号 LCD_Data: out std_logic_vector(7 downto 0); -液晶数据信号 仿真波形:接下图接下图 波形分析: 仿真时假设YIMA_DATA1= 00110001;-代表数字1YIMA_DATA2= 00110001;-代表数字1YIMA_DATA3= 00110001;-代表数字1YIMA_DATA4= 00110001;-代表数字1YIMA_DATA5= 00110001;-代表数字1YIMA_DATA6= 00110001;-代表数字1YIMA_DATA7= 00110001;-代表数字1YIMA_DATA8= 00110001;-代表数字1 则对于输出信号LCD_Data:在初始化部分(LCD_RS=0)依次为38、0C、01、06、80;在开始显示时(LCD_RS=1)依次为A0、A0、A0 显示空格31、31 -显示数字113a -显示冒号:31、31 -显示数字113a -显示冒号:31、31 -显示数字112e -显示小数点.31、31 -显示数字11A0、A0 显示空格 - C0 (此时LCD_RS=0) -在LCD1602液晶屏第二行显示A0、A0、A0、A0、A0 -显示空格A0、A0、A0、A0、A0、A0 -显示空格A0、A0、A0、A0 -显示空格BTN0启动/停止开关消抖模块xiaodou:输入端口: clk: in std_logic; key_en: in std_logic; 输出端口: en_out: out std_logic;仿真波形:接下图 波形分析: 当key_en第一次为1时,en_out延迟一段时间后变为1, 并且en_out就此保持在高电平1; 直到key_en第二次为1时,en_out延迟一段时间后变为0。 以后的状态与此类似。 BTN1复位开关消抖模块fuweixiaodou:输入端口:clk : in std_logic; fuwei: in std_logic; 输出端口:fuwei_out: out std_logic;仿真波形: 波形分析:当fuwei为1时,fuwei_out延迟一段时间后变为1, 然后fuwei_out又重新回到低电平0。 四、 源程序(完整代码、含注释)顶层文件LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY clock ISPORT( reset1: IN STD_LOGIC; -
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 美美少年计划面试题及答案
- 肺炎治疗与康复
- 幼儿园运动会方案培训
- 2025年中国女式牛仔裤行业市场全景分析及前景机遇研判报告
- 4S店执行力培训
- 低血钾症状外科护理学
- 教育培训班教师工作总结
- CNAS认证实施流程
- 财务会计人员劳动合同续签与终止范本
- 电信礼仪培训
- 公司物流内部管理制度
- 公司资料部门管理制度
- 2025年数学中考专题复习课件:7.30 尺规作图
- 人教部编版五年级下册语文期末复习现代文阅读(含课内、课外)专项训练(三)(含答案)
- 育苗基地可行性研究报告
- 植物拓染教学课件
- 访谈保密协议书范本
- 医务人员职业暴露预防及处理课件
- 2025-2030年中国地效飞行器行业市场运行态势及发展前景研判报告
- 房地产市场报告 -2025年第一季度天津写字楼和零售物业市场概况报告
- 2025年全国中小学生安全知识网络竞赛试题及答案(共150题)
评论
0/150
提交评论