upxjxmdz 发表于 2025-2-9 17:38:52

使用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左右的脉冲,触摸无法控制

DebugLab 发表于 2025-2-10 14:00:58

TSSTA1并不是触摸按键是否按下的标志
要判断有无触摸,要读TSDAT寄存器(16bit值,触摸电容越大,这个值越小,需要软件判断按下状态)




页: [1]
查看完整版本: 使用8H4K64TLCD 的触摸通道0控制P5.4上的LED,这么一个简单的代码,就是调不好