课程设计报告矩阵键盘控制

合集下载

4x4矩阵键盘设计报告

4x4矩阵键盘设计报告

4x4矩阵键盘设计报告1.引言1.1 概述概述:4x4矩阵键盘是一种常用的输入设备,广泛应用于各种电子产品中。

本报告旨在介绍4x4矩阵键盘的设计理念、技术实现以及使用体验,并对其设计优势进行分析。

同时,将收集用户反馈,展望未来对4x4矩阵键盘的发展趋势进行探讨。

通过本报告的阐述,读者可以更加全面地了解4x4矩阵键盘的设计与应用,为相关产品的设计与开发提供参考和借鉴。

1.2 文章结构本报告将分为引言、正文和结论三个部分。

引言部分将概述本设计报告的目的和重要性,介绍文章结构和各部分内容的主要内容。

正文部分将详细介绍设计理念、技术实现和使用体验,通过分析和阐述设计的过程和特点,展现4x4矩阵键盘设计的全面性和独特性。

结论部分将对设计的优势进行总结,考虑用户反馈和展望未来的发展方向,以期为4x4矩阵键盘的设计提供参考和启示。

文章1.3 目的:本报告的目的是介绍我们设计的4x4矩阵键盘,并分析其设计理念、技术实现和使用体验。

通过本报告,读者可以了解我们的设计思路和创新之处,以及用户在使用过程中的反馈和建议。

同时,我们还会对该键盘的设计优势进行评估,并展望未来可能的发展方向。

通过本报告的阐述,我们希望能够为相关领域的学习和研究提供有益的参考和启发。

2.正文2.1 设计理念设计理念部分的内容:在设计4x4矩阵键盘时,我们以用户体验和便捷性为设计理念的核心。

我们希望设计一款符合人体工程学的键盘,使用户在使用过程中能够感受到舒适和便捷。

同时,我们也注重键盘的美学设计,希望能够设计出外观时尚,符合当代审美的产品。

此外,我们也考虑了键盘的功能多样性,希望能够满足不同用户的需求,提供更好的用户体验。

因此,在设计理念上,我们以用户体验和功能多样性为重点,致力于设计出一款符合人体工程学、外观时尚、功能多样的4x4矩阵键盘。

2.2 技术实现在本节中,我们将讨论4x4矩阵键盘的技术实现。

我们首先考虑到了键盘的布局和排列,通过设计合理的矩阵布局,我们可以实现较小尺寸的键盘同时保证较高的按键准确性。

单片机 矩阵键盘实验 实验报告

单片机 矩阵键盘实验 实验报告

单片机矩阵键盘实验实验报告一、实验目的本次实验的目的是掌握原理和方法,利用单片机识别矩阵键盘并编程实现键码转换功能,控制LED点亮显示。

二、实验原理矩阵键盘是一种由多路单向控制器输入行选择信号与列选择信号连接而形成的一一对应矩阵排列结构。

它广泛应用于电子游戏机、办公自动化设备、医疗仪器、家电控制及书籍检索机器等方面。

本次实验采用的矩阵键盘是一个4 x 4矩阵,用4段数码管显示按键编码,每个按键都可以输入一个代码,矩阵键盘连接单片机,实现一个软件算法来识别键码转化。

从而将键盘中的按键的按下信号转换成程序能够识别的代码,置于相应的输出结果中,控制LED点亮,从而可以实现矩阵键盘按键的转换功能。

三、实验方法1.硬件搭建:矩阵键盘(4行4列)与单片机(Atmel AT89C51)相连,选择引脚连接,并将数码管和LED与单片机相连以实现显示和点亮的功能。

2.程序设计:先建立控制体系,利用中断服务子程序识别和码值转换,利用中断服务子程序实现从按键的按下信号转换为程序能够识别的代码,然后将该代码段编写到单片机程序中,每次按下矩阵键盘按键后单片机给出相应的按键编码输出,用数码管显示,控制LED点亮。

四、实验结果经过实验,成功实现了矩阵键盘与单片机之间的连接,编写了中断服务子程序,完成了按键编码输出与LED点亮的功能。

实验完成后,数码管显示各种按键的编码,同时LED会点亮。

