键盘扫描输入实验
按键扫描实验报告

一、实验目的1. 理解按键扫描的基本原理,掌握按键扫描电路的设计方法。
2. 学习并运用单片机编程技术,实现按键的识别与处理。
3. 掌握按键防抖技术,提高按键识别的准确性。
4. 熟悉数码管显示电路的连接与编程,实现按键值的实时显示。
二、实验原理按键扫描是单片机应用中常见的一种输入方式,通过扫描电路检测按键状态,并转换为单片机可识别的信号。
本实验采用行列扫描法,通过单片机的I/O口输出低电平,逐行扫描按键,同时读取列线状态,判断是否有按键被按下。
三、实验设备1. 单片机实验板(如51单片机实验板)2. 按键(如按钮、触摸按键等)3. 数码管(如7段数码管)4. 电阻、电容等电子元件5. 编程软件(如Keil、IAR等)四、实验步骤1. 电路连接(1)将按键的行线连接到单片机的I/O口,列线连接到数码管的输入端。
(2)数码管的共阳极或共阴极连接到单片机的I/O口。
(3)在按键和数码管之间接入电阻和电容,实现防抖功能。
2. 编程实现(1)初始化单片机的I/O口,将行线设置为输出模式,列线设置为输入模式。
(2)编写按键扫描函数,逐行扫描按键,读取列线状态,判断是否有按键被按下。
(3)编写数码管显示函数,根据按键值显示对应的数字或字符。
(4)编写防抖函数,消除按键抖动干扰。
3. 实验测试(1)上电后,观察数码管显示是否正常。
(2)按下按键,观察数码管是否显示对应的数字或字符。
(3)多次按下按键,观察数码管显示是否稳定。
五、实验结果与分析1. 按键扫描结果实验结果表明,按键扫描电路能够正确识别按键状态,并转换为单片机可识别的信号。
按键按下时,数码管显示对应的数字或字符,按键释放时,数码管显示前一个数字或字符。
2. 防抖效果通过实验发现,防抖函数能够有效消除按键抖动干扰,提高按键识别的准确性。
在按键按下和释放过程中,数码管显示的数字或字符稳定,没有出现跳动现象。
3. 数码管显示实验结果表明,数码管显示电路能够正确显示按键值。
实验八 键盘扫描实验

实验八键盘扫描实验一、实验目的1. 掌握中断键盘扫描编程方法。
2. 掌握LED动态显示方法。
二、实验原理及实验内容1. 实验原理无论是单片机控制系统还是单片机测量系统,都需要一个人机对话装置,这种人机对话装置通常采用键盘和显示器。
键盘是单片机应用系统中人机对话常用的输入装置,而显示器是单片机应用系统人机对话中的常用输出装置。
键盘是由若干个按键开关组成,键的多少根据单片机应用系统的用途而定。
键盘由许多键组成,而每个键相当于一个机械开关触点,当键按下时,触点闭合,当键松开时,触点断开。
单片机接收到按键的触点信号后作相应的功能处理。
因此对于单片机系统来说键盘接口信号是输入信号。
单片机的键盘接口分为独立式和矩阵式。
独立式键盘的每个按键都有一个信号线与单片机电路相连,所有按键有一个公共地或公共正端,每个键相互独立互不影响。
如图7-7所示,当按下键1时,无论其它键是否按下,键1的信号线就由1变0;当松开键1时,无论其它键是否按下,键1的信号线就由0变1。
矩阵式键盘的按键触点接于由行、列母线构成的矩阵电路的交叉处,每当一个按键按下时通过该键将相应的行、列母线连通。
若在行、列母线中把行母线逐行置0(一种扫描方式),那么列母线就用来作信号输入线。
矩阵式键盘原理图如图7-8所示。
图7-7 独立式按键原理图图7-8 矩阵式按键原理图针对以上两大类键盘工作方式,单片机又有三种键盘扫描方式:查询方式;定时扫描方式和中断扫描方式。
查询方式是指在程序中用一段专门的扫描和读按键程序不停查询有无按键按下,确定键值。
这种方式电路简单,但需要占用单片机的机器时间。
定时扫描方式是指利用单片机内的定时器来产生定时中断,然后在定时中断的服务程序中扫描,检查有无按键按下,确定键值。
这种方式的电路也比较简单,不占用单片机的机器时间,但需要占用一个定时器,同时定时的时间不能过长,否则可能检测不到相应得按键。
中断扫描方式是指当有键按下时由相应的硬件电路产生中断信号,单片机在中断服务程序中扫描,检查有无按键按下,确定键值。
键盘扫描程序实验报告

