实验八 键盘扫描实验

合集下载

按键扫描实验报告

按键扫描实验报告

一、实验目的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. 掌握使用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. 实验结果:程序下载到单片机后,按键按下时,单片机能够正确读取按键值。

键盘扫描实验说明

键盘扫描实验说明

实验二、键盘扫描实验
一、实验目的
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
第五步:运行程序,查看实验效果。

键盘扫描原理

键盘扫描原理

键盘扫描原理
键盘是计算机输入设备中最常用的一种,它通过将人们的按键操作转换成计算机可以识别的信号,从而实现了人机交互。

而键盘的核心部分就是键盘扫描原理,它是如何实现的呢?
首先,我们需要了解键盘的工作原理。

当我们按下键盘上的某一个按键时,就会产生一个按键信号,这个信号会通过键盘的电路传输到计算机主机上。

而键盘扫描原理就是指计算机是如何检测到这个按键信号的。

键盘扫描原理的核心就是矩阵扫描。

键盘上的每一个按键都对应着一个电路,这些电路会以矩阵的形式排列在键盘的背后。

当我们按下某一个按键时,对应的电路就会闭合,从而产生一个按键信号。

计算机会通过扫描这个矩阵来检测到按键信号的产生。

具体来说,计算机会以一定的频率扫描键盘上的每一个按键,检测它们是否产生了按键信号。

这个扫描的频率通常很高,所以我们按下按键时几乎可以立即得到响应。

一旦计算机检测到有按键信号产生,它就会将这个信号转换成相应的键值,从而实现了按键的输入。

除了矩阵扫描,现代键盘还采用了一些其他技术来提高性能和稳定性。

比如采用了多种防抖动技术,防止因按键抖动而产生误操作;采用了多种按键轮询技术,提高了按键的灵敏度和反应速度;还采用了多种按键编码技术,提高了按键的识别准确性和稳定性。

总的来说,键盘扫描原理是键盘工作的核心,它通过矩阵扫描等技术实现了对按键信号的检测和转换,从而实现了人机交互。

随着技术的不断发展,键盘的性能和稳定性会不断提高,为人们的使用体验带来更多的便利和舒适。

单片机实验--键盘扫描

单片机实验--键盘扫描

实验4 键盘实验一、实验目的:1.掌握8255A编程原理。

2.了解键盘电路的工作原理。

3.掌握键盘接口电路的编程方法。

二、实验设备:CPU挂箱、8031CPU模块三、实验原理:1.识别键的闭合,通常采用行扫描法和行反转法。

行扫描法是使键盘上某一行线为低电平,而其余行接高电平,然后读取列值,如所读列值中某位为低电平,表明有键按下,否则扫描下一行,直到扫完所有行。

本实验例程采用的是行反转法。

行反转法识别键闭合时,要将行线接一并行口,先让它工作于输出方式,将列线也接到一个并行口,先让它工作于输入方式,程序使CPU通过输出端口往各行线上全部送低电平,然后读入列线值,如此时有某键被按下,则必定会使某一列线值为0。

然后,程序对两个并行端口进行方式设置,使行线工作于输入方式,列线工作于输出方式,并将刚才读得的列线值从列线所接的并行端口输出,再读取行线上的输入值,那么,在闭合键所在的行线上的值必定为0。

这样,当一个键被按下时,必定可以读得一对唯一的行线值和列线值。

2.程序设计时,要学会灵活地对8255A的各端口进行方式设置。

3.程序设计时,可将各键对应的键值(行线值、列线值)放在一个表中,将要显示的0~F字符放在另一个表中,通过查表来确定按下的是哪一个键并正确显示出来。

实验题目利用实验箱上的8255A可编程并行接口芯片和矩阵键盘,编写程序,做到在键盘上每按一个数字键(0~F),用发光二极管将该代码显示出来。

四、实验步骤:将键盘RL10~RL17接8255A的PB0~PB7;KA10~KA12接8255A的PA0~PA2;PC0~PC7接发光二极管的L1~L8;8255A芯片的片选信号8255CS接CS0。

五、实验电路:六、程序框图7.程序清单八、附:8251/8255扩展模块该模块由8251可编程串行口电路和8255可编程并行口电路两部分组成,其电源、数据总线、地址总线和片选信号均由接口挂箱上的接口插座提供。

一、8251可编程串行口电路(1)8251可编程串行接口芯片引脚及功能8251A是通用同步/异步收发器USART,适合作异步起止式数据格式和同步面向字符数据格式的接口,其功能很强。

键盘 实验报告

键盘 实验报告

键盘实验报告实验报告:键盘引言:键盘是计算机输入设备中最常用的一种设备,用于输入字符、数字、命令等等。

键盘以一定的方式将我们按下的按键转换成计算机可识别的信号,从而实现输入功能。

本实验的目的是了解键盘的工作原理、结构以及使用方法。

实验目的:1. 了解键盘的工作原理;2. 掌握键盘通信协议;3. 掌握键盘的结构和按键布局;4. 学习键盘的使用方法。

实验原理:键盘的工作原理是通过扫描矩阵的方式实现的,常见的键盘为4x4矩阵结构,也有其他规格的矩阵结构。

按键的每一个位置都与键盘电路中的一个电气开关相连接,当按下某个按键时,会导电并向计算机发送信号。

键盘通过PS/2或USB 接口与计算机相连,传输按键的信息。

键盘结构通常包括以下部分:1. 按键:键盘上的每一个按键代表一个字符、数字、命令或功能等。

按键大致分为四个区域:字母区、数字区、符号区和功能区。

2. 电路板:键盘的电路板上连接着按键开关,实现按键的电气连接和信号传输。

