单片机之键盘工作原理
单片机键盘原理及实现

优选文档§键盘接口技术一、键盘输入应解决的问题键盘是一组按键的会集,它是最常用的单片机输入设备.操作人员可以经过键盘输入数据或命令,实现简单的人机通讯。
键是一种常开型按钮开关,平时 ( 常态 ) 键的二个触点处于断开状态,按下键时它们才闭合(短路 ) 。
键盘分编码键盘和非编码键盘。
键盘上闭合键的鉴别由专用的硬件译码器实现并产生编号或键值的称为编码键盘,如: ASCⅡ码键盘、 BCD码键盘等;靠软件识其余称为非编码键盘。
在单片机组成的测控系统及智能化仪器中用得最多的是非编码键盘。
本节重视议论非编码键盘的原理、接口技术和程序设计。
键盘中每个按键都是—个常开关电路,以以下列图。
11.按键的确认: P1.7=1 无按键;P1.7=0 有按键;2.去抖动去抖动的方法:①硬件去抖动采用RS触发器:优点 :速度快,实时,缺点 :增加了硬件成本② 软件去抖动采用延时方法延时 5—10ms延时5—10ms P1.7=0确认P1.7=0P1.7=1( 去前沿抖动 )(去后沿抖动) 二、独立式键盘每个 I/O 口接一个按, S1S2⋯⋯⋯⋯⋯⋯⋯⋯⋯ .S8件:START: MOV P1 ,#0FFH ;置 P1 口高平JNB P1.0, RS1 ; S1 按下 , 程序去行 RS1JNB P1.1, RS2 ; S2 按下 , 程序去行 RS2JNB P1.2, RS3 ; S3 按下 , 程序去行 RS3JNB P1.3, RS4 ; S4 按下 , 程序去行 RS4JNB P1.4, RS5 ; S5 按下 , 程序去行 RS5JNB P1.5, RS6 ; S6 按下 , 程序去行 RS6JNB P1.6, RS7 ; S7 按下 , 程序去行 RS7JNB P1.7, RS8 ; S8 按下 , 程序去行 RS8AJMP START ; 描按⋯⋯⋯⋯ .RS1: AJMP PK1 ;RS2: AJMP PK2 ;RS3: AJMP PK3 ;RS4: AJMP PK4 ;RS5: AJMP PK5 ;RS6: AJMP PK6 ;RS7: AJMP PK7 ;RS8: AJMP PK8 ;AJMP START ; 无按下 , 描⋯⋯⋯⋯⋯⋯⋯PK1:⋯⋯⋯ ..;按S1功能理程序AJMP START;理S1按后,描PK2:⋯⋯⋯ ..;按S2功能理程序AJMP START⋯⋯⋯⋯⋯⋯⋯ .PK8:⋯⋯⋯⋯⋯⋯;按S8功能理程序AJMP START;理S8按后,描点 :, 程序简单 .缺点 :太浪源适用于按少、 I/O 口空的合。
单片机c语言程序设计---矩阵式键盘实验报告

