stc触摸按键配置软件没反应不能显示数值
触摸数据不显示,而且点击获取设置和接受数据没反应,我测试串口通讯软件是正常的,我用的单片机是stc8h4k32tl。用此贴里的软件和固件
触摸按键相关资源汇总 - 段码LCD/80mA大电流LED数码管自动刷新显示/RTC实时时钟/触摸按键/低功耗 国芯人工智能技术交流网站 - AI32位8051交流社区
ercircle 发表于 2026-3-14 17:38
用此贴里的软件和固件
触摸按键相关资源汇总 - 段码LCD/80mA大电流LED数码管自动刷新显示/RTC实时时钟/触 ...
上次试的时候视频打不开,这次看了视频,原来还要在单片机里下载程序啊,我以为写配置就搞定了,我再试试。 无法读取数值。
/*---------------------------------------------------------------------*/
/* --- STC MCU Limited ------------------------------------------------*/
/* --- STC 1T Series MCU Demo Programme -------------------------------*/
/* --- Mobile: (86)13922805190 ----------------------------------------*/
/* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
/* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/
/* --- Web: www.STCAI.com ---------------------------------------------*/
/* --- BBS: www.STCAIMCU.com-----------------------------------------*/
/* --- QQ:800003751 -------------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
/*---------------------------------------------------------------------*/
#include "STC8H.h"
#include <intrins.h>
/************* 功能说明 **************
只检测P1.0(TK00)触摸引脚
每秒通过串口返回触摸值
******************************************/
typedef unsigned char u8;
typedef unsigned int u16;
typedef unsigned long u32;
/************* 本地变量声明 **************/
u16 xdata TK_cnt; // 触摸计数值
u8 read_cnt = 0; // 读取计数
u8 TK_TimeOut = 0; // 超时计数
u16 send_delay = 0; // 发送延时
/************* 函数声明 **************/
void UART1_Init(void);
void UART_Send(u8 dat);
void Send_Num(u16 num);
void Delay_ms(u16 ms);
/******************** 主函数 **************************/
void main(void)
{
u8 i;
P_SW2 |= 0x80; // 允许访问XFR
// IO初始化
P0M1 = 0x00; P0M0 = 0x00;
P1M1 = 0x01; P1M0 = 0x00; // P1.0高阻输入(触摸)
P2M1 = 0x00; P2M0 = 0x00;
P3M1 = 0x00; P3M0 = 0x03; // P3.0,P3.1推挽输出(串口)
P4M1 = 0x00; P4M0 = 0x00;
P5M1 = 0x00; P5M0 = 0x00;
UART1_Init();
// 发送开始信息
UART_Send('S');
UART_Send('T');
UART_Send('C');
UART_Send('8');
UART_Send('H');
UART_Send(' ');
UART_Send('T');
UART_Send('K');
UART_Send('0');
UART_Send(' ');
UART_Send('T');
UART_Send('e');
UART_Send('s');
UART_Send('t');
UART_Send('\r');
UART_Send('\n');
UART_Send('=');
UART_Send('=');
UART_Send('=');
UART_Send('=');
UART_Send('=');
UART_Send('=');
UART_Send('=');
UART_Send('=');
UART_Send('=');
UART_Send('\r');
UART_Send('\n');
// 触摸按键初始化(官方标准配置)
TSCHEN1 = 0x01; // 使能TK00(P1.0)
TSCHEN2 = 0x00; // 禁用其他通道
TSCFG1= (7<<4) + 3; // 官方标准值
TSCFG2= 2; // 官方标准值
TSCTRL = 0xA0; // 开始自动扫描, 无平均
IE2 |= 0x80; // 使能触摸中断
EA = 1; // 开总中断
// 等待触摸稳定
for(i=0; i<100; i++) Delay_ms(10);
// 发送寄存器状态用于调试
UART_Send('R');
UART_Send('e');
UART_Send('g');
UART_Send('s');
UART_Send(':');
UART_Send(' ');
UART_Send('T');
UART_Send('S');
UART_Send('C');
UART_Send('H');
UART_Send('E');
UART_Send('N');
UART_Send('1');
UART_Send('=');
Send_Num(TSCHEN1);
UART_Send(' ');
UART_Send('T');
UART_Send('S');
UART_Send('C');
UART_Send('F');
UART_Send('G');
UART_Send('1');
UART_Send('=');
Send_Num(TSCFG1);
UART_Send(' ');
UART_Send('T');
UART_Send('S');
UART_Send('C');
UART_Send('T');
UART_Send('R');
UART_Send('L');
UART_Send('=');
Send_Num(TSCTRL);
UART_Send('\r');
UART_Send('\n');
while(1)
{
Delay_ms(1);
send_delay++;
// 每秒发送一次触摸值
if(send_delay >= 1000)
{
send_delay = 0;
// 发送触摸值
Send_Num(TK_cnt);
UART_Send('\r');
UART_Send('\n');
}
}
}
/************* 触摸按键中断 **************/
void TKSU_Interrupt(void) interrupt 13
{
u8 j;
j = TSSTA2;
if(j & 0x40) // 数据溢出
{
TSSTA2 |= 0x40; // 写1清零
}
if(j & 0x80) // 扫描完成
{
j &= 0x0f;
TK_cnt = TSDAT; // 保存触摸值
TSSTA2 |= 0x80; // 写1清零
read_cnt++; // 读次数+1
TK_TimeOut = 0;
// 调试:每次中断发送一个点
// UART_Send('.');
}
}
/************* 串口初始化 **************/
void UART1_Init(void)
{
// 使用定时器1,模式2
SCON = 0x50; // 8位数据,可变波特率
AUXR &= 0xBF; // 定时器1时钟为Fosc/12
AUXR &= 0xFE; // 串口1选择定时器1为波特率发生器
TMOD &= 0x0F; // 清除定时器1模式位
TMOD |= 0x20; // 设定定时器1为8位自动重装方式
TH1 = 0xFA; // 115200波特率 @ 22.1184MHz
TL1 = 0xFA;
TR1 = 1; // 启动定时器1
TI = 1; // 设置发送中断标志
}
/************* 串口发送一个字节 **************/
void UART_Send(u8 dat)
{
SBUF = dat;
while(!TI);
TI = 0;
}
/************* 发送16位数字 **************/
void Send_Num(u16 num)
{
u8 buffer;
u8 i = 0, j = 0;
if(num == 0)
{
UART_Send('0');
return;
}
while(num > 0)
{
buffer = (num % 10) + '0';
num = num / 10;
}
for(j = i; j > 0; j--)
UART_Send(buffer);
}
/************* 延时函数 **************/
void Delay_ms(u16 ms)
{
u16 i, j;
for(i=0; i<ms; i++)
for(j=0; j<1000; j++);
}
还是不会有这个软件,程序下进去串口打开,发送正常,无法接受
这东西摸不着头脑,麻烦的很 彭彭 发表于 2026-3-15 22:21
还是不会有这个软件,程序下进去串口打开,发送正常,无法接受
下载配套的程序到单片机,打开串口后不要点其它功能,直接获取触摸数据。
因为不同系统芯片的频率设置参数存放位置不同,点击其它设置按钮后可能导致主频发生异常改动,导致后续通信不正常。
页:
[1]