使用8H4K64TLCD 的触摸通道0控制P5.4上的LED,这么一个简单的代码,就是调不好
//代码预实现的功能:使用STC8H4K64TLCD 的触摸通道0控制P5.4上的LED#include <stc8h.h>// 包含 STC8H 系列的头文件
#include <intrins.h>
// 定义LED引脚
sbit LED = P5^4;// P5.4控制LED
// 触摸通道初始化
void Touch_Init() {
// 使能触摸模块
TSCHEN1 = 0x01;// 使能触摸通道0(P1.0)
TSCFG1 = 0x0F; // 设置触摸时钟分频
TSCFG2 = 0x02; // 设置触摸采样时间
TSCTRL= 0x08; // 启动触摸模块
}
// 检测触摸通道0是否被触摸
bit Touch_Channel0_Detected() {
if (TSSTA1 & 0x01) {// 检查触摸通道0的状态
TSSTA1 &= ~0x01;// 清除触摸通道0的状态标志
return 1; // 返回触摸检测成功
}
return 0; // 未检测到触摸
}
// 延时函数
void Delay(unsigned int ms) {
unsigned int i, j;
for (i = ms; i > 0; i--)
for (j = 1120; j > 0; j--);
}
// 主函数
void main() {
// 初始化
P5M0 &= ~0x10;// 设置P5.4为推挽输出
P5M1 &= ~0x10;
LED = 0; // 初始关闭LED
Touch_Init(); // 初始化触摸模块
while (1) {
if (Touch_Channel0_Detected()) {// 检测触摸通道0
LED = ~LED;// 翻转LED状态
Delay(200);// 延时防抖
}
}
}
以上代码结果是P5.4的输出为频率为1.5M左右的脉冲,触摸无法控制
TSSTA1并不是触摸按键是否按下的标志
要判断有无触摸,要读TSDAT寄存器(16bit值,触摸电容越大,这个值越小,需要软件判断按下状态)
页:
[1]