基于51单片机的独立按键单击、双击,长按,多次按的项目工程

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基于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),表示按键没按下或按键已弹起。
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值