函数计算机按键没反应,单片机key按键处理函数-长按和短按没反应

本文介绍了如何在单片机中处理按键的短按和长按功能。通过设置按键时长计数器、长按标志和短按标志,实现对多功能设置按键的检测和处理。当检测到按键按下并超过预设时长时,会触发相应的长按或短按功能,如LED状态的改变。
摘要由CSDN通过智能技术生成

#include

#include

#define uchar unsigned char

#define uint unsigned int

#define LONG_time  4        //定义长按设置键的时间

uchar        Keycount;                    //设置按键时长计数器

uchar        skpttime;                    //设置按键时长

uchar        longflag;                    //设置长按标志

bit                skpflag;                                //设置按键按下标志

sbit        SETKEY =P2^0;   //多功能按键(短按,长按)

sbit  LED1   =P2^1;

sbit  LED2   =P2^2;

void delay1ms(uchar ms)

{

while(ms--)                                                   //每循环一次,约延迟1ms

{

uchar i;

for(i=0;i<250;i++)     //循环250次,在12M晶振时约延时1ms

{

_nop_();                               //执行一条_nop_()指令为一个机器周期

_nop_();

_nop_();

_nop_();

}

}

}

以下是一个基本的单片机函数,支持按键按和短按功能,你可以根据实际需求进行修改。 ```c #include <reg52.h> // 导入单片机头文件 #define KEY P1 // 按键连接到P1口 // 定义按键状态 #define KEY_DOWN 0 // 按键按下 #define KEY_UP 1 // 按键松开 // 定义按键类型 #define KEY_SHORT 0 // 短按 #define KEY_LONG 1 // 按 // 定义按键检测时间 #define KEY_CHECK_DELAY 20 // 检测间隔时间,单位为毫秒 #define KEY_LONG_DELAY 1000 // 按时间,单位为毫秒 // 定义全局变量 unsigned char keyState = KEY_UP; // 按键状态 unsigned char keyCount = 0; // 按键计数器 unsigned int keyTime = 0; // 按键按下时间 // 检测按键函数 unsigned char checkKey() { unsigned char keyType = KEY_SHORT; // 默认为短按 if (keyState == KEY_DOWN) // 按键按下 { keyCount++; // 计数器加1 if (keyCount >= (KEY_LONG_DELAY / KEY_CHECK_DELAY)) // 判断是否为按 { keyType = KEY_LONG; // 设置为按 } } else // 按键松开 { keyCount = 0; // 计数器清零 } return keyType; } // 主函数 void main() { while (1) { if (KEY == 0) // 检测按键是否按下 { keyState = KEY_DOWN; // 设置按键状态为按下 if (keyTime >= KEY_LONG_DELAY) // 判断是否为按 { // 按操作 } } else // 按键松开 { keyState = KEY_UP; // 设置按键状态为松开 if (keyTime < KEY_LONG_DELAY) // 判断是否为短按 { // 短按操作 } keyTime = 0; // 计时器清零 } delay(KEY_CHECK_DELAY); // 延时一段时间后再检测按键 keyTime += KEY_CHECK_DELAY; // 计时器累加 } } ``` 注意:以上代码只是一个简单的示例,实际情况下可能需要根据具体硬件和需求进行修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值