- 打卡等级:常住居民III
- 打卡总天数:115
- 最近打卡:2025-03-28 11:36:20
中级会员
- 积分
- 384
|
现象:触摸按键功能正常,根据案例增加 休眠部分
{ TSCHEN1 = 0xff; //TK0~TK7 仅仅允许K0唤醒
TSCHEN2 = 0x0f; //TK8~TK15
TSCTRL = (1<<3) + (1<<2) + 0; //关闭触摸模块, 允许16位数字比较器, 允许低功耗唤醒。 B7: TSGO, B6: SINGLE, B5: TSWAIT, B4: TSWUCS, B3: TSDCEN, B2: TSWUEN, B1 B0: TSSAMP
NOP(2);
PCON |= 0x02; //睡眠
NOP(5);
PrintString1("STC8H4K64TLR 唤醒后\r\n");
TSCHEN1 = 0xff; //TK0~TK7 允许所有16个键
TSCHEN2 = 0x0f; //TK8~TK15
TSCTRL = (1<<7) + (1<<3) + (1<<2) + 0;}
就无法唤醒了,
扫描函数如下,
void Touch_Init(void)
{
// u8 i;
// TSRT = 0x00; //没有LED分时扫描
TSCHEN1 = 0xff; //TK0~TK7
TSCHEN2 = 0x0f; //TK8~TK12 1111
TSCFG1 = (7<<4) + 6; //开关电容工作频率 = fosc/(2*(TSCFG1[6:4]+1)), 放电时间(系统时钟周期数) 0(125) 1(250) 2(500) 3(1000) 4(2000) 5(2500) 6(5000) 7(7500) 最小3
TSCFG2 = 1; //配置触摸按键控制器的内部参考电压(AVCC的分压比), 0(1/4) 1(1/2) 2(5/8) 3(3/4)
// TSCTRL = (1<<7) + (1<<6) +3; //开始扫描, B7: TSGO, B6: SINGLE, B5: TSWAIT, B4: TSWUCS, B3: TSDCEN, B2: TSWUEN, B1 B0: TSSAMP
TSRT = 0x00; //没有LED分时扫描
TSCTRL =0xa0; //0xa0
//B7:TSGO=1使能触摸按键 1011 0100
//B6:SINGLE=1单次扫描模式、=0自动重复扫描
//B5:TSWAIT=1完成一轮扫描后、TSIF 被硬件置 1,此时触摸按键控制器会暂停扫描,直到 TSIF 标志位被清 0后才开始下一轮的扫描
//B4:TSWUCS=0使用内部32K晶振
//B3:TSDCEN=0不使能16位比较器
//B2:TSWUEN=1使能低功耗唤醒功能
//B1B0:TSSAMP=11单次按键扫描4次
TSWUTC = 20; //唤醒
IE2 |= 0x80; //允许触摸按键中断
EA = 1;
ReadZeroData();
}
void Touch_Scan()
{
u8 i;
if(B_1ms)
{
B_1ms = 0;
for(i=0;i<12;i++) //#
{
JudgeKey(i); //判断键值
}
B = (u8)tpFlag;
if(B0) //触摸按键被触发后,对应的指示灯信号进行翻转
{
beep(10);
key_value=3;
LED3 = !LED3;
TX1_write2buff(key_value);
}
if(B1)
{
beep(10);
key_value=6;
LED6 = !LED6;
TX1_write2buff(key_value);
}
if(B2)
{
beep(10);
key_value=1;
LED1 = !LED1;
TX1_write2buff(key_value);
}
if(B3)
{
beep(10);
key_value=4;
LED4 = !LED4;
TX1_write2buff(key_value);
}
if(B4)
{
beep(10);
key_value=8;
LED8 = !LED8;
TX1_write2buff(key_value);
}
if(B5)
{
beep(10);
key_value=10;
LED12 = !LED12;
TX1_write2buff(key_value);
}
if(B6)
{
beep(10);
key_value=11; //*
LED11 = !LED11;
TX1_write2buff(key_value);
}
if(B7)
{
beep(10);
key_value=7;
LED7 = !LED7;
TX1_write2buff(key_value);
}
B = (u8)(tpFlag >> 8);
if(B0)
{
beep(10);
key_value=12;
LED13 = !LED13;
TX1_write2buff(key_value);
}
if(B1)
{
beep(10);
key_value=9;
LED9 = !LED9;
TX1_write2buff(key_value);
}
if(B2)
{
beep(10);
key_value=5;
LED5 = !LED5;
TX1_write2buff(key_value);
}
if(B3)
{
beep(10);
key_value=2;
LED2 = !LED2;
TX1_write2buff(key_value);
}
tpFlag = 0;
TSCHEN1 = 0xff; //TK0~TK7 仅仅允许K0唤醒
TSCHEN2 = 0x0f; //TK8~TK15
TSCTRL = (1<<3) + (1<<2) + 0; //关闭触摸模块, 允许16位数字比较器, 允许低功耗唤醒。 B7: TSGO, B6: SINGLE, B5: TSWAIT, B4: TSWUCS, B3: TSDCEN, B2: TSWUEN, B1 B0: TSSAMP
NOP(2);
PCON |= 0x02; //睡眠
NOP(5);
PrintString1("STC8H4K64TLR 唤醒后\r\n");
TSCHEN1 = 0xff; //TK0~TK7 允许所有16个键
TSCHEN2 = 0x0f; //TK8~TK15
TSCTRL = (1<<7) + (1<<3) + (1<<2) + 0;
}
}
|
|