单片机c语言程序设计---矩阵式键盘实验报告课程名称:单片机c语言设计实验类型:设计型实验实验项目名称:矩阵式键盘实验一、实验目的和要求1.掌握矩阵式键盘结构2.掌握矩阵式键盘工作原理3.掌握矩阵式键盘的两种常用编程方法,即扫描法和反转法二、实验内容和原理实验1.矩阵式键盘实验功能:用数码管显示4*4矩阵式键盘的按键值,当K1按下后,数码管显示数字0,当K2按下后,显示为1,以此类推,当按下K16,显示F。
(1)硬件设计电路原理图如下仿真所需元器件(2)proteus仿真通过Keil编译后,利用protues软件进行仿真。
在protues ISIS 编译环境中绘制仿真电路图,将编译好的“xxx.hex”文件加入AT89C51。
启动仿真,观察仿真结果。
操作方完成矩阵式键盘实验。
具体包括绘制仿真电路图、编写c源程序(反转法和扫描法)、进行仿真并观察仿真结果,需要保存原理图截图,保存c源程序,总结观察的仿真结果。
完成思考题。
三、实验方法与实验步骤1.按照硬件设计在protues上按照所给硬件设计绘制电路图。
2.在keil上进行编译后生成“xxx.hex”文件。
3.编译好的“xxx.hex”文件加入AT89C51。
启动仿真,观察仿真结果。
四、实验结果与分析void Scan_line()//扫描行{Delay(10);//消抖switch ( P1 ){case 0x0e: i=1;break;case 0x0d: i=2;break;case 0x0b: i=3;break;case 0x07: i=4;break;default: i=0;//未按下break;}}void Scan_list()//扫描列{Delay(10);//消抖switch ( P1 ){case 0x70: j=1;break;case 0xb0: j=2;break;case 0xd0: j=3;break;case 0xe0: j=4;break;default: j=0;//未按下break;}}void Show_Key(){if( i != 0 && j != 0 ) P0=table[ ( i - 1 ) * 4 + j - 1 ];else P0=0xff;}五、讨论和心得。
单片机之键盘工作原理

利用循环变量i控制比对过程,两者相等时的i就是闭合键的键值。
for(i=0;i<16;i++) { if(key_val[i]==P3) return i; }
③判别闭合键的键值 其方法为:对键盘的行线进行扫描,P3口依次循环输 出0xfe、0xfd、0xfb和0xf7,相应地读P3口,若高4位 P3.7~P3.4全为“1”,则说明该行上没有键闭合;否则, 这一行上有键闭合,而且就是行线为0,列线为0的交叉键。 高4位和低四位合并即得到键模。
键模——按键压下时形成的电平编码值 键值——按键的人为定义值
当按键未按下压时,Px.n端口为高电平;按压按键后为 低电平。
按键在闭合和断开时,触点会存在抖动现象:
+5V
无抖动
理想波形 A 实际波形
按下抖动
B 稳定闭合
释放抖动
+5V
有抖动
图为键闭合时列线电压波形。键闭合和断开过程中存在抖 动期(呈现一串负脉冲),抖动时间长短与开关的机械特性有关, 一般为5~10 ms之间;稳定闭合期由操作员的按键动作所确定, 一般为数百毫秒到几秒。为了保证CPU对键的闭合做一次处理, 必须去除抖动,在键的稳定闭合或断开时,读键的状态。
①判断是否有键压下 写P3端口0xf0(行线电平=0,列线电平=1) 读P3端口:若P3 = 0xf0→无按键压下,不必后续判断; 若P3 ≠0xf0 →有键压下
②去除键的机械抖动 其方法为:当判别到键盘上有键闭合后,延时一段时 间再判别键盘的状态,若仍有键闭合,则认为键盘上有一 个键处于稳定的闭合状态,否则认为键抖动。
嵌入式实验三 键盘检测控制实验

2
ቤተ መጻሕፍቲ ባይዱ
嵌入式技术及应用 实验三
实验三 键盘实验
一、 实验目的 掌握单片机系统中矩阵键盘的编程控制方法,学会实时程序的调试技巧。
二、 实验原理 键盘是单片机应用中常用的输入设备,在应用系统中,操作人员可通过键盘
向系统输入指令、地址和数据,实现简单的人机通信。 键盘实际上是一组按键开关的集合,平时总是处于断开状态,当按下键时它
才闭合。按键在闭合和断开时,触点会存在抖动现象,抖动时间一般为 5-10ms, 如下图示:
键盘的处理主要涉及以下 3 个方面的内容: 按键的识别
所接 I/O 口线是高还是低电平(根据连接情况) 抖动的消除
硬件消抖 软件消抖(延时) 判断键值 独立式键盘 矩阵式键盘 实验板电路原理图如下:
1
嵌入式技术及应用 实验三
三、 实验内容 按下 16 个矩阵键盘依次在数码管上显示 1-16 的平方。如按下第一个显示 1,
第二个显示 4...
四、
实验步骤 1、 按实验内容要求在 µ Vision 中创建项目,编辑、调试、编译程序。 2、 将编译生成的目标码文件(后缀为.Hex)下载到实验板上。 3、 观察实验运行结果并记录。
基于单片机的键盘和LED数码管工作原理