本次实验介绍了矩阵键盘的原理,论述了键码转换的程序设计步骤,并实验完成矩阵键盘与单片机的连接,实现用LED点亮以及数码管显示按键的编码。

通过本次实验,受益匪浅,使我对使用单片机编写算法与程序有了更深入的认识,同时丰富了课堂学习的内容,也使我更加热爱自己所学的专业。

矩阵式键盘设计实训报告

矩阵式键盘设计实训报告

一、实验目的1. 掌握矩阵式键盘的工作原理及电路设计方法。

2. 熟悉单片机与矩阵键盘的接口连接及编程技巧。

3. 提高动手实践能力,培养创新意识。

二、实验设备1. 单片机实验平台2. 矩阵键盘模块3. 数字多用表4. 编译器(如Keil51)5. 连接线三、实验原理矩阵键盘是一种常用的键盘设计方式,通过行列交叉点连接按键,从而实现多个按键共用较少的I/O端口。

矩阵键盘通常采用逐行扫描的方式检测按键状态,当检测到按键按下时,根据行列线的电平状态确定按键位置。

四、实验内容1. 矩阵键盘电路设计2. 矩阵键盘编程3. 矩阵键盘测试与调试五、实验步骤1. 电路设计(1)根据矩阵键盘的规格,确定行线和列线的数量。

(2)将行线和列线分别连接到单片机的I/O端口。

(3)在行线上串联电阻,防止按键抖动。

(4)连接电源和地线。

2. 编程(1)初始化单片机的I/O端口,将行线设置为输出,列线设置为输入。

(2)编写逐行扫描程序,逐行拉低行线,读取列线状态。

(3)根据行列线状态判断按键位置,并执行相应的操作。

3. 测试与调试(1)将编写好的程序下载到单片机中。

(2)连接矩阵键盘,观察按键是否正常工作。

(3)使用数字多用表检测行列线电平,确保电路连接正确。

(4)根据测试结果,对程序进行调试,直到矩阵键盘正常工作。

六、实验结果与分析1. 电路连接正确,按键工作正常。

2. 逐行扫描程序能够正确检测按键位置。

3. 按键操作能够触发相应的程序功能。

七、实验总结1. 通过本次实训,掌握了矩阵式键盘的工作原理及电路设计方法。

2. 熟悉了单片机与矩阵键盘的接口连接及编程技巧。

3. 提高了动手实践能力,培养了创新意识。

八、心得体会1. 在实验过程中,遇到了电路连接错误和程序调试困难等问题,通过查阅资料、请教老师和同学,最终成功解决了问题。

2. 本次实训让我深刻体会到理论知识与实际操作相结合的重要性,同时也认识到团队合作的重要性。

九、改进建议1. 在电路设计过程中,可以考虑增加去抖动电路,提高按键稳定性。

矩阵键盘实验报告

矩阵键盘实验报告

自主学习用实验矩阵键盘识别实验
一、实验目的
1、掌握 4×4 矩阵键盘的工作原理和键盘的扫描方式。

2、掌握键盘的去抖方法和键盘应用程序的设计。

二、实验设备
1、PC 机一台;
2、开放式模块化单片机教学实验箱一台;
3、USB 下载线一根。

三、实验内容
自行编制程序,用 51 单片机实现 4×4 矩阵键盘扫描,采用线反转法;并实现当S11按下时在数码管上显值“0”,当S12按下时在数码管上显值“1”……,即依次将 S11 至S26按下,在数码管上依次显示十六进制数“0-F”,矩阵键盘原理图如图1-1 所示。

单片机与数码管接口电路原理图如图 1-2 所示。

图 1-1 矩阵键盘接口电路
图 1-2 数码管接口电路原理图
四、思考题
1.画出所编程序的流程图;
2.若要实现2×4 矩阵键盘,软硬件作如何修改。

答:将行线P2^3, P2^4接线去掉。

程序对应部分P2=0xfd; P2=0xfe;删掉。

3.实验中有何故障、问题出现,是否得到解决?如何解决的?问题:显示值对应出错。

原来是共阳段码和共阴段码弄相反了。

单片机矩阵按键课程设计

单片机矩阵按键课程设计

