51单片机之独立按键

简介
根据按键在芯片中接的位置,利用sbit定义相应的变量
普中51开发板中的接法
51单片机之独立按键
51单片机之独立按键
51单片机之独立按键

控制原理
51单片机之独立按键
从图可知,每个按键一端是接对应的I/O口,另一端是接地,当按键按下时,对应的I/O会连接到地,会从高电平(1)变成低电平(0)
例如

sbit Key1 = P3^1; 
if(Key1 == 0) 
{
	P2 = ~0x01; 
}

当K1按键按下,P3.1接地,P3.1 = 0,key1 = 0,所以会进入if里面,执行P2 = ~0x01; 让第一个灯亮。

消抖原理
我们在手动按键的时候,由于机械抖动或是其它一些非人为的因素很有可能会造成误识别,一般手动按下一次键然后接着释放,按键两片金属膜接触的时间大约为50ms 左右,在按下瞬间到稳定的时间为5-10ms,在松开的瞬间到稳定的时间也为5-10ms,如果我们再首次检测到键被按下后延时10ms 左右再去检测,这时如果是干扰信号将不会被检测到,如果确实是有键被按下,则可确认。
代码分析

#include "reg52.h"
 
typedef unsigned char u8;
typedef unsigned int u16;
 
sbit led = P0^0; //设置灯的控制IO口
sbit k1  = P1^0; //设置按键的控制IO口
	
void delay(u16 i) //延时函数
{
    while(i--);
}	
 
void keyprocess()
{
	if(k1 == 0) //判断按键是否按下
	{
	    delay(1000); //延时消抖
	    if(k1 == 0)  //再次判断按键是否按下
	    {
	        led = 1; //如果按键按下,则灯亮
	    }
	    else
	    {
	        led = 0; //如果按键没有按下,则灯灭
	    }
	
	}
}
 
void main()
{
   led = 0; //初始灯灭
   while(1)
   {
   keyprocess(); //处理按键事件
   }
}
上一篇:太牛了!肝完阿里技术官的笔记,我花了6个月18天,薪资成功涨到40*16K


下一篇:【51单片机】74HC595串转 使用