MCU——TC04B触摸按键芯片驱动
前言:经常写一些触摸按键相关的代码,整理如下。方便查阅。
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”( 高状态 ) |
代码说明
- 获取一个字节需要的Clock周期数为8,并且每个Clock周期的高低电平分别占用半个周期,所以在获取一个按键字节时整个Clock引脚改变次数为8×2=168\times2=168×2=16
- 在偶数个半周期中,Clock引脚低电平,准备数据;在奇数个半周期中,Clock引脚高电平,读取数据。此时,由于Clock电平的最小维持时间需要20us,所以输出高电平后不能马上读取数据,应进行少许延时后读取数据。
- 获取Data引脚电平,若Data为0,则键值为1;若Data为1,则键值为0。并且数据是从bit0开始传送,所以最高位键值置位后需要右移。
- 若当前半周期为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触摸按键芯片驱动相关推荐
- 45 STM32 IIC主机、从机通信实例(ma51t12b触摸按键芯片)
45.1引言 最近在研究触摸按键板的通信,按键板主要用到的通信协议为IIC,事实上IIC的例子有很多,但大都都是模拟IIC的主机(引用某网友的评论),从机这边的内容还是比较少. 早在两三年前就跟着原子 ...
- STM32 HAL库PID控制电机 第二章 TB6612FNG芯片驱动GB37-520电机
STM32 HAL库PID控制电机 第二章 TB6612FNG芯片驱动GB37-520电机(HAL库) 1 电路图 2 TB6612简介 TB6612是双驱动,可同时驱动两个电机 STBY:接单片机的 ...
- NXP SJA1124 spi转lin芯片驱动
NXP SJA1124 spi转lin芯片驱动 文章目录 NXP SJA1124 spi转lin芯片驱动 一.总体特点 二.工作模式 三.spi通信 三.lin通信 四.芯片寄存器配置 一.总体特点 ...
- 触摸按键芯片BS801B
合泰触摸按键芯片BS801B 基本特性: 工作电压2.2V~5.5V 超低待机功耗1.5uA/3V 电平输出.或者翻转 管脚描述: 其中Cref引脚是参考电容,用于调节触摸的灵敏度: Key0~Key ...
- 村田 IMU SCC2000系列芯片驱动
村田 IMU SCC2000系列芯片驱动 文章目录 村田 IMU SCC2000系列芯片驱动 一.总体特点 二.启动时序和逻辑 三.SPI通信和数据读取 四.数据处理 一.总体特点 1.本次具体的 ...
- 关天Keil uVision5 C51找不到赛元芯片驱动的解决办法
关天Keil uVision5 C51找不到赛元芯片驱动的解决办法 安装完Keil uVision5和SOC_Keil插件后,在keil找不到SOC的MCU驱动. 如原来的安装目录为D:\Progra ...
- 基于STM32的DS1302时钟芯片驱动
基于STM32的DS1302时钟芯片驱动 /****************************************************************************** ...
- 蓝桥杯单片机DS1302时钟芯片驱动代码注释
蓝桥杯单片机DS1302时钟芯片驱动代码之前的疑惑注释了下 /* DS1302 芯片包含一个 实时时钟/日历和 31 字节的静态 RAM. 与时钟/RAM 通讯只需要三根线: CE,I/O (数据线) ...
- TMI8150芯片驱动开发
TMI8150芯片驱动开发 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TMI8150芯片驱动开发 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 T ...
最新文章
- D3DPOOL(资源池)
- listen()和accept()函数:让套接字进入监听状态并响应客户端请求
- 实验2(第二章课后习题)
- java file 下载文件_java下载文件的几种方式
- oracle 区管理系统,oracle区管理和段空间管理详细介绍
- 3-28Pytorch与autograd导数
- 多个cpu显卡组装的服务器,小白折腾玩玩服务器配置,洋垃圾配件组装一次点亮...
- kafka的延迟操作-pull操作详解
- 通云之路 从虚拟化迈向企业私有云
- 2021年最新的Java面试题,精选100题,大厂必备
- MacOS入门技巧分享
- 36 岁程序员应聘被公司领导直接拒绝;B 站面试官回应北邮校招中的不当言论
- 云上资源编排1.0到2.0的设计开发思考(含招聘)
- 模型设置(1)——边界条件
- 大数据最核心的价值是什么?
- 微信小程序加入购物车动画
- Android实现即时聊天
- 蓝桥杯及其搜索算法总结
- 企业管理必须具备的8大要素!
- 两台电脑大文件传输的详细教程
热门文章
- ServiceManager学习框图
- Wpf之Tree使用Dictionary作为数据源
- 内存颗粒和闪存颗粒的区别_颠覆你的常识,这内存上面混搭了四个厂家的颗粒...
- 编译原理---NFA转化为DFA---DFA最小化(自己看)
- java request 原理_JavaWeb response和request对象原理及实例解析
- vivado dds IP核笔记
- vue封装websocket_Vue中使用websocket
- php spl自动加载类,php – SPL自动加载最佳实践
- mysql 不认的字符串_mysql 判断字符串是否为其他字符串的子集
- 在html中直接使用%3c php%3e,HTB-靶机-Calamity