按键检测的疑问

[复制链接]
 楼主| ycz9999 发表于 2011-9-26 20:30 | 显示全部楼层 |阅读模式
请教,如何检测一个按键在30s内一直都是按下状态呢?CPU是ARM7的LPC2106(ZLG的),纠结的是这个CPU没有边沿触发,只有低电平触发,且触发方式不可选。所以不可用中断检测按键,我想检测这个按键在30s内一直都是按下的状态,该如何规划下呢?
老鱼探戈 发表于 2011-9-26 20:55 | 显示全部楼层
检测为按下-----计时30s------松手清计数
流行音乐 发表于 2011-9-26 21:13 | 显示全部楼层
这要看你的要求具体有多严格,如果只是普通的按键功能,每 10ms 查询一次按键即可。
 楼主| ycz9999 发表于 2011-9-26 21:20 | 显示全部楼层
恩  我原本是打算1s检测一次  但是有个疑问:  用什么去衡量30s内一直按下了呢?
 楼主| ycz9999 发表于 2011-9-26 21:21 | 显示全部楼层
2# 老鱼探戈 鱼哥的意思是开始检测到了的话  就计时30s  计时结束后再次检测吗?

lyjian 发表于 2011-9-26 22:17 | 显示全部楼层
定时扫描,如3楼说的10ms一次(10ms~100ms一次应该都没什么问题,看你的要求),定义一个hold计数器,每次扫描按键如果是按下的话,hold计数器加一,如果按键不是按下的话,hold计数器清零。当hold计数器>=3000d的话,就表示30s内一直都是按下状态。

评分

参与人数 1威望 +1 收起 理由
ycz9999 + 1

查看全部评分

 楼主| ycz9999 发表于 2011-9-26 22:30 | 显示全部楼层
6# lyjian 恩  谢谢指点了 我写代码时考虑下这个方法
lixiaoxu2meng 发表于 2011-9-27 08:09 | 显示全部楼层
六楼的方法 和我想说的一样
ayb_ice 发表于 2011-9-27 08:17 | 显示全部楼层
都用上ARM了,还在问这样的问题
chenczy 发表于 2011-9-27 10:01 | 显示全部楼层
现在很多就算是用ARM,也不一定就代表做过很多项目,所以问这个问题也不奇怪
ayb_ice 发表于 2011-9-27 10:34 | 显示全部楼层
现在很多就算是用ARM,也不一定就代表做过很多项目,所以问这个问题也不奇怪
chenczy 发表于 2011-9-27 10:01

看来搞MCU的工资普遍不高,是有道理的
linbei1988 发表于 2011-9-27 10:48 | 显示全部楼层
看来搞MCU的工资普遍不高,是有道理的
ayb_ice 发表于 2011-9-27 10:34

有道理。。
 楼主| ycz9999 发表于 2011-9-27 12:13 | 显示全部楼层
9# ayb_ice 额  我是刚接手这个  而且要用一款我以前不熟悉的ARM  所以 我还要熟悉CPU的各个功能模块呀  。。  另外  我没工资  还在求学
yewuyi 发表于 2011-9-27 12:15 | 显示全部楼层
有定时中断即可,ms级别的查询即可按键状态即可。
 楼主| ycz9999 发表于 2011-9-27 12:17 | 显示全部楼层
14# yewuyi 恩 谢谢大侠指点  我也刚玩这个CPU2天  今天在熟悉定时器  虽然以前熟悉ARM9  但是与ARM7的寄存器还是有点区别   所以  我得先熟悉硬件 才敢写代码
sysdriver 发表于 2011-9-27 12:29 | 显示全部楼层
谁都有提高的一个过程,不管是单片机还是ARM

