知识问答
基于STM32的图形交互界面设计—— 触屏坐标识别
2025-09-21 16:37:41
来源:互联网转载
一,电阻触摸屏工作原理
原理图2.坐标计算方法
3.触屏接口
4.触屏驱动程序
5.使用触屏驱动——bsp_lcd.h
6.bsp_xpt2046_lcd.h解析
¤54行:定义XPT2046触摸屏的坐标扫描方向
//1:竖屏 2:横屏,根据实际情况自行修改,与屏幕显示方向保持一致
#define macXPT2046_Coordinate_GramScan 2
¤98行:定义全局变量
//触摸标志:按下为1(按下申请外部中断,在中断服务程序中设置),释放清零
extern volatile uint8_t ucXPT2046_TouchFlag;
//校准系数,具体数据在bsp_xpt2046_lcd.c中,根据屏幕显示方向选择
extern strType_XPT2046_TouchPara strXPT2046_TouchPara;
7.驱动函数介绍
¤void XPT2046_Init( void );
¤在LCD_Init()函数中调用
¤配置SPI接口CS,MISO,MOSI,CLK引脚工作模式
¤配置触屏输入中断
下降沿触发,允许中断,优先级0,0
8.设计触屏中断服务程序
// EXTI Line --> PE4void macXPT2046_EXTI_INT_FUNCTION ( void ){ if ( EXTI_GetITStatus ( macXPT2046_EXTI_LINE ) != RESET ){ ucXPT2046_TouchFlag = 1; EXTI_ClearITPendingBit ( macXPT2046_EXTI_LINE ); }}
9.驱动函数介绍
举例
10.驱动函数介绍
11.执行效果
11.屏幕方向设置
¤1) bsp_lcd.c ILI9341_Init (); ILI9341_GramScan(1);¤2) bsp_xpt2046_lcd.h #define macXPT2046_Coordinate_GramScan 1¤3) bsp_xpt2046_lcd.c strType_XPT2046_TouchPara strXPT2046_TouchPara = { 0.001030, 0.064188, -10.804098, -0.085584, 0.001420, 324.127036 };¤4) bsp_ili9341_lcd.h #define macILI9341_Default_Max_Width 240 //最大宽度 #define macILI9341_Default_Max_Heigth 320 //最大高度 #define macILI9341_DispWindow_COLUMN 240 //总列数 #define macILI9341_DispWindow_PAGE 320 //总行数
12.程序设计技巧—条件编译
#define ScreenDirection 1 //定义校准系数 #if ScreenDirection==1 strType_XPT2046_TouchPara strXPT2046_TouchPara = { 0.001030, 0.064188, -10.804098, -0.085584, 0.001420, 324.127036 }; #elif ScreenDirection==2 strType_XPT2046_TouchPara strXPT2046_TouchPara = { 0.085958, -0.001073, -4.979353, -0.001750, 0.065168, -13.318824 };#endif
二,总工程
#include "stm32f10x.h"#include "bsp_lcd.h"#include "fatfs_flash_spi.h"#include "bsp_usart1.h"#include "pic.h"#include <stdio.h>#define LEDBLUE_ONGPIO_ResetBits(GPIOB, GPIO_Pin_1)#define LEDBLUE_OFFGPIO_SetBits(GPIOB, GPIO_Pin_1)#define LEDGREEN_ONGPIO_ResetBits(GPIOB, GPIO_Pin_0)#define LEDGREEN_OFFGPIO_SetBits(GPIOB, GPIO_Pin_0)#define LEDRED_ONGPIO_ResetBits(GPIOB, GPIO_Pin_5)#define LEDRED_OFFGPIO_SetBits(GPIOB, GPIO_Pin_5)void Delay(u32 Cnt){while(--Cnt);}void GPIO_Configration(){GPIO_InitTypeDef GPIO_InitStructure;//必须先开启时钟再配置引脚RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC ,ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_5;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(GPIOB, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOC, &GPIO_InitStructure);LEDBLUE_OFF;LEDGREEN_OFF;LEDRED_OFF;}u8 KeyScan(){u8 key;if((GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)==1) && (GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_13)==1)) key = 3;else if((GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)==0) && (GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_13)==1)) key = 2;else if((GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)==1) && (GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_13)==0)) key = 1;else key = 0;return key;}int main(void){strType_XPT2046_Coordinate Coordinate;charcStr[ 10 ];GPIO_Configration();// USARTx_Config();LCD_Init();ILI9341_GramScan(2);FLASH_SPI_initialize();LEDRED_ON;ILI9341_Clear(0,0,320,240,macWHITE);//调用函数绘制图案,显示字符// ILI9341_OpenWindow(100,100,50,50);// ILI9341_Write_Cmd ( macCMD_SetPixel );// for(i=0;i<120;i++) ILI9341_Write_Data ( macRED );// ILI9341_DispString_EN_CH(0,200,"头条你好",macBLUE,macWHITE);ILI9341_DispImage( 0,0,gImage_1 );ILI9341_DispString_EN_CH(160,80,"头条你好",macBLUE,macWHITE);while(1){if ( ucXPT2046_TouchFlag == 1 ) //如果触摸了屏幕 { if ( XPT2046_Get_TouchedPoint ( & Coordinate, & strXPT2046_TouchPara ) ) //获取触摸点的坐标{ILI9341_Clear( 0 , 160 , 320 , 32 , macBLACK );sprintf ( cStr, "%d", Coordinate.x );ILI9341_DispString_EN( 0 , 160 , "x=" , macBLACK , macWHITE);ILI9341_DispString_EN( 16 , 160 , cStr , macBLACK , macWHITE);sprintf ( cStr, "%d", Coordinate.y );ILI9341_DispString_EN( 0 , 176 , "y=" , macBLACK , macWHITE);ILI9341_DispString_EN( 16 , 176 , cStr , macBLACK , macWHITE);} }}}xpt2046
上一篇:外链建设蓝图:驱动酷狗流量与权威