一、实验目的1. 理解键盘扫描的基本原理。
2. 掌握使用C语言进行键盘扫描程序设计。
3. 学习键盘矩阵扫描的编程方法。
4. 提高单片机应用系统的编程能力。
二、实验原理键盘扫描是指通过检测键盘矩阵的行列状态,判断按键是否被按下,并获取按键的值。
常见的键盘扫描方法有独立键盘扫描和矩阵键盘扫描。
独立键盘扫描是将每个按键连接到单片机的独立引脚上,通过读取引脚状态来判断按键是否被按下。
矩阵键盘扫描是将多个按键排列成矩阵形式,通过扫描行列线来判断按键是否被按下。
这种方法可以大大减少引脚数量,降低成本。
本实验采用矩阵键盘扫描方法,使用单片机的并行口进行行列扫描。
三、实验设备1. 单片机开发板(如51单片机开发板)2. 键盘(4x4矩阵键盘)3. 连接线4. 调试软件(如Keil)四、实验步骤1. 连接键盘和单片机:将键盘的行列线分别连接到单片机的并行口引脚上。
2. 编写键盘扫描程序:(1)初始化并行口:将并行口设置为输入模式。
(2)编写行列扫描函数:逐行扫描行列线,判断按键是否被按下。
(3)获取按键值:根据行列状态,确定按键值。
(4)主函数:调用行列扫描函数,读取按键值,并根据按键值执行相应的操作。
3. 调试程序:将程序下载到单片机,观察键盘扫描效果。
五、实验程序```c#include <reg51.h>#define ROW P2#define COL P3void delay(unsigned int ms) {unsigned int i, j;for (i = 0; i < ms; i++)for (j = 0; j < 123; j++);}void scan_key() {unsigned char key_val = 0xFF;ROW = 0xFF; // 初始化行delay(1); // 延时消抖key_val = ROW & COL; // 获取按键值ROW = 0x00; // 初始化行delay(1); // 延时消抖key_val = ROW & COL; // 获取按键值ROW = 0x00; // 初始化行delay(1); // 延时消抖key_val = ROW & COL; // 获取按键值ROW = 0x00; // 初始化行delay(1); // 延时消抖key_val = ROW & COL; // 获取按键值}void main() {while (1) {scan_key();if (key_val != 0xFF) {// 执行按键对应的操作}}}```六、实验结果与分析1. 实验结果:程序下载到单片机后,按键按下时,单片机能够正确读取按键值。
实验二 键盘扫描实验