如果从RAM起跑,估计会有点困难。
lixiaoxu2meng 发表于 2011-9-27 12:56 | 显示全部楼层
我这有个按键的历程 C文件

  1. /****************************************************************************
  2. * Copyright (C), 2009-2010, www.armfly.com
  3. *
  4. * 文件名: sysytick.c
  5. * 内容简述: 本模块实现7个按键的检测,具有滤波机制,支持按下,弹起和长按动作。
  6. *                        通过GetKey()函数可以读取键值
  7. * 文件历史:
  8. * 版本号  日期       作者    说明
  9. * v0.1    2009-12-27 armfly  创建该文件
  10. *
  11. */
  12. /* Includes ------------------------------------------------------------------*/
  13. #include "includes.h"
  14. #include <stdio.h>

  15. static BUTTON_T s_BtnUser;                /* USER 键 */
  16. static BUTTON_T s_BtnTamper;                /* TAMPER 键 */
  17. static BUTTON_T s_BtnWakeUp;                /* WAKEUP 键 */
  18. static BUTTON_T s_BtnUp;                /* 摇杆UP键 */
  19. static BUTTON_T s_BtnDown;                /* 摇杆DOWN键 */
  20. static BUTTON_T s_BtnLeft;                /* 摇杆LEFT键 */
  21. static BUTTON_T s_BtnRight;                /* 摇杆RIGHT键 */
  22. static BUTTON_T s_BtnOk;                /* 摇杆OK键 */

  23. static KEY_FIFO_T s_Key;                /* 按键FIFO变量,结构体 */

  24. /*
  25.         安富莱STM32F103ZE-EK 按键口线分配:
  26.         USER键     : PG8  (低电平表示按下)
  27.         TAMPEER键  : PC13 (低电平表示按下)
  28.         WKUP键     : PA0  (!!!高电平表示按下)
  29.         摇杆UP键   : PG15 (低电平表示按下)
  30.         摇杆DOWN键 : PD3  (低电平表示按下)
  31.         摇杆LEFT键 : PG14 (低电平表示按下)
  32.         摇杆RIGHT键: PG13 (低电平表示按下)
  33.         摇杆OK键   : PG7 (低电平表示按下)

  34.         定义7个函数,判断按键是否按下,返回值1 表示按下,0表示未按下
  35. */
  36. static u8 IsKeyDownUser(void)                 {if (GPIO_ReadInputDataBit(GPIOG, GPIO_Pin_8) == Bit_SET) return 0; return 1;}
  37. static u8 IsKeyDownTamper(void)         {if (GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_13) == Bit_SET) return 0; return 1;}
  38. static u8 IsKeyDownWakeUp(void)         {if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == Bit_SET) return 1; return 0;}
  39. static u8 IsKeyDownUp(void)                 {if (GPIO_ReadInputDataBit(GPIOG, GPIO_Pin_15) == Bit_SET) return 0; return 1;}
  40. static u8 IsKeyDownDown(void)                 {if (GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_3) == Bit_SET) return 0; return 1;}
  41. static u8 IsKeyDownLeft(void)                 {if (GPIO_ReadInputDataBit(GPIOG, GPIO_Pin_14) == Bit_SET) return 0; return 1;}
  42. static u8 IsKeyDownRight(void)           {if (GPIO_ReadInputDataBit(GPIOG, GPIO_Pin_13) == Bit_SET) return 0; return 1;}
  43. static u8 IsKeyDownOk(void)                 {if (GPIO_ReadInputDataBit(GPIOG, GPIO_Pin_7) == Bit_SET) return 0; return 1;}
  44.                                                                                                                                                                                   
  45. /*******************************************************************************
  46.         函数名: InitButtonVar
  47.         输  入:
  48.         输  出:
  49.         功能说明:初始化所有的按键变量,这个函数需要在systic中断启动前调用1次
  50. *******************************************************************************/
  51. void InitButtonVar(void)
  52. {
  53.         /* 对按键FIFO读写指针清零 */
  54.         s_Key.Read = 0;
  55.         s_Key.Write = 0;

  56.         /* 初始化USER按键变量 */
  57.         s_BtnUser.IsKeyDownFunc = IsKeyDownUser;        /* 判断按键按下的函数 */
  58.         s_BtnUser.FilterTime = BUTTON_FILTER_TIME;        /* 按键滤波时间 */
  59.         s_BtnUser.LongTime = BUTTON_LONG_TIME;                /* 长按时间 */
  60.         s_BtnUser.LongCount = 0;
  61.         s_BtnUser.Count = s_BtnUser.FilterTime / 2;        /* 计数器设置为滤波时间的一半 */
  62.         s_BtnUser.State = 0;                                /* 按键缺省状态,0为未按下 */
  63.         s_BtnUser.KeyCodeDown = KEY_DOWN_USER;                /* 按键按下的键值代码 */
  64.         s_BtnUser.KeyCodeUp = KEY_UP_USER;                        /* 按键弹起的键值代码 */
  65.         s_BtnUser.KeyCodeLong = KEY_HOLD_USER;                /* 按键被持续按下的键值代码 */

  66.         /* 初始化TAMPER按键变量 */
  67.         s_BtnTamper.IsKeyDownFunc = IsKeyDownTamper;        /* 判断按键按下的函数 */
  68.         s_BtnTamper.FilterTime = BUTTON_FILTER_TIME;        /* 按键滤波时间 */
  69.         s_BtnTamper.LongTime = 0;                                                /* 长按时间, 0表示不检测 */
  70.         s_BtnTamper.Count = s_BtnTamper.FilterTime / 2;        /* 计数器设置为滤波时间的一半 */
  71.         s_BtnTamper.State = 0;                                                        /* 按键缺省状态,0为未按下 */
  72.         s_BtnTamper.KeyCodeDown = KEY_DOWN_TAMPER;                /* 按键按下的键值代码 */
  73.         s_BtnTamper.KeyCodeUp = 0;                                                /* 按键弹起的键值代码 */
  74.         s_BtnTamper.KeyCodeLong = 0;                                        /* 按键被持续按下的键值代码 */

  75.         /* 初始化WAKEUP按键变量 */
  76.         s_BtnWakeUp.IsKeyDownFunc = IsKeyDownWakeUp;        /* 判断按键按下的函数 */
  77.         s_BtnWakeUp.FilterTime = BUTTON_FILTER_TIME;        /* 按键滤波时间 */
  78.         s_BtnWakeUp.LongTime = 0;                                                /* 长按时间 */
  79.         s_BtnWakeUp.Count = s_BtnWakeUp.FilterTime / 2;        /* 计数器设置为滤波时间的一半 */
  80.         s_BtnWakeUp.State = 0;                                                        /* 按键缺省状态,0为未按下 */
  81.         s_BtnWakeUp.KeyCodeUp = 0;                                                /* 按键弹起的键值代码,0表示不检测 */
  82.         s_BtnWakeUp.KeyCodeDown = KEY_DOWN_WAKEUP;                /* 按键按下的键值代码 */
  83.         s_BtnWakeUp.KeyCodeLong = 0;                                        /* 按键被持续按下的键值代码,0表示不检测 */

  84.         /* 初始化UP按键变量 */
  85.         s_BtnUp.IsKeyDownFunc = IsKeyDownUp;                /* 判断按键按下的函数 */
  86.         s_BtnUp.FilterTime = BUTTON_FILTER_TIME;        /* 按键滤波时间 */
  87.         s_BtnUp.LongTime = 0;                                                /* 长按时间 */
  88.         s_BtnUp.Count = s_BtnUp.FilterTime / 2;                /* 计数器设置为滤波时间的一半 */
  89.         s_BtnUp.State = 0;                                                        /* 按键缺省状态,0为未按下 */
  90.         s_BtnUp.KeyCodeDown = KEY_DOWN_JOY_UP;                /* 按键按下的键值代码 */
  91.         s_BtnUp.KeyCodeUp = 0;                                                /* 按键弹起的键值代码,0表示不检测 */
  92.         s_BtnUp.KeyCodeLong = 0;                                        /* 按键被持续按下的键值代码,0表示不检测 */

  93.         /* 初始化DOWN按键变量 */
  94.         s_BtnDown.IsKeyDownFunc = IsKeyDownDown;        /* 判断按键按下的函数 */
  95.         s_BtnDown.FilterTime = BUTTON_FILTER_TIME;        /* 按键滤波时间 */
  96.         s_BtnDown.LongTime = 0;                                                /* 长按时间 */
  97.         s_BtnDown.Count = s_BtnDown.FilterTime / 2;        /* 计数器设置为滤波时间的一半 */
  98.         s_BtnDown.State = 0;                                                /* 按键缺省状态,0为未按下 */
  99.         s_BtnDown.KeyCodeDown = KEY_DOWN_JOY_DOWN;        /* 按键按下的键值代码 */
  100.         s_BtnDown.KeyCodeUp = 0;                                        /* 按键弹起的键值代码,0表示不检测 */
  101.         s_BtnDown.KeyCodeLong = 0;                                        /* 按键被持续按下的键值代码,0表示不检测 */

  102.         /* 初始化LEFT按键变量 */
  103.         s_BtnLeft.IsKeyDownFunc = IsKeyDownLeft;        /* 判断按键按下的函数 */
  104.         s_BtnLeft.FilterTime = BUTTON_FILTER_TIME;        /* 按键滤波时间 */
  105.         s_BtnLeft.LongTime = 0;                                                /* 长按时间 */
  106.         s_BtnLeft.Count = s_BtnLeft.FilterTime / 2;        /* 计数器设置为滤波时间的一半 */
  107.         s_BtnLeft.State = 0;                                                /* 按键缺省状态,0为未按下 */
  108.         s_BtnLeft.KeyCodeDown = KEY_DOWN_JOY_LEFT;        /* 按键按下的键值代码 */
  109.         s_BtnLeft.KeyCodeUp = 0;                                        /* 按键弹起的键值代码,0表示不检测 */
  110.         s_BtnLeft.KeyCodeLong = 0;                                        /* 按键被持续按下的键值代码,0表示不检测 */

  111.         /* 初始化RIGHT按键变量 */
  112.         s_BtnRight.IsKeyDownFunc = IsKeyDownRight;        /* 判断按键按下的函数 */
  113.         s_BtnRight.FilterTime = BUTTON_FILTER_TIME;        /* 按键滤波时间 */
  114.         s_BtnRight.LongTime = 0;                                        /* 长按时间 */
  115.         s_BtnRight.Count = s_BtnRight.FilterTime / 2;/* 计数器设置为滤波时间的一半 */
  116.         s_BtnRight.State = 0;                                                /* 按键缺省状态,0为未按下 */
  117.         s_BtnRight.KeyCodeDown = KEY_DOWN_JOY_RIGHT;/* 按键按下的键值代码 */
  118.         s_BtnRight.KeyCodeUp = 0;                                        /* 按键弹起的键值代码,0表示不检测 */
  119.         s_BtnRight.KeyCodeLong = 0;                                        /* 按键被持续按下的键值代码,0表示不检测 */

  120.         /* 初始化OK按键变量 */
  121.         s_BtnOk.IsKeyDownFunc = IsKeyDownOk;                /* 判断按键按下的函数 */
  122.         s_BtnOk.FilterTime = BUTTON_FILTER_TIME;        /* 按键滤波时间 */
  123.         s_BtnOk.LongTime = 0;                                                /* 长按时间 */
  124.         s_BtnOk.Count = s_BtnOk.FilterTime / 2;                /* 计数器设置为滤波时间的一半 */
  125.         s_BtnOk.State = 0;                                                        /* 按键缺省状态,0为未按下 */
  126.         s_BtnOk.KeyCodeDown = KEY_DOWN_JOY_OK;                /* 按键按下的键值代码 */
  127.         s_BtnOk.KeyCodeUp = 0;                                                /* 按键弹起的键值代码,0表示不检测 */
  128.         s_BtnOk.KeyCodeLong = 0;                                        /* 按键被持续按下的键值代码,0表示不检测 */
  129. }

  130. /*******************************************************************************
  131.         函数名: PutKey
  132.         输  入: 键值
  133.         输  出:
  134.         功能说明:将1个键值压入按键FIFO缓冲区
  135. *******************************************************************************/
  136. void PutKey(u8 _KeyCode)
  137. {
  138.         s_Key.Buf[s_Key.Write] = _KeyCode;

  139.         if (++s_Key.Write  >= KEY_FIFO_SIZE)
  140.         {
  141.                 s_Key.Write = 0;
  142.         }
  143. }

  144. /*******************************************************************************
  145.         函数名: GetKey
  146.         输  入:
  147.         输  出: 返回键值, KEY_NONE ( = 0) 表示无键按下
  148.         功能说明:从按键FIFO取1个键值
  149. *******************************************************************************/
  150. u8 GetKey(void)
  151. {
  152.         u8 ret;

  153.         if (s_Key.Read == s_Key.Write)
  154.         {
  155.                 return KEY_NONE;
  156.         }
  157.         else
  158.         {
  159.                 ret = s_Key.Buf[s_Key.Read];

  160.                 if (++s_Key.Read >= KEY_FIFO_SIZE)
  161.                 {
  162.                         s_Key.Read = 0;
  163.                 }
  164.                 return ret;
  165.         }
  166. }

  167. /*******************************************************************************
  168.         函数名:DetectButton
  169.         输  入: 按键结构变量指针
  170.         输  出:
  171.         功能说明:检测指定的按键
  172. *******************************************************************************/
  173. static void DetectButton(BUTTON_T *_pBtn)
  174. {
  175.         /* 如果没有初始化按键函数,则报错
  176.         if (_pBtn->IsKeyDownFunc == 0)
  177.         {
  178.                 printf("Fault : DetectButton(), _pBtn->IsKeyDownFunc undefine");
  179.         }
  180.         */

  181.         if (_pBtn->IsKeyDownFunc())
  182.         {
  183.                 if (_pBtn->Count < _pBtn->FilterTime)
  184.                 {
  185.                         _pBtn->Count = _pBtn->FilterTime;
  186.                 }
  187.                 else if(_pBtn->Count < 2 * _pBtn->FilterTime)
  188.                 {
  189.                         _pBtn->Count++;
  190.                 }
  191.                 else
  192.                 {
  193.                         if (_pBtn->State == 0)
  194.                         {
  195.                                 _pBtn->State = 1;

  196.                                 /* 发送按钮按下的消息 */
  197.                                 if (_pBtn->KeyCodeDown > 0)
  198.                                 {
  199.                                         /* 键值放入按键FIFO */
  200.                                         PutKey(_pBtn->KeyCodeDown);
  201.                                 }
  202.                         }

  203.                         if (_pBtn->LongTime > 0)
  204.                         {
  205.                                 if (_pBtn->LongCount < _pBtn->LongTime)
  206.                                 {
  207.                                         /* 发送按钮持续按下的消息 */
  208.                                         if (++_pBtn->LongCount == _pBtn->LongTime)
  209.                                         {
  210.                                                 /* 键值放入按键FIFO */
  211.                                                 PutKey(_pBtn->KeyCodeLong);
  212.                                         }
  213.                                 }
  214.                         }
  215.                 }
  216.         }
  217.         else
  218.         {
  219.                 if(_pBtn->Count > _pBtn->FilterTime)
  220.                 {
  221.                         _pBtn->Count = _pBtn->FilterTime;
  222.                 }
  223.                 else if(_pBtn->Count != 0)
  224.                 {
  225.                         _pBtn->Count--;
  226.                 }
  227.                 else
  228.                 {
  229.                         if (_pBtn->State == 1)
  230.                         {
  231.                                 _pBtn->State = 0;

  232.                                 /* 发送按钮弹起的消息 */
  233.                                 if (_pBtn->KeyCodeUp > 0)
  234.                                 {
  235.                                         /* 键值放入按键FIFO */
  236.                                         PutKey(_pBtn->KeyCodeUp);
  237.                                 }
  238.                         }
  239.                 }

  240.                 _pBtn->LongCount = 0;
  241.         }
  242. }

  243.   


  244. /*******************************************************************************
  245.         函数名:KeyPro
  246.         输  入:
  247.         输  出:
  248.         功能说明:检测所有的按键,这个函数要被systic的中断服务程序调用
  249. *******************************************************************************/
  250. void KeyPro(void)
  251. {
  252.         DetectButton(&s_BtnUser);        /* USER 键 */
  253.         DetectButton(&s_BtnTamper);        /* TAMPER 键 */
  254.         DetectButton(&s_BtnWakeUp);        /* WAKEUP 键 */
  255.         DetectButton(&s_BtnUp);                /* 摇杆UP键 */
  256.         DetectButton(&s_BtnDown);        /* 摇杆DOWN键 */
  257.         DetectButton(&s_BtnLeft);        /* 摇杆LEFT键 */
  258.         DetectButton(&s_BtnRight);        /* 摇杆RIGHT键 */
  259.         DetectButton(&s_BtnOk);                /* 摇杆OK键 */
  260. }


