注册 登录
查看: 615|回复: 5

[K60] K60库按键代码的问题

[复制链接]
发表于 2013-10-11 14:22:26 | 显示全部楼层 |阅读模式
今天看了一下K60的按键代码,但是关于按键枚举定义有些不懂希望版主可以指导一下
//按键端口的枚举
typedef enum
{   
    KEY_ADD     = PTD8,                    //加
    KEY_SUB     = PTD9,                    //减
    KEY_PREV    = PTD10,                   //上一个
    KEY_NEXT    = PTD11,                   //下一个
    KEY_OK      = PTD12,                   //确定
    KEY_CANCEL  = PTD13,                   //取消
}KEY_e;

这是按键的枚举定义,但是里面的PTD8,PTD9,PTD10,PTD11,PTD12,PTD13是在哪里定义的啊,代表的什么意思啊?希望版主可以帮我解答一下。
回复

使用道具 举报

发表于 2013-10-11 14:26:55 | 显示全部楼层
PTD12 这些 也是 枚举定义
仅仅是 一个编号而已,用于区分不同的管脚
回复 支持 反对

使用道具 举报

发表于 2013-10-11 14:28:35 | 显示全部楼层
gpio_cfg.h 里面定义的
回复 支持 反对

使用道具 举报

发表于 2013-10-11 14:29:04 | 显示全部楼层

typedef enum PTxn
{
    /*  PTA端口    */ //0~31
    PTA0,
    PTA1,
    PTA2,
    PTA3,
    PTA4,
    PTA5,
    PTA6,
……


} PTxn;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-10-11 19:58:32 | 显示全部楼层
玄来玄去 发表于 2013-10-11 14:29
typedef enum PTxn
{
    /*  PTA端口    */ //0~31

版主我还有问题要问,还是关于按键的。
void    KEY_init(KEY_e key)                                               // KEY初始化 函数
{
    gpio_init((PORTx)(key>>5),key & 0x1F,GPI_UP,0);
}
gpio_init((PORTx)(key>>5),key & 0x1F,GPI_UP,0);这句没有懂。(PORTx)(key>>5)是干啥用的。key & 0x1F这个又是干啥用的?
回复 支持 反对

使用道具 举报

发表于 2013-10-12 18:28:24 | 显示全部楼层
张望好人 发表于 2013-10-11 19:58
版主我还有问题要问,还是关于按键的。
void    KEY_init(KEY_e key)                                  ...

我们准备 推出新的 k60 库代码,你 看看 代码:
  1. /*! 枚举管脚编号 */
  2. typedef enum
  3. {
  4.     /*  PTA端口    */ //0~31
  5.     PTA0,  PTA1,  PTA2,  PTA3,  PTA4,  PTA5,  PTA6,  PTA7,  PTA8,  PTA9,  PTA10, PTA11, PTA12, PTA13, PTA14, PTA15,
  6.     PTA16, PTA17, PTA18, PTA19, PTA20, PTA21, PTA22, PTA23, PTA24, PTA25, PTA26, PTA27, PTA28, PTA29, PTA30, PTA31,

  7.     /*  PTB端口    */ //32~63
  8.     PTB0,  PTB1,  PTB2,  PTB3,  PTB4,  PTB5,  PTB6,  PTB7,  PTB8,  PTB9,  PTB10, PTB11, PTB12, PTB13, PTB14, PTB15,
  9.     PTB16, PTB17, PTB18, PTB19, PTB20, PTB21, PTB22, PTB23, PTB24, PTB25, PTB26, PTB27, PTB28, PTB29, PTB30, PTB31,

  10.     /*  PTC端口    */
  11.     PTC0,  PTC1,  PTC2,  PTC3,  PTC4,  PTC5,  PTC6,  PTC7,  PTC8,  PTC9,  PTC10, PTC11, PTC12, PTC13, PTC14, PTC15,
  12.     PTC16, PTC17, PTC18, PTC19, PTC20, PTC21, PTC22, PTC23, PTC24, PTC25, PTC26, PTC27, PTC28, PTC29, PTC30, PTC31,

  13.     /*  PTD端口    */
  14.     PTD0,  PTD1,  PTD2,  PTD3,  PTD4,  PTD5,  PTD6,  PTD7,  PTD8,  PTD9,  PTD10, PTD11, PTD12, PTD13, PTD14, PTD15,
  15.     PTD16, PTD17, PTD18, PTD19, PTD20, PTD21, PTD22, PTD23, PTD24, PTD25, PTD26, PTD27, PTD28, PTD29, PTD30, PTD31,

  16.     /*  PTE端口    */
  17.     PTE0,  PTE1,  PTE2,  PTE3,  PTE4,  PTE5,  PTE6,  PTE7,  PTE8,  PTE9,  PTE10, PTE11, PTE12, PTE13, PTE14, PTE15,
  18.     PTE16, PTE17, PTE18, PTE19, PTE20, PTE21, PTE22, PTE23, PTE24, PTE25, PTE26, PTE27, PTE28, PTE29, PTE30, PTE31,
  19. } PTXn_e;

  20. /*! 枚举端口模块 */
  21. typedef enum
  22. {
  23.     PTA, PTB, PTC, PTD, PTE,

  24.     PTX_MAX,
  25. } PTX_e;

  26. /*! 枚举编号 */
  27. typedef enum
  28. {
  29.     PT0 , PT1 , PT2 , PT3 , PT4 , PT5 , PT6 , PT7 ,
  30.     PT8 , PT9 , PT10, PT11, PT12, PT13, PT14, PT15,
  31.     PT16, PT17, PT18, PT19, PT20, PT21, PT22, PT23,
  32.     PT24, PT25, PT26, PT27, PT28, PT29, PT30, PT31,
  33. } PTn_e;

  34. //根据以上的定义,可以得出:PTx = PTxn / 32 ; PTn = PTxn & 31
  35. #define PTX(PTxn)           ((PTxn)>>5)
  36. #define PTn(PTxn)           ((PTxn)&0x1f)


key>>5 就是 求得 PTX(key) ,例如 key =  PTA1 ,那么 就得 PTA
如此类推……
回复 支持 反对

使用道具 举报

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

本版积分规则

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