实验二键盘扫描实验一、实验目的 熟悉 VHDL 的语法和编译排错,重点掌握组合逻辑中显示译码器的设计。
附加学习 键盘和数码管显示控制。
二、实验内容 1. 设计一个 BCD 码到 LED 的七段译码器,非 BCD 值时仅 G 段亮(输出为“—” ) 。
2. 下载验证键盘显示实验。
3. 改写程序,将学号的数据固定地显示在 1-8 位数码管上。
4. 将 F 键功能改为换向键,即可以控制数字滚动显示的方向。
三、实验步骤 1. 用文本输入法,在键盘显示程序的译码部分,分别用三种语法填写 BCD 到 LED 的译 码器。
三种语法为 When else、With select、Case,建议使用模板。
每一种都需编 译通过提交程序。
2. 选一种语法,编译,绑定引脚,下载验证结果。
3. 改写程序,将 0--7 的数据固定地显示在 1-8 位数码管上。
编译、下载验证结果。
4. 将 F 键功能改为换向键,即可以控制数字滚动显示的方向。
编译、下载验证结果。
四、实验硬件图图 1 4x4 键盘图 2 数码管动态显示原理框图一种推荐的适配卡连线如下表所示: 输 信 号 CLK1 入 对应芯片引 入 名 端子名 端 子 名 PIN_A20 10HZ 功 能 时钟 输 信 号 出 名 对应芯片 引 入 功 端 子 名 端子名 PIN_C1 PIN_B1 PIN_C3 PIN_E5 PIN_B3 PIN_B4 PIN_A16 PIN_C17 PIN_A17 PIN_A18 PIN_A7 PIN_A8 PIN_A9 PIN_A10 C D E F G H C1 C2 C3 C4 R1 R2 R3 R4 键盘行 能 段选 段选 段选 段选 段选 段选 键盘列LED_SEG[2] LED_SEG[3] LED_SEG[4]LED_BIT[0] PIN_G4 LED_BIT[1] PIN_E3 LED_BIT[2] PIN_D2 LED_BIT[3] PIN_C2 LED_BIT[4] PIN_B2 LED_BIT[5] PIN_C4 LED_BIT[6] PIN_E6 LED_BIT[7] PIN_A3 LED_SEG[0] PIN_G3 LED_SEG[1] PIN_E4BIT1 BIT2 BIT3 BIT4 BIT5 BIT6 BIT7 BIT8 A B位选 1 位选 2 位选 3 位选 4 位选 5 位选 6 位选 7 位选 8 段选 段选LED_SEG[5] LED_SEG[6] LED_SEG[7] KEYCOL[0] KEYCOL[1] KEYCOL[2] KEYCOL[3] KEYROW[1] KEYROW[2] KEYROW[3] KEYROW[4]五、实验文件(需要填写译码部分) KEYSCAN 时钟扫描程序 文件名:KEYSCAN.VHD library IEEE; use IEEE.std_logic_1164.all; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity KEYSCAN is port ( CLK1: in STD_LOGIC; KEYROW1,KEYROW2,KEYROW3,KEYROW4: in STD_LOGIC;--键盘行接口 KEYCOL: out STD_LOGIC_VECTOR (3 DOWNTO 0);--键盘列接口 LED_BIT: out STD_LOGIC_VECTOR (7 DOWNTO 0); --LED 位选接口 LED_SEG: out STD_LOGIC_VECTOR (7 DOWNTO 0)); --LED 段选接口 end KEYSCAN; architecture KEYSCAN_ARCH of KEYSCAN is SIGNAL SEG : STD_LOGIC_VECTOR (6 DOWNTO 0);--LED 段选 SIGNAL BIT : STD_LOGIC_VECTOR (2 DOWNTO 0);--LED 位选 SIGNAL NUM : STD_LOGIC_VECTOR (3 DOWNTO 0);--显示数字 SIGNAL COUNT : STD_LOGIC_VECTOR (4 DOWNTO 0);--计数脉冲 SIGNAL COUNT0 : STD_LOGIC; --计数脉冲最低位 LSB SIGNAL COL: STD_LOGIC_VECTOR (1 DOWNTO 0); --键盘列begin --计数器模块 PROCESS (CLK1) BEGIN IF CLK1'event AND CLK1 = '1' THEN COUNT <= COUNT+1; END IF; END PROCESS; --计数器模块 --键盘模块 COL <=COUNT(3 DOWNTO 2); KEYCOL <= "1110" WHEN COL = 0 ELSE "1101" WHEN COL = 1 ELSE "1011" WHEN COL = 2 ELSE "0111" WHEN COL = 3 ELSE "1111"; COUNT0 <= COUNT(0); PROCESS (count0,COUNT,KEYIN1,KEYIN2) BEGIN IF COUNT0'event and (COUNT0 = '1')THEN --分四行扫描 IF (KEYROW1 = '0') and (COUNT(1) = '0') THEN NUM(3 DOWNTO 2)<= "00"; NUM(1 DOWNTO 0) <= COUNT(3 DOWNTO 2); --COUNT(1 DOWNTO 0)只起分频延时的作用 ELSIF (KEYROW2 = '0') and (COUNT(1) = '0') THEN NUM(3 DOWNTO 2)<= "01"; NUM(1 DOWNTO 0) <= COUNT(3 DOWNTO 2); ELSIF (KEYROW3 = '0') and (COUNT(1) = '0') THEN NUM(3 DOWNTO 2)<= "10"; NUM(1 DOWNTO 0) <= COUNT(3 DOWNTO 2); ELSIF (KEYROW4 = '0') and (COUNT(1) = '0') THEN NUM(3 DOWNTO 2)<= "11"; NUM(1 DOWNTO 0) <= COUNT(3 DOWNTO 2); END IF; END IF; END PROCESS; --键盘模块--显示模块 BIT <= COUNT(4 DOWNTO 2); --位选扫描信号 LED_BIT <= "11111110" WHEN BIT = 0 ELSE "11111101" WHEN BIT = 1 ELSE "11111011" WHEN BIT = 2 ELSE "11110111" WHEN BIT = 3 ELSE "11101111" WHEN BIT = 4 ELSE "11011111" WHEN BIT = 5 ELSE "10111111" WHEN BIT = 6 ELSE "01111111" WHEN BIT = 7 ELSE "11111111"; --译码部分请填写完整 --pgfedcba --参考码表 0-f 十六进制 --3FH 06H 5BH 4FH --6FH 77H 7CH 39H --参考码表 0-f 二进制 --0111111 0000110 1011011 --1111111 1101111 1110111--位选扫描信号译码66H 6DH 7DH 07H 5EH 79H 71H 1001111 11111007FH1100110 1101101 1111101 0000111 0111001 1011110 1111001 1110001--译码部分完,输出到 LED 段选,同时选通位选端 LED_SEG(6 DOWNTO 0)<=SEG; LED_SEG(7) <= '0'; --显示模块 end KEYSCAN_ARCH; 六、实验注意事项 程序较大,结合电路理解很费时间,应事先预习。
键盘扫描实验说明

