
第十一次课(共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灯花色右移二位程序如下:#includesbit 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 #include 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#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 #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>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>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); }

1void main()1while(1)(keypro(:)12.矩阵键盘硬件电路和程序设计矩阵键盘电路如图所示,经过分析可知,当按键按下时,对应的两只引脚接通,例如按下K6,P1.7和P1.3将接通。EIOLdZidK6K7K8K9aOO5P17K10K11K12K131OK0C0CP16R15KI4K13K16K1710K00000000P15R17K18K19K20KZ1TOKo.000P14R18图4矩阵键盘电路和示意图矩阵键盘的程序常分为判断有无按键按下和判断具体按键号来进行。2.1判断有无按键按下sbit row0=P1°7;sbit rowl=P1°6:sbit row2=P1~5:sbit row3=P1'4:sbit line0=P1 3:sbit linel=P12:sbit line2=P11:sbit line3=P1'0://预定义部分voidkeyprepro()6
6 } void main ( ) { while(1){keypro();} } 2. 矩阵键盘硬件电路和程序设计 矩阵键盘电路如图所示,经过分析可知,当按键按下时, 对应的两只引脚接通,例如按下 K6,P1.7 和 P1.3 将接通。 图 4 矩阵键盘电路和示意图 矩阵键盘的程序常分为判断有无按键按下和判断具体按键号来进 行。 2.1 判断有无按键按下 sbit row0=P1^7;sbit row1=P1^6;sbit row2=P1^5; sbit row3=P1^4;sbit line0=P1^3;sbit line1=P1^2; sbit line2=P1^1;sbit line3=P1^0; //预定义部分 void keyprepro()

row0=1;row1=1;row2=1:row3=1:line0=0:linel=0:line2=0:line3-0:if(row0==0//row1==0//row2==0/|row3=-0)(flag=1:)else flag=0:进解要点:该部分应为同学们仔细讲解,务必讲明白。2.2判断按键号void keypro()1if (flag==1)(11line0=0:linel=l:line2-l:line3=l:if(row0==0) (keyvalue=6:)elseif(rowl==0)(keyvalue=10:)elseif(row2==0)(keyvalue=14:)else if(row3-=0)(keyvalue=18:)//请补充程序112.3显示按键号#define uchar unsigned char#define uint unsigned int7
7 { row0=1;row1=1;row2=1;row3=1; line0=0;line1=0;line2=0;line3=0; if(row0==0||row1==0||row2==0||row3==0) {flag=1;} else flag=0; } 讲解要点:该部分应为同学们仔细讲解,务必讲明白。 2.2 判断按键号 void keypro() { if(flag==1) { line0=0;line1=1;line2=1;line3=1; if(row0==0){keyvalue=6;} else if(row1==0){keyvalue=10;} else if(row2==0){keyvalue=14;} else if(row3==0){keyvalue=18;} //请补充程序 } } 2.3 显示按键号 #define uchar unsigned char #define uint unsigned int

sbit duanx=P2~6:sbitweix=P2~7;uchar code seg[=(0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f);void displaytPO=0xf7:weix=1;weix=0:PO=seg[keyvalue%10];duanx=1;duanx=0;delay2ms(:PO=Oxfb;weix=l;weix=0;PO=seg[keyvalue/10];duanx=l;duanx=0;delay2ms(:)2.4主函数void main1keyvalue=0;while(1)1keypreproO;keypro:displayO;11五、作业1、请完成0~24的可加减循环计数器的设计,计数器值数码管显示,按键1按下时,数值加1,按键2按下数值减1,8
8 sbit duanx=P2^6; sbit weix=P2^7; uchar code seg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f}; void display { P0=0xf7;weix=1;weix=0; P0=seg[keyvalue%10];duanx=1;duanx=0; delay2ms(); P0=0xfb;weix=1;weix=0; P0=seg[keyvalue/10];duanx=1;duanx=0; delay2ms();} 2.4 主函数 void main() { keyvalue=0; while(1) { keyprepro(); keypro(); display(); } } 五、作业 1、 请完成 0~24 的可加减循环计数器的设计,计数器值 数码管显示,按键 1 按下时,数值加 1,按键 2 按下数值减 1

按键3按下计数值清零,按键4按下时,计数值为12。2、四只开关,分别点亮P1.0~P1.7引脚控制的8只LED,花色如下:(1)从0到7依次点亮再全熄灭(2)从7到0依次点亮再全熄灭(3)从两边到中间依次点亮再全熄灭(4)从中间到两边依次点亮再全熄灭3、完成精细控温程序设计,要求:(1)温度数值通过数码管显示。温度初值为26.00。(2)粗调功能按键1控制按一次加1,按键2控制按一次减1。(3)细调节按键3控制按一次加0.05,按键4控制按一次减0.05。4、设计3×3矩阵电路,并编写程序完成,按下按键,显示对应键盘编号的程序。六、参考文献1.丁向荣编,单片机微机原理与接口技术(第2版),北京:电子工业出版社,2018.2.张毅刚编,单片机原理及应用:C51编程+Proteus仿真(第2版),北京:高等教育出版社,20163.丁元杰编,单片微机原理及应用(第三版),北京:机械工业出版社,2011.4.郭文川编,MCS-51单片机原理接口及应用,北京:电子工业出版社,20139
9 按键 3 按下计数值清零,按键 4 按下时,计数值为 12。 2、四只开关,分别点亮 P1.0~P1.7 引脚控制的 8 只 LED, 花色如下: (1)从 0 到 7 依次点亮再全熄灭 (2)从 7 到 0 依次点亮再全熄灭 (3)从两边到中间依次点亮再全熄灭 (4)从中间到两边依次点亮再全熄灭 3、完成精细控温程序设计,要求: (1)温度数值通过数码管显示。温度初值为 26.00。 (2)粗调功能按键 1 控制按一次加 1,按键 2 控制按一 次减 1。 (3)细调节按键 3 控制按一次加 0.05,按键 4 控制按一 次减 0.05。 4、设计 3×3 矩阵电路,并编写程序完成,按下按键,显 示对应键盘编号的程序。 六、参考文献 1. 丁向荣编,单片机微机原理与接口技术(第 2 版),北京:电子 工业出版社,2018. 2. 张毅刚编, 单片机原理及应用:C51编程+Proteus仿真(第2版), 北京:高等教育出版社,2016. 3. 丁元杰编,单片微机原理及应用(第三版),北京:机械工业出 版社,2011. 4. 郭文川编,MCS-51 单片机原理接口及应用,北京:电子工业出 版社,2013

5.周航慈编,单片机应用程序设计技术(修订版),北京:北京航天航空大学出版社,20026.严洁编,单片机原理及其接口技术,北京,机械工业出版社,2010.七、课后记1.本节课介绍了独立按键和矩阵按键的编程方法,从硬件结构出发,使同学们在掌握按键设计方法的基础上,理解编程语句。2.将编程语句总结为固定套路,方便同学们使用。3.通过分组讨论作答,加深理解,巩固知识。10
10 5. 周航慈编, 单片机应用程序设计技术(修订版),北京:北京航 天航空大学出版社,2002. 6. 严洁编, 单片机原理及其接口技术,北京,机械工业出版社, 2010. 七、课后记 1.本节课介绍了独立按键和矩阵按键的编程方法,从硬件 结构出发,使同学们在掌握按键设计方法的基础上,理解编程 语句。 2.将编程语句总结为固定套路,方便同学们使用。 3.通过分组讨论作答,加深理解,巩固知识