3. 导线和线缆:将电路板与接口连接,传递信号。

4. 接口:键盘通过PS/2或USB接口与计算机相连,实现信号的传输。

实验步骤:1. 准备一个计算机和一台键盘,确保键盘的连接正确。

2. 打开计算机,进入操作系统。

3. 在文本编辑器中打开一个文档,用来记录实验结果。

4. 将注意力集中在键盘上,按下键盘上的一个按键,观察文档中的输入情况。

5. 重复步骤4,测试其他按键,记录测试结果。

6. 关闭计算机,结束实验。

实验结果与分析:通过本实验,我们了解到键盘的工作原理是通过扫描矩阵的方式实现的,按键通过电路板中的电气开关与计算机相连,实现键盘输入。

键盘的按键布局通常分为四个区域:字母区、数字区、符号区和功能区。

通过实验测试,我们发现按键输入是可靠的,按下按键时能够正确输入对应的字符或数字。

键盘的使用方法是简单明了的,只需要按下对应的按键即可完成输入。

实验总结:键盘作为计算机最常用的输入设备,广泛应用于各个领域。

实验八键盘实验-10页文档资料

实验八键盘实验-10页文档资料

实验八键盘扫描实验一、实验目的1. 掌握中断键盘扫描编程方法。

2. 掌握LED动态显示方法。

二、实验原理及实验内容1. 实验原理无论是单片机控制系统还是单片机测量系统,都需要一个人机对话装置,这种人机对话装置通常采用键盘和显示器。

键盘是单片机应用系统中人机对话常用的输入装置,而显示器是单片机应用系统人机对话中的常用输出装置。

键盘是由若干个按键开关组成,键的多少根据单片机应用系统的用途而定。

键盘由许多键组成,而每个键相当于一个机械开关触点,当键按下时,触点闭合,当键松开时,触点断开。

单片机接收到按键的触点信号后作相应的功能处理。

因此对于单片机系统来说键盘接口信号是输入信号。

单片机的键盘接口分为独立式和矩阵式。

独立式键盘的每个按键都有一个信号线与单片机电路相连,所有按键有一个公共地或公共正端,每个键相互独立互不影响。

如图7-7所示,当按下键1时,无论其它键是否按下,键1的信号线就由1变0;当松开键1时,无论其它键是否按下,键1的信号线就由0变1。

矩阵式键盘的按键触点接于由行、列母线构成的矩阵电路的交叉处,每当一个按键按下时通过该键将相应的行、列母线连通。

若在行、列母线中把行母线逐行置0(一种扫描方式),那么列母线就用来作信号输入线。

矩阵式键盘原理图如图7-8所示。

图7-7 独立式按键原理图图7-8 矩阵式按键原理图针对以上两大类键盘工作方式,单片机又有三种键盘扫描方式:查询方式;定时扫描方式和中断扫描方式。

查询方式是指在程序中用一段专门的扫描和读按键程序不停查询有无按键按下,确定键值。

这种方式电路简单,但需要占用单片机的机器时间。

定时扫描方式是指利用单片机内的定时器来产生定时中断,然后在定时中断的服务程序中扫描,检查有无按键按下,确定键值。

这种方式的电路也比较简单,不占用单片机的机器时间,但需要占用一个定时器,同时定时的时间不能过长,否则可能检测不到相应得按键。

中断扫描方式是指当有键按下时由相应的硬件电路产生中断信号,单片机在中断服务程序中扫描,检查有无按键按下,确定键值。

键盘扫描输入实验

键盘扫描输入实验

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源程序。

实验8 键盘扫描和显示实验

实验8  键盘扫描和显示实验

实验八键盘扫描和显示实验实验目的:掌握键盘和显示器的接口方法和编程方法;掌握键盘扫描和LED八段数码管显示器的工作原理。

实验内容:利用LAB6000通用微控制器提供的键盘扫描电路和显示电路,完成键盘扫描和显示实验。

把按键输入的键码在六位LED数码管上显示出来。

可分成三个模块:①键输入模块:扫描键盘,读取一次键盘并将键值存入键值缓冲单元。

②显示模块:将显示单元的内容在六位LED数码管上动态显示。

③主程序:调用键输入模块和显示模块。

实验步骤:1.按照流程图分析参考程序,在读懂的基础上编写或修改程序;2.将键盘和显示器的片选连接孔KEY/LED—CS与片选口CS0连接;3.输入编好的程序,汇编并运行。

4.观察程序运行后LED 的显示,按下数字键,再观察LED 的显示。

5.按照思考题的要求,修改程序进行实验。

实验电路原理图:实验报告要求:记录实验现象,分析原因。

整理好运行正确的程序,写出总结和体会。

