通用键盘接口是什么样子的?

掌中星空 2015-04-07 10:37:08
大家的键盘接口程序是什么样子的?
就是在键盘头文件里的子程序什么样子,独立按键、矩阵键盘、编码键盘等都说说吧。

我的矩阵键盘key.h
//4*4键盘,char code key[]={0,'a','3','2','1','b','6','5','4','c','9','8','7','d','#','0','*'};

unsigned char key_push(unsigned char x); //检测按键的按下,有按下返回1,没有返回0
unsigned char key_return(unsigned char x); //检测按键的返回,有返回返回1,没有返回0

//一个按键的按下和返回检测只能用一次,无法多个程序同时处理一个状态。
比如说程序a和b在程序同一周期运行,都使用key_push('1'),先运行的能检测到,后运行的检测不到。

学单片机一段时间了,有点闭门造车的感觉,想写一些可以通用的程序,却又不知道大家的程序风格是什么样的。
...全文
124 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
掌中星空 2015-04-09
  • 打赏
  • 举报
回复
我就是在用定时器写的按键,主要是问问大家的软件接口头文件是什么样子的, 如果想写一个大家都方便使用的程序,统一下软件接口还是必要的。
dceacho 2015-04-08
  • 打赏
  • 举报
回复
用的时候才去检测按键这样不好, 如果程序长的话可能漏掉按键, 放定时器里检测, 按键就记下来 一般没遇到过2个任务需要响应同一个按键的, WINDOWS除了系统热键也只是活动窗口才响应当前按键 如果非要都响应同一个按键, 可以在定时器的按键扫描里把扫描到的值复制一份, 比如扫描到按键k1,k2,k3按下了
typedef struct
{
  uint8_t k1:1;
  uint8_t k2:1;
  uint8_t k3:1;
  uint8_t k4:1;
}
//扫描
.....
//
//检测到K1,K2,K3有效
keya.k1=true;
keya.k2=true;
keya.k3=true;
keyb.k1=true;
keyb.k2=true;
keyb.k3=true;
//任务A就根据键值keya来响应, 任务B就只判断keyb
void taska(void)
{
  while(1)
  {
    if(keya.k1==true)
    {
      //do sth.
      keya.k1=false;
    }
}
//任务B类似
void taskb(void)
{

}
fly 100% 2015-04-08
  • 打赏
  • 举报
回复
如果io中断 清一下中断

27,375

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