HT45R35_触控按键
1 HT45R35在触控按键中的应用 - 使用C 语言
文件编码文件编码::HA0156S
简介简介
HT45R35 Demo Board 包含12个Touch Switch ,这是一种电容式的非接触式触摸按键,它可以用来取代任何的机械式按键。由于C 语言具有良好的可读性、可移植性等优点,本文将介绍如何使用Holtek C 语言来完成HT45R35 12 key Touch Switch Demo Board 的软件设计。
HT45R35基本特征
? 工作电压:
f SYS =4MHz :2.2V~5.5V
f SYS =8MHz :3.3V~5.5V ? 16位双向输入/输出口
? 2个与输入/输出口共享引脚的外部中断输入
? 8位可程序定时/计数器,具有溢出中断和7级预分频器 ? 外部RC 振荡转换电路 ? 内置晶体和RC 振荡电路 ? 看门狗定时器
? 12通道电容/电阻型传感器输入 ? 2048×14程序内存ROM ? 120×8数据存储器RAM
? HALT 和唤醒功能可降低功耗
? 在VDD=5V ,系统频率为8MHz 时,指令周期为0.58us ? 指令执行时间为1或2个指令周期 ? 查表指令,表格内容字长14位 ? 4层硬件堆栈 ? 位元操作指令 ? 63条指令
? 低电压复位功能 ?
28-pin DIP 封装
图1
硬件方块图
图2
方块图说明
?电源: 由电池提供DC 3V/4.5V给Demo Board使用
?HT45R35: 控制MCU
?LED指示灯: 当有一个键被按下时,对应的LED便会点亮
?触控按键(Touch Switch) : 每个RC通道对应一个按键
2
硬件电路及说明
图3
3
4 电路图说明
电源
电源部分直接用电池提供3V 或4.5V 电压,用两个电容做滤波:
图4 电源部分电路
控制IC —HT45R35 HT45R35
外部RC 振荡器
HT45R35提供一个外部RC 振荡的功能。外部RC 振荡器包含有两个16位可编程向上计数器Timer A 和Timer B 。当RCO (RCOCR 的第1位) 为 "1" 时,有四个缓存器与RC 振荡器相关,TMRAL 、TMRAH 、TMRBL 和TMRBH 。Timer B 的时钟可来自于外部RC 振荡器;而Timer A 来自于系统时钟或系统时钟四分频,由RCOCCR 缓存器决定。
图5 RCOCCR (22H) 缓存器
图6 RCOCR (25H) 缓存器
图7 外部RC振荡器内部结构
如上图,Timer B时钟源选为外部RC振荡,Timer A时钟源选为系统时钟,当人手有触摸按键时,RC OSC 振荡周期会改变,从而导致单位周期个数(由Timer B计量) 的时间长短(由Timer A计量) 会改变,检查Timer A计数值的变化是否在一个预先设定的范围之内,即可判别Touch Switch ON/OFF。
5
模拟开关
HT45R35提供一个模拟开关,用来切换RC1 ~ RC12仿真通道。
图8 模拟开关
上图中,RC1 ~ RC12表示可提供12根RC线用来输入外部RC振荡、IN、RREF、CREF引脚分别连接了固定的电阻电容,RC OSC电路振荡产生一个波形,其周期值为参考周期值,当有电阻或电容连到RC引脚,就会改变RC OSC电路的振荡周期。人接触Touch Switch时,相当于在电路中并入一个电容,振荡周期会增长。
仿真时,RC振荡频率大约700kHz (Rref = 27kΩ, Cref = 10pF) ;实际Demo Board上,频率大约为900kHz (Rref =27kΩ, Cref =10pF) 。调试时,可以根据实际需要改变电阻值或者电容值来改变RC振荡的频率。
6
触摸按键部分 — Touch Switch
Touch Switch部分图示如下:
图9
Touch Switch Key分成三个部份:
?粉红色作用是隔离A与B
?淡蓝色圆A由铜组成,上面为绝缘层
?淡橘色圆B由铜组成,上面为绝缘层,接到地网络
7
软件设计说明
主流程图
图10
8
软件设计说明
程序中主要包括main()主函数、scan_key()、key_check()、update_base()等几个函数,各函数实现的功能如下:
?main()主函数
?在main函数中首先完成对MCU资源进行初始化,包括各种参数的初始化、I/O口的初始
化、定时器的设定、中断设定等,然后进入main函数的主循环,在main函数中完成按键
的识别及按键的显示。
?scan_key()函数
?按键扫描函数,对所有使用的通道扫描一遍。每次扫描一个通道,直到所有使用的通道
都扫描完后,scan_flag标志位设定为1。在此过程中,如果有按键按下,保存按键的按键
值、如果没有按键按下,按键值清除为零。
?key_check()函数
?按键确认函数。在实际应用过程中,可能需要连续确认几次某一按键被按下,才能认为
该按键被有效按下(主要目的是为了防止干扰)。如果连续数次(本程序中设定为4次) 扫
描完所有通道后得到的按键为同一按键值,就表示该按键被有效按下,此时点亮相应的
LED。
?update_base()函数
?定时更新基准值函数。2S定时调用update_base函数一次,如果满足更新条件,更新基准
值。
9
10 PCB Layout PCB Layout
TOPLAYER TOPLAYER
图11 TOPLAYER
BOTTOMLAYER BOTTOMLAYER
图12 BOTTOM LAYER
Layout 注意事项
? 此Demo Board 之Touch Switch Lay 于底层,直径8mm 圆形Key ,顶层无需再放置压克力板 ? Key 周围和到IC 之RC pin 之间的走线周围都须铺地,RC Pin 的线径要尽量短和细 (线径
11 7~8mil ,以10mil 为限) ,如图12。
? 外部RC 振荡模块 (C3、R13、R14) 这部分电路要尽量靠近MCU ,如图11。
? 因为光罩选项中选的是外部晶体振荡模式 (External Crystal Mode) ,PCB 板上的外部RC
振荡电路部分的组件没有焊上,见图13。
? 在用3V/4.5V 电池时,电池断电到通电的时间不能太短,否则会引起MCU 工作不正常;
或者另外在C1两端并连一个10k Ω的电阻,加速放电。
DemoBoard 实物图
图13