基于单片机的键盘和LED数码管工作原理摘要:键盘和显示器是微机最常见的输入输出设备。
本文介绍键盘和LED显示器的基本工作原理,并给出在8051基础上的电路结构及C语言代码。
关键字:键盘,LED,单片机键盘是微型计算机系统中最基本、最常见的输入设备。
在各种工业过程的计算机控制和监视系统中,广泛应用发光二极管向用户提供提示。
由发光二极管可以构成7段/8段LED显示器,用于显示工作状态、参数数值和故障位置。
一.键盘的工作原理键盘实际上是一组按键开关的集合,平时按键开关总是处于断开状态,当按下键时它才闭合。
(一)键盘的基本介绍1.键盘的功能键盘接口必须具有4个基本功能:1.去抖动2.防串键3.识别被按键并产生与之对应的键码4.释放键而键码产生后如何去实现按键的特定功能,是操作系统和应用程序的任务2.键盘的分类根据按键开关的排列方式,键盘可分为线性键盘和矩阵键盘。
线性键盘:硬件连接和接口程序都很简单,只适用于按键少的场合,因为线性键盘有多少按键,就需要有多少根连线与微机输入端口相连。
矩阵键盘:将按键排成n行m列,每个按键占据行列的一个交点,需要的外连接线数目是m+n,而容许的最大按键数是m*n,显然可以减少微机接口的连线,是一般微机常采用的键盘结构。
3.键盘与单片机的连接方式矩阵键盘的连接方法有多种。
可直接连接于单片机的I/O口线;可利用扩展的并行I/O口连接;也可利用可编程的键盘、显示接口芯片(如8297)进行连接等等。
其中,利用扩展的并行I/O口连接方便灵活,在单片机应用系统中比较常用。
下图就是通过8255A芯片扩展的并行I/O口连接的矩阵键盘。
图 1 微处理器和键盘接口接线示意(二)键盘的工作过程被按键的识别和键码的产生是键盘接口要解决的主要问题,可以通过软硬结合的方法来解决。
通常识别被按键有两种方法:行扫描法和线反转法。
实际微型计算机系统中以行扫描法应用最广,其基本思想是:由程序对键盘进行逐行扫描,通过检测到的列状态来确定闭合键,需要输出端口、输入端口各1个。
单片机按键原理

单片机按键原理
单片机按键原理是利用按键的机械接触来完成开关动作。
当按下按键时,按键的触点会接通按键两端的电路,形成通路,从而使电流得以流动。
与此同时,可以通过单片机的IO口进行
监测,通过读取IO口的电平状态可以判断按键是否被按下。
在单片机按键电路中,通常需要加入上拉电阻或下拉电阻来确保按键在未被按下时具有一个确定的电平状态。
当按键未被按下时,上拉电阻或下拉电阻会将按键上或下的电平拉高或拉低,并且可以减小电路中的干扰。
当按键被按下时,IO口所连接的引脚的电平状态会发生改变,单片机可以通过检测到引脚电平状态的变化来判断按键被按下的动作。
为了避免按键的抖动问题(由于机械接触而导致的短时间内多次的接通和断开),可以在软件中增加延时或采用其他滤波方法来解决。
通过单片机按键原理,可以实现诸如控制、输入、菜单选择等功能。
在工程实践中,常常需要考虑到按键的稳定性、响应速度、布局等因素,以提高整个系统的可靠性和用户体验。
单片机矩阵键盘