实验二、键盘扫描实验
一、实验目的
1.掌握TMS320VC5509 DSP的硬件基础知识。
2.掌握CCS软件安装、编译、连接仿真器、装载程序的方法。
3.掌握TMS320VC5509 DSP编写程序的方法和调试步骤。
4.掌握键盘的工作原理,读懂程序,编译,连接仿真器,装载程序,观看实验效果。
二、实验内容
1.查找相关资料,结合原理图,读懂DSP模块的原理图,掌握其工作原理。
2.按照实验指导书的步骤进行操作,观看实验效果,并填写实验报告。
三、实验仪器
1.3G移动互联网实验箱DSP模块。
2.XDS100v2 DSP仿真器。
四、实验原理
1、硬件原理图
2、编程要求及程序流程图
编程要求:按下DSP模块上的S1——S4,对应在CCS5.2软件中显示所按的按键。
五、实验步骤
第一步:打开电源
上电顺序:先连接仿真器到电脑的USB接口上,然后将仿真器的14PIN JTAG仿真头按照上图的方向插入到DSP模块的“DSP_JTAG”上,注意仿真头里有堵孔,堵孔的那个管脚对应“DSP_JTAG”的剪脚。
最后打开实验箱箱体左侧的船型开关,将DSP模块上电。
第二步:导入工程Key
第三步:编译Build
第四步:Debug
第五步:运行程序,查看实验效果。
8279键盘扫描输入实验

实验二 8279键盘扫描输入实验一、实验目的1.熟悉INTEL8279键盘、显示器接口与8031的连接方法;2.掌握8279键盘扫描输入程序的编写;二、实验要求编写一个键盘扫描输入程序,把读取到的键值依次存放在8031片内RAM的30H-43H 单元中,超过20个键值时,多余的健值存放在44单元中。
三、芯片应用特性8279是专用键盘、显示控制芯片,能对显示器自动扫描;能识别键盘上按下的键号,可充分提高CPU工作效率,8279与8031的接口方便,由它构成的标准键盘、显示接口在工业控制中得到广泛的应用。
1.关于INTEL 8279无编码器键盘常常采用软件方法,逐行逐列地检查键盘状态,当发现按下的键后,用计算或查表等方法来找到该键的键编码。
而INTEL 8279公司的键盘、显示接口芯片是一种扫描式键盘编码器芯片8279是一种通用可编程键盘显示接口芯片,它能完成键盘输入和显示控制两种功能。
键盘部分提供一种扫描方式,可与64个按键的矩阵键盘连接,能对键盘不断扫描,自动消抖,自动识别按下的键并给出编码,能对双键或n 键同时按下实行保护。
显示部分分为发光二极管、荧光管及其它显示器提供了按扫描方式工作的显示接口,它为显示器提供多路复用信号,可显示多达16个字符或数字。
2. 实验板8279键盘、显示电路介绍:8279采用外部译码操作方式,74LS138输出8位显示器的位控制信号和键盘的行扫描信号。
8279的8位输出线A0-A3和B0-B3与数码管的8个段相对应,经74LS240缓冲后,去驱动各数码管的8个段。
74LS138输出的8根线由74LS240反相后,再经大电流驱动器ULN2003A驱动,成为各数码管的位选择信号,当位选信号有效时(呈0电平),相应数码管被选通,而显示内容则取决于它的各个显示段的电平。
四、实验步骤1.线路连接及注意事项1)线路连接8279键盘键值可采用查询方式读取,也可以采用中断方式读取。
键盘扫描输入实验

