OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4336|回复: 4

电容触摸屏

[复制链接]

16

主题

33

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2018-11-4
在线时间
21 小时
发表于 2018-11-15 18:59:12 | 显示全部楼层 |阅读模式
1金钱
学习完电容触摸屏之后在屏幕上画了一个正方形,想要实现点击正方形区域内会实现led灯的翻转,但是好像点了一下会翻转好几次,加了延时函数也没用,请原子哥看看
4WTNL(N45%[FAN4IQ[C%H4O.png

最佳答案

查看完整内容[请看2#楼]

[mw_shl_code=c,true]//电容触摸屏测试函数 void ctp_test(void) { u8 t=0; u8 i=0; u16 lastpos[5][2]; //记录最后一次的数据 while(1) { LCD_DrawRectangle(150, 350, 330, 450); LCD_ShowString(200,390,100,16,16,"LED1"); tp_dev.scan(0); for(t=0;t
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10571
金钱
10571
注册时间
2017-2-18
在线时间
1914 小时
发表于 2018-11-15 18:59:13 | 显示全部楼层
[mw_shl_code=c,true]//电容触摸屏测试函数
void ctp_test(void)
{
        u8 t=0;
        u8 i=0;                      
        u16 lastpos[5][2];                //记录最后一次的数据
        while(1)
        {       
                LCD_DrawRectangle(150, 350, 330, 450);
                LCD_ShowString(200,390,100,16,16,"LED1");
                tp_dev.scan(0);
                for(t=0;t<CT_MAX_TOUCH;t++)
                {
                        if((tp_dev.sta)&(1<<t))
                        {
                                if(tp_dev.x[t]<lcddev.width&&tp_dev.y[t]<lcddev.height)
                                {
                                        if(lastpos[t][0]==0XFFFF)
                                        {
                                                lastpos[t][0] = tp_dev.x[t];
                                                lastpos[t][1] = tp_dev.y[t];
                                        }
//                                        lcd_draw_bline(lastpos[t][0],lastpos[t][1],tp_dev.x[t],tp_dev.y[t],2,POINT_COLOR_TBL[t]);//画线
                                        lastpos[t][0]=tp_dev.x[t];
                                        lastpos[t][1]=tp_dev.y[t];

                                        if(tp_dev.x[t]>150&&tp_dev.x[t]<330&&tp_dev.y[t]>350&&tp_dev.y[t]<450)
                                        {       
                                                while((tp_dev.sta)&(1<<0))
                                                {
                                                        tp_dev.scan(0);
                                                }
                                                delay_ms(500);
                                                LED1=!LED1;

                                        }
                                }
                        }else lastpos[t][0]=0XFFFF;
                }
               
                delay_ms(5);i++;
                if(i%20==0)LED0=!LED0;
        }       
}[/mw_shl_code]用的4.3寸MCU屏,这么写不会导致触摸屏按下的时候翻转三次电平
回复

使用道具 举报

16

主题

33

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2018-11-4
在线时间
21 小时
 楼主| 发表于 2018-11-15 19:12:38 | 显示全部楼层
把程序改成下面的图片发现进行两次LED灯翻转 为什么是两次
V@W1R8QRK1O9A$EF0~8FDQO.png
回复

使用道具 举报

16

主题

33

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2018-11-4
在线时间
21 小时
 楼主| 发表于 2018-11-15 22:28:11 | 显示全部楼层
非常感谢,请问这是什么原因,你以前好像也遇到跟我一样的问题
回复

使用道具 举报

16

主题

33

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2018-11-4
在线时间
21 小时
 楼主| 发表于 2018-11-15 22:32:17 | 显示全部楼层
[mw_shl_code=c,true] while((tp_dev.sta)&(1<<0))
                        {
                            tp_dev.scan(0);
                        } [/mw_shl_code]


好像这个是精髓?
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 18:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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