头文件

  1. /****************************************************************************
  2. * Copyright (C), 2009-2010, www.armfly.com
  3. *
  4. * 文件名: button.h
  5. * 内容简述: 头文件
  6. *
  7. * 文件历史:
  8. * 版本号  日期       作者    说明
  9. * v0.1    2009-12-28 armfly  创建该文件
  10. *
  11. */

  12. /* Define to prevent recursive inclusion -------------------------------------*/
  13. #ifndef __BUTTON_H
  14. #define __BUTTON_H

  15. /* 按键滤波时间50ms, 单位10ms
  16. 只有连续检测到50ms状态不变才认为有效,包括弹起和按下两种事件
  17. */
  18. #define BUTTON_FILTER_TIME         5
  19. #define BUTTON_LONG_TIME         100                /* 持续1秒,认为长按事件 */

  20. /*
  21.         每个按键对应1个全局的结构体变量。
  22.         其成员变量是实现滤波和多种按键状态所必须的
  23. */
  24. typedef struct
  25. {
  26.         /* 下面是一个函数指针,指向判断按键手否按下的函数 */
  27.         u8 (*IsKeyDownFunc)(void); /* 按键按下的判断函数,1表示按下 */
  28.         u8 Count;                        /* 滤波器计数器 */
  29.         u8 FilterTime;                /* 滤波时间(最大255,表示2550ms) */
  30.         u16 LongCount;                /* 长按计数器 */
  31.         u16 LongTime;                /* 按键按下持续时间, 0表示不检测长按 */
  32.         u8  State;                        /* 按键当前状态(按下还是弹起) */
  33.         u8 KeyCodeUp;                /* 按键弹起的键值代码, 0表示不检测按键弹起 */
  34.         u8 KeyCodeDown;        /* 按键按下的键值代码, 0表示不检测按键按下 */
  35.         u8 KeyCodeLong;        /* 按键长按的键值代码, 0表示不检测长按 */
  36. }BUTTON_T;

  37. /* 定义键值代码
  38.         推荐使用enum, 不用#define,原因:
  39.         (1) 便于新增键值,方便调整顺序,使代码看起来舒服点
  40.         (2)        编译器可帮我们避免键值重复。
  41. */
  42. typedef enum
  43. {
  44.         KEY_NONE = 0,                        /* 0 表示按键事件 */

  45.         /* 为了演示,需要检测USER键弹起事件和长按事件 */
  46.         KEY_DOWN_USER,                        /* User键按下 */
  47.         KEY_UP_USER,                        /* User键弹起 */
  48.         KEY_HOLD_USER,                        /* User键长按 */

  49.         KEY_DOWN_WAKEUP,                /* WakeUp键按下 */
  50.         KEY_DOWN_TAMPER,                /* Tamper键按下 */

  51.         KEY_DOWN_JOY_UP,                /* 摇杆UP键按下 */
  52.         KEY_DOWN_JOY_DOWN,                /* 摇杆DOWN键按下 */
  53.         KEY_DOWN_JOY_LEFT,                /* 摇杆LEFT键按下 */
  54.         KEY_DOWN_JOY_RIGHT,                /* 摇杆RIGHT键按下 */
  55.         KEY_DOWN_JOY_OK                        /* 摇杆OK键按下 */
  56. }KEY_ENUM;

  57. /*
  58.         按键FIFO用到变量
  59. */
  60. #define KEY_FIFO_SIZE        20
  61. typedef struct
  62. {
  63.         u8 Buf[KEY_FIFO_SIZE];                /* 键值缓冲区 */
  64.         u8 Read;        /* 缓冲区读指针 */
  65.         u8 Write;        /* 缓冲区写指针 */
  66. }KEY_FIFO_T;

  67. void InitButtonVar(void);
  68. void PutKey(u8 _KeyCode);
  69. u8  GetKey(void);
  70. void KeyPro(void);
  71. #endif

楼主只需更改C文件的按键端口就行了
然后在用定时器产生一个10ms左右的时基 在这个时基里调用按键扫描函数即可
然后你想检测30s 只需更改 长按键时间即可

楼主可以参考下
a13e518f989bbea 发表于 2011-9-27 13:07 | 显示全部楼层
按下按键,打开定时器,检测按键松开的时候,关闭定时器,
ayb_ice 发表于 2011-9-27 13:13 | 显示全部楼层
9# ayb_ice 额  我是刚接手这个  而且要用一款我以前不熟悉的ARM  所以 我还要熟悉CPU的各个功能模块呀  。。  另外  我没工资  还在求学
ycz9999 发表于 2011-9-27 12:13

这种东西本身应该个和硬件无关的问题,简单算法而已
如果这种东西都还要占用一个定时器的话,那做个很简单的项目,估计模块资源都要用完了
lyjian 发表于 2011-9-27 16:41 | 显示全部楼层
楼上,如果你不用定时器的话,那你怎么做?
软件死等?
牛!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

857

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部