单片机之键盘工作原理ppt课件.ppt

上传人:小飞机 文档编号:1655754 上传时间:2022-12-13 格式:PPT 页数:31 大小:1.60MB
返回 下载 相关 举报
单片机之键盘工作原理ppt课件.ppt_第1页
第1页 / 共31页
单片机之键盘工作原理ppt课件.ppt_第2页
第2页 / 共31页
单片机之键盘工作原理ppt课件.ppt_第3页
第3页 / 共31页
单片机之键盘工作原理ppt课件.ppt_第4页
第4页 / 共31页
单片机之键盘工作原理ppt课件.ppt_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《单片机之键盘工作原理ppt课件.ppt》由会员分享,可在线阅读,更多相关《单片机之键盘工作原理ppt课件.ppt(31页珍藏版)》请在三一办公上搜索。

1、,键盘工作原理,1. 按键输入的特点 键盘实质上是一组按键开关的组合。通常使用的是触点式的机械弹性开关。利用机械触点的通断,实现按下时开关导通,释放时开关断开的功能。 按键触点的一端和单片机的I/O端口引脚连接,另一端与电压信号相连,触点的通断即可引起端口引脚上的电压变化,单片机通过程序读入I/O端口引脚电平信号便可判断按键的状态。如下图所示。,当按键未按下压时,Px.n端口为高电平;按压按键后为低电平。,按键在闭合和断开时,触点会存在抖动现象:,图为键闭合时列线电压波形。键闭合和断开过程中存在抖动期(呈现一串负脉冲),抖动时间长短与开关的机械特性有关,一般为510ms之间;稳定闭合期由操作员

2、的按键动作所确定,一般为数百毫秒到几秒。为了保证CPU对键的闭合做一次处理,必须去除抖动,在键的稳定闭合或断开时,读键的状态。,软件消抖方法:当判别到键盘上有键闭合后,延时一段时间再 判别键盘的状态,若仍有键闭合,则认为键盘 上有一个键处于稳定的闭合状态,否则认为键 抖动。,键盘有两种结构:独立式按键和矩阵式按键。,1.独立式按键 独立式键盘中每个按键都单独连接到单片机的一个I/O端口引脚上。,特点是电路简单,但占用I/O口线较多。,例:按下按键,对应的LED灯亮,#includevoid delay(unsigned int z)unsigned int x,y;for(x=z;x0;x-)

3、 for(y=125;y0;y-);void main() unsigned char key; P2=0 x00; P0=0 x01; while(1) key=P0; if(key!=0 x01) delay(10); if(key!=0 x01) P2=key; ,实例 独立按键识别,【要求】采用独立按键方式实现下述功能:开机时LED全熄,然后根据按键动作使相应灯亮,并将亮灯保持到按压其它键时为止。,做输入,先写1, 按键的闭合电平为0, 但LED的驱动电平为1,故不能直接将P0口的状态送到P2口,而应使其先取反再送出;, 使按键按下LED点亮,松开时保持不变。,【分析】,#includ

4、evoid delay(unsigned int z)unsigned int x,y;for(x=z;x0;x-) for(y=125;y0;y-);void main() unsigned char key; P2=0 x00; P0=0 x0f; while(1) key=P0; if(key!=0 x0f) delay(10); if(key!=0 x0f) P2=key; ,实例 键控流水灯,【要求】 K1为“启动键”,按压K1可产生“自下向上” 的流水灯运动; K2 为“方向键”,按压K2可产生“自下向上”运动。,run,(=1),(=0),dir,(=1),(=0),获取按下键值

5、(键值函数)流程,键值:按压K1xxxx xx10(0 x02)按压K2xxxx xx01(0 x01)无按键0000 xx11(0 x03),按键动作判断(P0 & 0 x03)是否等于 0 x03若是,则无按键动作,反之则有按键动作,则由得到的键值对应确定dun、dir的值,用switch语句实现。,temp=P0,亮灯P2输出:xxxx 0001xxxx 0010 xxxx 0100 xxxx 1000,LED循环流程,LED状态码数组 = 0 x01,0 x02,0 x04,0 x08,分析搞清全部逻辑关系,总体关系(主函数)流程,(键值函数),参考程序:,#includeunsign

6、ed char led=0 x01,0 x02,0 x04,0 x08; /从上到下的流水灯bit run,dir;unsigned char temp,i;void delay(unsigned int z)unsigned int x,y;for(x=z;x0;x-) for(y=125;y0;y-); void main() while(1) temp=P0 ,if(run=1) if(dir=1) for(i=0;i=1;i-) P2=ledi-1; delay(200); else P2=0;,实例 采用共阴极的数码管,实现功能要求:当按键按下时显示“ L2”,松开时显示“H3”,独

