標(biāo)題:
C語言編程 如何實現(xiàn)按鍵按下不影響程序執(zhí)行?
[打印本頁]
作者:
流年ryh
時間:
2022-2-9 18:50
標(biāo)題:
C語言編程 如何實現(xiàn)按鍵按下不影響程序執(zhí)行?
單片機(jī)如何實現(xiàn)按鍵按下不影響程序正常執(zhí)行
作者:
npn
時間:
2022-2-9 21:30
你這樣肯定是程序邏輯有問題,都用定時器中斷處理的。
作者:
188610329
時間:
2022-2-9 22:35
你按鍵程序里面只要沒有 delay 或者 while 就不會影響程序運(yùn)行。
作者:
dazhige
時間:
2022-2-10 00:18
按鍵用中斷實現(xiàn)或者具體的事務(wù)由定時器實現(xiàn)
作者:
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; //消抖計數(shù)
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();
}
}
復(fù)制代碼
作者:
黃youhui
時間:
2022-2-10 09:22
定時器中斷檢測按鍵狀態(tài)
作者:
yuyechenai
時間:
2022-2-10 09:29
這個思路 是否適合你
BaiduShurufa_2022-2-10_9-28-39.png
(71.14 KB, 下載次數(shù): 25)
下載附件
2022-2-10 09:28 上傳
作者:
wojiaoguogai
時間:
2022-2-10 11:14
不要用死循環(huán),每隔10ms讀一次io電平,多看下狀態(tài)機(jī)
作者:
AUG
時間:
2022-2-10 11:21
用狀態(tài)機(jī)就可以了。
作者:
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;//已經(jīng)按下
//切換模式
}
}
}
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
不要有死循環(huán),要有超時代碼自動跳出函數(shù),就可以。
作者:
mimidog111
時間:
2022-2-23 10:25
中斷處理
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1