版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课题六按键原理第1页,共42页,2022年,5月20日,8点23分,星期三课题目标 本课题的任务是用按键控制单片机实现显示,如图6-1所示。学习单片机对键盘信息的处理方法,学会用键盘控制单片机程序的运行。第2页,共42页,2022年,5月20日,8点23分,星期三课题分析 为了让单片机控制发光二极管,需要将发光二极管连接到单片机的端口上,图6-1就是实验电路板单片机对彩灯(发光二极管)控制的电路连接。在一个单片机系统中,为了实现人对单片机的控制,按键是最常用的输入设备之一。而要实现多个按键的输入识别与控制,先要学习并理解单个按键的输入与对应程序的处理方法,然后再学习对多个键进行处理。因此,将按
2、键任务分为单键控制LED显示和独立式按键控制两个任务来完成。 第3页,共42页,2022年,5月20日,8点23分,星期三任务一 独立式按键控制的LED显示 本任务是利用独立按键实现对LED进行控制,每当按下一次键时, LED显示方式变化左移一次,用以显示按键控制的结果。 第4页,共42页,2022年,5月20日,8点23分,星期三图6-2 键盘控制原理图第5页,共42页,2022年,5月20日,8点23分,星期三图6-3 LED显示原理图 第6页,共42页,2022年,5月20日,8点23分,星期三 为了实现用按键控制LED的显示,首先要使单片机读入按键的状态,再根据键盘的状态去控制LED的
3、亮灭。对LED的控制,在前面的课题中已经讲了,这里不再作重点讲解,仅仅作为一个键盘控制对象的例子。 根据图6-2所示的硬件电路,每当按下按键时,单片机引脚P0.0将为低电平,程序运行时,需要检测P0.0引脚是否为低电平,若P0.0引脚为低电平,表示按键已按下。 当每次按下按键时,则使P1口输出的数据变化一次,输出不同数据,对应不同的发光二极管被点亮,对应的程序设计框图如图6-4所示。程序设计分析第7页,共42页,2022年,5月20日,8点23分,星期三初始化LED左移是否按下键否是图6-4 按键控制LED流程图第8页,共42页,2022年,5月20日,8点23分,星期三 一、按键的特性 作为
4、机械按钮,键按下或者放开时,都存在着接通或断开的不稳定现象,从而使信号电平具有抖动现象,这种现象称为抖动。 由于按键的抖动,使按键对应的输出电平出现若干个干扰脉冲,如图6-5所示。为了保证每按下一次按键,单片机程序只动作一次,就需要消除因按键的抖动现象而引起的错误动作,具体的处理方式分为硬件消除抖动和软件消除抖动,简称消抖。键盘电路原理抖动时间10ms开关动作时间100ms“ 1 ”“0”10ms图6-5 按键的波形第9页,共42页,2022年,5月20日,8点23分,星期三1、 硬件消抖 硬件消抖采用硬件电路完成,图6-6所示的电路就是一种硬件消抖电路。I/O接口+5v图6-6 消除抖动电路
5、开关单片机第10页,共42页,2022年,5月20日,8点23分,星期三2、软件消抖 也可用软件方法消除抖动,而用软件消抖则一般是采用软件延时的方式,通过延时来换取读入稳定的数据。图6-7就是软件消抖的流程图。延时等待10ms 仍有按键信号?Y 有按键信号?NYN键盘处理 按键释放?NY图6-7 软件消抖的流程图第11页,共42页,2022年,5月20日,8点23分,星期三C语言程序:#include #include unsigned char count;void delay10ms(void)unsigned char i,j;for(i=250;i0;i-)for(j=248;j0;j
6、-);第12页,共42页,2022年,5月20日,8点23分,星期三void main(void) count=0 xfe; while(1) if(P0_3=0) delay10ms(); if(P0_3=0) P1=count; count=_crol_(count,1); while(P0_3=0); 第13页,共42页,2022年,5月20日,8点23分,星期三2、汇编语言程序 ORG 00h mov a,#0fehREL: JB P0.3,REL ;判断SP1是否按下 LCALL DELAY ;若按下,则延时10ms左右 JB P0.3,REL ;再判断SP1是否真得按下 mov p
7、1,a rl a JNB P0.3,$ ;等待SP1释放SJMP rel ;继续对K1按键扫描DELAY: MOV R6,#20 ;延时10ms子程序L1: MOV R7,#248 DJNZ R7,$ DJNZ R6,L1 RET END第14页,共42页,2022年,5月20日,8点23分,星期三 任务二独立式按键控制数码管显示 本任务是利用独立按键实现对数码管的控制,每当按下一次键时, 数码管显示按键次数0-9。第15页,共42页,2022年,5月20日,8点23分,星期三程序设计流程图分析初始化数码管显示是否按下键否是图6-5 按键控制数码管流程图第16页,共42页,2022年,5月20
8、日,8点23分,星期三1、C语言程序:#include unsigned char count;unsigned char code table=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f;void delay10ms(void)unsigned char i,j;for(i=250;i0;i-)for(j=248;j0;j-);第17页,共42页,2022年,5月20日,8点23分,星期三void main(void)while(1) if(P0_3=0) delay10ms(); if(P0_3=0) count+
9、; if(count=10) count=0; P1=tablecount; while(P0_3=0); 第18页,共42页,2022年,5月20日,8点23分,星期三2、汇编程序ORG 00hSTART: MOV R1,#00H ;初始化R1为0, REL: JB P0.3,REL ;判断SP1是否按下 LCALL DELAY ;若按下,则延时10ms左右 JB P0.3,REL ;再判断SP1是否真得按下 MOV A,R1 MOV DPTR,#TABLE MOVC A,A+DPTR MOV P1,A INC R1JNB P0.3,$ ;等待SP1释放CJNE R1,#10,REL第19页
10、,共42页,2022年,5月20日,8点23分,星期三SJMP START ;继续对K1按键扫描DELAY: MOV R6,#20 ;延时10ms子程序L1: MOV R7,#248 DJNZ R7,$ DJNZ R6,L1 RETTABLE: DB 3FH,06H,5BH,4FH,66H,6DH DB 7DH,07H,7FH,6FH END第20页,共42页,2022年,5月20日,8点23分,星期三任务三矩阵键盘数码管显示 本任务目标是用矩阵键盘控制数码管显示。第21页,共42页,2022年,5月20日,8点23分,星期三图6-7 按键电路图第22页,共42页,2022年,5月20日,8点
11、23分,星期三任务分析 为了便于学习和理解,如何用键盘实现程序控制,完成设计需要的键盘控制功能。着重强调键盘定义和键盘控制的实现。 为了便于输入,采用16个键的44矩阵式键盘作为输入,输出电路采用前面课题已经介绍的LED数码管的显示电路,控制电路由AT89S51单片机系统。第23页,共42页,2022年,5月20日,8点23分,星期三图4-7 显示电路原理图第24页,共42页,2022年,5月20日,8点23分,星期三 在单片机程序中,对多个键的处理应包括以下三项内容: 键输入 检查键盘是否有键被按下,并消除按键抖动,获得或规定(单个按键)按键的键号。键译码 键号为键盘位置码,根据键号查表得出
12、被按键的键值。键值:数字键09、字符 键0AH0FH、功能键10H 等,是按键在物理位置上的人为规定数值。键处理 根据键值执行不同程序段。如:若键值属于数字、字符键,则调用显示数字和字符子程序;若键值属于功能键,则进行多分支转移,执行各个功能程序段。一、键盘处理第25页,共42页,2022年,5月20日,8点23分,星期三 1 扫描键盘 行列式键盘的具体识别方法有扫描法和反转法。所谓扫描法,即用列线输出,行线输入(可交换行线和列线的输入、输出关系)。其中,列线逐列输出0,某行有键按下,行线有0输入,若无按键,行线输入全部为1。当有键按下时,根据行线和列线可最终确定哪个按键被按下。 另外,还可以
13、采用反转法,也就是行线和列线交换输入、输出,分两步获取按键的键号,但是在多键同时按下时不能准确判断。一、键盘处理第26页,共42页,2022年,5月20日,8点23分,星期三 2. 键译码 通过上述步骤获得按键的行号和列号,但按键所在物理位置的变化将引起键号的不一致,或者由于按键功能的不同规定也将影响键号所对应的功能的执行。如图4-9所示的键盘,就是两种典型的键盘布局,键盘的编号与键盘的扫描码没有直接的运算关系,造成程序编写的困难。一、键盘处理第27页,共42页,2022年,5月20日,8点23分,星期三3键处理 对于键盘上的每一个键,具体是完成什么功能,由键盘要完成具体任务和程序设计来决定。
14、对于键盘处理来说,首先要做的事情是要消除抖动,矩阵键盘的消抖原理与单键的消抖原理是一致的,但在程序的编写上略有不同。为了同时兼顾动态显示,而动态显示函数调用一次需要几个ms,因此可以用动态显示函数代替消抖用的延时函数。手按动键盘的时间为零点几秒到几秒之间,远大于动态显示函数的所消耗的时间,所以可以每调用一次显示函数后,再判断一次是否有键按下的方法进行消抖和键盘信息处理。具体的消抖功能的键盘处理程序框图如图4-10所示。一、键盘处理第28页,共42页,2022年,5月20日,8点23分,星期三图4-10 带动态显示的键盘消抖程序框图第29页,共42页,2022年,5月20日,8点23分,星期三C
15、语言程序:#include #define uchar unsigned char#define uint unsigned intuchar temp,num;void delay(uint Z );uchar code table=0 x3f,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,0;第30页,共42页,2022年,5月20日,8点23分,星期三void main() while(1) P0=0 xfe; temp=P0; temp=temp&0 x
16、f0; while(temp!=0 xf0) delay(5); temp=P0; temp=temp&0 xf0; while(temp!=0 xf0) temp=P0; switch(temp) case 0 xee:num=0;break; case 0 xde:num=1;break; case 0 xbe:num=2;break; case 0 x7e:num=3;break; 第31页,共42页,2022年,5月20日,8点23分,星期三while(temp!=0 xf0) temp=P0; temp=temp&0 xf0; P1=tablenum; 第32页,共42页,2022年
17、,5月20日,8点23分,星期三 P0=0 xfd; temp=P0; temp=temp&0 xf0; while(temp!=0 xf0) delay(5); temp=P0; temp=temp&0 xf0; while(temp!=0 xf0) temp=P0; switch(temp) case 0 xed:num=4;break; case 0 xdd:num=5;break; case 0 xbd:num=6;break; case 0 x7d:num=7;break; 第33页,共42页,2022年,5月20日,8点23分,星期三while(temp!=0 xf0) temp=
18、P0; temp=temp&0 xf0; P1=tablenum; 第34页,共42页,2022年,5月20日,8点23分,星期三 P0=0 xfb; temp=P0; temp=temp&0 xf0; while(temp!=0 xf0) delay(5); temp=P0; temp=temp&0 xf0; while(temp!=0 xf0) temp=P0; switch(temp) case 0 xeb:num=8;break; case 0 xdb:num=9;break; case 0 xbb:num=10;break; case 0 x7b:num=11;break; 第35页
19、,共42页,2022年,5月20日,8点23分,星期三while(temp!=0 xf0) temp=P0; temp=temp&0 xf0; P1=tablenum; 第36页,共42页,2022年,5月20日,8点23分,星期三 P0=0 xf7; temp=P0; temp=temp&0 xf0; while(temp!=0 xf0) delay(5); temp=P0; temp=temp&0 xf0; while(temp!=0 xf0) temp=P0; switch(temp) case 0 xe7:num=12;break; case 0 xd7:num=13;break; c
20、ase 0 xb7:num=14;break; case 0 x77:num=15;break; 第37页,共42页,2022年,5月20日,8点23分,星期三while(temp!=0 xf0) temp=P0; temp=temp&0 xf0; P1=tablenum; void delay(uint Z) uint x,y; for(x=Z;x0;x-)for(y=110;y0;y-); 第38页,共42页,2022年,5月20日,8点23分,星期三汇编语言源程序ORG 0000HAJMP MAINORG 0030HMAIN:MOV P1,#07H LOOP:MOV P0,#0feH A
21、CALL SCANKEY MOV P0,#0fdH ACALL SCANKEY MOV P0,#0fbH ACALL SCANKEYMOV P0,#0f7HACALL SCANKEYAJMP LOOP 第39页,共42页,2022年,5月20日,8点23分,星期三 SCANKEY:MOV A,P0 CJNE A,#0EEH,NEXT2 MOV A,#00H AJMP SENDLEDNEXT2:CJNE A,#0deH,NEXT3 MOV A,#01H AJMP SENDLEDNEXT3:CJNE A,#0beH,NEXT4 MOV A,#02H AJMP SENDLEDNEXT4:CJNE A,#07eH,NEXT5 MOV A,#03H AJMP SENDLEDNEXT5:CJNE A,#0edH,NEXT6 MOV A,#04H AJMP SENDLEDNEXT6:CJNE A,#0DDH,NEXT7 MOV A,#05H AJMP SENDLED第40页,共42页,2022年,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026文秘岗面试题及答案
- 2026物流主管面试题及答案
- 2027年山东省春季高考护理类专业技能测试仿真模拟试卷
- 石材购销合同
- 培训课件:广州换电市场分析报告
- 三年级语文教研工作总结
- 第三单元巩固练习卷(试卷)2026-2027学年三年级数学上册北师版(含答案)
- 新媒体编辑理论知识考试试题与答案
- 短视频拍摄场景安全
- 江苏省淮安市 2025-2026学年八年级下学期6月期末道德与法治试题(文字版含答案)
- 配电室安全运行日常管控规范
- 26.4 实际问题与二次函数(第3课时 实物抛物线问题)教学课件
- 宾利汽车车主专属服务体验设计
- 2026年高考广东卷物理高考真题(网络 收集版)(解析版)
- 破碎机安全操作规程
- 2026中国管理咨询行业人才发展及人力资源优化研究报告
- 2026年二级造价师土建实务真题(附解析)
- 2025年国企营销管理竞聘笔试题库(含答案)
- T CPCIF 0239-2023 石油和化工企业开车前安全审查导则
- 一次性使用止血套环产品技术要求北京中诺恒康生物
- 河北河北省事业单位2025年面向新疆巴州兵团二师生源高校毕业生招聘15人笔试历年参考题库附带答案详解
评论
0/150
提交评论