7、立按键+数码管综合,算出L2H3的段码分别为:0 x38,0 x5b,0 x76,0 x4f,位选信号构成位码:0 xfe,0 xfd,参考程序,#include#define uint unsigned int#define uchar unsigned charuchar duan=0 x38,0 x5b,0 x76,0 x4f; /共阴L2H3uchar wei=0 xfe,0 xfd;sbit button=P16;void delay(uint z)uint x,y;for(x=z;x0;x-)for(y=125;y0;y-);,void main() uchar i; while(

8、1) if(button=0) delay(10); if(button=0) for(i=0;i2;i+)P3=weii;P2=duani;delay(10);elsefor(i=0;i2;i+)P3=weii; P2=duani+2;delay(10); ,运行效果,2、 行列式键盘原理与编程,独立式键盘的电路简单,易于编程,但占用的IO口线较多,当需要较多按键时可能产生IO资源紧张问题。,独立式键盘,当键盘上没有键闭合时,所有的行线和列线断开,列线都呈高电平。当键盘上某一个键闭合时,则该键所对应的列线与行线短路。此时列线的电平由相应的行线的电位所决定。,行列式键盘将IO口分为行线和列线,

9、按键跨接在行线和列线上,列线通过上拉电阻接正电源。,和行线连接的单片机端口,作为输出,和列线连接的单片机端口,作为输入,键盘扫描原理(以P3口接44键盘为例),判断是否有键压下 写P3端口0 xf0(行线电平=0,列线电平=1) 读P3端口:若P3 = 0 xf0无按键压下,不必后续判断; 若P3 0 xf0 有键压下,键盘扫描原理(以P3口接44键盘为例),去除键的机械抖动 其方法为:当判别到键盘上有键闭合后,延时一段时间再判别键盘的状态,若仍有键闭合,则认为键盘上有一个键处于稳定的闭合状态,否则认为键抖动。,判别闭合键的键值 其方法为:对键盘的行线进行扫描,P3口依次循环输出0 xfe、0

10、 xfd、0 xfb和0 xf7,相应地读P3口,若高4位P3.7P3.4全为“1”,则说明该行上没有键闭合;否则,这一行上有键闭合,而且就是行线为0,列线为0的交叉键。高4位和低四位合并即得到键模。,键模按键压下时形成的电平编码值 键值按键的人为定义值,整个4x4键盘的键模:0 xee、0 xde、0 xbe、0 x7e0 xed、0 xdd、0 xbd、0 x7d0 xeb、0 xdb、0 xbb、0 x7b0 xe7、0 xd7、0 xb7、0 x77,第一行的键模:11101110、11011110、10111110、01111110, 形成压下键的键模,将各键的键模依次存放在一个数组

11、中,其顺序号就是键值。,利用循环变量i控制比对过程,两者相等时的i就是闭合键的键值。,行列式键盘的特点:占用IO口线少,但软件过程复杂。,Unsigned char key_val=0 xee,0 xde,0 xbe,0 x7e,0 xed,0 xdd,0 xbd,0 x7d, 0 xeb,0 xdb,0 xbb,0 x7b,0 xe7,0 xd7,0 xb7,0 x77,for(i=0;i16;i+)if(key_vali=P3)return i;,实例 行列式键盘,要求按下任意按键后,数码管上显示该键的键值(0F),参考程序,#includeunsigned char duan=0 x3f

12、,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f, 0 x77,0 x7c,0 x39,0 x5e,0 x79,0 x71;unsigned char key_val=0 xee,0 xde,0 xbe,0 x7e,0 xed,0 xdd,0 xbd,0 x7d,0 xeb, 0 xdb,0 xbb,0 x7b,0 xe7,0 xd7,0 xb7,0 x77;unsigned char key_scan=0 xfe,0 xfd,0 xfb,0 xf7;void delay(unsigned int z) unsigned int x,y; for(x=z;x0;x-) for(y=125;y0;y-);void main() unsigned char i,j; P2=0; while(1) P3=0 xf0;if(P3!=0 xf0) delay(10); if(P3!=0 xf0),for(i=0;i4;i+) P3=key_scani; for(j=0;j16;j+ if(key_valj=P3) P2=duanj; ,实例 运行效果,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号