找回密码
 立即注册
查看: 171|回复: 2

使用8H4K64TLCD 的触摸通道0控制P5.4上的LED,这么一个简单的代码,就是调不好

[复制链接]
已绑定手机

3

主题

5

回帖

39

积分

新手上路

积分
39
发表于 2025-2-9 17:38:52 | 显示全部楼层 |阅读模式
//代码预实现的功能:使用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左右的脉冲,触摸无法控制

回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:424
  • 最近打卡:2025-05-02 14:37:11
已绑定手机

77

主题

4850

回帖

8384

积分

超级版主

DebugLab

积分
8384
发表于 2025-2-10 14:00:58 | 显示全部楼层
TSSTA1并不是触摸按键是否按下的标志
要判断有无触摸,要读TSDAT寄存器(16bit值,触摸电容越大,这个值越小,需要软件判断按下状态)
截图202502101358271545.jpg

截图202502101400272491.jpg

点评

感谢  发表于 2025-2-10 16:41
DebugLab
回复 支持 1 反对 0

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 22:07 , Processed in 0.138034 second(s), 57 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表