51单片机学习笔记3 -- 按键输入检测

Posted GenCoder

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了51单片机学习笔记3 -- 按键输入检测相关的知识,希望对你有一定的参考价值。

学习输出控制之后,学习输入检测,以按键为例


按键检测

1.按键原理图绘制

51开发板的原理图如下

按原理图绘制电路图

2.按键输入检测

1.按键软件消抖

按键一般是利用机械触点的闭合、断开作用,由于机械触点的弹性作用,在其闭合、断开瞬间均存在抖动过程,抖动时间一般在5 -10ms,稳定闭合时间由操作人员的按键动作决定,一般为零点几秒到几秒。
为了保证单片机对一次闭合,仅作一次按键输入操作,必须在编程时候编写必要的程序代码(小段延时)来去除抖动影响,称键盘软件消抖。

2.按键操作电平变化

在上面讲到了软件消抖是为了准确识别单次按键操作,理想中的按键按下的电平输入是直接的高低电平切换,但实际上在按下及松开按键的瞬间,输入电平都会在高低电平中间产生抖动,可参考如下波形图

3.按键检测编程

在按键按下时添加延时,执行完按键操作后使用while函数等待按键释放

#include <reg52.h>

#define ON  0
#define OFF 1

sbit KEY1 = P3^3;

void delay_ms(unsigned int nms)

	 unsigned int i,j;

	 for(i=nms;i>0;i--)
	 	for(j=113;j>0;j--);


void main()
	
	P1 = 0xff;
	while(1)
	
		if(KEY1 == ON)
			delay_ms(10);
			if(KEY1 == ON)
			
				P1 = 0x00;
			
			while(KEY1 == ON);
		
	

4.实验结果

将工程放进仿真电路上运行,按下按键,点亮P1端口的LED

3.按键控制

将开发板上4个按键都用起来,做不同的LED灯控制,仿真电路如下

其余3个按键的检测代码跟上面的代码一个样,参考代码如下

#include <reg52.h>
#include <intrins.h>

#define ON  0
#define OFF 1

sbit KEY1 = P3^3;
sbit KEY2 = P3^4;
sbit KEY3 = P3^6;
sbit KEY4 = P3^7;

void delay_ms(unsigned int nms)

	 unsigned int i,j;

	 for(i=nms;i>0;i--)
	 	for(j=113;j>0;j--);


void main()
	
	unsigned int i;
	P1 = 0xff;
	while(1)
	
		if(KEY1 == ON)
			delay_ms(10);
			if(KEY1 == ON)
			
				P1 = 0x00;
			
			while(KEY1 == ON);
		
		if(KEY2 == ON)
			delay_ms(10);
			if(KEY2 == ON)
			
				P1 = 0xff;
			
			while(KEY2 == ON);
		
		if(KEY3 == ON)
			delay_ms(10);
			if(KEY3 == ON)
			
				P1 = 0xfe;
				for(i=8;i>0;i--)
				
					delay_ms(150);
					P1 = _crol_(P1,1);
				
			
			while(KEY3 == ON);
		
		if(KEY4 == ON)
			delay_ms(10);
			if(KEY4 == ON)
			
				P1 = 0x7f;
				for(i=8;i>0;i--)
				
					delay_ms(150);
					P1 = _crol_(P1,-1);
				
			
			while(KEY4 == ON);
		
	

如KEY4按键的操作,_crol_ 函数也可以做循环右移流水灯

4.课外科普 – 硬件消抖

硬件消抖主要使用RS触发器或电容等方法实现消抖
一般是在按键电路上并联一个电容来实现硬件消抖,在按键较少时使用(按键较多时不建议采用硬件消抖)
关于并联电容的在按键按下松开时的放电延时和充电延时,可自行百度了解学习

以上是关于51单片机学习笔记3 -- 按键输入检测的主要内容,如果未能解决你的问题,请参考以下文章

51单片机实现矩阵键盘行扫描

51单片机自学笔记——独立按键

单片机按键处理方式——典型的按键处理方式

ZigBee案例笔记 -- LED控制与按键检测(输入/输出)

ZigBee案例笔记 -- LED控制与按键检测(输入/输出)

单片机独立按键与矩阵按键