- 打卡等级:偶尔看看II
- 打卡总天数:22
- 最近打卡:2026-06-12 09:15:18
已绑定手机
注册会员
- 积分
- 89
|
void main()
{
u8 i = 0;
EAXSFR(); /* 扩展寄存器访问使能 */
EA = 1;
CLK_Init();
//LCD_config(); // LCD先初始化 否则会打乱后面外设的初始化
Enable_Init();
BAT1_HIGH();
RED_LOW();
//ADC_config();
//DMA_config();
UART_config();
TouchKey_Init();
IRC32KCR = 0x80; //启动内部32K IRC
while (!(IRC32KCR & 1)); //等待时钟稳定
delay_ms(50);
for(i=0; i<10; i++) //扫描10次键, 将此值作为未触摸时的0点, 要求上电时不要触摸按键
{
// // TSCTRL = (1<<7) + (1<<6) +3; //开始扫描, 4次平均
TSCTRL = (1<<7) + (1<<6); //开始扫描, 无平均
delay_ms(50); //延时一下, 等待扫描完成
}
TK_zero[12] = TK_cnt[12]; //保存0点
sprintf(buffer, "zero:%d\r\n", TK_cnt[12]);
PrintString1(buffer);
sprintf(buffer, "T_KeyPress[12]/2:%d\r\n", T_KeyPress[12]/2);
PrintString1(buffer);
TSTH12 = TK_zero[12] - T_KeyPress[12]/2; //设置唤醒门槛值 = 0点(未触摸)值 - 触摸变化值/2
sprintf(buffer, "TSTH12:%d\r\n", TSTH12);
PrintString1(buffer);
while(1)
{
// 1、进入低功耗前IO口配置
BAT1_LOW();
RED_HIGH();
// 2、关闭外设
// 3、关闭触摸模块
TSCTRL = (1<<3) + (1<<2) + 0; //关闭触摸模块, 允许16位数字比较器, 允许低功耗唤醒。 B7: TSGO, B6: SINGLE, B5: TSWAIT, B4: TSWUCS, B3: TSDCEN, B2: TSWUEN, B1 B0: TSSAMP
printf("sleep\r\n");
PCON |= 0x02;
NOP(5);
TSCTRL = (1<<7) + (1<<3) + (1<<2) + 0;
EAXSFR(); /* 扩展寄存器访问使能 */
CLK_Init();
printf("sleepout\r\n");
BAT1_HIGH();
RED_LOW();
}
}
通过P00-触摸12通道来进行触摸唤醒,
TSTH12 打印出来是7000左右,
触摸按键按下串口观察触摸值是2500左右,
可是为什么无法唤醒呢?
|
|