基于51单片机的独立按键单击、双击,长按,多次按的项目工程
一、前言
1、基于51单片机的独立按键单击、双击,长按,多次按的项目工程包括用Keil软件编写单片机C语言程序和用Proteus软件仿真单片机外围电路
2、基于51单片机的独立按键单击、双击,长按,多次按的项目工程的项目构思
(1)、声明程序变量思维导图
(2)、程序子函数思维导图
(3)、程序主函数思维导图
二、基于51单片机的独立按键单击、双击,长按,多次按的项目工程的Keil软件编写的单片机C语言程序
1、一般按键按下计数式按键单击、长按的单片机C语言程序
#include<reg52.h>
#define ShortPressTime 1000 //宏定义短按时间约20ms
#define LongPressTime 32750 //宏定义长按时间约1s
unsigned int count=0;//计数变量
sbit AnJian = P1^0;//位定义P1.0端口为按键端口
sbit LED0 = P2^0;//位定义P2.0端口为LED灯端口
void main ()//主函数
{
while(1)//固定循环
{
if(!AnJian)//当有按键(即AnJian)按下,!AnJian变为AnJian=0,那么if(!AnJian)相当于if(AnJian==0)。
{
count++;//计数变量加加
if(count>=LongPressTime)//长按
{
LED0=1;//熄灭LED灯
count=LongPressTime;//防止count溢出
}
}
else//相当于if(AnJian==1),表示按键没按下或按键已弹起。
{
if(count>ShortPressTime && count<LongPressTime)//短按
{
LED0=0;//点亮LED灯
}
count=0;//计数变量清0
}
}
}
2、第一种定时器式按键单击、长按的单片机C语言程序
#include<reg52.h>
unsigned int count=0;//计数变量
unsigned char KeyPressFlag;//按键按下标志位变量
sbit AnJian = P1^0;//位定义P1.0端口为按键端口
sbit LED0 = P2^0;//位定义P2.0端口为LED灯端口
void KeyScan()//按键扫描函数
{
if(!AnJian)//当有按键(即AnJian)按下,!AnJian变为AnJian=0,那么if(!AnJian)相当于if(AnJian==0)。
{
if(count>=200)//长按
{
LED0=1;//熄灭LED灯
}
}
else//相当于if(AnJian==1),表示按键没按下或按键已弹起。
{
i

本项目详细介绍了如何使用51单片机处理独立按键的单击、双击、长按和多次按事件。通过Keil软件编写C语言程序,并在Proteus软件中进行外围电路仿真,涵盖了多种按键处理方法,包括计数式和定时器式,重点推荐第三种定时器方式。
最低0.47元/天 解锁文章
770

被折叠的 条评论
为什么被折叠?



