日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

按键连续点击的c语言程序,长按键C语言程序

發布時間:2024/1/1 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 按键连续点击的c语言程序,长按键C语言程序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

長按鍵C語言程序

zhchxgh | 2009-07-04 01:46:51 ?? 閱讀:8246

發布文章

一共用了四個按鈕.

#define?_KEYDOWN_TEST_TIME??????(20)

unsigned?char?IsKeyDown(volatile?unsigned?char?Value,?unsigned?char?pin)

{

unsigned?long?CurState?=?0,?i;

for(i?=?0;?i?

CurState?+=?_GET_BIT(Value,?pin)??0:1;?????//鍵盤接了上拉電阻,低電平才是按下

if(CurState?==?_KEYDOWN_TEST_TIME)

return?1;

return?0;

}

//以下所有值均是以?DealWithKey函數的調用頻率為基礎的,該頻率是定時器2的定時值決定的

//短按鍵的計數值,只有當按鍵檢測計數器計數大于等于此值時才認為是一次短按

#define?_KEY_SHORT_CNTR?????????????(2)

//長按鍵的計數值,只有當按鍵檢測計數器計數大于等于此值時才認為是一次長按

#define?_KEY_LONG_CNTR??????????????(_KEY_SHORT_CNTR?*?3)

//無按鍵按下時的按鍵檢測間隔,用于按鍵消抖動

#define?_KEY_NORMAL_DEVIDER?????????(2)

//此值用于按鈕長按后,按鈕檢測函數的執行頻率

#define?_ADDMIN_FAST_DEVIDER????????(15)

//此值用于按鈕短按后,按鈕檢測函數的執行頻率

#define?_ADDMIN_LONG_DEVIDER????????(_ADDMIN_FAST_DEVIDER?*?3)

//此值用于設置蜂鳴器鳴響時間

#define?_BEEPER_DEVIDER?????????????(10)

void?DealWithKey(void)

{

static?unsigned?int?AddCntr?=?0;

static?unsigned?int?MinCntr?=?0;

static?unsigned?int?UnitCntr?=?0;

static?unsigned?int?RunCntr?=?0;

static?unsigned?char?BeepCntr?=?0;

static?unsigned?int?DevCntr?=?0;

static?unsigned?char?LastRunState?=?0;

unsigned?char?temp;

if(g_State?!=?Setting)??//運行狀態,?所有按鍵都無效

return;

if(BeepCntr?>?0)????????//處理蜂鳴器

--BeepCntr;

else

_BEEPER_OFF;

if(DevCntr)???????????//按鍵處理分頻器

{

--DevCntr;

return;

}

//這個按鈕是可以重復進入的,?長按后先低頻率動作,?當動作幾次后再高頻率動作

AddCntr?=?IsKeyDown(_PIN(_TO_KEY_ADD),?_KEY_ADD)??AddCntr?+?1?:?0;

if((temp?=?(AddCntr?>=?_KEY_LONG_CNTR))?||?AddCntr?>=?_KEY_SHORT_CNTR)

{

...

}

//同上

MinCntr?=?IsKeyDown(_PIN(_TO_KEY_MIN),?_KEY_MIN)??MinCntr?+?1?:?0;

if((temp?=?(MinCntr?>=?_KEY_LONG_CNTR))?||?MinCntr?>=?_KEY_SHORT_CNTR)

{

...

}

//這個按鈕是不可重復進入的,?就是說只有抬起后再按下才動作

UnitCntr?=?IsKeyDown(_PIN(_TO_KEY_UNIT),?_KEY_UNIT)??UnitCntr?+?1?:?0;

if(UnitCntr?==?_KEY_SHORT_CNTR)

{

...

}

else?if(UnitCntr?>?_KEY_SHORT_CNTR)

{

UnitCntr?=?_KEY_SHORT_CNTR?+?1;?//禁止重復執行

}

//這個按鈕是要在按鈕抬起后才執行其他函數的

if(IsKeyDown(_PIN(_TO_KEY_RUN),?_KEY_RUN))

{

++RunCntr;

}

else

{

RunCntr?=?0;

if(LastRunState)????????????//表明鍵已經按下后才抬起的

{

LastRunState?=?0;

g_State?=?EmptyInflatting;

}

}

if(RunCntr?==?_KEY_SHORT_CNTR)

{

BeepCntr?=?_BEEPER_DEVIDER;

_BEEPER_ON;

LastRunState?=?1;???????//此鍵是抬起時生效.

}

else?if(RunCntr?>?_KEY_SHORT_CNTR)

{

RunCntr?=?_KEY_SHORT_CNTR?+?1;??//禁止重復執行

}

DevCntr?=?_KEY_NORMAL_DEVIDER;

}

*博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。

參與討論

請登錄...

登錄后參與討論

總結

以上是生活随笔為你收集整理的按键连续点击的c语言程序,长按键C语言程序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。