单片机矩阵按键课程设计一、课程目标知识目标:1. 学生能理解单片机矩阵按键的基础知识,掌握矩阵按键的原理及其在电路中的应用。

2. 学生能描述单片机I/O口操作方法,并运用此知识实现矩阵按键的编程控制。

3. 学生能解释并运用行、列扫描法进行按键识别,实现按键的消抖处理。

技能目标:1. 学生能够独立完成矩阵按键电路的连接,并进行调试。

2. 学生能够运用所学知识,编写程序实现矩阵按键的扫描与功能分配。

3. 学生能够通过实验,分析和解决矩阵按键编程过程中遇到的问题。

情感态度价值观目标:1. 学生培养对单片机技术的兴趣,增强对电子工程领域的认识。

2. 学生在学习过程中,培养解决问题的耐心和毅力,树立团队协作意识。

3. 学生能够认识到单片机技术在现实生活中的应用价值,增强创新实践能力。

课程性质:本课程为实践性较强的电子技术课程,要求学生在掌握理论知识的基础上,注重动手实践。

学生特点:学生具备一定的单片机基础知识,对电子技术有较高的兴趣,但编程和动手能力参差不齐。

教学要求:结合学生特点,课程注重理论与实践相结合,充分调动学生的积极性,提高学生的动手能力和创新能力。

通过课程学习,使学生在知识、技能和情感态度价值观方面均有所提升。

二、教学内容1. 矩阵按键原理:介绍矩阵按键的电路结构、工作原理以及其在单片机系统中的应用。

- 教材章节:第二章第二节《矩阵键盘的工作原理》2. 单片机I/O口操作:回顾并加深理解单片机I/O口的基本操作,为矩阵按键编程打下基础。

- 教材章节:第一章《单片机基础》3. 行列扫描法:讲解如何运用行列扫描法进行按键识别,包括消抖处理方法。

- 教材章节:第二章第三节《矩阵键盘的编程方法》4. 矩阵按键编程实践:指导学生编写程序,实现矩阵按键的扫描与功能分配。

- 教材章节:第二章第四节《矩阵键盘应用实例》5. 电路连接与调试:学生动手实践,完成矩阵按键电路的连接,并进行调试。

- 教材章节:实验指导书《矩阵键盘实验》6. 问题分析与解决:针对编程和调试过程中遇到的问题,引导学生进行分析和解决。

单片机课程设计——利用矩阵键盘来控制1602液晶显示器的显示设计

单片机课程设计——利用矩阵键盘来控制1602液晶显示器的显示设计

《单片机原理及应用课程设计》报告——利用矩阵键盘来控制1602液晶显示器的显示设计2011年12 月7 日目录1.课程设计的目的12.课程设计的要求3.硬件设计3.1设计思想3.2主要元器件介绍3.3.功能电路介绍3.31 1602液晶显示器3.32 3*4矩阵键盘(1)矩阵式键盘的结构与工作原理(2)矩阵式键盘的按键识别方法4.软件设计4.1设计思想4.2软件流程图4.3源程序:5.调试运行6.设计心得体会:1.课程设计目的1.1巩固和加深对单片机原理和接口技术知识的理解;1.2培养根据课题需要选学参考书籍、查阅手册和文献资料的能力;1.3学会方案论证的比较方法,拓宽知识,初步掌握工程设计的基本方法;1.4掌握常用仪器、仪表的正确使用方法,学会软、硬件的设计和调试方法;1.5能按课程设计的要求编写课程设计报告,能正确反映设计和实验成果,能用计算机绘制电路图和流程图。

2.课程设计要求2.1在3*4矩阵键盘上输入信息2.2在1602芯片上显示时间信息。

2.3显示数据的设计与变换3.硬件设计3.1设计思想在3*4矩阵键盘上输入信息,通过中央处理器处理信息,再通过1602液晶显示器显示信息。

3.2主要元器件介绍(1)电源电路(2)STC89C82RC单片机一块。

(3)1602液晶显示器一块(4)杜邦线若干。

(5)3*4矩阵键盘3.3.功能电路介绍3.31 1602液晶显示器液晶显示模块具有体积小、功耗低、显示内容丰富等特点,现在字符型液晶显示模块已经是单片机应用设计中最常用的信息显示器件了。

