前言:经常写一些触摸按键相关的代码,整理如下。方便查阅。


1. 操作说明

1.1 时序(Data&Clock)

  TC04B 配备有一个串行接口,允许与外部设备进行简单的通讯。当触摸芯片侦测到触摸键被按,会在Data 脚输出低电位,可唤醒主机,主机在接收到低电位后,由 Clock 脚输出时钟信号,并从 Data 脚回读按键值。

  当在 Clock 脚输入低电位时,触摸芯片准备数据Clock 脚送出高电位后,主机从Data 线读取数据。每次读取数据以 8 个时钟信号一组。也可用轮询的方式直接读取键值,不必等待 Start 位。当数据读取错误时,需等 6ms 左右 , 才能再重新读取一次。

1.2 键值

  当 Clock 引脚接收到时钟信号,触摸芯片将会产生一个 8 位的数据字节,并从 Data引脚移出。其中 Bit6 ~ Bit4 产生校验和,用来表示被触摸按键的总数。例如校验和为“010”,这意味着有两个键被触摸。至于是哪个按键被触摸,可以查看 Bit3 ~ Bit0 位状态。Bit3 ~ Bit0 用于指示相应的触摸按键Key4 ~ Key1 是否被触摸。若为零则表明相应的按键被触摸,若为 1,则表明相应按键未被触摸

bit 描述
Start bit 当按键状态改变时, 由 Data 脚送出低电位,唤醒主机,主机读取键值
Bit0 Key1 状态 (0= 按键,1= 松键 )
Bit1 Key2 状态 (0= 按键,1= 松键 )
Bit2 Key3 状态 (0= 按键,1= 松键 )
Bit3 Key4 状态 (0= 按键,1= 松键 )
Bit6~4 核对总数:“0”的总数,即被触摸按键的总数。
Bit7 停止位,永远为 “1”( 高状态 )

代码说明

  1. 获取一个字节需要的Clock周期数为8,并且每个Clock周期的高低电平分别占用半个周期,所以在获取一个按键字节时整个Clock引脚改变次数为8×2=168\times2=168×2=16
  2. 在偶数个半周期中,Clock引脚低电平,准备数据;在奇数个半周期中,Clock引脚高电平,读取数据。此时,由于Clock电平的最小维持时间需要20us,所以输出高电平后不能马上读取数据,应进行少许延时后读取数据。
  3. 获取Data引脚电平,若Data为0,则键值为1;若Data为1,则键值为0。并且数据是从bit0开始传送,所以最高位键值置位后需要右移
  4. 若当前半周期为16个半周期中最后一个时,代表一个字节的数据读取完毕,此时需要计bit6 ~ bit4的校验和,若校验无误,送出键值。
