独立按键是与单片机交互,控制单片机执行某指令的重要工具。掌握独立按键,首先要了解独立按键的工作原理,并且学会独立按键消抖方法,使其运行更稳定可靠。
本次实验内容:
1.
K1 按下 LED1 亮;
2.
K2 按下 LED2 亮;
3.
K3 按下 LED1,2 全亮;
4.
三个按键可以同时使用,不会冲突;
5.
更多有趣设计!!!
参考代码:
(参考代码格式相对标准易读,适合大家学习、理解。但并非最简单的代码)
注意:松手检测的作用和消抖的方法,独立按键函数写法很多,参考代码中的写法是其中较为常用的一种
/**************************************************************************************
*独立按键实验*
实现现象:
k1 控制led1亮灭
k2 控制led2亮灭
k3 同时控制led1 led2状态翻转
k4 同时熄灭led1 led2
作者:TZ
***************************************************************************************/
#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
sbit k1=P3^1; //定义P31口是k1
sbit k2=P3^0; //定义P30口是k2
sbit k3=P3^2; //定义P33口是k3
sbit k4=P3^3; //定义P34口是k4
sbit led1=P2^0; //定义P20口是led1
sbit led2=P2^1; //定义P21口是led2
/*******************************************************************************
* 函 数 名 : delay
* 函数功能 : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(u16 i)
{
while(i--);
}
/*******************************************************************************
* 函 数 名 : key
* 函数功能 : 按键处理函数: k1 控制led1亮灭
k2 控制led2亮灭
k3 同时控制led1 led2状态翻转
k4 同时熄灭led1 led2
*******************************************************************************/
void key()
{
if(k1==0) //检测按键K1是否按下
{
delay(1000); //消除抖动 一般大约10ms
if(k1==0) //再次判断按键是否按下
{
led1=~led1;//led1状态取反
}
while(!k1); //检测按键是否松开
}
if(k2==0) //检测按键K2是否按下
{
delay(1000); //消除抖动 一般大约10ms
if(k2==0) //再次判断按键是否按下
{
led2=~led2;//led2状态取反
}
while(!k2); //检测按键是否松开
}
if(k3==0) //检测按键K3是否按下
{
delay(1000); //消除抖动 一般大约10ms
if(k3==0) //再次判断按键是否按下
{
led1=~led1;//led1状态取反
led2=~led2;//led2状态取反
}
while(!k3); //检测按键是否松开
}
if(k4==0) //检测按键K4是否按下
{
delay(1000); //消除抖动 一般大约10ms
if(k4==0) //再次判断按键是否按下
{
led1=1; //led1灭
led2=1; //led2灭
}
while(!k4); //检测按键是否松开
}
}
/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
* 备 注 : 在日常编程过程中通常尽量使主函数包含更少内容,把不必要的程序写入子函数,以便程序逻辑清晰,可读性高,出错概率小。*******************************************************************************/
void main()
{
while(1)
{
key(); //按键处理函数
}
}
无线电小组——TZ