1602可以显示2行16个字符,有8位数据总线D0-D7,和RS、R/W、EN三个控制端口,工作电压为5V,并且带有字符对比度调节和背光。

1602外观如下图所示1602引脚说明注意事项:从该模块的正面看,引脚排列从右向左为:15脚、16脚,然后才是1-14脚(线路板上已经标明)。

VDD:电源正极,4.5-5.5V,通常使用5V电压;VL:LCD对比度调节端,电压调节范围为0-5V。

矩阵键盘设计实验报告

矩阵键盘设计实验报告

矩阵键盘设计实验报告
矩阵键盘是一种特殊的电子输入设备,其特殊性在于每个按键可以仅由几根线连接而成。

这可以将按键尺寸缩小,同时也减少了接線复杂度。

在本次实验中,我们设计了一个4*4的矩阵键盘。

矩阵键盘的外型是4 *4的按键,其中每个按键由一个PIN组成,连接起来分别连接在一个不同的ROW与COL上。

在使用矩阵键盘时,我们将其连接到一台电脑上,通过电脑程序监视每行每列的通断状态,当一行或者一列被按下,程序会自动捕捉,来表示一个字符或者code.
首先,我们先准备一台电脑,再连接矩阵键盘的各个PIN,用8个信号线将矩阵键盘连接到单片机,再用USB线将单片机连接到电脑上,使用PL 2303驱动链接矩阵键盘和电脑终端。

单片机负责捕获ROW和COL的信号,计算并识别矩阵键盘的按键,将计算出的字符发送至电脑终端,进行小程序的检测。

在电脑端,我们使用Apple系统的终端运行.bash,编写简单的shell脚本实现对矩阵键盘信号识别。

脚本将不断检测矩阵键盘信号状态,根据捕捉到的ROW和COL信号,将其映射出字符信息,在一定时间内输出至终端。

在实验的最后,我们检验了所设计的矩阵键盘是否符合预期效果。

通过代码发送进行按键操作,能检测到正确的字符,表明矩阵键盘的设计及实现满足要求。

本次实验可以作为以后矩阵键盘的参考,深入研究程序软件,提高实验效率。

矩阵式键盘控制数码管显示

矩阵式键盘控制数码管显示
完成实训报告十
7
谢谢观赏!
二、工作原理
当扫描开始时, 首先将P1.7列初始值设置为低电平, 即P
3
三、程序流程图 ——主程序
开始
初始化
按键查询
YES
A=FFH?
NO
调用消除抖动子程序转Leabharlann 功能处理程序AAAA 1234
结束
4
四、程序清单
独立式键盘控制灯移动程序.doc
5
五、实验板上测试
观察实验结果并记录: 按下不同按键开关,可以看到P0端口的
实训十一: 矩阵式键盘控制数码管显示
功能说明: 使用4*4矩阵式键盘控制第一个数码
管显示0~F。
1
一、电路图
4条列线的一端分别与单片机P1口中的P1.4、 P1.5、 P1.6. P1.7 相接,另一端通过上拉电阻接到+5V电源上,平时使 列线处于高电平状态;而4条行线的一端分别与P1口中的 P1.0、 P1.1、 P1.2、 P1.3相接。16个按键设置在行、列 2 线交点上。
灯作不同方向的移动或闪烁,说明是在执 行不同功能键的处理程序。 按DL1键,亮灯从右向左移动 按DL2键,亮灯从左向右移动 按DL3键,左边4只灯与右边4只灯交替闪亮 按DL4键,8个灯闪烁
6
码管显示0; 作业布置按下DL2,第二个数
码管显示1; 按下DL3,第三个数 码管显示2; 按下DL4,第四个数 码管显示3 。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

北华航天工业学院《EDA技术综合设计》课程设计报告报告题目:矩阵键盘控制接口设计作者所在系部:电子工程系作者所在专业:电子信息工程作者所在班级:作者姓名:作者学号:0指导教师姓名:完成时间:2009-12-18内容摘要本课程设计所用实验器材主要有计算机和北京精仪达盛科技有限公司的EL教学实验箱。

经编译、仿真,检查无误并且符合设计要求后,正确的将脉冲源、FLEX10K \ EPF10K10LC84-3芯片、5行×6列薄膜轻触按键键盘、数码管按设计要求连接好。

