查看: 3026|回复: 5

Atmel XMEGA-A3BU试用报告二按键

[复制链接]
  • TA的每日心情
    奋斗
    2016-12-12 23:14
  • 签到天数: 185 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2013-10-25 12:45:34 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 SurfaceBook 于 2013-10-25 12:51 编辑

    Atmel XMEGA-A3BU试用报告二,IE11浏览器中图片怎么没法添加的啊,下面附件是3个独立键盘和触摸按键的原理图
    123.jpg
    321.jpg
    22.jpg
    321.jpg
    1234.jpg

    XMEGA-A3BU_XPLAINED_Design_Documentation_rev2.PDF

    4.07 MB, 下载次数: 4

    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-12-12 23:14
  • 签到天数: 185 天

    连续签到: 1 天

    [LV.7]常住居民III

     楼主| 发表于 2013-10-25 12:53:32 | 显示全部楼层
    本帖最后由 SurfaceBook 于 2013-10-25 13:07 编辑

    关于3个独立按键,分别是PE的5口和PF的1口和2口,当按键按下去时,对应的引脚检测出低电平,检测语句为gpio_pin_is_low(io_id);
    按键对应的名字
    #define GPIO_PUSH_BUTTON_0              IOPORT_CREATE_PIN(PORTE, 5)#define GPIO_PUSH_BUTTON_1              IOPORT_CREATE_PIN(PORTF, 1)
    #define GPIO_PUSH_BUTTON_2              IOPORT_CREATE_PIN(PORTF, 2)

    所以检测语句如下面程序中所述
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-12-12 23:14
  • 签到天数: 185 天

    连续签到: 1 天

    [LV.7]常住居民III

     楼主| 发表于 2013-10-25 12:56:23 | 显示全部楼层
    本帖最后由 SurfaceBook 于 2013-10-25 13:09 编辑

    下面是程序是按键例程
    #include "xmega_a3bu_xplained.h"
    #include "touch_api.h"
    #include "keyboard.h"
    #include "cdc.h"

    /**
    * \brief Check the status of the keyboard
    *
    * \param keybuffer  a keyboard_event struct to store keyboard status
    */
    void keyboard_get_key_state(struct keyboard_event *keybuffer)
    {
            // Variable to hold the key mask
            static uint8_t key_state;
            char key;

            if ((gpio_pin_is_low(GPIO_PUSH_BUTTON_0)) &&
                            !(key_state & KEYBOARD_ENTER_MASK)) {
                    // Key pressed
                    key_state |= KEYBOARD_ENTER_MASK;
                    keybuffer->keycode = KEYBOARD_ENTER;
                    keybuffer->type = KEYBOARD_PRESS;
            } else if ((gpio_pin_is_high(GPIO_PUSH_BUTTON_0))
                            && (key_state & KEYBOARD_ENTER_MASK)) {
                    // Key released
                    key_state &= ~KEYBOARD_ENTER_MASK;
                    keybuffer->keycode = KEYBOARD_ENTER;
                    keybuffer->type = KEYBOARD_RELEASE;
            } else if ((gpio_pin_is_low(GPIO_PUSH_BUTTON_1)) &&
                            !(key_state & KEYBOARD_UP_MASK)) {
                    // Key pressed
                    key_state |= KEYBOARD_UP_MASK;
                    keybuffer->keycode = KEYBOARD_UP;
                    keybuffer->type = KEYBOARD_PRESS;
            } else if ((gpio_pin_is_high(GPIO_PUSH_BUTTON_1))
                            && (key_state & KEYBOARD_UP_MASK)) {
                    // Key released
                    key_state &= ~KEYBOARD_UP_MASK;
                    keybuffer->keycode = KEYBOARD_UP;
                    keybuffer->type = KEYBOARD_RELEASE;
            } else if ((gpio_pin_is_low(GPIO_PUSH_BUTTON_2)) &&
                            !(key_state & KEYBOARD_DOWN_MASK)) {
                    // Key pressed
                    key_state |= KEYBOARD_DOWN_MASK;
                    keybuffer->keycode = KEYBOARD_DOWN;
                    keybuffer->type = KEYBOARD_PRESS;
            } else if ((gpio_pin_is_high(GPIO_PUSH_BUTTON_2))
                            && (key_state & KEYBOARD_DOWN_MASK)) {
                    // Key released
                    key_state &= ~KEYBOARD_DOWN_MASK;
                    keybuffer->keycode = KEYBOARD_DOWN;
                    keybuffer->type = KEYBOARD_RELEASE;

            // touch key
            } else if ((check_touch_key_pressed()) &&
                            !(key_state & KEYBOARD_BACK_MASK)) {
                    // Touch key pressed
                    key_state |= KEYBOARD_BACK_MASK;
                    keybuffer->keycode = KEYBOARD_BACK;
                    keybuffer->type = KEYBOARD_PRESS;
            } else if ((!check_touch_key_pressed()) &&
                            (key_state & KEYBOARD_BACK_MASK)) {
                    // Touch key released
                    key_state &= ~KEYBOARD_BACK_MASK;
                    keybuffer->keycode = KEYBOARD_BACK;
                    keybuffer->type = KEYBOARD_RELEASE;
            } else if ((key = cdc_getkey()) != KEYBOARD_NO_KEY) {
                    keybuffer->keycode = key;
                    keybuffer->type = KEYBOARD_RELEASE;
            } else {
                    keybuffer->keycode = KEYBOARD_NO_KEY;
                    keybuffer->type = KEYBOARD_NO_EVENT;
            }
    }
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2014-7-16 09:10
  • 签到天数: 361 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2013-10-25 13:08:18 | 显示全部楼层
    帖子很赞哟!辛苦辛苦。。。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2017-5-12 10:32
  • 签到天数: 295 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2013-10-26 08:19:39 | 显示全部楼层
    赞一个~~~~~~~~~~~~~··
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-7-14 11:07
  • 签到天数: 1244 天

    连续签到: 54 天

    [LV.10]以坛为家III

    发表于 2013-10-27 14:04:44 | 显示全部楼层
    辛苦辛苦。。。辛苦辛苦。。辛苦辛苦。。。。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /5 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-12-21 10:47 , Processed in 0.173057 second(s), 26 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.