STM32f103的触摸屏的设置与使用

        多功能采集显示平台的人机交互采用的触屏方案。

        触屏功能主要是依赖电阻触摸屏的主要部分是一块与显示器表面非常配合的电阻薄膜屏,这是一种多层的复合薄膜,它以一层玻璃或硬塑料平板作为基层,表面涂有一层透明氧化金属(透明的导电电阻)导电层,上面再盖有一层外表面硬化处理、光滑防擦的塑料层、它的内表面也涂有一层涂层、在他们之间有许多细小的(小于 1/1000 英寸)的透明隔离点把两层导电层隔开绝缘。当手指触摸屏幕时,两层导电层在触摸点位置就有了接触,电阻发生变化,在 和 两个方向上产生信号,然后送触摸屏控制器。控制器侦测到这一接触并计算出(XY)的位置,再根据获得的位置模拟鼠标的方式运作。这就是电阻技术触摸屏的最基本的原理。

        电阻触摸屏的优点:精度高、价格便宜、抗干扰能力强、稳定性好。

        电阻触摸屏的缺点:容易被划伤、透光性不太好、不支持多点触摸。

        多功能采集显示平台采用了触摸屏控制芯片为 XPT2046。 XPT2046 是一款 导线制触摸屏控制器,内含 12 位分辨率 125KHz 转换速率逐步逼近型 A/D 转换器。 XPT2046 支持从 1.5V到 5.25V 的低电压 I/O 接口。XPT2046 能通过执行两次 A/D 转换查出被按的屏幕位置, 除此之外,还可以测量加在触摸屏上的压力。

        硬件设计方面,多功能采集显示平台采用SPI的方式读取XPT2046所存储的XY的逻辑电压值,同时采用了外部中断的方式响应电阻触摸屏的点击事件。SPI接口使用片上资源的SPI2,占用PB 13~15,片选信号线占用IOPB12,触摸响应信号线占用PG7,使用外部中断模式,并且中断级别高于显示刷新定时中断。


  软件设计方面有以下3

  第一,初始化XPT2046芯片,初始化SPI功能,并设置外部中断事件,同时使能XPT2046芯片和IO内部时钟。

  第二,电阻触摸屏的点击中断事件,编写中断服务函数,进行对点击的位置的获取,并且根据获取的位置进行区域判定,经行相应的操作。

  第三,对于电阻触摸屏的特性,点击电阻触摸屏后驱动芯片可以产生一个中断信号提示触摸动作,同时在寄存器存放这XY轴两个逻辑电压值,这两个逻辑电压值的精度是12位的,与TFTLCD的物理坐标值(320*240)是有一定相关性的,但是便于程序的编写,我们需要使得逻辑电压值和物理坐标值相同。所以编写了电阻触摸屏的校正程序,校正的算法是改进的五点校正法


XPT2046触摸屏初始化代码如下:

void Touch_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	NVIC_InitTypeDef NVIC_InitStructure;
	EXTI_InitTypeDef EXTI_InitStructure;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG | RCC_APB2Periph_AFIO,ENABLE);
	GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_7;
	GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IPU;
	//GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);//关闭jtag,使能SWD,可以用SWD模式调试
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
	GPIO_Init(GPIOG,&GPIO_InitStructure);
	GPIO_EXTILineConfig(GPIO_PortSourceGPIOG, GPIO_PinSource7);	//设置管较为外部中断管脚
	EXTI_InitStructure.EXTI_Line    = EXTI_Line7;
	EXTI_InitStructure.EXTI_Mode    = EXTI_Mode_Interrupt;	//为中断请求
	EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//Falling下降沿 Rising上升
	EXTI_InitStructure.EXTI_LineCmd = ENABLE;
	EXTI_Init(&EXTI_InitStructure);
	EXTI_ClearITPendingBit(EXTI_Line7);	   //清除线路挂起位
	/* Enable the EXTI4 Interrupt */
	NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn  ;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
	NVIC_Init(&NVIC_InitStructure);
	
	SPI2_Init();
	CSPin_init();
}


读取XY坐标函数:

u16 ADS_Read(u8 CMD)	  
{ 	 	  
	u16 Num=0,temp;  	 
	TCS_LOW; 
	SPI2_ReadWriteByte(CMD);
	delay_us(6);	 
	temp=SPI2_ReadWriteByte(0x00); 
	Num=temp<<8; 
	delay_us(1); 
	temp=SPI2_ReadWriteByte(0x00); 
	Num|=temp;  	
	Num>>=4;
	TCS_HIGH; 
	return(Num);  
} 

u16 Read_XY(u8 CMD)
{
	u16 i, j;
	u16 buf[10];
	u16 sum=0;
	u16 temp;
	for(i=0;i<10;i++)buf[i]=ADS_Read(CMD);				    
	for(i=0;i<9; i++)
	{
		for(j=i+1;j<10;j++)
		{
			if(buf[i]>buf[j])
			{
				temp=buf[i];
				buf[i]=buf[j];
				buf[j]=temp;
			}
		}
	}	  
	for(i=3;i<7;i++)sum+=buf[i];
	temp=sum/(4);
	return temp;   
}

u16 Read_X(void)
{
	u16 tempx;
	tempx = (Read_XY(CMD_RDX)-XLC)/(KX) + XC;
	return tempx;
}
u16 Read_Y(void)
{
	u16 tempy;
	tempy = (Read_XY(CMD_RDY)-YLC)/(KY) + YC;
	return tempy;
}

这里的 KX KY XLC YLC XC YC 都是用于校正电阻屏的系数,缺省值为1.00。

电阻屏的校正可以使用5点矫正法,详情请参考:http://blog.csdn.net/devintt/article/details/47022761



  • 2
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
stm32f103是一款强大的德州仪器(TI)公司推出的32位ARM Cortex-M3内核的微控制器。它具备丰富的外设和强大的计算能力,非常适合用来设计触摸屏游戏。以下是一些关于stm32f103触摸屏游戏的细节。 首先,stm32f103的高性能处理器能够实时处理图形渲染和游戏逻辑。配合其256KB至1MB的闪存和48KB至96KB的SRAM,可以存储和载入游戏资源和数据。这使得游戏绘制和计算速度快,运行流畅。 其次,stm32f103可以通过SPI或I2C接口轻松连接触摸屏触摸屏可以是电阻式或电容式。通过读取触摸屏的坐标信息,可以实现游戏中的触摸操作,例如移动,点击或滑动屏幕。这样用户可以通过触摸屏与游戏进行交互。 此外,stm32f103通过许多现成的开源库和软件包,如STemWin图形库或地址为Adafruit_GFX的Arduino库,可以轻松地实现图像绘制和界面设计。这些库提供了丰富的图形绘制功能,包括绘制形状、填充颜色和显示图片等。 除了基本的图形绘制,stm32f103也可以通过使用加速度计和电子罗盘等传感器来实现更多有趣的游戏功能。例如,可以通过倾斜或旋转设备来控制游戏内的物体移动。 最后,由于stm32f103拥有多个通用输入/输出引脚,可以通过连接按钮、LED灯或蜂鸣器等外设,进一步增强游戏的交互性和乐趣。 总而言之,stm32f103微控制器的强大性能和丰富的外设嵌入式可编程能力,使其成为设计和开发触摸屏游戏的理想选择。它不仅可以实现基本的图形渲染和触摸操作,还可以通过外设和传感器等扩展功能,为游戏带来更多的乐趣和创意。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值