汇报人: 202X-01-04
contents
目录
• 单片机矩阵键盘概述 • 单片机矩阵键盘硬件设计 • 单片机矩阵键盘软件编程 • 单片机矩阵键盘调试与测试 • 单片机矩阵键盘优化与扩展
01 单片机矩阵键盘 概述
定义与特点
定义
单片机矩阵键盘是一种由行线和 列线组成的键盘,通过按键的行 和列交叉点来识别按键。
用于显示输入的信息或状态, 如数码管、液晶显示屏等。
电源模块
为整个系统提供稳定的电源, 保证系统的正常工作。
电路连接
01
矩阵键盘的行线和列线分别连接到单片机的输入/输出端口,通 过软件扫描方式检测按键状态。
02
单片机控制模块与显示模块连接,将需要显示的信息传输给显
示模块。
电源模块为整个系统提供稳定的电源,保证系统的正常工作。
在通讯设备领域,单片机矩阵键盘可以用 于手机、电话等设备的操作面板,实现拨 号、挂断等功能。
பைடு நூலகம்
02 单片机矩阵键盘 硬件设计
硬件组成
01
02
03
04
矩阵键盘模块
由行线和列线组成的键盘矩阵 ,按键被安排在行线和列线的
交叉点上。
单片机控制模块
用于接收和处理来自矩阵键盘 的信号,控制整个系统的运行
。
显示模块
软件编程
编写单片机程序,用于扫描矩阵键盘并识 别按键按下事件。
测试方法
按键响应时间测试
测试从按键按下到单片机响应 的时间,确保在合理范围内。
按键防抖测试
测试按键防抖功能是否正常, 即在按键按下和释放时是否能 够正确识别。
多键同时按下测试
测试在多个按键同时按下时, 单片机是否能够正确识别并处 理。
键盘电路

