搜索
bottom↓
回复: 8

求一个BS8116的读写程序参考一下

[复制链接]

出0入8汤圆

发表于 2018-7-12 12:43:33 | 显示全部楼层 |阅读模式
最近在搞BS8116的触摸芯片,网上找了几个读写程序试了都不能用,读写寄存器的值全部为0.但是有应答信号,信号引脚有被拉低。求一个BS8116的读写程序参考一下,非常感谢。

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2018-7-12 15:30:45 | 显示全部楼层
/**********************************************************
º¯Êý¹¦ÄÜ£º´¥Ãþ°´¼üÅäÖÃ
Èë¿Ú²ÎÊý£ºs : 0:¹Ø´¥Ãþ£¬>0£º¿ª´¥ÃþµÄÊýÁ¿
³ö¿Ú²ÎÊý£º
*********************************************************/
u8 TouchKeyConfig(u8 s)
{
        u8 i = 0 , c = 0 , d = 0;
        u8 t=0;
       
        TK_I2C_Start();//¿ªÊ¼

        TK_I2CWriteByte(touchchip_add);
        TK_I2C_Ack();

        d = 0xb0;
        TK_I2CWriteByte( d );
        TK_I2C_Ack();
        //c += d;
       
        #if 1
       
        d = 0x00;
        TK_I2CWriteByte( d );
        TK_I2C_Ack();
        c += d;
       
        d = 0x00;
        TK_I2CWriteByte( d );
        TK_I2C_Ack();
        c += d;
       
        d = 0x83;
        TK_I2CWriteByte( d );
        TK_I2C_Ack();
        c += d;
       
        d = 0xf3;
        TK_I2CWriteByte( d );
        TK_I2C_Ack();
        c += d;
       
        if(s == 0)//ʹÓõ͹¦ºÄģʽ
                d = 0xd8;
        else
                d = 0x98;
       
        TK_I2CWriteByte( d );
        TK_I2C_Ack();
        c += d;
        #endif
       
        for(i = 0 ; i < 16 ; i++)
        {
                d = 8 ;//ÁéÃô¶È
               
                if(i == 15)
                        d |= 0x40;
               
                if(s == 0)
                        d |= 0x80;

                TK_I2CWriteByte( d );
                TK_I2C_Ack();
                c += d;
        }
       
        TK_I2CWriteByte( c );//УÑéºÍ
        TK_I2C_Ack();

        TK_I2C_Stop();
       
        t=TK_ReadI2CAddr(0xb4);
        return ((t!=0x00)&&(t!=0xff));
}

出0入0汤圆

发表于 2018-7-12 15:31:20 | 显示全部楼层
u8 TK_ReadKeyVal(void)
{
        u16 d = 0 , i = 0 , j = 0 , min = 0;
        u8 addr = 8 , cnt = 0;
        u8 dh = 0 , dl = 0 , fd[12];

        const u8 tb[] =
        {
//bs8116               
                0x0 , //
                0x0 , //
                '1' , //0*
                '4' , //0*
                '7' , //1#
                '*' , //20
                '#' , //39
                0x0 , //48
                '9' , //54
                '6' , //67
                '3' , //75
                '2' , //86
                '5' , //92
                '8' , //a1
                '0' , //b3
        };
       
        dl = TK_ReadI2CAddr(8);
        dh = TK_ReadI2CAddr(9);
       
        d = (dh << 8) | dl;
//                d >>= 3;

        for(i = 0 ; i < 16 ; i ++)
        {
                if(d & (1 << i))
                        return tb[i];
        }

       
        return 12;
}

出0入0汤圆

发表于 2018-7-12 15:32:23 | 显示全部楼层
看一直没人回答,就把配置和读取发给你了,项目使用的!

出0入0汤圆

发表于 2018-7-12 16:15:57 | 显示全部楼层
BS8116的地址容易搞错,给出的0x50是7bit,8bit应该是0xA0。

出0入8汤圆

 楼主| 发表于 2018-7-12 20:50:53 来自手机 | 显示全部楼层
th1993 发表于 2018-7-12 15:32
看一直没人回答,就把配置和读取发给你了,项目使用的!

非常感谢,I2C是软件模拟的吗?可否分享一下。

出0入0汤圆

发表于 2018-7-13 09:13:31 | 显示全部楼层
IIC网上很多自己找吧

出0入0汤圆

发表于 2018-12-22 10:49:23 | 显示全部楼层
th1993 发表于 2018-7-12 15:31
u8 TK_ReadKeyVal(void)
{
        u16 d = 0 , i = 0 , j = 0 , min = 0;

请教 如果 采集16个触摸按键
如何 也同时用上 IRQ 中断的功能啊

因为是模拟I2C,如果不用 按键中断的话 就得一直不停扫描
系统负载受不了

非常感谢

出0入0汤圆

发表于 2018-12-24 09:17:27 | 显示全部楼层
3466756555 发表于 2018-12-22 10:49
请教 如果 采集16个触摸按键
如何 也同时用上 IRQ 中断的功能啊

我们只使用了12个,第16个触摸设置了中断还能当触摸用?好像不能吧
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-25 10:14

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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