找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2558|回复: 7
打印 上一主题 下一主题
收起左侧

关于按键的程序

[复制链接]
跳转到指定楼层
楼主
ID:105624 发表于 2016-2-25 08:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. u8  get_key_state (void)
  2. {
  3.     if (get_key_joy_sel == 0)
  4.         return KEY_VALUE_JOY_SEL;
  5.     if (get_key_joy_down == 0)
  6.         return KEY_VALUE_JOY_DOWN;               
  7.     if (get_key_joy_left == 0)
  8.         return KEY_VALUE_JOY_LEFT;
  9.     if (get_key_joy_right == 0)
  10.         return KEY_VALUE_JOY_RIGHT;
  11.     if (get_key_joy_up == 0)
  12.         return KEY_VALUE_JOY_UP;               
  13.     if (get_key_user_button == 0)
  14.         return KEY_VALUE_URSER_BUTTON;
  15.     if (get_key_tamper_button == 0)
  16.         return KEY_VALUE_TAMPER_BUTTON;
  17.     if (get_key_wake_up_button == 1)
  18.         return KEY_VALUE_WAKE_UP_BUTTON;               

  19.     return 0x00;
  20. }
复制代码
  1. int  main (void)
  2. {
  3.     u8  key_value_buf;

  4.     led_init();                                    /* LED初始化                                           */
  5.     key_init();                                    /* 按键初始化                                          */
  6.     led_all_on();

  7.     while (1)
  8.     {
  9.         key_value_buf = get_key_state();

  10.         if (key_value_buf > 0)                     /* 判断是否有按键按下                                  */
  11.         {
  12.             switch (key_value_buf)
  13.             {
  14.                 case KEY_VALUE_JOY_SEL:
  15.                      a1=1;               
  16.                      break;                                                               
  17.                 case KEY_VALUE_JOY_UP:
  18.                      a1=2;       
  19.                      break;
  20.                 case KEY_VALUE_JOY_LEFT:
  21.                      a1=3;
  22.                      break;
  23.                 case KEY_VALUE_JOY_RIGHT:
  24.                     a1=4;       
  25.                      break;                                                               
  26.                 case KEY_VALUE_JOY_DOWN:
  27.                      a1=5;
  28.                      break;
  29.                 case KEY_VALUE_URSER_BUTTON:
  30.                      a1=6;
  31.                      break;
  32.                 case KEY_VALUE_TAMPER_BUTTON:
  33.                     a1=7;
  34.                      break;                       
  35.                 case KEY_VALUE_WAKE_UP_BUTTON:
  36.                      a1=8;
  37.                      break;                                                                       
  38.                 default:

  39.                      break;                                                               
  40.             }         
  41. }
复制代码
这是一个按键例程上的程序,看的不太明白,求大神帮忙分析


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:97249 发表于 2016-2-25 11:03 | 只看该作者
当有按键按下,get_key_state (void)返回相应的按键值赋给 key_value_buf,不同按键按下,给a1值就不同
回复

使用道具 举报

板凳
ID:105624 发表于 2016-2-25 11:36 | 只看该作者
红尘有你 发表于 2016-2-25 11:03
当有按键按下,get_key_state (void)返回相应的按键值赋给 key_value_buf,不同按键按下,给a1值就不同

前面的按键程序是怎么走的呢,比如说这两句
  1. if (get_key_joy_sel == 0)
  2.         return KEY_VALUE_JOY_SEL;
复制代码

如果此按键按下,按键值返回是0吗?在主函数里判断按键是否按下用的是检测是否大于零,不应该都是零吗?
回复

使用道具 举报

地板
ID:97249 发表于 2016-2-25 13:06 | 只看该作者
本帖最后由 红尘有你 于 2016-2-25 13:12 编辑

KEY_VALUE_JOY_SEL,KEY_VALUE_JOY_UP。。。这几个应该是常量,程序前面应该声明的。get_key_joy_sel是对应按键的变量,当相应按键按下时,它就等于0,函数get_key_state()就返回相应的常量KEY_VALUE_JOY_SEL。主函数再根据KEY_VALUE_JOY_SEL常量给a1赋对应的值1。
其实这程序写得有点罗嗦了,可以在if()语句后直接给a1赋值
回复

使用道具 举报

5#
ID:105624 发表于 2016-2-25 14:03 | 只看该作者
红尘有你 发表于 2016-2-25 13:06
KEY_VALUE_JOY_SEL,KEY_VALUE_JOY_UP。。。这几个应该是常量,程序前面应该声明的。get_key_joy_sel是对 ...
  1. if (key_value_buf > 0)                     /* 判断是否有按键按下  
复制代码

这一句是什么意思呢?按键按下不都应该是0吗?如果按下又怎么判断大于0呢?
回复

使用道具 举报

6#
ID:97249 发表于 2016-2-25 14:53 | 只看该作者
本帖最后由 红尘有你 于 2016-2-25 14:55 编辑
狼牙小帅 发表于 2016-2-25 14:03
这一句是什么意思呢?按键按下不都应该是0吗?如果按下又怎么判断大于0呢?

key_value_buf是get_key_state ()的返回值KEY_VALUE_JOY_SE常量,所以是大于0的,按键按下的值放在 if (get_key_joy_sel == 0)的get_key_joy_sel 变量里
回复

使用道具 举报

7#
ID:105624 发表于 2016-2-25 15:08 | 只看该作者
红尘有你 发表于 2016-2-25 14:53
key_value_buf是get_key_state ()的返回值KEY_VALUE_JOY_SE常量,所以是大于0的,按键按下的值放在 if (g ...

哦,有点明白了,谢谢你的指导
回复

使用道具 举报

8#
ID:105624 发表于 2016-2-25 16:13 | 只看该作者
红尘有你 发表于 2016-2-25 14:53
key_value_buf是get_key_state ()的返回值KEY_VALUE_JOY_SE常量,所以是大于0的,按键按下的值放在 if (g ...

嗯,明白了,谢谢啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表