第十一次课(共2学时)一、授课题目:独立按键程序和矩阵键盘按键程序设计二、教学目标和任务:1.掌握独立按键硬件结构、按键判别方法、消抖和防误触发方法;2.掌握矩阵键盘硬件结构和编程方法。三、教学重难点:重点:独立按键硬件结构、按键判别方法、消抖和防误触发方法、矩阵键盘硬件结构和编程方法。难点:矩阵键盘硬件结构和编程方法。四、授课过程:回顾:PO同时控制段码和位选信号的硬件电路和编程方法、PO控制段码、译码器控制位选信号的硬件电路和编程方法、小数的显示方法。0.引入开发板上有四个独立按键和4×4的矩阵键盘,本节课将为大家讲解独立按键和矩阵键盘的硬件电路以及程序编写。常用按键及其内部结构如图1所示,事实上接入电路的只有两个引脚。23图1按键及其内部结构1
1 第十一次课(共 2 学时) 一、授课题目:独立按键程序和矩阵键盘按键程序设计 二、教学目标和任务: 1.掌握独立按键硬件结构、按键判别方法、消抖和防误触 发方法; 2.掌握矩阵键盘硬件结构和编程方法。 三、教学重难点: 重点:独立按键硬件结构、按键判别方法、消抖和防误触 发方法、矩阵键盘硬件结构和编程方法。 难点:矩阵键盘硬件结构和编程方法。 四、授课过程: 回顾:P0 同时控制段码和位选信号的硬件电路和编程方 法、P0 控制段码、译码器控制位选信号的硬件电路和编程方 法、小数的显示方法。 0.引入 开发板上有四个独立按键和 4×4 的矩阵键盘,本节课将 为大家讲解独立按键和矩阵键盘的硬件电路以及程序编写。常 用按键及其内部结构如图 1 所示,事实上接入电路的只有两个 引脚。 图 1 按键及其内部结构
1.独立按键的硬件电路和识别程序独立按键的硬件电路如图2所示,由图可知当K1未按下时,P3.4引脚为高电平,当K1按下时,P3.4引脚为低电平。因此我们可以通过判别P3.4引脚上的电平来判断K1是否按下。即:sbit K1=P34:if(K1==0)...VCCfCCKR10K10K1OK10FP34P36P3ok Jok2 Jok3 J图2独立按键的硬件电路例题1:编程实现如下功能,8只LED灯从左到右依次接P1.7~P1.0引脚,按键电路如图所示,试编程实现如下功能:(1)初始时,中间两只点亮(2)K1按下,LED灯花色左移一位(3)K2按下,LED灯花色右移一位(4)K3按下,LED灯花色左移二位(5)K4按下,LED灯花色右移二位程序如下:#include<reg51.h)#include<intrins.h>sbit K1=P3~4:sbit K2=-P3 5: sbit K3=P3~6: sbit K4=P3~7:void keypro ()t2
2 1. 独立按键的硬件电路和识别程序 独立按键的硬件电路如图 2 所示,由图可知当 K1 未按下 时,P3.4 引脚为高电平,当 K1 按下时,P3.4 引脚为低电平。 因此我们可以通过判别 P3.4 引脚上的电平来判断 K1 是否按 下。即: sbit K1=P3^4;if(K1==0) . 图 2 独立按键的硬件电路 例题 1:编程实现如下功能,8 只 LED 灯从左到右依次接 P1.7~P1.0 引脚,按键电路如图所示,试编程实现如下功能: (1)初始时,中间两只点亮 (2)K1 按下,LED 灯花色左移一位 (3)K2 按下,LED 灯花色右移一位 (4)K3 按下,LED 灯花色左移二位 (5)K4 按下,LED 灯花色右移二位 程序如下: #include<reg51.h> #include<intrins.h> sbit K1=P3^4;sbit K2=P3^5; sbit K3=P3^6; sbit K4=P3^7; void keypro() {
if (K1==0) P1= crol (P1, 1):else if(K2-=0) P1= cror (P1,1):else if(K3=-0) P1= crol (P1,2) :else if (K4==0) P1= cror (P1,2):1void main((P1=0x18;while(1) (keypro(:))2.按键消抖和防误触发实际应用中,按键按下时会有抖动,如图3所示。这样的抖动会造成误触发,另外按键按下过程中,如果程序执行完毕会造成误判,认为按键重新按下了。因此实际编程时要考虑到消抖和防误触发。注意:该部分为学生详细讲解,学生应充分理解。理想波形实际波形稳定闭合按下抖动释放抖动图3按键抖动示意图软件消抖和防多动作思路:1)当相应引脚为低电平时,说明按键按下,此时可以延时10mS,再判断是否为低电平。3
3 if(K1==0) P1=_crol_(P1,1); else if(K2==0) P1=_cror_(P1,1); else if(K3==0) P1=_crol_(P1,2); else if(K4==0) P1=_cror_(P1,2); } void main() {P1=0x18; while(1){keypro();}} 2. 按键消抖和防误触发 实际应用中,按键按下时会有抖动,如图 3 所示。这样的 抖动会造成误触发,另外按键按下过程中,如果程序执行完毕 会造成误判,认为按键重新按下了。因此实际编程时要考虑到 消抖和防误触发。 注意:该部分为学生详细讲解,学生应充分理解。 图 3 按键抖动示意图 软件消抖和防多动作思路: 1)当相应引脚为低电平时,说明按键按下,此时可以延 时 10ms,再判断是否为低电平
2)按键处理程序结束后,一直等到按键松开,再出程序。程序如下:void keyproO1if (Key==0)fdelay10ms(:延时10ms用于消抖if(Key==0)()while(Key==0):以防止误操作11例题1:PO口接8只LED灯,P3.4、P3.5分别接一只按键,编写程序实现如下功能:按键KEY1按下时,LED灯从左到右依次逐个点亮,按键KEY2按下时,LED灯从右到左依次逐个点亮。#include<reg51.h>#defineuchar unsigned charsbitKey1=P3°4:sbitKey2=P3°5:voiddelay200msO;unsigned char value:void LED1O1signed char i;P1=0x7f;Delay500ms();4
4 2)按键处理程序结束后,一直等到按键松开,再出程序。 程序如下: void keypro() { if(Key==0) { delay10ms();延时 10ms 用于消抖 if(Key==0) {} while(Key==0);以防止误操作 } } 例题 1:P0 口接 8 只 LED 灯,P3.4、P3.5 分别接一只按 键,编写程序实现如下功能:按键 KEY1 按下时,LED 灯从左 到右依次逐个点亮,按键 KEY2 按下时,LED 灯从右到左依次 逐个点亮。 #include<reg51.h> #define uchar unsigned char sbit Key_1=P3^4; sbit Key_2=P3^5; void delay200ms(); unsigned char value; void LED1() { signed char i; P1=0x7f; Delay500ms();
for(i=0;i<7;i++)(P1=P1>>1Delay500msO;}-void LED21signed char i;P1=0xfe;Delay500msO:for(i=0:i<7:i++)(P1=P1<<1:Delay500msO:)1void keypro()1if (Key 1==0)1delay10ms():if(Key 1==0)(LED1():)while(Key 1==0):Yelse if (Key 2==0)Idelay10ms (:if(Key2==0)(LED2():)while (Key 2==0):L5
5 for(i=0;i<7;i++) {P1=P1>>1; Delay500ms(); } } void LED2 { signed char i; P1=0xfe; Delay500ms(); for(i=0;i<7;i++) {P1=P1<<1; Delay500ms(); } } void keypro() { if(Key_1==0) { delay10ms(); if(Key_1==0) {LED1( );} while(Key_1==0); } else if (Key_2==0) { delay10ms(); if(Key_2==0) {LED2( );} while(Key_2==0); }