键盘电路在单片机应用系统中,除了复位按键外,可能还需要其他按键,如键盘按键,以便控制系统的运行状态或向系统输入运行参数。
键盘电路一般由键盘接口电路、按键(由控制系统运行状态的功能键和向系统输入数据的数字键组合)以及键盘扫描程序等部分组成。
1、按键结构及其电压波形在单片机控制系统中广泛使用的机械键盘的工作原理是:按下键帽时,按键内的复位弹簧被压缩,动片触点与静片触点相连,按键两个引脚连通,接触电阻大小与按键触点面积及材料有关,一般在数十欧姆以下;松手后,复位弹簧将动片弹开,使动片触点与静片触点脱离接触,两引脚返回断开状态。
可见,机械键盘或按扭的基本工作原理就是利用动片触点和静片触点的接触和断开来实现键盘或按钮两引脚的通、断。
在如图所示的键盘电路中,按键没有被按下时,P1口内部上拉电阻将P1.3-P1.0引脚置为高电平,而当S3-S0之一被按下时,相应按键两引脚连通,P1口对应引脚接地。
在理想状态下,按键引脚电压变化如图6-29(a)所示。
但实际上,在按键被按下或释放的瞬间,由于机械触点弹跳现象,实际按键电压波形如图6-29(b)所示,即机械按键在按下和释放瞬间存在抖动现象。
抖动时间的长短与按键的机械特性有关,一般在5~10ms之间,而按键稳定闭合期的长短与按键时间有关,从数百毫秒到数秒不等。
为了保证按键由按下到松开之间仅视为一次或数次输入(对于具有重复输入功能的按键),必须在按键或软件上采取去抖动措施,避免一次按键输入一串数码。
硬件上,可利用单稳态电路或RS触发器消除按键抖动现象,但在单片机应用系统中最常采用的方法是利用软件延迟方式消除按键抖动问题,这样可以不增加硬件成本。
因此,在单片机系统中按键识别过程是:通过随机扫描、定时中断扫描或中断监控方式发现按键被按下后,延时10~20ms(因为机械按键由按下到稳定闭合的时间为5~10ms)再去判断按键是否处于按下状态,并确定是哪个按键被按下。
对于每按一次仅视为一次输入的按键设定来说,在按键稳定闭合后对按键进行扫描,读出按键的编码(或称为键号),执行相应操作;对于具有重复输入功能的按键设定来说,在按键稳定闭合期内,每个特定时间,如250ms或500ms 对按键进行检测,当发现按键仍处于按下状态时,就输入该键,直到按键被释放。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
10kΩ
10kΩ
10kΩ
10kΩ
和列线连接的单片机端 口,作为输入
当键盘上没有键闭合时,所有的行线和列线断开,列线都 呈高电平。当键盘上某一个键闭合时,则该键所对应的列线与行 线短路。此时列线的电平由相应的行线的电位所决定。
键盘扫描原理(以P3口接4×4键盘为例)
键盘扫描原理(以P3口接4×4键盘为例)
第一行的键模: 11101110、11011110、 10111110、01111110 整个4x4键盘的键模: 0xee、0xde、0xbe、0x7e 0xed、0xdd、0xbd、0x7d 0xeb、0xdb、0xbb、0x7b 0xe7、0xd7、0xb7、0x77
④ 形成压下键的键模
将各键的键模依次存放 按压K1——xxxx xx10(0x02) 按压K2——xxxx xx01(0x01) 无按键——0000 xx11(0x03)
则由得到的键值对应确定dun、dir的值,用switch语句实现。
temp=P0&0x03; switch(temp) { case 0x02:run=1; dir=1; break; case 0x01:dir=0;break; }
实例
独立按键识别
【要求】采用独立按键方式实现下述功能:开机时LED全熄, 然后根据按键动作使相应灯亮,并将亮灯保持到按压其它键 时为止。
做输入, 先写1
【分析】
① 按键的闭合电平为0, 但LED 的驱动电平为1,故不能直接将 P0口的状态送到P2口,而应使 其先取反再送出; ② 使按键按下LED点亮,松开 时保持不变。
实例 运行效果
特点是电路简单,但占用I/O口线较多。
例:按下按键,对应的LED灯亮
#include<reg51.h> void delay(unsigned int z) { unsigned int x,y; for(x=z;x>0;x--) for(y=125;y>0;y--); } void main() { unsigned char key; P2=0x00; P0=0x01; while(1) { key=P0; if(key!=0x01) { delay(10); if(key!=0x01) P2=~key; } } }
理想波形
实际波形
按下抖动
稳定闭合
释放抖动
软件消抖方法:当判别到键盘上有键闭合后,延时一段时间再 判别键盘的状态,若仍有键闭合,则认为键盘 上有一个键处于稳定的闭合状态,否则认为键 抖动。
键盘有两种结构:独立式按键和矩阵式按键。 1.独立式按键
独立式键盘中每个按键都单独连接到单片机的一个 I/O端口引脚上。
键盘工作原理
1. 按键输入的特点 键盘实质上是一组按键开关的组合。通常使用的是触 点式的机械弹性开关。利用机械触点的通断,实现按下 时开关导通,释放时开关断开的功能。 按键触点的一端和单片机的I/O端口引脚连接,另 一端与电压信号相连,触点的通断即可引起端口引脚上 的电压变化,单片机通过程序读入I/O端口引脚电平信 号便可判断按键的状态。如下图所示。
独立按键+数码管综合
实例 采用共阴极的数码管 实现功能要求:当按键按下时显示“ L2”,松开时显示 “H3”
算出L2H3的段码分别为: 0x38,0x5b,0x76,0x4f 位选信号构成位码: 0xfe,0xfd
void main() { #include<reg52.h> uchar i; #define uint unsigned int while(1) #define uchar unsigned char uchar duan[]={0x38,0x5b,0x76,0x4f}; //共 { 阴"L2H3" if(button==0) uchar wei[]={0xfe,0xfd}; delay(10); sbit button=P1^6; if(button==0) for(i=0;i<2;i++) void delay(uint z) { { P3=wei[i]; uint x,y; P2=duan[i]; for(x=z;x>0;x--) delay(10); for(y=125;y>0;y--); } } else for(i=0;i<2;i++) { P3=wei[i]; P2=duan[i+2]; delay(10); } } }
当按键未按下压时,Px.n端口为高电平;按压按键后为 低电平。
按键在闭合和断开时,触点会存在抖动现象:
+5V
无抖动
理想波形 A 实际波形
按下抖动
B 稳定闭合
释放抖动
+5V
有抖动
图为键闭合时列线电压波形。键闭合和断开过程中存在抖 动期(呈现一串负脉冲),抖动时间长短与开关的机械特性有关, 一般为5~10 ms之间;稳定闭合期由操作员的按键动作所确定, 一般为数百毫秒到几秒。为了保证CPU对键的闭合做一次处理, 必须去除抖动,在键的稳定闭合或断开时,读键的状态。
if(run==1) { if(dir==1) for(i=0;i<=3;i++) { P2=led[i]; delay(200); } else for(i=4;i>=1;i--) { P2=led[i-1]; delay(200); } } else P2=0; } }
void main() { while(1) { temp=P0&0x03; switch(temp) { case 0x02: run=1;dir=1; //启动,自 上往下 break; case 0x01:dir=0; //自下往上 break; }
行列式键盘的特点:占用IO口线少,但软件过程复杂。
实例 行列式键盘 要求按下任意按键后,数码管上显示该键的键值(0~F)
参考程序
#include<reg51.h> unsigned char duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, 0x77,0x7c,0x39,0x5e,0x79,0x71}; unsigned char key_val[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb, 0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77}; unsigned char key_scan[]={0xfe,0xfd,0xfb,0xf7}; void delay(unsigned int z) { unsigned int x,y; for(x=z;x>0;x--) for(y=125;y>0;y--); } void main() { unsigned char i,j; P2=0; while(1) { P3=0xf0; if(P3!=0xf0) { delay(10); if(P3!=0xf0) } } } } for(i=0;i<4;i++) { P3=key_scan[i]; for(j=0;j<16;j++ if(key_val[j]==P3) P2=duan[j];
①判断是否有键压下 写P3端口0xf0(行线电平=0,列线电平=1) 读P3端口:若P3 = 0xf0→无按键压下,不必后续判断; 若P3 ≠0xf0 →有键压下
②去除键的机械抖动 其方法为:当判别到键盘上有键闭合后,延时一段时 间再判别键盘的状态,若仍有键闭合,则认为键盘上有一 个键处于稳定的闭合状态,否则认为键抖动。
参考程序
运行 效果
2、 行列式键盘原理与编程 独立式键盘的电路简单,易于编程,但占用的IO口线较多, 当需要较多按键时可能产生IO资源紧张问题。
独立式键盘
行列式键盘——将IO口分为行线和列线,按键跨接在行线 和列线上,列线通过上拉电阻接正电源。
+5V
和行线连接的单片机 端口,作为输出
P1.0 89S51 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7
#include<reg51.h> void delay(unsigned int z) { unsigned int x,y; for(x=z;x>0;x--) for(y=125;y>0;y--); } void main() { unsigned char key; P2=0x00; P0=0x0f; while(1) { key=P0; if(key!=0x0f) { delay(10); if(key!=0x0f) P2=~key; } } }
实例
键控流水灯
【要求】 K1为“启动键”,按压K1可产生“自下向上” 的流水灯运动; K2 为“方向键”,按压K2可产生“自下向上”运动。
启动 (=1) run 停止 (=0) ↓ dir ↑ (=0) (=1)
获取按下键值(键值函数)流程
按键动作判断——(P0 & 0x03)是否等于 0x03 若是,则无按键动作,反之则有按键动作
LED循环流程
亮灯P2输出:
xxxx xxxx xxxx xxxx
0001 0010 0100 1000
LED状态码数组[] = {0x01,0x02,0x04,0x08}
分析——搞清全部逻辑关系
总体关系(主函数)流程
(键值函数)
参考程序:
#include<reg51.h> unsigned char led[]={0x01,0x02,0x04,0x08}; // 从上到下的流水灯 bit run,dir; unsigned char temp,i; void delay(unsigned int z) { unsigned int x,y; for(x=z;x>0;x--) for(y=125;y>0;y--); }