目录
思考
我们都知道51单片机有四个独立按键,四个独立按键可以有很多作用,我们在生活中一些报警系统,就是类似人通过按动按键来控制警铃进行报警,我们也可以想到通过按键进行控制蜂鸣器进行发声。我们还可以通过按键来控制LED灯的亮灭。
关于蜂鸣器发声原理请参考这篇博客http://t.csdnimg.cn/bUXLS
关于LED灯的点亮很简单,只需给与P2口中任意一个端口低电平就可以实现了
独立按键区域的原理图
蜂鸣器的原理图
LED灯的原理图
实现方法
宏定义
#define KEY1_PRESS 1 //宏定义
#define KEY2_PRESS 2
#define KEY3_PRESS 3
#define KEY4_PRESS 4
#define KEY_UNPRESS 0
定义IO口
这是我们需要使用的IO口我们需要给他定义出来
sbit KEY1=P3^1; //定义IO口
sbit KEY2=P3^0;
sbit KEY3=P3^2;
sbit KEY4=P3^3;
sbit LED1=P2^0;
sbit BEEP=P2^5;
延时函数
void delay_10us(u16 ten_us) //编写延时函数
{
while(ten_us--);
}
判断哪个按键被按下的函数
这个函数很关键,没有这个就无法判断是哪个按键被按下,后续的操作都无法完成。
u8 key_scan(u8 mode)
{
static u8 key=1;
if(mode==1)key=1; //判断按键是否被按下
if(key==1&&(KEY1==0||KEY1==0||KEY1==0||KEY4==0))
{
delay_10us(1000); //通过延时来进行按键的消抖
key=0;
if(KEY1==0)
return KEY1_PRESS; //判断是哪一个按键被按下,并返回相应的按键编号
else if(KEY2==0)
return KEY2_PRESS;
else if(KEY3==0)
return KEY3_PRESS;
else if(KEY4==0)
return KEY4_PRESS;
}
else if (KEY1==1&&KEY1==1&&KEY1==1&&KEY4==1)
{
key=1; //这里表示按键没有被按下
}
return KEY_UNPRESS;
}
完整代码
这样就可以实现完整的功能了
#include "reg52.h"
typedef unsigned int u16; //对系统默认数据类型进行重定义
typedef unsigned char u8;
#define KEY1_PRESS 1 //宏定义
#define KEY2_PRESS 2
#define KEY3_PRESS 3
#define KEY4_PRESS 4
#define KEY_UNPRESS 0
sbit KEY1=P3^1; //定义IO口
sbit KEY2=P3^0;
sbit KEY3=P3^2;
sbit KEY4=P3^3;
sbit LED1=P2^0;
sbit BEEP=P2^5;
void delay_10us(u16 ten_us) //编写延时函数
{
while(ten_us--);
}
u8 key_scan(u8 mode)
{
static u8 key=1;
if(mode==1)key=1; //判断按键是否被按下
if(key==1&&(KEY1==0||KEY1==0||KEY1==0||KEY4==0))
{
delay_10us(1000); //通过延时来进行按键的消抖
key=0;
if(KEY1==0)
return KEY1_PRESS; //判断是哪一个按键被按下,并返回相应的按键编号
else if(KEY2==0)
return KEY2_PRESS;
else if(KEY3==0)
return KEY3_PRESS;
else if(KEY4==0)
return KEY4_PRESS;
}
else if (KEY1==1&&KEY1==1&&KEY1==1&&KEY4==1)
{
key=1; //这里表示按键没有被按下
}
return KEY_UNPRESS;
}
void main()
{
u8 key =0; //定义初值
while(1)
{
key=key_scan(0); //获取按键的序号
if(key==KEY1_PRESS)//检测按键K1是否按下
{ LED1=!LED1;//LED1状态翻转
delay_10us(100);
BEEP=!BEEP; //这一部分给与按键1控制LED1的亮灭,和控制蜂鸣器发声的功能
}
if(LED1==0)
{
delay_10us(100);
BEEP=!BEEP;
}
}
}
成功现象
我们按下按键1就可以实现蜂鸣器开始发声,LED1亮了。如果再次按下按键1我们就可以关闭LED1灯和蜂鸣器。