数字电路与逻辑设计实验报告—自动视力测试仪

上传人:liy****000 文档编号:115685376 上传时间:2019-11-14 格式:DOCX 页数:41 大小:1.21MB
返回 下载 相关 举报
数字电路与逻辑设计实验报告—自动视力测试仪_第1页
第1页 / 共41页
数字电路与逻辑设计实验报告—自动视力测试仪_第2页
第2页 / 共41页
数字电路与逻辑设计实验报告—自动视力测试仪_第3页
第3页 / 共41页
数字电路与逻辑设计实验报告—自动视力测试仪_第4页
第4页 / 共41页
数字电路与逻辑设计实验报告—自动视力测试仪_第5页
第5页 / 共41页
点击查看更多>>
资源描述

《数字电路与逻辑设计实验报告—自动视力测试仪》由会员分享,可在线阅读,更多相关《数字电路与逻辑设计实验报告—自动视力测试仪(41页珍藏版)》请在金锄头文库上搜索。

1、数字电路与逻辑设计实验报告题目:自动视力测试仪学院:信息与通信工程姓名: 班级:学号:班内序号:2017/11/9目录一、设计课题的任务要求3二、系统设计41、设计思路42、总体框图41、顶层框图42、对外接口43、逻辑划分框图54、状态图55、控制器逻辑流程图63、分块设计71、分频器72、扫描部分73、数码管部分74、防抖部分75、状态机部分86、倒计时部分87、点阵与数码管显示部分8三、仿真波形及分析81、数码管显示82、测试界面93、测试完成界面9四、源代码10五、功能说明40六、资源利用情况40七、故障及问题分析401.时钟问题402.结构问题403.状态机问题41八、总结和结论41

2、一、设计课题的任务要求本题目设计实现一个自动的视力测试模拟装置,能够使体检者单人完成整个视力检测过程,达到节省人力、减少人为因素对检测结果干扰等目的。1. 88 点阵显示的 0.1、0.2、0.4、0.6、0.8、1.0、1.2、1.5视标如下图示意所示,视标的上、下、左、右四个开口方向随机生成2. 设置启动键。开始工作后,88 点阵首先显示5秒倒计时界面,计时结束后显示视力为0.8的视标,同时数码管显示与视标对应的视力;3. 在44矩阵键盘上设置4个按键,分别对应视标“上”、“下”、“左”、“右”四个开口方向。选择方向键后,按“确定”键,若方向键选择正确,则进入高一级视标的显示,否则进入低一

3、级视标的显示。数码管实时显示与视标对应的视力;4. 测试的最高视力为 1.5,最低视力为 0.1。如果 0.1 视标的方向选择错误,点阵显示“X”图案,并记视力为 0.1-;5. 测试结束后数码管显示最终的视力测试结果,同时点阵根据视力的高低显示不同的表情图案;6. 重新启动后开始下一轮测试。二、系统设计1、设计思路程序采用分部设计思路,将整个工程分为几个不同的部分分别设计,最后综合到一起。工程主要分为分频器部分、点阵与4x4键盘扫描部分、数码管部分、防抖部分、状态机部分、倒计时部分、点阵与数码管显示部分这7个部分。2、总体框图1、顶层框图 数码管显示 点阵显示自动视力测试仪控制器 启动开关

4、方向按键自动视力测试仪控制器 out_cat out_colr out_row out_kbcol out display2、对外接口clkstartkbrow0,kbrow2,kbrow33、逻辑划分框图数码管 数码管选择 点阵cat timeh, timem, timel 数码管显示displayrows lighth, lightm, lightl colr0-7 ct2 自动视力测试仪控制器5s倒计时控制 start clk1k(点阵扫描) start clk500(4x4键盘扫描)clk1hz 时钟 防抖 分频器 方向按键 clk50k clk5秒倒计时1.01.21.50.80.6

5、0.40.20.10.6结束0.4结束0.2结束0.1结束0.1-结束0.8结束1.0结束1.2结束1.5结束关机开机4、状态图YN最终结果0.8显示表情最终结果0.6显示表情最终结果0.4显示表情最终结果1.0显示表情最终结果0.2显示表情最终结果0.1- 显示表情YYYNNNNNNYYYY最终结果0.1显示表情开始:5秒倒计时显示0.8视标按键是否正确?显示1.0视标按键是否正确?显示1.2视标按键是否正确?显示1.5视标按键是否正确?最终结果1.5,显示表情按键是否正确?显示0.6视标按键是否正确?显示0.4视标按键是否正确?显示0.2视标按键是否正确?显示0.1视标最终结果1.2显示表