思考题:1.如果显示5、6、7、8如何修改?2.LEDTAB(字形表)每一个码代表什么?3.如果把CS0改为CS1,程序如何修改?4.怎样关显示,开放键盘?5.CPL A 指令是什么功能?为什么要用该指令?6.MOVC 和MOVX 指令有何不同?7.LEDBuf equ 60H 是什么指令?什么含义?8.MOV LEDBuf+1,#5BH是什么含义?附: 参考流程图附: 参考程序Org 0000hOUTBIT equ 8002h ;位控制口OUTSEG equ 8004h ;段控制口IN equ 8001h ;键盘读入口LEDBuf equ 60h ;显示缓冲器首址 ljmp StartLED字形表LEDTAB:db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07hdb 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71hDelay: mov r7, #00h 延时子程序Delay1:djnz r7, Delay1djnz r6, Delay1retDisplay: LED显示子程序mov r0, #LEDBufmov r1, #06h ;共6个八段LEDmov r2, #00100000b ;从左边开始显示Loop: mov dptr, #OUTBIT ;指向位控制口mov a, #00h ;关显示movx @dptr, amov a, @r0 ;取一个待显示数mov dptr, #OUTSEG ;指向段控制口movx @dptr, a ;输出段码mov dptr, #OUTBIT ;指向位控制口mov a, r2 ;取位码movx @dptr, a ;输出位码mov r6, #01hcall Delaymov a, r2 ;位码右移一位rr amov r2, ainc r0 ;指向下一个待显示数djnz r1, Loop ;6个LED都显示完了吗? retTestKey: 扫描键盘mov dptr, #OUTBIT ;指向位控制口mov a, #00h ;开放键盘movx @dptr, amov dptr, #IN ;指向键盘读入口movx a, @dptr ;读入键盘状态cpl aanl a, #0fh ;高4位不用retKeyTab:db 16h, 15h, 14h, 0ffh 键值表db 13h, 12h, 11h, 10hdb 0dh, 0ch, 0bh, 0ahdb 0eh, 03h, 06h, 09hdb 0fh, 02h, 05h, 08hdb 00h, 01h, 04h, 07hGetKey:mov dptr, #OUTBITmov P2, dphmov r0, #Low(IN)mov r1, #00100000bmov r2, #06h ;共6列KLoop: mov a, r1 ;找出键所在列cpl amovx @dptr, acpl arr a ;右移一位,指向下一列mov r1, amovx a, @r0cpl aanl a, #0fhjnz Goon1 ;该列有键入djnz r2, KLoopmov r2, #0ffh ;没有键按下, 返回 0ffh sjmp ExitGoon1: mov r1, a ;键值 = 列*4 + 行mov a, r2dec arl arl amov r2, a ;r2 = (r2-1)*4mov a, r1 ;r1中为读入的行值mov r1, #4LoopC: rrc a ;移位找出所在行jc Exitinc r2 ;r2 = r2+ 行值djnz r1, LoopCExit: mov a, r2mov dptr, #KeyTabmovc a, @a+dptrmov r2, aWaitRelease: 等待键释放mov dptr, #OUTBITclr amovx @dptr, amov r6, #10call Delaycall TestKeyjnz WaitReleasemov a, r2retStart: mov sp, #50hmov LEDBuf+0, #06h ;显示 1mov LEDBuf+1, #5bh ;显示 2mov LEDBuf+1, #4fh ;显示 3mov LEDBuf+2, #66h ;显示 4mov LEDBuf+3, #66hmov LEDBuf+4, #0mov LEDBuf+5, #0MLoop: call Display ;显示(调显示子程序)call TestKey ;有键入? (调扫描键盘子程序) jz MLoop ;无键入, 继续显示call GetKey ;读入键码anl a, #0fh ;显示键码mov dptr, #LEDTABmovc a, @a+dptrmov LEDBuf+5, aljmp MLoopend。

键盘扫描显示实验报告

键盘扫描显示实验报告

一、实验目的1. 理解键盘扫描的基本原理,掌握键盘扫描的方法。

2. 掌握数码管显示的基本原理,实现键盘扫描信息的实时显示。

3. 熟悉8255并行接口芯片在键盘扫描和数码管显示中的应用。

二、实验原理1. 键盘扫描原理:键盘扫描是指通过硬件电路对键盘按键进行检测,并将按键信息转换为可识别的数字信号的过程。

本实验采用行列式键盘,通过扫描键盘的行线和列线,判断按键是否被按下。

2. 数码管显示原理:数码管是一种用来显示数字和字符的显示器,由多个发光二极管(LED)组成。

本实验采用七段数码管,通过控制各个段(A、B、C、D、E、F、G)的亮灭,显示相应的数字或字符。

3. 8255并行接口芯片:8255是一款通用的并行接口芯片,具有三个8位并行I/O口(PA、PB、PC),可用于键盘扫描和数码管显示的控制。

三、实验设备1. 实验平台:PC机、8255并行接口芯片、行列式键盘、七段数码管、面包板、导线等。

2. 软件环境:汇编语言编程软件、仿真软件等。

四、实验步骤1. 硬件连接:将8255并行接口芯片、行列式键盘、七段数码管连接到实验平台上,按照电路图进行连线。

2. 编写程序:使用汇编语言编写键盘扫描和数码管显示的程序。

(1)初始化8255并行接口芯片:设置PA口为输出端口,PB口为输出端口,PC口为输入端口。

(2)扫描键盘:通过PC口读取键盘的行线状态,判断是否有按键被按下。

若检测到按键被按下,读取对应的列线状态,确定按键的位置。

(3)数码管显示:根据按键的位置,控制数码管的段(A、B、C、D、E、F、G)的亮灭,显示相应的数字。

3. 仿真调试:使用仿真软件对程序进行调试,确保程序能够正确扫描键盘和显示数字。

五、实验结果与分析1. 实验结果:成功实现了键盘扫描和数码管显示的功能。

当按下键盘上的任意按键时,数码管上会显示对应的数字。

2. 分析:(1)键盘扫描部分:通过读取PC口的行线状态,判断是否有按键被按下。

当检测到按键被按下时,读取PB口的列线状态,确定按键的位置。

行列扫描键盘实验报告

行列扫描键盘实验报告

一、实验目的1. 了解行列扫描键盘的工作原理和设计方法。

2. 掌握行列扫描键盘的硬件电路连接和程序编写。

3. 通过实验验证行列扫描键盘的正确性和稳定性。

