请教一下大佬们关于STC8H的触摸按键是如何配置使用的?
我按照数据手册配置好相关寄存器之后,从触摸按键中断返回TSDAT寄存器的值,但是使用串口输出显示的都是0,这是为什么呢?这个帖子里有例子跟配套的使用演示视频可参考:
https://www.stcaimcu.com/forum.php?mod=redirect&goto=findpost&ptid=3971&pid=51046 初始化:
打开EAXFR
P_SW2|=EAXFR;
设置IO模式,触摸按键IO设置为高阻(以“AI8H4K64TLCD-触摸按键段式LCD实验板”为例,具体值需要根据硬件修改)
P0M0=0x00;
P0M1=0xFF;
P1M0=0x02;
P1M1=0xFC;
P2M0=0x00;
P2M1=0xFF;
P3M0=0x02;
P3M1=0xFC;
P4M0=0x00;
P4M1=0xFF;
P5M0=0x00;
P5M1=0xFF;
P6M0=0xE8;
P6M1=0x07;
P7M0=0x00;
P7M1=0xFF;
启动外部32768Hz晶振(也可使用内部32K时钟,如果使用外部晶振,前面的IO设置,晶振IO也要设置为高阻,如需要进入省电模式,还要关闭数字输入)
X32KCR=0xC0; //启动外部32768晶振,设置高增益
while(!(X32KCR&0x01)); //等待时钟稳定
设置触摸按键通道使能
TSCHEN1=0xFC; //TK00~TK07
TSCHEN2=0xFC; //TK08~TK15
设置LED分时扫描
TSRT=0x00; //没有LED分时扫描
设置触摸按键配置寄存器
TSCFG1=0x73; //开关电容工作频率 = fosc/(2*(TSCFG1+1)),放电时间(系统时钟周期数) 0(125) 1(250) 2(500) 3(1000) 4(2000) 5(2500) 6(5000) 7(7500) 最小3
TSCFG2=0x03; //配置触摸按键控制器的内部参考电压(AVCC的分压比),0(1/4)1(1/2)2(5/8)3(3/4)
设置触摸按键控制寄存器
TSCTRL=0x33; //重复扫描模式,完成一轮扫描暂停,低功耗模式时钟为外部32768晶振,关闭数字比较器,关闭低功耗唤醒,4次平均,B7: TSGO,B6: SINGLE,B5: TSWAIT,B4: TSWUCS,B3: TSDCEN,B2: TSWUEN,B1 B0: TSSAMP
设置触摸按键控制寄存器,开始扫描
TSCTRL|=0x80; //开始扫描
启用触摸中断
IE2|=0x80; //启用触摸中断
启用总中断
EA=1; //启用总中断
中断:
具体功能看注释
void TKSU_Isr(void) interrupt TKSU_VECTOR
{
unsigned char temp;
temp=TSSTA2;
if(temp&0x40) //数据溢出, 错误处理
{
TSSTA2|=0x40; //写1清零
}
else if(temp&0x80) //扫描完成
{
TS_Scan=temp&0x0f;
if(TS_Map!=0xFF) //如果通道正确
{
TS_Buf]=TSDAT; //保存某个通道的读数
TS_Flag=1;
}
}
TSSTA2|=0x80; //写1清零
}
页:
[1]