找回密码
 立即注册
查看: 81|回复: 7

求助:STC8H1K08T触摸进不了中断函数

[复制链接]

该用户从未签到

4

主题

5

回帖

54

积分

注册会员

积分
54
发表于 2024-4-24 14:40:10 | 显示全部楼层 |阅读模式
本帖最后由 qiu_ 于 2024-4-24 15:20 编辑

求助:STC8H1K08T触摸进不了中断函数,按键值通过串口输出永远是0X6e6e。不知道是哪些设置错误了,还是我硬件设计有问题。请大佬指点。程序见附件
截图202404241438399341.jpg

240411.zip

158.54 KB, 下载次数: 5

回复 送花

使用道具 举报

  • TA的每日心情
    奋斗
    10 小时前
  • 签到天数: 154 天

    [LV.7]常住居民III

    27

    主题

    1408

    回帖

    4382

    积分

    论坛元老

    积分
    4382
    发表于 2024-4-24 17:08:12 | 显示全部楼层
    本帖最后由 乘风飞扬 于 2024-4-24 17:09 编辑

    触摸按键寄存器是扩展寄存器,你把扩展寄存器访问使能关闭了,后续对触摸按键功能配置的代码都是无效的:
    截图202404241706396722.jpg
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    4

    主题

    5

    回帖

    54

    积分

    注册会员

    积分
    54
     楼主| 发表于 2024-4-25 16:41:27 | 显示全部楼层
    乘风飞扬 发表于 2024-4-24 17:08
    触摸按键寄存器是扩展寄存器,你把扩展寄存器访问使能关闭了,后续对触摸按键功能配置的代码都是无效的:
    ...

    谢谢指点!
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    4

    主题

    5

    回帖

    54

    积分

    注册会员

    积分
    54
     楼主| 发表于 2024-4-25 16:45:10 | 显示全部楼层
    乘风飞扬 发表于 2024-4-24 17:08
    触摸按键寄存器是扩展寄存器,你把扩展寄存器访问使能关闭了,后续对触摸按键功能配置的代码都是无效的:
    ...

    请问下,为什么,我串口输出按键值和零点值都是0

    #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");                       
           
            }
    }

    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    10 小时前
  • 签到天数: 154 天

    [LV.7]常住居民III

    27

    主题

    1408

    回帖

    4382

    积分

    论坛元老

    积分
    4382
    发表于 2024-4-25 16:51:26 | 显示全部楼层
    qiu_ 发表于 2024-4-25 16:45
    请问下,为什么,我串口输出按键值和零点值都是0

    #include "main.h"

    用这个帖子里的例程试试吧,也是串口打印触摸值的。
    https://www.stcaimcu.com/forum.p ... =3971&pid=51046
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    4

    主题

    5

    回帖

    54

    积分

    注册会员

    积分
    54
     楼主| 发表于 2024-4-25 17:06:59 | 显示全部楼层
    乘风飞扬 发表于 2024-4-25 16:51
    用这个帖子里的例程试试吧,也是串口打印触摸值的。
    https://www.stcaimcu.com/forum.php?mod=redirect&g ...

    不对的,他给的例程里面没有触摸例程
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    10 小时前
  • 签到天数: 154 天

    [LV.7]常住居民III

    27

    主题

    1408

    回帖

    4382

    积分

    论坛元老

    积分
    4382
    发表于 2024-4-25 17:24:46 | 显示全部楼层
    qiu_ 发表于 2024-4-25 17:06
    不对的,他给的例程里面没有触摸例程

    这个例子本就是演示如何通过串口绘图工具描绘触摸按键值曲线的,怎么会没有触摸例程?你再仔细看看例子。
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    46

    主题

    3116

    回帖

    7029

    积分

    超级版主

    积分
    7029
    发表于 2024-5-6 11:36:33 | 显示全部楼层
    请使用我的例程测试,中断读取的。
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-31 19:46 , Processed in 0.066157 second(s), 60 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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