二、实验原理行列扫描键盘是一种常用的键盘设计方法,它通过将多个独立按键按照行、列的结构组合起来,形成一个整体键盘。

在这种设计中,行线和列线分别连接到单片机的IO口,通过控制行线和列线的电平状态,可以实现对按键的扫描和识别。

行列扫描键盘的原理如下:1. 将按键按照行、列结构连接,行线连接到单片机的输出端,列线连接到单片机的输入端。

2. 当行线输出低电平时,列线上的按键状态被检测。

如果列线上的电平状态与设定的预期状态不符,则表示有按键被按下。

3. 通过扫描行线和列线,可以确定按键的位置和状态。

三、实验设备1. 单片机:如51单片机、STM32等。

2. 行列扫描键盘:如4x4矩阵键盘。

3. 电源:5V电源。

4. 连接线:用于连接单片机和键盘的导线。

四、实验步骤1. 硬件连接:将行列扫描键盘的行线连接到单片机的输出端,列线连接到单片机的输入端。

同时,将电源连接到键盘的电源端。

2. 程序编写:编写程序实现对行列扫描键盘的扫描和识别。

(1)初始化:设置单片机的IO口为输出或输入模式。

(2)扫描行线:依次将行线输出低电平,读取列线状态,判断是否有按键被按下。

(3)识别按键:根据扫描到的行线和列线状态,确定按键的位置和状态。

(4)按键处理:根据按键的位置和状态,执行相应的操作。

3. 实验验证:将编写好的程序烧录到单片机中,连接键盘和电源,观察按键是否能够被正确识别。

五、实验结果与分析1. 实验结果:在实验过程中,成功实现了行列扫描键盘的扫描和识别功能。

按下键盘上的任意按键,单片机都能够正确识别并执行相应的操作。

2. 实验分析:通过实验,我们了解到行列扫描键盘的设计方法和原理。

在实际应用中,行列扫描键盘具有以下优点:(1)节省单片机的IO口资源:通过将多个按键按照行、列结构连接,可以减少单片机的IO口使用数量。

键盘扫描显示实验报告

键盘扫描显示实验报告

实验六键盘扫描显示实验一、实验目的1 、掌握键盘和显示器的接口方法和编程方法。

2 、掌握键盘扫描和LED八段码显示器的工作原理。

二、实验连线将JP4和JP8通过8PIN排线连接,JP10和JP3通过8PIN排线连接三、实验内容把矩阵键盘上的按键输入的键码在静态数码管上显示出来。

四、实验步骤实验采用线反转法①打开keil软件---新建工程---新建文件②编写程序:#include<reg51.h>#define uint unsigned int#define uchar unsigned charucharshuzu[3][4]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83} ; uint i;uint j;void delay(uint n){while(--n);}void keyscan(){uchar temp;P3=0x0f;delay(1000);temp=P3^0x0f;switch(temp){case 0x02 : i=0;break;case 0x04 : i=1;break;case 0x08 : i=2;break;default :break;}P3=0xf0;delay(1000);temp=P3^0xf0;switch(temp){case 0x10 : j=0;break;case 0x20 : j=1;break;case 0x40 : j=2;break;case 0x80 : j=3;break;default : break;}}main(){P2=0x00;while(1){ P3=0x00;if(P3!=0xf0)keyscan();P2=shuzu[i][j];delay(1000);}}保存、编译---生成hex文件③连接线,使用下载软件将编好程序载入单片机中。

单片机实验八 键盘

单片机实验八  键盘

实验八键盘
一、实验目的
1、熟悉独立键和矩阵盘扫描原理。

2、掌握键盘接口电路及编程。

二、实验设备
装有proteus的电脑一台
三、实验内容
用16个按钮搭建一个4×4矩阵式小键盘,行线和列线分别接AT89C52单片机P1口的低4位和高4位;P2口作为输出口,用于驱动8只LED,低电平有效。

复位LED的显示状态为高4位亮,低4位灭;当相应按键按下时,8位LED以BCD码形式显示对应的按键输入数字。

四、实验步骤
1、在proteus ISIS界面中编辑键盘电路原理图,把该电路保存。

2、在keil中建立c程序文件并生成hex文件。

3、添加仿真文件。

双击单片机,打开其属性编辑框,在“program file”栏中,单击打开按钮,选取后缀名为*.HEX的目标代码文件。

在“clock frequency”栏中设置时钟频率为11.0592MHZ。

4、在proteus仿真界面中单击运行按钮,全速启动仿真。

五、实验结果及心得体会。

实验8-矩阵键盘扫描实验

