13.stm32F4触摸屏讲解

触摸屏简介

触摸屏操作实例讲解

一。触摸屏简介

1. 触摸屏又称触控面板,它是一种把触摸位置转化成坐标数据的输入设备,根据触摸屏的检测原理,主要分为电阻式触摸屏和电容式触摸屏。

        电阻触摸屏:电阻屏造价便宜,能适应较恶劣的环境,但它只支持单点触控(一次只能检测面板上的一个触摸位置),触摸时需要一定的压力,使用久了容易造成表面磨损,影响寿命;

        电容触摸屏:具有支持多点触控、检测精度高的特点,电容屏通过与导电物体产生的电容效应来检测触摸动作,只能感应导电物体的触摸,湿度较大或屏幕表面有水珠时会影响电容屏的检测效果。目前电容式触摸屏被大部分应用在智能手机、平板电脑等电子设备中,而在汽车导航、工控机等设备中电阻式触摸屏仍占主流。

2.触摸屏与液晶显示屏的关系

         触摸屏实际上是在液晶屏上面贴了一层大小相等的薄膜,这个薄膜能够感知触碰,根据薄膜反馈的触摸位置,我们就能知道用户触碰在屏幕的什么位地方了。

3.电阻触摸屏检测原理

 4.电容触摸屏检测原理

        与电阻式触摸屏不同,电容式触摸屏不需要通过压力使触点变形。它的基本原理是利用充电时间检测电容大小,若手指触摸屏幕,会影响触摸点附近两个电极之间的耦合,从而改变两个电极之间的电容量,若检测到某电容的电容量发生了改变,即可获知该电容处有触摸动作从而通过检测出电容值的变化来获知触摸信号。


二。触摸屏操作实例讲解

1.触摸控制芯片XPT2406

 注: 当触摸屏有触点按下时,PENIRQ 引脚会输出低电平,直到没有触摸的时候,它才会 输出高电平

 2.XPT2046命令字(控制字节):

 uint8_t CMD_RDX=0XD0;   //读取X轴坐标命令。

Uint8_t CMD_RDY=0X90;   //读取Y轴坐标命令

0xD0: 1 1 0 1 0 0 0 0

0x90: 1 0 0 1 0 0 0 0

3.电阻触摸屏的校准:确定位置和对应的电压值之间的比例关系

补充实验:触摸屏

1.cubemx创建工程,在上一节显示屏的基础上继续创建配置

(1)屏幕使用spi2通信

 spi2继续配置

 为什么使用PG15作为片选

 spi配置

 (2)nvic中断配置

中断接受触摸屏的信息,使用PG7

 (3)PG7的GPIO设置为下降沿中断

 注意:PG7中断接受屏幕按下,nvic应设置为下降沿中断,中断优先级降低

2.步骤

(0)Touch.c、Touch.h文件复制进入工程

(1)GPIO.c中写中断处理函数

#include "Touch.h"
extern Pen_Holder Pen_Point;

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	if(GPIO_Pin == GPIO_PIN_7)
	{
		
		Pen_Point.Key_Sta = Key_Down;
		
	}
}

(2)main.c中

#include "Touch.h"

测试好的屏幕大小数据

Pen_Holder Pen_Point ={
	.xfac = 0.259067,
	.xoff = -20,
	.yfac = 0.158228,
	.yoff = -38, 
};

串口

int fputc(int ch , FILE *p)
{
	while(!(USART1->SR & (1<<7)));
	
	USART1->DR = ch;
	
	return ch;
}

while(循环中)

printf("%d\n",Pen_Point.Key_Sta);
		if( Pen_Point.Key_Sta==Key_Down )     //´¥ÃþÆÁ±»°´ÏÂ
			{				
				HAL_Delay(20);
				if(!HAL_GPIO_ReadPin(GPIOG,GPIO_PIN_7))    //ȷʵÓа´ÏÂ
				{
						HAL_NVIC_DisableIRQ(EXTI9_5_IRQn);	//¹Ø±ÕÖжÏ	
						printf("++++++touch+++++\r\n");
					
						if( Convert_Pos() ) 			 //´æ·Åµã»÷µÄX,YµÄ×ø±êÖµ	³É¹¦×ª»» ·µ»Ø1 ʧ°Ü·µ»Ø0 	
						{
								printf("x = %d,y = %d\r\n",Pen_Point.X0,Pen_Point.Y0); 
							 
  							Draw_Circle(Pen_Point.X0, Pen_Point.Y0, 10,Yellow) ; 
										
								Pen_Point.X0 = 0;
								Pen_Point.Y0 = 0;						
						}	
						
						HAL_Delay(200);
						HAL_NVIC_EnableIRQ(EXTI9_5_IRQn);		
				 }
					
				Pen_Point.Key_Sta=Key_Up;  

			} 

注意:GPIO.c中是接受触摸中断,main函数是处理触摸中断

可能出现的问题:

1.在进一步cubemx配置后,加入的(.c文件可能会消失),需要重新加入。

2.有时候还是不能用,可以 重新生成cubemx一下,我这样试了试就好了。

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值