将程序下载到实验箱的FLEX10K \ EPF10K10LC84-3芯片中,则可观察到预期的实验效果,即当按下某一键时,在数码管上显示该键对应的键值。

本课程设计需设计键盘接口消抖动元件(底层文本)和矩阵键盘接口电路(顶层文本)。

在顶层文本中包含扫描信号发生模块、按键消抖动模块、按键译码模块、寄存器-选择器模块和数码管的译码模块。

关键词:VHDL语言 EDA技术按键消抖动电路键盘扫描电路键值译码电路按键码存储电路显示键值电路目录一概述 (5)二方案设计与论证 (5)三单元电路设计 (6)1.键盘接口消抖动元件 (6)2.时钟产生电路 (6)3.键盘扫描电路 (7)4.键盘译码电路 (7)5.寄存器_选择器模块电路 (7)6.译码模块电路 (7)四器件编程与下载 (8)五性能测试与分析 (16)六实验设备 (16)七心得体会 (16)八参考文献 (17)课程设计任务书一、概述本课程设计的基本原理是在时钟信号的控制下,使数码管上显示所按下的键值,并且能够保持直到下一个按键被按下。

首先,构思一个8×4的矩阵键盘控制顶层电路的模块划分图兼端口及内部信号定义图,再用VHDL语言编辑文本程序,需先录入底层文件(键盘接口消抖动元件DEBOUNCING的描述)再录入键盘接口电路主程序,保存编译并检查程序是否有语法错误,再仿真观察波形是否符合所预期的设计要求,当一切都满足要求后,即可将程序下载到实验箱的FLEX10K \ EPF10K10LC84-3芯片中。

正确的将脉冲源、FLEX10K \ EPF10K10LC84-3芯片、5行×6列薄膜轻触按键键盘、数码管按设计要求连接好。

再将程序下载到实验箱的FLEX10K \ EPF10K10LC84-3芯片中,则可观察到预期的实验效果,即当按下某一键时,在数码管上显示该键对应的键值。

如:当按下5时,数码管显示05。

二、方案设计与论证把该矩阵键盘控制器分为两部分进行设计,先设计键盘接口消抖动电路,再设计键盘接口电路的主程序。

在主程序中包含时序产生电路、键盘扫描电路、弹跳消除电路、键盘译码电路、按键码存储电路、显示电路模块并且分别进行分析来实现所需的功能。

实验仪器中4×8矩阵键盘的电路原理图如图所示图1. 4×8矩阵键盘的电路原理图图2.按键位置与数码关系三、单元电路设计1.键盘接口消抖动元件DEBOUCING.VHD该元件为一个通用的全功能的消抖动元件,内含有自由计数器模块、消抖动模块和微分模块。

其默认符号如图1所示。

各引脚说明如下:Key为按键输入信号,高电平有效,有抖动毛刺;clr是清零信号,低电平有效;clk是同步时钟信号,选择20MHZ;dly_out是消抖动输出;diff_out是消抖动微分输出。

在顶层文本key_test.vhd的debounuing:block模块中,U1,U2,U3,U4共4处用到了元件例化语句,用来消除按键抖动。

2.时钟产生电路counter:block本电路中利用一个自由计数器来产生多种频率的工作脉冲波形有机的构成系统工作时序。

它们分别是:系统时钟clk_4M、弹跳消除取样信号CLK、按键译码模块同步时钟CLK1、键值存储器同步时钟CLK2、键盘扫描信号SELOUT[2..0]和7段显示器扫描信号SELOUT(0)及NOTSELOUT_0。

该模块中的扫描信号就是取了计数器中的3个值,使用语句:SELTMP<=Q(7 DOWNTO 5);此处SELTMP要预先定义为3bit的宽度。

3.键盘扫描电路扫描电路的作用是用来提供键盘扫描信号,扫描信号变化的顺序依次为000-001-010-011-100-101-110-111,周而复始。

用语句:SELTMP<=Q(7 DOWNTO 5);SELOUT<=SELTMP;即可实现键盘扫描。