4.1键盘扫描输入实验4.1.1 实验目的1.学习复杂数字系统的设计方法;2.掌握矩阵式键盘输入列阵的设计方法。
4.1.2 实验设备PC微机一台,TD-EDA试验箱一台,SOPC开发板一块。
4.103 实验内容在电子,控制,信息处理等各种系统中,操作人员经常需要想系统输入数据和命令,以实现人机通信。
实现人机通信最常用的输入设备是键盘。
在EDA技术的综合应用设计中,常用的键盘输入电路独立式键盘输入电路、矩阵式键盘输入电路和“虚拟式”键盘输入电路。
所谓矩阵是键盘输入电路,就是将水平键盘扫描线和垂直输入译码线信号的不同组合编码转换成一个特定的输入信号值或输入信号编码,利用这种行列矩阵结构的键盘,只需N 个行线和M个列线即可组成NXM按键,矩阵式键盘输入电路的优点是需要键数太多时,可以节省I/O口线;缺点是编程相对困难。
本实验使用TD-EDA实验系统的键盘单元设计一个4x4的矩阵键盘的扫描译码电路。
此设计包括键盘扫描模块和扫描码锁存模块,原理如图4-1-1。
每按下键盘列阵的一个按键立即在七段数码管上显示相应的数据。
4.1.1 实验步骤1. 运行Quartus II 软件,分别建立新工程,选择File->New菜单,创建VHDL描述语言设计文件,分别编写JPSCAN.VHD、REG.VHD.2.扫描码锁存模块REG的VHDL源程序如下;--输入锁存器VHDL源程序:REGVHDLLIBRARY IEEE;USB IEEE.STD-LOGIC-1164.ALL;ENTITY REG ISPORT ( RCLK : IN STD-LOGIC; --扫描时钟YXD : IN STD-LOGIC-VECTOR(3 DOWNTO 0); --Y 列消抖输入DATA : IN STD-LOGIC-VECTOR(7 DOWNTO 0); --输入数据LED : OUT STD-LOGIC- VECTOR(7 DOWNTO 0)); --锁存数据输出END ENTITY REG;ARCHITECTURE BEHV OF REG ISSIGNAL RST : STD-LOGIC; --锁存器复位清零SIGNAL OLDDATA : STD-LOGIC- VECTOR(7 DOWNTO 0); --锁存器旧数据SIGNAL NEWDATA : STD-LOGIC- VECTOR(7 DOWNTO 0); --锁存器新数据BEGINPROCESS(RCLK)BEGINIF RCLK’EVENT AND RCLK=’1’THENRST<=YXD(3)AND YXD(2)AND YXD(1))AND YXD(0); --判断是否有按键END IF;END PROCESS;PROCESS(RST) ISBEGINIF(RST=‘1’)THEN --RST=1没有按键按下NEWDATA<=OLDDATA;ELSEOLDDATA<=DATA; --RST=0有按键按下打入新据END IF;LED<=NEWDATA;END PORCESS;END ARCHIECTUBE BEHV;3. 键盘扫描模块JPSCAN的VHDL源程序如下;--键盘扫描电路的VHDL源程序;JPSCAN.VHDLIBRARY IEEE;USB IEEE-STD-LOGIC-1164-ALL;USB IEEE-STD-LOGIC-ARITH-ALL;USB IEEE-STD-LOGIC-UNSIGNED-ALL;ENTITY JPSCAN ISPORT(SCLK : IN STD-LOGIC --系统时钟:1KHZ YLINE : IN STD-LOGIC-VECTOR(4 DOWN 1); --Y列按键输入RCLK : OUT STD-LOGIC; --X行键盘扫描时钟YXD : OUT STD-LOGIC-VECTOR(3 DOWN 0); --Y列消抖输出DATA : OUT STD-LOGIC-VECTOR(7 DOWN 0); --数字输出XROW : OUT STD-LOGIC-VECTOR(4 DOWN 1); --X行键盘扫描END ENTITY JPSCAN;ARCHITECTURE BEHV OF JPSCAN ISCOMPONENT JPXD IS --控制电路工作时钟:512HzSIGNAL KEY-SCAN:STD-LOGIC-VECTOR(1 DOWNTO 0); --键盘扫描时钟信号--“00-01-10-11”SIGNAL CLK-JPXD : STD-LOGIC; --去抖电路工作时钟SIGNAL Y-XD : STD-LOGIC-VECTOR(3 DOWNTO 0); --键盘列输入去抖后的寄存器SIGNAL X-SCAN : STD-LOGIC-VECTOR(3 DOWNTO 0) --键盘行扫描输出寄存器--1110-1101-1011-0111 SIGNAL VALUE : STD-LOGIC-VECTOR(7 DOWNTO 0); --按键译码数值寄存器BEGINDATA<=VALUE;COUNTER:BLOCK IS --信息扫描发生器SIGNAL Q :STD-LOGIC-VECTOR(6 DOWNTO 0); --计数器实现分频BEGINPROCESS(SCLK)ISBEGINIF SCLK’EVENT AND SCLK=’THENQ<=Q+1;END IF;CLK<=Q(0); --控制电路工作时钟:512Hz,系统时钟的二分频CLK-JPXD<=Q(2); --去抖时钟信号,大约128HzKEY-SCAN<=Q(6 DOWNTO 5); --产生键盘扫描信号00-01-10-11,大约16Hz END PROCESS;X-SCAN<=”1110”WHEN KEY-SCAN=”00”ELSE”1101”WHEN KEY-SCAN=”01”ELSE”1011”WHEN KEY-SCAN=”10”ELSE”0111”WHEN KEY-SCAN=”11”ELSE“1111”XROW(4 DOWNTO 1)<=X-SCAN(3 DOWNTO 0); --X行扫描END BLOCK COUNTER;JPXDMK:BLOCK IS --键盘去抖模块BEGINU1:JPXD PORT MAP(D-IN=>YLINE(1),D-OUT=>Y-XD(0),CLK=>CLK-JPXD);U2:JPXD PORT MAP(D-IN=>YLINE(2),D-OUT=>Y-XD(1),CLK=>CLK-JPXD);U3:JPXD PORT MAP(D-IN=>YLINE(3),D-OUT=>Y-XD(2),CLK=>CLK-JPXD);U4:JPXD PORT MAP(D-IN=>YLINE(4),D-OUT=>Y-XD(3),CLK=>CLK-JPXD);YXD(3 DOWNTO 0)<=Y-XD(3 DOWNTO 0);RCLK<=CLK; --键盘扫描时钟等于控制电路工作时钟:512Hz END BLOCK JPXDMK;KEY-DECODER : BLOCK IS --键盘译码模块SIGNAL Z:STD-LOGIC-VECTOR(5 DOWNTO 0);BEGINPORCESS(CLK)BEGINZ<=KEY-SCAN&Y-XD;IF CLK’EVENT AND CLK=’1’THENCASE Z ISWHEN”001110”=>VALUE<=”00111111”; --0WHEN”011110”=>VALUE<=”00000110”; --1WHEN”101110”=>VALUE<=”01011011”; --2WHEN”111110”=>VALUE<=”01001111”; --3WHEN”001101”=>VALUE<=”01100110”; --4WHEN”011101”=>VALUE<=”01101101”; --5WHEN”101101”=>VALUE<=”01111101”; --6WHEN”111101”=>VALUE<=”00000111”; --7WHEN”001001”=>VALUE<=”01111111”; --8WHEN”011011”=>VALUE<=”01101111”; --9WHEN”101011”=>VALUE<=”01110111”; --AWHEN”111011”=>VALUE<=”01111100”; --BWHEN”000111”=>VALUE<=”00111001”; --CWHEN”010111”=>VALUE<=”01011110”; --DWHEN”100111”=>VALUE<=”01111001”; --EWHEN”110111”=>VALUE<=”01110001”; --FWHEN OTHERS => VALUS<=”00000000”; --OTHER END CASE;END IF;END PROCESS;END BLOCK KEY-DECODER;END ARCHITECTURE BEHV;4. 上述程序中键盘消抖模块JPXD的VHDL源程序如下:--键盘输入消抖电路的VHDL源程序。
键盘 实验报告

键盘实验报告实验报告:键盘引言:键盘是计算机输入设备中最常用的一种设备,用于输入字符、数字、命令等等。
键盘以一定的方式将我们按下的按键转换成计算机可识别的信号,从而实现输入功能。
本实验的目的是了解键盘的工作原理、结构以及使用方法。
实验目的:1. 了解键盘的工作原理;2. 掌握键盘通信协议;3. 掌握键盘的结构和按键布局;4. 学习键盘的使用方法。
实验原理:键盘的工作原理是通过扫描矩阵的方式实现的,常见的键盘为4x4矩阵结构,也有其他规格的矩阵结构。
按键的每一个位置都与键盘电路中的一个电气开关相连接,当按下某个按键时,会导电并向计算机发送信号。
键盘通过PS/2或USB 接口与计算机相连,传输按键的信息。
键盘结构通常包括以下部分:1. 按键:键盘上的每一个按键代表一个字符、数字、命令或功能等。
按键大致分为四个区域:字母区、数字区、符号区和功能区。
2. 电路板:键盘的电路板上连接着按键开关,实现按键的电气连接和信号传输。
3. 导线和线缆:将电路板与接口连接,传递信号。
4. 接口:键盘通过PS/2或USB接口与计算机相连,实现信号的传输。
实验步骤:1. 准备一个计算机和一台键盘,确保键盘的连接正确。
2. 打开计算机,进入操作系统。
3. 在文本编辑器中打开一个文档,用来记录实验结果。
4. 将注意力集中在键盘上,按下键盘上的一个按键,观察文档中的输入情况。
5. 重复步骤4,测试其他按键,记录测试结果。
6. 关闭计算机,结束实验。
实验结果与分析:通过本实验,我们了解到键盘的工作原理是通过扫描矩阵的方式实现的,按键通过电路板中的电气开关与计算机相连,实现键盘输入。
键盘的按键布局通常分为四个区域:字母区、数字区、符号区和功能区。
通过实验测试,我们发现按键输入是可靠的,按下按键时能够正确输入对应的字符或数字。
键盘的使用方法是简单明了的,只需要按下对应的按键即可完成输入。
实验总结:键盘作为计算机最常用的输入设备,广泛应用于各个领域。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4.1键盘扫描输入实验4.1.1 实验目的1.学习复杂数字系统的设计方法;2.掌握矩阵式键盘输入列阵的设计方法。
4.1.2 实验设备PC微机一台,TD-EDA试验箱一台,SOPC开发板一块。
4.103 实验内容在电子,控制,信息处理等各种系统中,操作人员经常需要想系统输入数据和命令,以实现人机通信。
实现人机通信最常用的输入设备是键盘。
在EDA技术的综合应用设计中,常用的键盘输入电路独立式键盘输入电路、矩阵式键盘输入电路和“虚拟式”键盘输入电路。
所谓矩阵是键盘输入电路,就是将水平键盘扫描线和垂直输入译码线信号的不同组合编码转换成一个特定的输入信号值或输入信号编码,利用这种行列矩阵结构的键盘,只需N 个行线和M个列线即可组成NXM按键,矩阵式键盘输入电路的优点是需要键数太多时,可以节省I/O口线;缺点是编程相对困难。
本实验使用TD-EDA实验系统的键盘单元设计一个4x4的矩阵键盘的扫描译码电路。
此设计包括键盘扫描模块和扫描码锁存模块,原理如图4-1-1。
每按下键盘列阵的一个按键立即在七段数码管上显示相应的数据。
4.1.1 实验步骤1. 运行Quartus II 软件,分别建立新工程,选择File->New菜单,创建VHDL描述语言设计文件,分别编写JPSCAN.VHD、REG.VHD.2.扫描码锁存模块REG的VHDL源程序如下;--输入锁存器VHDL源程序:REGVHDLLIBRARY IEEE;USB IEEE.STD-LOGIC-1164.ALL;ENTITY REG ISPORT ( RCLK : IN STD-LOGIC; --扫描时钟YXD : IN STD-LOGIC-VECTOR(3 DOWNTO 0); --Y 列消抖输入DATA : IN STD-LOGIC-VECTOR(7 DOWNTO 0); --输入数据LED : OUT STD-LOGIC- VECTOR(7 DOWNTO 0)); --锁存数据输出END ENTITY REG;ARCHITECTURE BEHV OF REG ISSIGNAL RST : STD-LOGIC; --锁存器复位清零SIGNAL OLDDATA : STD-LOGIC- VECTOR(7 DOWNTO 0); --锁存器旧数据SIGNAL NEWDATA : STD-LOGIC- VECTOR(7 DOWNTO 0); --锁存器新数据BEGINPROCESS(RCLK)BEGINIF RCLK’EVENT AND RCLK=’1’THENRST<=YXD(3)AND YXD(2)AND YXD(1))AND YXD(0); --判断是否有按键END IF;END PROCESS;PROCESS(RST) ISBEGINIF(RST=‘1’)THEN --RST=1没有按键按下NEWDATA<=OLDDATA;ELSEOLDDATA<=DATA; --RST=0有按键按下打入新据END IF;LED<=NEWDATA;END PORCESS;END ARCHIECTUBE BEHV;3. 键盘扫描模块JPSCAN的VHDL源程序如下;--键盘扫描电路的VHDL源程序;JPSCAN.VHDLIBRARY IEEE;USB IEEE-STD-LOGIC-1164-ALL;USB IEEE-STD-LOGIC-ARITH-ALL;USB IEEE-STD-LOGIC-UNSIGNED-ALL;ENTITY JPSCAN ISPORT(SCLK : IN STD-LOGIC --系统时钟:1KHZ YLINE : IN STD-LOGIC-VECTOR(4 DOWN 1); --Y列按键输入RCLK : OUT STD-LOGIC; --X行键盘扫描时钟YXD : OUT STD-LOGIC-VECTOR(3 DOWN 0); --Y列消抖输出DATA : OUT STD-LOGIC-VECTOR(7 DOWN 0); --数字输出XROW : OUT STD-LOGIC-VECTOR(4 DOWN 1); --X行键盘扫描END ENTITY JPSCAN;ARCHITECTURE BEHV OF JPSCAN ISCOMPONENT JPXD IS --控制电路工作时钟:512HzSIGNAL KEY-SCAN:STD-LOGIC-VECTOR(1 DOWNTO 0); --键盘扫描时钟信号--“00-01-10-11”SIGNAL CLK-JPXD : STD-LOGIC; --去抖电路工作时钟SIGNAL Y-XD : STD-LOGIC-VECTOR(3 DOWNTO 0); --键盘列输入去抖后的寄存器SIGNAL X-SCAN : STD-LOGIC-VECTOR(3 DOWNTO 0) --键盘行扫描输出寄存器--1110-1101-1011-0111 SIGNAL VALUE : STD-LOGIC-VECTOR(7 DOWNTO 0); --按键译码数值寄存器BEGINDATA<=VALUE;COUNTER:BLOCK IS --信息扫描发生器SIGNAL Q :STD-LOGIC-VECTOR(6 DOWNTO 0); --计数器实现分频BEGINPROCESS(SCLK)ISBEGINIF SCLK’EVENT AND SCLK=’THENQ<=Q+1;END IF;CLK<=Q(0); --控制电路工作时钟:512Hz,系统时钟的二分频CLK-JPXD<=Q(2); --去抖时钟信号,大约128HzKEY-SCAN<=Q(6 DOWNTO 5); --产生键盘扫描信号00-01-10-11,大约16Hz END PROCESS;X-SCAN<=”1110”WHEN KEY-SCAN=”00”ELSE”1101”WHEN KEY-SCAN=”01”ELSE”1011”WHEN KEY-SCAN=”10”ELSE”0111”WHEN KEY-SCAN=”11”ELSE“1111”XROW(4 DOWNTO 1)<=X-SCAN(3 DOWNTO 0); --X行扫描END BLOCK COUNTER;JPXDMK:BLOCK IS --键盘去抖模块BEGINU1:JPXD PORT MAP(D-IN=>YLINE(1),D-OUT=>Y-XD(0),CLK=>CLK-JPXD);U2:JPXD PORT MAP(D-IN=>YLINE(2),D-OUT=>Y-XD(1),CLK=>CLK-JPXD);U3:JPXD PORT MAP(D-IN=>YLINE(3),D-OUT=>Y-XD(2),CLK=>CLK-JPXD);U4:JPXD PORT MAP(D-IN=>YLINE(4),D-OUT=>Y-XD(3),CLK=>CLK-JPXD);YXD(3 DOWNTO 0)<=Y-XD(3 DOWNTO 0);RCLK<=CLK; --键盘扫描时钟等于控制电路工作时钟:512Hz END BLOCK JPXDMK;KEY-DECODER : BLOCK IS --键盘译码模块SIGNAL Z:STD-LOGIC-VECTOR(5 DOWNTO 0);BEGINPORCESS(CLK)BEGINZ<=KEY-SCAN&Y-XD;IF CLK’EVENT AND CLK=’1’THENCASE Z ISWHEN”001110”=>VALUE<=”00111111”; --0WHEN”011110”=>VALUE<=”00000110”; --1WHEN”101110”=>VALUE<=”01011011”; --2WHEN”111110”=>VALUE<=”01001111”; --3WHEN”001101”=>VALUE<=”01100110”; --4WHEN”011101”=>VALUE<=”01101101”; --5WHEN”101101”=>VALUE<=”01111101”; --6WHEN”111101”=>VALUE<=”00000111”; --7WHEN”001001”=>VALUE<=”01111111”; --8WHEN”011011”=>VALUE<=”01101111”; --9WHEN”101011”=>VALUE<=”01110111”; --AWHEN”111011”=>VALUE<=”01111100”; --BWHEN”000111”=>VALUE<=”00111001”; --CWHEN”010111”=>VALUE<=”01011110”; --DWHEN”100111”=>VALUE<=”01111001”; --EWHEN”110111”=>VALUE<=”01110001”; --FWHEN OTHERS => VALUS<=”00000000”; --OTHER END CASE;END IF;END PROCESS;END BLOCK KEY-DECODER;END ARCHITECTURE BEHV;4. 上述程序中键盘消抖模块JPXD的VHDL源程序如下:--键盘输入消抖电路的VHDL源程序。
JPXD,VHDLIBRARY IEEE;USB IEEESTD-LOGIC-1164ALL;ENTITY JPXD ISPORT(D-IN : IN STD-LOGIC;CLK :IN STD-LOGIC;D-OUT:OUT STD-LOGIC);END ENTITY JPXD;ARCHITECTURE BEHV OF JPXD ISCOMPONENT DCFQ ISPORT(CLK: IN STD-LOGIC; --时钟信号CLRN: IN STD-LOGIC: --清零信号PRN: IN STD-LOGIC; --预置信号D: IN STD-LOGIC;Q: OUT STD-LOGIC);END COMPONENT DCFQ;SIGNAL VCC,INV-D:STD-LOGIC;SIGNAL Q0,Q1:STD-LOGIC;SIGNAL D1,D0:STD-LOGIC;BEGINVCC<=’1’;INV-D<=NOT D-IN;UMN1:DCFQ PORT MAP(CLK=>CLK,CLRN=>INV-DVCRN=>VCC,D=>VCC,Q=>Q0);UMN2:DCFQ PORT MAP(CLK=>CLK,CLRN=>Q0,PRN=>VCC,D=>VCC,Q=>Q1);PROCESS(CLK)BEGINIF CLK’EVENT AND CLK=’THEND0<=NOT Q1;D1<=D0;END IF;END PROCESS;D-OUT<=NOT(D1 AND NOT D0);END ARCHITECTURE BEHV;5. 编译源文件,编译无误后分别对上述VHDL文件进行仿真,验证其逻辑功能正确后,选择File->Create/Update ->Create Symbol File for Current File菜单,分别生成符号文件.BSF。