实验8-矩阵键盘扫描实验
}
//查询按键键值
key = Key_Scan() ;
if( key != 0xff )
printf( "Interrupt occur... K%d is pressed!\n", key ) ;
//重新初始化IO口
rGPGCON = rGPGCON & (~((3<<12)|(3<<4))) | ((1<<12)|(1<<4)) ;//GPG6,2 set output
6.EINT19、EINT11、EINT2、EINT0中断开启
}
6.2键盘中断响应
void __irq KeyISR(void)
{
1.GPG13、GPG11、GPF2、GPF0设为input端口
2.清楚中断EINT19、EINT11、EINT2、EINT0
3.键盘扫描Key_Scan(),并在串口输出
else if( (rGPGDAT&(1<< 3)) == 0 )return 14 ;
else if( (rGPGDAT&(1<<11)) == 0 )return 13 ;
//扫描键盘第2列K11、K8、K5、K2
rGPGDAT = rGPGDAT & (~((1<<6)|(1<<2))) | (0<<6) | (1<<2) ;//GPG6 output 0;GPG2 output 1
rEXTINT0 &= ~(7|(7<<8));
rEXTINT0 |= (2|(2<<8));//set eint0,2 falling edge int

实验八 键盘扫描显示实验

实验八   键盘扫描显示实验

实验八键盘扫描显示实验一、实验目的1、了解普通4×4键盘扫描的原理。

2、进一步加深七段码管显示过程的理解。

二、硬件要求1、4×4键盘阵列。

2、FPGA主芯片EP1K30TC144-3。

3、可变时钟源。

4、七段码显示区。

三、实验原理本实验主要完成的实验是完成4×4键盘扫描的,然后获取其键值,并对其进行编码,从而进行按键的识别,并将相应的按键值进行显示。

键盘扫描的实现过程如下:对于4×4键盘,通常连接为4行、4列,因此要识别按键,只需要知道是哪一行和哪一列即可,为了完成这一识别过程,我们的思想是,首先固定输出4行为高电平,然后输出4列为低电平,在读入输出的4行的值,通常高电平会被低电平拉低,如果读入的4行均为高电平,那么肯定没有按键按下,否则,如果读入的4行有一位为低电平,那么对应的该行肯定有一个按键按下,这样便可以获取到按键的行值。

同理,获取列值也是如此,先输出4列为高电平,然后在输出4行为低电平,再读入列值,如果其中有哪一位为低电平,那么肯定对应的那一列有按键按下。

获取到行值和列值以后,组合成一个8位的数据,根据实现不同的编码在对每个按键进行匹配,找到键值后在7段码管显示。

四、实验内容及步骤本实验内容是完成4×4键盘的扫描,然后将正确的键值进行显示,实验步骤如下:1、编写键盘扫描和显示的VHDL代码。

2、用MaxPlusII对其进行编译仿真。

3、在仿真确定无误后,选择芯片ACEX1K EP1K30TC144-3。

4、给芯片进行管脚绑定,在此进行编译。

5、根据自己绑定的管脚,在实验箱上对键盘接口、显示接口和FPGA之间进行正确连线。

6、给目标板下载代码,在4×4键盘输入键值,观看实验结果。

五、实验连线如果是调用的本书提供的VHDL代码,则实验连线如下:Clk:FPGA工作时钟信号,大约位5KHz至50KHz即可。

Kr[0:3]:分别接4×4键盘部分的R1、R2、R3和R4。

单片机89C52行列式键盘扫描程序(汇编)

单片机89C52行列式键盘扫描程序(汇编)

实验八键盘扫描显示实验所需软硬件:KeilSTC-ISPMCS-51 89C52实验箱程序清单:基于汇编语言//连线P0接8列(同时也是数码管的位选线)高电平选中某位。

P3低两位接行P1接数码管(段选线)低电平选中某段亮。

ORG 0000HLJMP MAINMAIN:MOV 30H,#00HMOV 31H,#00HMOV 32H,#00HMOV 33H,#00HMOV 34H,#00HMOV 35H,#00HBEGIN:ACALL SCANACALL CHECKACALL DISPSJMP BEGIN//子程序SCAN 全扫描2次扫描去抖SCAN: ;全扫描MOV R0,#00H ;去抖,扫描2次计数标志MOV A,#00HMOV P0,A ;送列扫描码LOOP:MOV A,P3 ;回读行信号ANL A,#03H ;只取低两位INC R0CJNE A,#03H,K1CLR F0 ;无键,置标志位为0K1:NOPNOPCJNE R0,#02H,LOOP;去抖,扫描2次SETB F0 ;有键,置标志位为1RET//子程序CHECK 逐列扫描确定键码CHECK:MOV R1,#0FEH ;开始逐列扫描,从第0列开始MOV R4,#00H ;记录列号MOV R5,#00H ;记录行号MOV A,R1PUSH ACC ;压栈保留第0列扫描码LOOP1:MOV P0,A ;送列扫描码MOV A,P3ANL A,#03HCJNE A,#03H,K2 ;有键转K2确定为哪一行POP ACC ;无键扫描下一列RL AINC R4CJNE R4,#08H,LOOP1 ; 是否扫描进行到最后一列RETK2:DEC SP ;为保证堆栈平衡CJNE A,#02H,K3 ;分支判断,看是否为第一行SJMP OVERK3:INC R5 ;不是第一行,就是第二行,行码加1 OVER:MOV A,R4ADD A,R5 ;行码+列码=键码PUSH ACC ;键码入栈保护NOPNOPLCALL SCAN ;扫描看手是否松开CJNE A,#03H,OVER ;A=03H,表示手未松开,继续扫描POP ACC ;手松开,键码出栈RET//子程序DISP 键码分离送数码管显示DISP:JNB F0,LOOP3 ;无键不分离键码MOV B,#10 ;有键,要进行十位和个位的分离DIV ABMOV 34H,A ;A为十位MOV 35H,B ;B为个位MOV R0,#30H ;送显示缓冲首地址MOV R2,#01H ;送位选信号,从最低位开始亮LOOP3:MOV A,#0FFHMOV P1,A ;段选:送灭码MOV A,R2MOV P0,A ;送位选信号MOV A,@R0 ;送显示缓冲数据MOV DPTR,#TAB ;查表求字形码MOVC A,@A+DPTRMOV P0,A ;送段选ACALL DELAY1MS ;延时以保持稳定INC R0 ;取下一个数MOV A,R2JB ACC.5,EXIT ;判断位选是否送到最高位RL A ;左移选下一个位。

实验八 键盘显示控制实验(1)

实验八 键盘显示控制实验(1)

微机原理与接口技术之实验八键盘显示控制实验专业:计算机科学与技术班级学号:201622235 姓名:龚旭一、实验目的1、掌握8255控制键盘及显示电路的基本功能及编程方法。

2、掌握一般键盘和显示电路的工作原理。

二、实验内容1、编程:在小键盘上每按下一个键,4位数码管上显示出相应字符,他们的对应关系如下:三、编程提示1、设置8255C口键盘输入、A口为数码管段码输出。

2、参考流程图完成编程。

(上右图)四、实验内容与过程代码:a8255 equ 288H ;8255 A口c8255 equ 28aH ;8255 C口k8255 equ 28bH ;8255控制口data segmenttable1 dw 0770h,0B70h,0D70h,0E70h,07B0h,0BB0h,0DB0h,0EB0hdw 07D0h,0BD0h,0DD0h,0ED0h,07E0h,0BE0h,0DE0h,0EE0h ;键盘扫描码表LED DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CHDB 39h,5EH,79h,71h,0ffh ;LED段码表,0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,fchar db '0123456789ABCDEF' ;字符表mes db 0ah,0dh,'PLAY ANY KEY IN THE SMALL KEYBOARD! ',0ah,0dh db 'IT WILL BE ON THE SCREEN! END WITH E ',0ah,0dh,'$'key_in db 0hdata endsstacks segment stack ;堆栈空间db 100 dup (?)stacks endscode segmentassume cs:code,ds:data,ss:stacks,es:datastart:climov ax,datamov ds,axmov es,axmov ax,stacksmov ss,axmov dx,offset mes ;显示提示信息mov ah,09int 21hmain_key:MOV DX,k8255 ;初始化8255控制字mov al,81hout dx,alcall key ;get a char in (key_in) and display it call disply ;调显示子程序,显示得到的字符cmp byte ptr key_in,'E'jnz main_keymov ax,4c00h ;if (dl)='E' return to EXIT!key proc nearkey_loop:int 21h ;退出mov ah,1int 16hjnz exit ;pc键盘有键按下则退出mov dx,c8255mov al,0fhout dx,alin al,dx ;读行扫描值and al,0fhcmp al,0fhjz key_loop ;未发现有键按下则转call delay ;delay for amomentmov ah,alMOV DX,k8255mov al,88hout dx,almov dx,c8255mov al,ahor al,0f0hout dx,alin al,dx ;读列扫描值and al,0f0hcmp al,0f0hjz key_loop ;未发现有键按下则转mov si,offset table1 ;键盘扫描码表首址mov di,offset char ;字符表首址key_tonext:mov cx,16 ;待查表的表大小cmp ax,[si] ;cmp (col,row) with every word jz key_findkey ;in the tabledec cxjz key_loop ;未找到对应扫描码add si,2inc dijmp key_tonextkey_findkey:mov dl,[di]mov ah,02int 21h ;显示查找到的键盘码mov byte ptr key_in,dlkey_waitup:MOV DX,k8255mov al,81hout dx,almov dx,c8255mov al,0fhout dx,alin al,dx ;读行扫描值and al,0fhcmp al,0fhjnz key_waitup ;按键未抬起转call delay ;delay for amomentretexit: mov byte ptr key_in,'E'key endpretdelay proc nearpush ax ;delay 50ms--100msmov ah,0int 1ahmov bx,dxdelay1:mov ah,0int 1ahcmp bx,dxjz delay1mov bx,dxdelay2:mov ah,0int 1ahcmp bx,dxjz delay2pop axRetdelay endpDISPLY PROC NEARPUSH axMOV BX,OFFSET LEDMOV AL,byte ptr key_inSUB al,30hCMP al,09hJNG DIS2SUB al,07hDIS2: XLATMOV DX,a8255OUT DX,AL ;输出显示数据,段码POP AXRETDISPLY ENDPcode endsend start五、实验分析当在键盘上按下不同的按键时,LED数码管上显示不同的字符。

按键输入和LED数码管扫描显示实验

按键输入和LED数码管扫描显示实验

按键输入和LED数码管扫描显示实验设计内容:给8个按键键盘的每个键定义一个功能,从左到右按键一次按下时,分别显示数字1-8,当有两个及以上的按键按下时,显示数字9。

LCD初始显示个人学号,当有按键按下时,最后一位显示对应的数字。

实验程序:#include <reg51.h>sbit key=P0^6; //键盘公共线,见原理图sbit ls1=P0^2; //千位公共极sbit ls2=P0^3; //百位公共极sbit ls3=P0^4; //十位公共极sbit ls4=P0^5; //个位公共极unsigned char keyval; //读取的键值#define Dat P1 //数据输出端char a;char b[4]={0,3,3,0}; //初始值为学号后四位unsigned char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//延时----------------------------Delay(unsigned int t){ while(t--); }//显示----------------------------void Display(unsigned char mun){ unsigned char j;for(j=0;j<50;j++){ Dat=a;Dat=tab[b[0]]; //把得到7段显示码数据送P1端口ls1=0; //点亮千位Delay(100); //显示一会ls1=1; //关闭,显示下一位Dat=tab[b[1]];ls2=0; //点亮百位Delay(100);ls2=1;Dat=tab[b[2]];ls3=0; //点亮十位Delay(100);ls3=1; //个位Dat=tab[b[3]];ls4=0;Delay(100);ls4=1;}}Dat=0xff; //P1恢复为0xff}//--键盘扫描程序-------------------------------------- Scankey(){ unsigned char i;key=0; //拉低键盘公共线if(Dat!=0xff) //有键按下{ Delay(1000); //消抖动if(Dat!=0xff) //有键按下{ i=~Dat;a=Dat; //读取键盘状态,switch(i){ case 0x01: keyval=0x01;break; //K1case 0x02: keyval=0x02;break; //K2case 0x04: keyval=0x03;break; //K3case 0x08: keyval=0x04;break; //K4case 0x10: keyval=0x05;break; //K5case 0x20: keyval=0x06;break; //K6case 0x40: keyval=0x07;break; //K7case 0x80: keyval=0x08;break; //K8default: keyval=0x09;break; } //其它双键按下不处理,均为9 b[3]=b[2];b[2]=b[1];b[1]=b[0];b[0]=keyval;while(Dat!=0xff){key=1; //暂时关闭键盘,不干扰显示Display(keyval); //等待按键抬起key=0; //开启键盘检测}}}key=1; //释放键盘公共线}//--主程序--------------------------------------------------------- main(){while(1){ Display(keyval); //显示Scankey(); //键盘扫描}}。

键盘扫描显示实验原理及分析报告

键盘扫描显示实验原理及分析报告

键盘扫描显示实验原理及分析报告学 院 计算机工程学院专 业 计算机科学与技术年级班别 09计算机科学与技术1班学 号 2009404010131学生姓名 李雅旖指导教师 李 永2012年01月JINGCHU UNIVERSITY OF TECHNOLOGY目录一、内容提要二、实验目的三、实验要求四、实验器材五、实验电路六、实验说明七、实验框图八、实验程序九、实验分析十、实验心得十一、参考文献一、内容提要单片机技术日趋成熟的今天,其灵活的硬件电路的设计和软件的设计,让单片机得到了广泛的应用,几乎是从小的电子产品,到大的工业控制,单片机都起到了举足轻重的作用。

单片机在人们的生活中得到广泛的应用。

本文介绍了基于单片机的键盘扫描显示实验,详细讨论了它从软件上实现的过程,以及硬件接口的原理及其实现,根据输出的列码和读取的行码来判断按下的是什在么键,即有按键时向列扫描码地址(0e101H)逐列输出低电平,然后从行码地址(0e103H)读回,理解读取键盘按键的原理,和最简单的单片机接口原理二、实验目的:1、掌握键盘和显示器的接口方法和编程方法。

2、掌握键盘扫描和LED八段数码管显示器的工作原理。

二、实验要求:在上一个实验的基础上,利用实验仪提供的键盘扫描电路和显示电路,做一个扫描键盘和数码显示实验,把按键输入的键码在六位数码管上显示出来。

实验程序可分成三个模块:1、键输入模块:扫描键盘、读取一次键盘并将键值存入键值缓冲单元。

2、显示模块:将显示单元的内容在显示器上动态显示。

3、主程序:调用键输入模块和显示模块。

三、实验器材:1、超想-3000TC综合实验仪 1 台2、KEIL仿真器 1 台3、计算机 1 台四、实验电路:这里只是键盘草图,详细原理参见“8155键显模块”。

五、实验说明:本实验仪提供了一个6×4的小键盘,向列扫描码地址(0e101H)逐列输出低电平,然后从行码地址(0e103H)读回,如果有键按下,则相应行的值应为低,如果无键按下,由于上拉的作用,行码为高.这样就可以通过输出的列码和读取的行码来判断按下的是什么键。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MOV A,@R0
MOV P0,A
AJMP MAIN
图7-9键盘扫描
TABLE: /*字型数据数组*/
DB0C0H,0F9H,0A4H,0B0H
DB 99H,92H,82H,0F8H
DB 80H,90H,88H,83H
DB0C6H,0A1H,86H,8EH
KEYET:
CLR FKEY /*清除按键标志*/
ACALL SCAN /*执行按键扫描*/
JB FKEY,G1 /*测试按键标志*/
AJMP KEYET /*若没有按键则等待按键*/
DELAY: /*延迟子程序*/
MOV R6,#50 /*总延迟时间R5*10 ms*/
D1: MOV R7,#100
DJNZ R7,$
DJNZ R6,D1
DJNZ R5,DELAY
void delay()/*延时*/
{
unsigned int i;
for(i=8000;i>0;i--);
}
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
uchar keyscan()/*键盘扫描*/
{
while(1)
{
P2=0xff;/*P2口拉高*/
P2=0xfe;/*第一行置低*/
本实验系统中的键盘在硬件上采用查询方式工作,键盘采用矩阵键盘有16个按键,见第六章实验箱硬件资料。
2.实验内容
a.根据流程图在Keil编译环境下编写程序,生成*.HEX文件,要求是任意按下键盘,要求能在LED上将按下的键对于的十六进制数显示出来。
b.通过ISP软件将生成的*.HEX文件下载到单片机当中。
case 0xe7:P0=0xc6; break;
case 0xd7:P0=0xa1; break;
case 0xb7:P0=0x86; break;
case 0x77:P0=0x8e; break;
case 0x00:P0=0xc1; break;
}
}
}
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
键盘是由若干个按键开关组成,键的多少根据单片机应用系统的用途而定。键盘由许多键组成,而每个键相当于一个机械开关触点,当键按下时,触点闭合,当键松开时,触点断开。单片机接收到按键的触点信号后作相应的功能处理。因此对于单片机系统来说键盘接口信号是输入信号。
单片机的键盘接口分为独立式和矩阵式。独立式键盘的每个按键都有一个信号线与单片机电路相连,所有按键有一个公共地或公共正端,每个键相互独立互不影响。如图7-7所示,当按下键1时,无论其它键是否按下,键1的信号线就由1变0;当松开键1时,无论其它键是否按下,键1的信号线就由0变1。
MOV R4,#0 /*按键计数标号清除为0*/
MOV R1,#4 /*循环1执行4次*/
CLR PSW.5 /*PSW.5=0表示未按键*/
L1:
MOV A,R3
MOV P2,A /*由P2口送出扫描输出信号*/
MOV R5,#1
ACALL DELAY
MOV A,P2 /*读取P2数据以便判断是否有按键*/
case 0xbd:P0=0x82; break;
case 0x7d:P0=0xf8; break;
case 0xeb:P0=0x80; break;
case 0xdb:P0=0x90; break;
case 0xbb:P0=0x88; break;
case 0x7b:P0=0x83; break;
RL A
MOV R3,A
DJNZ R1,L1
BACK:
JNB PSW.5,NO_KEY /*设置是否按键*/
SETB FKEY /*若有按键FKEY=1*/
RET
NO_KEY:
CLR FKEY
RET
END
C语言程序:
#include<reg52.h>
#define uchar unsigned char
RET
G1:
ACALL SCAN /*执行按键扫描*/
JB FKEY,G1 /*等待按键放开*/
MOV A,KEYNUM
MOV DPTR,#TABLE /*找出按键码*/
MOVC A,@A+DPTR
RET
SCAN: /*键盘扫描控制程序*/
MOV R3,#0FEH /*加载扫描输出信号初值11111110B*/
查询方式是指在程序中用一段专门的扫描和读按键程序不停查询有无按键按下,确定键值。这种方式电路简单,但需要占用单片机的机器时间。
定时扫描方式是指利用单片机内的定时器来产生定时中断,然后在定时中断的服务程序中扫描,检查有无按键按下,确定键值。这种方式的电路也比较简单,不占用单片机的机器时间,但需要占用一个定时器,同时定时的时间不能过长,否则可能检测不到相应得按键。
实验八键盘扫描实验
一、实验目的
1.掌握中断键盘扫描编程方法。
2.掌握LED动态显示方法。
二、实验原理及实验内容
1. 实验原理
无论是单片机控制系统还是单片机测量系统,都需要一个人机对话装置,这种人机对话装置通常采用键盘和显示器。键盘是单片机应用系统中人机对话常用的输入装置,而显示器是单片机应用系统人机对话中的常用输出装置。
return P2;
else P2=0xfb;
}
else P2=0xfb;/*第三行置低*/
if ((P2&0xff)!=0xfb)
{
delay();
if ((P2&0xff)!=0xfb)
return P2;
else P2=0xf7;
}
else P2=0xf7; /*第四行置低*/
if ((P2&0xff)!=0xf7)
c.将K1拨动开关打到“on”的位置,离线运行程序,观察实验现象,是否满足要求。不满足实验要求时,检查实验代码。
三、参考程序
汇编程序:
FKEY EQU 20H.0 /*按键标志*/
KEYNUM EQU 30H /*按键编号变量*/
ORG 0000H
AJMP MAIN
MAIN:
ACALL KEYET
MOV @R0,A
矩阵式键盘的按键触点接于由行、列母线构成的矩阵电路的交叉处,每当一个按键按下时通过该键将相应的行、列母线连通。若在行、列母线中把行母线逐行置0(一种扫描方式),那么列母线就用来作信号输入线。矩阵式键盘原理图如图7-8所示。
图7-7独立式按键原理图图7-8矩阵式按键原理图
针对以上两大类键盘工作方式,单片机又有三种键盘扫描方式:查询方式;定时扫描方式和中断扫描方式。
{
case 0xee:P0=0xc0; break;/*0~F的键值*/
case 0xde:P0=0xf9; break;
case 0xbe:P0=0xa4; break;
case 0x7e:P0=0xb0; break;
case 0xed:P0=0x99; break;
{
delay();
if ((P2&0xff)!=0xf7)
return P2;
else return P2=0xfe;
}
}
}
四、实验仪器和设备
Keil软件;AT89S52实验平台;ATMEL ISP在线编程软件;
五、实验结果和数据分析
问题:
1.说明查询方式工作原理。
2.说明中断方式和查询方式的优缺点。
#define unit unsigned int
void delay();
uchar keyscan();
unit j,h;
void main()
{
uchar key;
P1=0xff; /*数码管使能*/
while (1)
{
key=keyscan();/*键盘值返回*/
delay();
switch(key)/*判断键值*/
中断扫描方式是指当有键按下时由相应的硬件电路产生中断信号,单片机在中断服务程序中扫描,检查有无按键按下,确定键值。这种方式硬件电路上必须要产生中断线,需要与门和非门来产生。但中断方式不占用单片机的机器时间,也不会出现定时方式时的检测不到键盘的情况。
另外,在扫描键盘时需处理键盘抖动问题,称为去抖。一般去抖可以采用软件方式完成,操作方法是,当检测到有键按下时,等待10ms左右时间,如果此按键仍然保持按下的状态,这是确认此按键,如果在100ms内连续检测到此按键按下,则不确认第二次按下的键。
ANL A,#0F0H
MOV R2,#4
L2:
JB ACC.4,N1/*累加器A位4若为1表示没按键*/
MOV KEYNUM,R4/*加载按键编号*/
SETB PSW.5/*按键标志设为1*/
N1:
INC R4/*按键编号加1*/
RR A/*检查下一位*/
DJNZ R2,L2
MOV A,R3 /*加载旧的扫描码*/
if ((P2&0xff)!=0xfe) //判断是否有键按下
{
delay();/*去抖动*/
if((P2&0xff)!=0xfe)
return P2;/*返回键值*/
else P2=0xfd;
}
else P2=0xfd;/*第二行置低*/
if ((P2&0xff)!=0xfd)
{
delay();
if ((P2&0xff)!=0xfd)
相关文档
最新文档