长按键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语言程序相关推荐

  1. 按键连续点击的c语言程序,【转】按键长按与短按处理程序[C语言]--通過測試

    #define PRESSED 0 #define Long_cnt 65534 //長鍵判斷值 #define Short_cnt 250 //短鍵判斷值,消抖动 void Key_Pressed( ...

  2. c语言 最长单词,c语言求最长公共单词

    #include #include //找出最长单词 void maxword(char *s,char *t){ //记录公共单词的长度,下标为单词顺序下标 从0开始 int recordWordL ...

  3. AndroidStudio安卓原生开发_android按钮防止短时间内连续点击_在android_java中都能使用---Android原生开发工作笔记131

    这个短时间内的连续点击,处理是需要做的,要不然有可能程序会不够健壮,其实就跟考虑并发一样, 你可以不做, 一个两个人用没事,但是如果你放到实际场景中去应用,真的是不行,会出来各种莫名其妙的问题,一点都 ...

  4. 上位机与下位机程序配合是 下位机程序崩溃

    最近作为一个菜鸟,一直测试同事用QT写好的上位机与下位机程序, 结果配置一个模块,连续点击多次下载时,下位机出现程序崩溃的情况.如图 根据提示得知 在下位机线程没有结束的时候,我通过上位机就把内容情况 ...

  5. “完美”解决微信小程序购物车抛物动画,在连续点击时出现计算错误问题,定时器停不下来。

    "完美"解决微信小程序购物车抛物动画,在连续点击时出现计算错误问题,定时器停不下来. 参考文章: (1)"完美"解决微信小程序购物车抛物动画,在连续点击时出现计 ...

  6. 微信小程序长按和点击同时存在时,2个都会触发的问题

    问题描述: 在列表上实现长按弹框删除,点击进入详情页.在模拟器上正常,但在手机端,长按同时会触发点击. 长按.点击触发顺序: 点击:touchstart → touchend → tap        ...

  7. 谷歌浏览器扩展程序-实现按钮自动连续点击

    谷歌的扩展程序非常简单.必要的文件只有manifest.json文件.在该文件中声明了扩展的名称.版本.权限.设置选项和其他的一些和扩展相关的元数据. 我所做的扩展实现的主要功能是按钮自动连续点击.该 ...

  8. c语言 执行free函数程序被卡住,FreeRTOS操作系统,在按键中断函数中恢复被挂起的任务,程序卡死的原因和解决办法...

    FreeRTOS操作系统,在按键中断函数中恢复被挂起的任务,程序卡死的原因和解决办法 时间:2019-08-10 14:39:47  来源:  作者:  所属栏目:其他服务端 这里将告诉您FreeRT ...

  9. 博采 27 门语言之长,提升 Python 的能力

    作者:Nick Coghlan 译者:豌豆花下猫@Python猫 英文:https://www.curiousefficiency.org/posts/2015/10/languages-to-imp ...

最新文章

  1. php api接口调试,PHP API接口测试小工具
  2. oracle 压缩导出 导入,EXP直接导出压缩问津,IMP直接导入压缩文件的方法
  3. php 条形码生成器,PHP条形码图像生成器
  4. IOT(33)---NB-IOT通用物联解决方案
  5. FlashCache初探(一)
  6. 现代 C++ 救不了程序员!
  7. oracle利用正则表达式判断字符串只包含数字
  8. cocos2d-x学习(一) HelloWorld
  9. win10安装nvidia驱动
  10. centos7 django mysql_安装和部署centos7 python3。X Django MySQL,centos7python3Xdjangomysql
  11. Python多环境扩展管理-Virtualenv
  12. POI导出之我的实践篇
  13. 助力疫情防控,无接触式Beacon蓝牙考勤打卡方案
  14. Solid Edge如何制作爆炸图
  15. 如何看待360与腾讯之争
  16. 一点点读懂regulator(一)
  17. swift UI 学习 (一)
  18. 成为认知高手,要避免这9个认知思维陷阱!
  19. [shell] find 指令的使用 (如:找到大于10M的文件)
  20. 马化腾:电力时代孕育了计算机,人工智能兴盛于云计算

热门文章

  1. 荆棘中长出的玫瑰:EMUI正在刺穿iOS的咽喉地带
  2. 计算机有关的职业英语,职业有哪些英语单词
  3. Android设置透明状态栏以及隐藏状态栏
  4. 数据标注公司标注员是做什么的?有发展前景么?
  5. 带你深入了解拓扑排序
  6. Vista优化大师更新历史:
  7. 旋转机械(轴承等)故障诊断公开数据集
  8. 会考access数据库操作题_信息技术学业水平考试操作题必备!!!
  9. 今日头条校招面经来了!| CSDN 博文精选
  10. 【BAT】批处理文件基础(实用)