if (Touch_Clock)  //初始值为16,为半周期的计数器
{if ((Touch_Clock & 0x01) == 1)  //奇数周期时{KeySampleBuf[0] >>= 1;GPIO_SETBIT(CLKTC04B_PORT,CLKTC04B_PIN);  //Clock高电平获取数据DelayTimes(20);  //20usClock高电平延时,准备数据if ((DATTC04B_PORT & (DATTC04B_PIN)) == 0)  //获取键值{KeySampleBuf[0] |= 0x80;  //先送低位,移位}if (Touch_Clock == 1 && (KeySampleBuf[0] & 0x80) == 0)  //最后一个半周期校验键值{if (CheckHighNum((KeySampleBuf[0] & 0x0f)) == (~(KeySampleBuf[0] >> 4)&0x07)){KeyeBuf1[0] = (KeySampleBuf[0] & 0x0f);      //送出键值                   KeySampleBuf[0] = 0;}}}else   //偶数周期时{GPIO_RESETBIT(CLKTC04B_PORT,CLKTC04B_PIN);  //Clock低电平获取数据}Touch_Clock--;}

MCU——TC04B触摸按键芯片驱动相关推荐

  1. 45 STM32 IIC主机、从机通信实例(ma51t12b触摸按键芯片)

    45.1引言 最近在研究触摸按键板的通信,按键板主要用到的通信协议为IIC,事实上IIC的例子有很多,但大都都是模拟IIC的主机(引用某网友的评论),从机这边的内容还是比较少. 早在两三年前就跟着原子 ...

  2. STM32 HAL库PID控制电机 第二章 TB6612FNG芯片驱动GB37-520电机

    STM32 HAL库PID控制电机 第二章 TB6612FNG芯片驱动GB37-520电机(HAL库) 1 电路图 2 TB6612简介 TB6612是双驱动,可同时驱动两个电机 STBY:接单片机的 ...

  3. NXP SJA1124 spi转lin芯片驱动

    NXP SJA1124 spi转lin芯片驱动 文章目录 NXP SJA1124 spi转lin芯片驱动 一.总体特点 二.工作模式 三.spi通信 三.lin通信 四.芯片寄存器配置 一.总体特点 ...

  4. 触摸按键芯片BS801B

    合泰触摸按键芯片BS801B 基本特性: 工作电压2.2V~5.5V 超低待机功耗1.5uA/3V 电平输出.或者翻转 管脚描述: 其中Cref引脚是参考电容,用于调节触摸的灵敏度: Key0~Key ...

  5. 村田 IMU SCC2000系列芯片驱动

    村田 IMU SCC2000系列芯片驱动 ​ 文章目录 村田 IMU SCC2000系列芯片驱动 一.总体特点 二.启动时序和逻辑 三.SPI通信和数据读取 四.数据处理 一.总体特点 1.本次具体的 ...

  6. 关天Keil uVision5 C51找不到赛元芯片驱动的解决办法

    关天Keil uVision5 C51找不到赛元芯片驱动的解决办法 安装完Keil uVision5和SOC_Keil插件后,在keil找不到SOC的MCU驱动. 如原来的安装目录为D:\Progra ...

  7. 基于STM32的DS1302时钟芯片驱动

    基于STM32的DS1302时钟芯片驱动 /****************************************************************************** ...

  8. 蓝桥杯单片机DS1302时钟芯片驱动代码注释

    蓝桥杯单片机DS1302时钟芯片驱动代码之前的疑惑注释了下 /* DS1302 芯片包含一个 实时时钟/日历和 31 字节的静态 RAM. 与时钟/RAM 通讯只需要三根线: CE,I/O (数据线) ...

  9. TMI8150芯片驱动开发

    TMI8150芯片驱动开发 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TMI8150芯片驱动开发 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 T ...

最新文章

  1. D3DPOOL(资源池)
  2. listen()和accept()函数:让套接字进入监听状态并响应客户端请求
  3. 实验2(第二章课后习题)
  4. java file 下载文件_java下载文件的几种方式
  5. oracle 区管理系统,oracle区管理和段空间管理详细介绍
  6. 3-28Pytorch与autograd导数
  7. 多个cpu显卡组装的服务器,小白折腾玩玩服务器配置,洋垃圾配件组装一次点亮...
  8. kafka的延迟操作-pull操作详解
  9. 通云之路 从虚拟化迈向企业私有云
  10. 2021年最新的Java面试题,精选100题,大厂必备
  11. MacOS入门技巧分享
  12. 36 岁程序员应聘被公司领导直接拒绝;B 站面试官回应北邮校招中的不当言论
  13. 云上资源编排1.0到2.0的设计开发思考(含招聘)
  14. 模型设置(1)——边界条件
  15. 大数据最核心的价值是什么?
  16. 微信小程序加入购物车动画
  17. Android实现即时聊天
  18. 蓝桥杯及其搜索算法总结
  19. 企业管理必须具备的8大要素!
  20. 两台电脑大文件传输的详细教程

热门文章

  1. ServiceManager学习框图
  2. Wpf之Tree使用Dictionary作为数据源
  3. 内存颗粒和闪存颗粒的区别_颠覆你的常识,这内存上面混搭了四个厂家的颗粒...
  4. 编译原理---NFA转化为DFA---DFA最小化(自己看)
  5. java request 原理_JavaWeb response和request对象原理及实例解析
  6. vivado dds IP核笔记
  7. vue封装websocket_Vue中使用websocket
  8. php spl自动加载类,php – SPL自动加载最佳实践
  9. mysql 不认的字符串_mysql 判断字符串是否为其他字符串的子集
  10. 在html中直接使用%3c php%3e,HTB-靶机-Calamity