6、情N5、控制器逻辑流程图3、分块设计1、分频器clk:IN STD_LOGIC;SIGNAL clk1hz:STD_LOGIC; -1hzSIGNAL clk50k:STD_LOGIC; -50000hzSIGNAL clk500:STD_LOGIC; -500hz SIGNAL clk1k:STD_LOGIC; -1khz输入时钟为50MHz,通过分频输出1hz用于计数,50khz用于防抖设计,500hz用于键盘扫描,1khz用于点阵及数码管扫描。2、扫描部分SIGNAL clk500:STD_LOGIC; -500hzSIGNAL clk1k:STD_LOGIC;-1khzSIGNAL r

7、ows:STD_LOGIC_VECTOR(7 DOWNTO 0);-行控制信号SIGNAL colr7,colr6,colr5,colr4,colr3,colr2,colr1,colr0:STD_LOGIC_VECTOR(0 TO 7);-列控制信号colr:OUT STD_LOGIC_VECTOR(0 TO 7);SIGNAL kbcols:STD_LOGIC_VECTOR(0 TO 3); -列控制信号对4x4键盘不停扫描以监控哪个按键被按下。对点阵不停进行行扫描,点阵的输出colr由colr0colr7决定。3、数码管部分SIGNAL timel:INTEGER RANGE 0 TO 1

8、:=1; -对应- SIGNAL timem:INTEGER RANGE 0 TO 9:=9; -对应012 456 8 SIGNAL timeh:INTEGER RANGE 0 TO 2:=2; -对应0. 1. SIGNAL lightl:STD_LOGIC_VECTOR(7 DOWNTO 0);-数码管控制信号SIGNAL lightm:STD_LOGIC_VECTOR(7 DOWNTO 0);-数码管控制信号SIGNAL lightH:STD_LOGIC_VECTOR(7 DOWNTO 0);-数码管控制信号CAT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);DI

9、SPLAY:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)三个light信号分别控制三个数码管管脚的高低电平,使数码管显示正确的数字;而三个time信号则分别对应不同的cat管脚,且每个time信号不同的计数值对应不同的数码管显示数字。4、防抖部分kbrow0,kbrow1,kbrow2,kbrow3:IN STD_LOGIC;SIGNAL clk50k:STD_LOGIC;-50000hzSIGNAL up,down,left,right,ok:std_logic:=0;-方向键和确定键SIGNAL kbcols:STD_LOGIC_VECTOR(0 TO 3);varia

10、ble count1: integer range 0 to 99:=0;通过高频时钟与计数器搭配,通过按键按下的时长来判断这次按键是否有效,从而起到防抖的效果。5、状态机部分SIGNAL state:INTEGER RANGE 0 TO 50;- -状态机SIGNAL ct2: integer range 0 to 7:=0;-计时器SIGNAL ct_sj: integer range 0 to 3:=0;-随机数SIGNAL lock: std_logic;-确定键锁定SIGNAL direion:INTEGER RANGE 0 TO 4;-方向变量将所有情况一一陈列出来,每一个stat

11、e值代表一种情况。Lock可以确保一次按键只会触发当前状态。6、倒计时部分start:IN STD_LOGIC;SIGNAL ct2: integer range 0 to 7:=0;-计时器Start信号控制开关机,ct2是一个从0到7的计数信号,初始值为0,每当遇到1Hz的时钟上升沿时,计数器加一,直到计数器加为7时清零重新计数。7、点阵与数码管显示部分SIGNAL colr7,colr6,colr5,colr4,colr3,colr2,colr1,colr0:STD_LOGIC_VECTOR(0 TO 7);SIGNALtimel:INTEGER RANGE 0 TO 1:=1;SIGN

12、AL timem:INTEGER RANGE 0 TO 9:=9;SIGNAL timeh:INTEGER RANGE 0 TO 2:=2;SIGNAL state:INTEGER RANGE 0 TO 50;将每个state值所对应的状态与该状态所要显示的信息联系起来。三、仿真波形及分析1、数码管显示timem=1,timel=1,timeh=0,数码管显示1.02、测试界面state=6,依次行扫描row,点阵红色显示0.8视标3、测试完成界面state=46,依次行扫描row,点阵红色显示0.1-的表情四、源代码LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY shili ISPORT( clk:IN STD_LOGIC; start:IN STD_LOGIC; kbrow0,kbrow1,kbrow2,kbrow3:IN STD_LOGIC; kbcol:OUT STD_LOGIC_VECTOR(0 TO 3); r

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号