单片机实例之按键原理

上传人:za****8 文档编号:23471275 上传时间:2021-06-09 格式:PPT 页数:30 大小:583.01KB
收藏 版权申诉 举报 下载
单片机实例之按键原理_第1页
第1页 / 共30页
单片机实例之按键原理_第2页
第2页 / 共30页
单片机实例之按键原理_第3页
第3页 / 共30页
资源描述:

《单片机实例之按键原理》由会员分享,可在线阅读,更多相关《单片机实例之按键原理(30页珍藏版)》请在装配图网上搜索。

1、课题三(实例) 之按键n任务一 独立式按键控制的数码管显示n任务二 矩阵键盘数码管显示 任务一 独立式按键控制的数码管显示 本任务是利用独立按键实现对数码进行控制,记录按键的次数,每当按下一次键时,计数器加1,将计数器的值送数码管显示,当计数器加到10时,则归零重新计数 。设P0口连接按键,对Key1进行计数 P1口连接数码管 图6-2 键盘控制原理图 为了实现用按键控制LED的显示,首先要使单片机读入按键的状态,再根据键盘的状态去控制LED的亮灭。对LED的控制,在前面的课题中已经讲了,这里不再作重点讲解,仅仅作为一个键盘控制对象的例子。 根据图6-2所示的硬件电路,每当按下按键时,单片机引

2、脚P0.0将为低电平,程序运行时,需要检测P0.0引脚是否为低电平,若P0.0引脚为低电平,表示按键已按下。 当每次按下按键时,则使P1口输出的数据变化一次,输出不同数据,对应的程序设计框图如图6-4所示。程序设计分析 初始化计数器+1送显是否按下键否是图6-4 键控计数显示流程图 一、按键的特性 作为机械按钮,键按下或者放开时,都存在着接通或断开的不稳定现象,从而使信号电平具有抖动现象,这种现象称为抖动。 由于按键的抖动,使按键对应的输出电平若干个干扰脉冲,如图6-5所示。为了保证每按下一次按键,单片机程序只动作一次,就需要消除因按键的抖动现象而引起的错误动作,具体的处理方式分为硬件消除抖动

3、和软件消除抖动,简称消抖。键盘电路原理抖动时间10ms开关动作时间100ms“ 1 ” “0”10ms图6-5 按键的波形 二、 硬件消抖 图中两个“与非”门构成一个RS触发器。当按键未按下时,输出为1;当键按下时,输出为0。此时即使因按键的机械性能,使按键因弹性抖动而产生瞬时断开(抖动跳开B),中要按键不返回原始状态A,双稳态电路的状态不改变,输出保持为0,不会产生抖动的波形。 也就是说,即使B点的电压波形是抖动的,但经双稳态电路之后,其输出为正规的矩形 波。 硬件消抖动一般用于按键较少的情况。 三、软件消抖 如果按键较多,常用软件方法去抖,即检测出键闭合后执行一个延时程序,产生5ms10m

4、s的延时,让前沿抖动消失后再一次检测键的状态,如果仍保持闭合状态电平,则确认为真正有键按下。 当检测到按键释放后,也要给5ms10ms的延时,待后沿抖动消失后才能转入该键的处理程序。 延时等待10ms 仍有按键信号?Y 有按键信号?NY N按键处理 按键释放?NY 图6-7 软件消抖的流程图 思考:为什么要等键释放? 若不等会出现什么情况? 1、C语言程序:#include sbit P0_0=P00;unsigned char count;unsigned char code table=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7

5、f,0 x6f;void delay10ms() unsigned char i,j;for(i=250;i0;i-)for(j=248;j0;j-); void main(void) while(1) if(P0_0=0) delay10ms(); if(P0_0=0) count+; if(count=10) count=0; while(P0_0=0); P1=tablecount; 2、汇编程序ORG 00hSTART: MOV R1,#00H ;初始化R1为0,REL: JB P0.3,REL ;判断SP1是否按下LCALL DELAY ;若按下,则延时10ms左右JB P0.3,R

6、EL ;再判断SP1是否真得按下MOV A,R1MOV DPTR,#TABLEMOVC A,A+DPTRMOV P1,AINC R1JNB P0.3,$ ;等待SP1释放CJNE R1,#10,REL SJMP START ;继续对K1按键扫描DELAY: MOV R6,#20 ;延时10ms子程序L1: MOV R7,#248DJNZ R7,$DJNZ R6,L1RETTABLE: DB 3FH,06H,5BH,4FH,66H,6DH DB 7DH,07H,7FH,6FH END 练 习 : 编 写 程 序 使 得 K0按 下 时 显 示 1, K7按 下 时 显 示 8, 无 键按 下 时

