标题:
C语言编程 如何实现按键按下不影响程序执行?
[打印本页]
作者:
流年ryh
时间:
2022-2-9 18:50
标题:
C语言编程 如何实现按键按下不影响程序执行?
单片机如何实现按键按下不影响程序正常执行
作者:
npn
时间:
2022-2-9 21:30
你这样肯定是程序逻辑有问题,都用定时器中断处理的。
作者:
188610329
时间:
2022-2-9 22:35
你按键程序里面只要没有 delay 或者 while 就不会影响程序运行。
作者:
dazhige
时间:
2022-2-10 00:18
按键用中断实现或者具体的事务由定时器实现
作者:
lkc8210
时间:
2022-2-10 01:40
不要用delay()!不要用delay()!不要用delay()!
给个栗子
#include <reg52.h>
typedef unsigned char u8; //0 to 255
typedef unsigned int u16; //0 to 65535
sbit KEY_XX = P3^5;
u8 mode = 3;
u8 i = 0;
void disp()
{
switch (mode)
{
case 0:
P1 = ~(0x01 << i);
break;
case 1:
P1 = ~(0x80 >> i);
break;
case 2:
P1 <<= 1;
if(P1 & 0x80)
{
P1 &= 0xFE;
} else {
P1 |= 0x01;
}
break;
case 3:
P1 >>= 1;
if(P1 & 0x01)
{
P1 &= 0x7F;
} else {
P1 |= 0x80;
}
break;
default:
break;
}
i = ++i %8;
}
void key_Proc()//单键短按
{
static u16 Delay_XD=0; //消抖计数
if(!KEY_XX)
{
if(Delay_XD<0xFFFF)Delay_XD++;
//else Delay_XD = 0; //连按功能
if(Delay_XD==0xFF) //消抖
{
mode = ++mode % 4;
i = 0;
P1 = 0xFF;
}
}
else //按键抬起
Delay_XD=0; //Delay_XD清0
}
void main()
{ u16 ScanCNT = 0;
while(1)
{
if(ScanCNT++ > 2000)
{
ScanCNT = 0;
disp();
}
key_Proc();
}
}
复制代码
作者:
黄youhui
时间:
2022-2-10 09:22
定时器中断检测按键状态
作者:
yuyechenai
时间:
2022-2-10 09:29
这个思路 是否适合你
BaiduShurufa_2022-2-10_9-28-39.png
(71.14 KB, 下载次数: 25)
下载附件
2022-2-10 09:28 上传
作者:
wojiaoguogai
时间:
2022-2-10 11:14
不要用死循环,每隔10ms读一次io电平,多看下状态机
作者:
AUG
时间:
2022-2-10 11:21
用状态机就可以了。
作者:
wd1988
时间:
2022-2-10 13:41
if(Time_2ms == 1)//定时器中断每2ms检测按键一次
{
Time_2ms = 0;
if(KEY == 0)//按键按下 低有效
{
b_key_10 +=1;
b_key_11 = 0;
if(b_key_10 > 24)//消抖50ms
{
b_key_10 = 0;
if( f_key_ok == 0 )//
{
f_key_ok = 1;//已经按下
//切换模式
}
}
}
else
{
b_key_10 = 0;
b_key_11 += 1;
if(b_key_11 > 24)//松键消抖50ms
{
b_key_11 = 0;
f_key_ok = 0;//松开
}
}
}
作者:
univers
时间:
2022-2-10 21:00
不要有死循环,要有超时代码自动跳出函数,就可以。
作者:
mimidog111
时间:
2022-2-23 10:25
中断处理
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1