4.键盘译码电路key_decoder:block译码电路所要做的任务有:判别是否有键按下;将被按下键编码成对应的ZOUT[7..0]8位二进制编码,即用十进制数来显示按键值:KEY_CODE<=ZOUT;把KEY_CODE送到内部下一级电路,即按键码的寄存器_选择器模块。

5. 按键码的寄存器_选择器模块REG_MULTIPLEXER:block因为每次扫描会产生新的按键数据,可能会覆盖前面的数据,所以需要一个按键存储电路,将整个键盘扫描完毕后的按键值记录下来。

6.译码模块SEVEN_SEGMENT: bloc该模块把DB[3..0]的值译成17位的数码管所对应的0、1、2、3、4、5、6、7、8、9,使数码管正常显示按键值。

四、器件编程与下载1.底层文本:键盘接口消抖动元件DEBOUCING.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY debouncing ISPORT(clk,key:IN STD_LOGIC;clr:IN STD_LOGIC;dly_out,dif_out:OUT STD_LOGIC);END debouncing;ARCHITECTURE a OF debouncing ISSIGNAL sample,dly,diff:STD_LOGIC;BEGINfree_counter:blockSIGNAL QQ:STD_LOGIC_VECTOR(4 DOWNTO 0);SIGNAL d0:STD_LOGIC;BEGINPROCESS(clr,clk)BEGINif clr='0'then d0<='0';QQ<=(OTHERS=>'0');elsif clk'event and clk='1'thend0<=QQ(4);QQ<=QQ+1;end if;end process;sample<=not(QQ(4) and (not d0));end block free_counter;debunce:blocksignal d0,d1,s,r:std_logic;beginprocess(clk,clr)beginif clr='0' thendly<='0';elsif rising_edge(clk) thenif sample='1' thend1<=d0;d0<=key;s<=d0 and d1;r<=not d0 and not d1;if s<='0' and r<='0' thendly<=dly;elsif s<='0' and r<='1' thendly<='0';elsif s<='1' and r<='0' thendly<='1';else dly<='0';end if;end if;end if;end process;dly_out<=dly;end block debunce;differential:blocksignal d1,d0:std_logic;beginprocess(clk,clr)beginif clr='0'thend0<='0';d1<='0';elsif rising_edge(clk)then d1<=d0;d0<=dly; end if;diff<=d0 and not d1;end process;dif_out<=diff;end block differential;END a;2.顶层文本:键盘接口电路主程序keys_test.vhd library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity keys_test isport(clk20,clr:in std_logic;selout:out std_logic_vector(2 downto 0);notselout_0:out std_logic;key:in std_logic_vector(3 downto 0);segout:out std_logic_vector(16 downto 0)); end keys_test;architecture a of keys_test iscomponent debouncingport(key:in std_logic;clk,clr:in std_logic;dly_out:out std_logic);end component;signal clk,clk1,clk2,clk4:std_logic;signal seltmp:std_logic_vector(2 downto 0);signal key_code:std_logic_vector(7 downto 0); signal c:std_logic_vector(3 downto 0);signal db,key_in:std_logic_vector(3 downto 0); signal seg:std_logic_vector(16 downto 0);beginsegout(16 downto 0)<=seg;selout<=seltmp;notselout_0<=not seltmp(0);key_in<=not key;fenpin:blocksignal m:integer range 0 to 10#5#;beginprocess(clk20)beginif clk20'event and clk20='1'thenif m=10#5# then m<=0;else m<=m+1;end if;end if;end process;process(m)beginif m=10#5# then clk4<='1';else clk4<='0';end if;end process;end block fenpin;counter:blocksignal q:std_logic_vector(10 downto 0);beginprocess(clk4,clr)beginif clr='0' then q<=(others=>'0');elsif clk4'event and clk4='1' then q<=q+1; end if;end process;clk<=q(0);clk1<=q(2);clk2<=q(4);seltmp<=q(7 downto 5);end block counter;debounuing:blockbeginu1:debouncing port map(key=>key_in(0),dly_out=>c(0),clr=>clr,clk=>clk);u2:debouncing port map(key=>key_in(1),dly_out=>c(1),clr=>clr,clk=>clk);u3:debouncing port map(key=>key_in(2),dly_out=>c(2),clr=>clr,clk=>clk);u4:debouncing port map(key=>key_in(3),dly_out=>c(3),clr=>clr,clk=>clk);end block debounuing;key_decoder:blocksignal z:std_logic_vector(6 downto 0);signal zout:std_logic_vector(7 downto 0); beginz<=(not c)&seltmp;key_code<=zout;process(clk1,clr)beginif clr='0' thenzout<=(others=>'0');elsif clk1'event and clk1='1' thencase z isWHEN"1110000"=>ZOUT<="00000000"; WHEN"1110001"=>ZOUT<="00000001"; WHEN"1110010"=>ZOUT<="00000010"; WHEN"1110011"=>ZOUT<="00000011"; WHEN"1110100"=>ZOUT<="00010000"; WHEN"1110101"=>ZOUT<="00010001"; WHEN"1110110"=>ZOUT<="00000100"; WHEN"1110111"=>ZOUT<="00000101"; WHEN"1101000"=>ZOUT<="00000110"; WHEN"1101001"=>ZOUT<="00000111";WHEN"1101010"=>ZOUT<="00010010"; WHEN"1101011"=>ZOUT<="00010011"; WHEN"1101100"=>ZOUT<="00001000"; WHEN"1101101"=>ZOUT<="00001001"; WHEN"1101110"=>ZOUT<="00001010"; WHEN"1101111"=>ZOUT<="00001011"; WHEN"1011000"=>ZOUT<="00010100"; WHEN"1011001"=>ZOUT<="00010101"; WHEN"1011010"=>ZOUT<="00001100"; WHEN"1011011"=>ZOUT<="00001101"; WHEN"1011100"=>ZOUT<="00001110"; WHEN"1011101"=>ZOUT<="00001111"; WHEN"1011110"=>ZOUT<="00010110"; WHEN"1011111"=>ZOUT<="00010111"; WHEN"0111000"=>ZOUT<="00011000"; WHEN"0111001"=>ZOUT<="00011010"; WHEN"0111010"=>ZOUT<="00011011"; WHEN"0111011"=>ZOUT<="00011100"; WHEN"0111100"=>ZOUT<="00011101"; WHEN"0111101"=>ZOUT<="00011001"; WHEN"0111110"=>ZOUT<="00011110"; WHEN"0111111"=>ZOUT<="00011111";WHEN OTHERS=>ZOUT<="11111111";end case;END IF;END PROCESS;END BLOCK key_decoder;REG_MULTIPLEXER:BLOCKSIGNAL KEY_CODE1:STD_LOGIC_VECTOR(7 DOWNTO 0); BEGINPROCESS(CLK2,clr)beginif clr='0' thenKEY_CODE1<=(others=>'0');ELSIF(CLK2'EVENT AND CLK2='1')THENif(key_code="11111111") thenKEY_CODE1<=KEY_CODE1;ELSE KEY_CODE1<=KEY_CODE;end if;END if;END PROCESS;DB<=KEY_CODE1(3 DOWNTO 0)WHEN(SELTMP(0)='0')ELSE KEY_CODE1(7 DOWNTO 4)WHEN(SELTMP(0)='1')ELSE"0000";End Block REG_MULTIPLEXER;seven_segment:blockbeginseg<="11111111000000000" when db="0000" else"00110000000000000" when db="0001" else"11101110100010000" when db="0010" else"11111100100010000" when db="0011" else"00110001100010000" when db="0100" else"11011101100010000" when db="0101" else"11011111100010000" when db="0110" else"11110000000000000" when db="0111" else"11111111100010000" when db="1000" else"11111101100010000" when db="1001" else"00110000000110100" when db="1010" else"11001111100101000" when db="1011" else"11001111000000000" when db="1100" else"11111100001000010" when db="1101" else"11001111100010000" when db="1110" else"11000011100010000" when db="1111" else"00000000000000000";end block seven_segment;end a;3.编译在软件平台的录入设计中,应当先录入底层DEBOUNCING.VHD设计文本,并把它设为当前的工程项目,经编译、仿真,通过后,退出DEBOUNCING.VHD文本;再录入顶层文本key_test.vhd,并把它设为当前的工程项目,经编译、仿真,通过后就可下载key_test.vhd设计文本到器件中。

相关文档
最新文档