7、 显 示 0, 有 多 键 按 下 时 显 示 P。 任务二获取矩阵键盘的键值 本任务目标是用矩阵键盘控制LED实现一个矩阵键盘的按键值。 编 写 程 序 使 得 P0显 示 按 键 的 行 号 , P2口 显 示 按 键 的 列 号 。 在单片机程序中,对多个键的处理应包括以下三项内容:n 键输入检查键盘是否有键被按下,并消除按键抖动。n键译码(扫描法或反转法)即获取是哪个键按下,得到按键的行号,和列号;有时还需计算键码(每个按键编号,对于4*4的矩阵按键,键码共16个为0,15)。n键结束即检查按键是否抬起,这样使得一次按键只做一次处理。n键处理 根据键码执行不同按键处理程序段。一、键盘处

8、理 n检查键盘是否有键被按下,并消除按键抖动。n代码flag=0;P1=0 x0F; /高四位是列线输出0,低四位是行线读入前写1if(P1if(P1键输入 扫描键盘 行列式键盘的具体识别方法有扫描法和反转法。n扫描法即用列线输出,行线输入(可交换行线和列线的输入、输出关系)。其中,列线逐列输出0,某行有键按下,行线有0输入,若无按键,行线输入全部为1。当有键按下时,根据行线和列线可最终确定哪个按键被按下。n反转法行线和列线交换输入、输出,分两步获取按键的键号,但是在多键同时按下时不能准确判断。键译码 n代码 获取行号 temp = 0; P1=0 x0F; /低四位输入 输入前写1 /列为高

9、四位 低电平输出 temp=P1; /读P1口 temp=(temp /屏蔽高四位 switch(temp)case 1: row=0; break; / p1.0 被拉低case 2: row=1; break; / p1.1 被拉低case 4: row=2; break; / p1.2 被拉低case 8: row=3; break; / p1.3 被拉低 default: row=16; /多个按键被按下,或无键按下 键译码反转法 n代码 获取列号 P1=0 xF0; /列高四位输入,输入前写1 / 行为低四位,低电平输出 temp=P1; /读P1口 temp= (temp4) sw

10、itch(temp)case 1: col=0; break; / p1.4 被拉低case 2: col=1; break; / p1.5 被拉低case 4: col=2; break; / p1.6 被拉低case 8: col=3; break; / p1.7 被拉低default: col=16; /多个按键被按下,或无键按下 n计算键值 key = row*4 + col; 键译码反转法 n代码 获取列号(row,col)uchar code scan4=0 xEF,0 xDF,0 xBF,0 x7F; for(i=0;i4;i+) P1= scani; /低四位输入 扫描第0列,

11、p1.4为低电平 temp=P1; /读P1口 temp= (temp /屏蔽高四位 if(temp=1) / p1.0 被拉低 row=0,col=I,break; else if(temp=2) / p1.1 被拉低 row=1,col=i,break; else if(temp=4) / p1.2 被拉低 row=2,col=i,break; else if(temp=8) / p1.3 被拉低 row=3,col=i,break; else row=16,col=16; / 多个按键被按下,或无键按下n计算键值 key= 键译码扫描法 n即检查按键是否抬起,这样使得一次按键只做一次处理

12、。n代码flag=0;P1=0 x0F;if(P1if(P1键结束 n根据键码执行不同按键处理程序段。n代码unsigned char code table=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f;P0= tablerow;P2= tablecol;键处理 主程序while(1)if(有键按下)键译码等待键结束键处理 练 习 : 编 写 程 序 使 得 P0显 示 键 码 的 十 位 , P2口 显 示 键 码 的 个位 。 任务三简易计算器 本任务目标是用矩阵键盘控制数码管实现一个简易计算器。 1 2 3 4 5

13、 6 A B C D 654321 D C B A Title Number RevisionSize B Date: 6-Mar-2007 Sheet of File: G:桌面2005-1005电技Protel实训MyDesign.ddbDrawn By: P0 AT89S51 +5V P2 P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7图4-7 简易计算器的电路原理图 在单片机程序中,对多个键的处理应包括以下三项内容:n 键输入 检查键盘是否有键被按下,并消除按键抖动,获得或规定(单个按键)按键的键号。可以用动态显示函数代替消抖用的延时函数。n键译码 即获

14、取是哪个键按下,用键值给各个按键编号,对于4*4的矩阵按键,键值共16个为0,15。可将键值分配为:数字键09、功能键0AH0FH,是按键在物理位置上的人为规定数值。n键结束n键处理 根据键值执行不同程序段。如:若键值属于数字,则调用显示数字子程序;若键值属于功能键,则进行多分支转移,执行各个功能程序段。键盘处理 初始化有键按下?是否处理?有键按下?延时消抖(调用动态显示函数) 调用键盘处理函数进行具体处理并置处理标志调用动态显示函数清处理标志没有已处理没有图4-10 带动态显示的键盘消抖程序框图 作业:n编写程序用一个数码管静态显示矩阵按键的键码0F。分别用扫描法、反转法实现键码识别。n编写程序用两个数码管动态显示矩阵按键的键码0015的十位和个位。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

相关资源

更多
正为您匹配相似的精品文档
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!