OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5355|回复: 3

关于mpr121程序问题请教

[复制链接]

32

主题

83

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
385
金钱
385
注册时间
2011-11-21
在线时间
32 小时
发表于 2016-11-4 18:13:06 | 显示全部楼层 |阅读模式
1金钱
static u8 read_mpr121_reg(u8 device, u8 addr) {
    u8 dat;
    IIC_Init();
    IIC_Start();
    IIC_Send_Byte(device);
    IIC_Wait_Ack();
    IIC_Send_Byte(addr);
    IIC_Wait_Ack();
    IIC_Start();
    IIC_Send_Byte(device + 0x01);
    IIC_Wait_Ack();
    //dat=read_byte();
    //IIC_NAck(0);
    dat = IIC_Read_Byte(0);
    IIC_NAck();
    IIC_Stop();
    return dat;
}

/**
* ¶áè¡μ±Ç°μÄ°′¼ü
* @return 0xff μ±Ç°Ã»óD°′¼ü°′ÏÂ
*         0~11 μ±Ç°±»°′ÏÂμÄkeyÖμ
*/
static u8 get_key() {
    u8 count = 0;
    u8 i = 0;
    u32 dat;
    dat = read_mpr121_reg(touch_shield, 0x01) << 8;
    dat = dat | read_mpr121_reg(touch_shield, 0x00);
    for (i = 0; i < 12; i++) {
        if ((dat & (1 << i))) {
            count++;
        }
    }
    i = 0;
    if(count == 1) {
        while((dat & (1 << i)) == 0) {
            i++;
        }
        return i;
    }
    return 0xff;
}
以上是mpr121处理程序的一部分,红色的两行程序我不是很明白,不知道他是怎么获取按键值得,请教各位了

最佳答案

查看完整内容[请看2#楼]

红色部分是获取按键值的高8位和低8位仪器拼接成一个32位的数据,然后再对拼接的32为数据进行位判断,看哪一位为1,则返回位的计数值。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2013-4-20
在线时间
4 小时
发表于 2016-11-4 18:13:07 | 显示全部楼层
红色部分是获取按键值的高8位和低8位仪器拼接成一个32位的数据,然后再对拼接的32为数据进行位判断,看哪一位为1,则返回位的计数值。
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2018-7-21
在线时间
1 小时
发表于 2019-4-20 17:35:52 | 显示全部楼层
楼主这里有这个的程序吗?我和你用的一样的程序,但是为什么触发不了中断
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2018-7-21
在线时间
1 小时
发表于 2019-4-20 18:16:56 来自手机 | 显示全部楼层
有人没
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-26 05:12

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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