找回密码
 立即注册
查看: 39|回复: 0

求助,为什么,我串口输出按键值和零点值都是0

[复制链接]

该用户从未签到

4

主题

5

回帖

52

积分

注册会员

积分
52
发表于 2024-4-25 16:47:38 | 显示全部楼层 |阅读模式


#include "main.h"
sbit LED_W = P3^3;
sbit LED_R = P3^4;
sbit BEE = P5^4;
unsigned int sys_tick=0;
unsigned int t0_count=0;
unsigned int t1_count=0;
unsigned int t2_count=0;
volatile bit busy;
unsigned char buffer;

u16        xdata TK_cnt;        // 按键计数值, 16位
u16        xdata TK_zero;        // 按键0点值, 16位
bit        KeyState;                        // 按键状态, 每个bit对应一个键, 1为按下, 0为释放
u8        read_cnt;                        // 读次数
bit        B_TK_Lowpass;                // 低通允许, 1允许, 0禁止

u8        cmd;        //串口命令
u8        T_KEY_FLAG = 0;        // 串口发送忙标志

u16 code T_KeyPress=1300;        //触摸后的变化值
u16 code T_KeyState=0x0001;        //16个键对应的状态, 0为未触摸,1为触摸



/***********************************************************
* @brief  串口1中断函数,串口1用于调试
* @return Null
***********************************************************/
void UartIsr() interrupt 4
{
    if (TI){
        TI = 0;
        busy = 0;
    }
    if (RI){
        RI = 0;
//        buffer= SBUF;
    }
}

//========================================================================
// 函数: void        TKSU_ISR(void) interrupt TKSU_VECTOR
// 描述: 触摸按键中断服务函数
// 参数: none.
// 返回: none.
// 版本: VER1.0
// 日期: 2023-10-11
// 备注:
u8        isr_index;

void        AUXR_ISR(void) interrupt 13
{
        u8 j;
        j=TSSTA2;

        if(j & 0x40)        //数据溢出, 错误处理(略)
        {
                TSSTA2 |= 0x40;        //写1清零
                T_KEY_FLAG |= 2;
        }
        else T_KEY_FLAG &= ~0x02;
      
        if(j & 0x80)        //扫描完成
        {
                TK_cnt = TSDAT;        //保存通道的读数        1.1us @24MHz               

                TSSTA2 |= 0x80;        //写1清零
                T_KEY_FLAG |= 0x08;
               
                LED_W = 0;//开灯
        }
        else {T_KEY_FLAG &= ~0x08;LED_W = 1;}
}

void main()
{
        P_SW2 |= 0x80;        //允许访问XSF(特殊功能寄存器)               
        P3n_push_pull(0x18);        //P3.3~P3.4线设置为推挽输出
        P5n_push_pull(0x10);        //P5.4线设置为推挽输出
        P1n_pure_input(0x01);        //P1.0 Touch Key设置为高阻
      
        Timer_Init();
      
      
        TSCHEN1 = 0x01;        //TK00~TK07      
        TSCHEN2 = 0x00;        //TK00~TK07               
        TSRT = 0x00;                //没有LED分时扫描      

        TSCFG1  = (3<<4) + 3;        //开关电容工作频率 = 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 = 0x80;        //开始自动扫描, 无平均, B7: TSGO,  B6: SINGLE,  B5: TSWAIT, B4: TSWUCS, B3: TSDCEN, B2: TSWUEN, B1 B0: TSSAMP
//        TSTH00H = 0xff;

        IE2 |= 0x80;                        //使能触摸中断      
        delay_ms(50);                //延时一下
      
//        key_init();
        EA = 1;          //开总中断
//    P_SW2 = 0x00;                   //这个一定要关掉不了会导致程序不能运行      
      
        B_TK_Lowpass = 0;        //禁止低通滤波      
        BEE = 0;      
        for(read_cnt=0; read_cnt<5; read_cnt++)        //扫描10次键, 将此值作为未触摸时的0点, 要求上电时不要触摸按键
        {
        //        TSCTRL = (1<<7) + (1<<6) +3;        //开始扫描, 4次平均
                TSCTRL = (1<<7) + (1<<6);                //开始扫描, 无平均
                delay_ms(50);        //延时一下, 等待扫描完成
        }
        TK_zero= TK_cnt;        //保存0点
        B_TK_Lowpass = 1;        //允许低通滤波
        KeyState = 0;
        read_cnt = 0;      
        printf("零点值:%u\n",TK_zero);      
        TSCTRL = 1<<7;                //开始扫描, 无平均      
        while(1)
        {
                delay_ms(500);                //延时一下, 根据实际扫描速度调整
                printf("按键值:%u\n",TSDAT);               
                printf("按键值:%u\n",TK_cnt);

                if(T_KEY_FLAG & 0x02)printf("数据溢出\n");      
                if(T_KEY_FLAG & 0x08)printf("扫描完成\n");                       
      
        }
}

截图202404251647362795.jpg
回复 送花

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-6 01:50 , Processed in 0.051764 second(s), 31 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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