激情六月丁香婷婷|亚洲色图AV二区|丝袜AV日韩AV|久草视频在线分类|伊人九九精品视频|国产精品一级电影|久草视频在线99|在线看的av网址|伊人99精品无码|午夜无码视频在线

高校合作1:010-59833514 ?咨詢電話:400-810-1418 服務(wù)與監(jiān)督電話:400-810-1418轉(zhuǎn)接2

基于STM32的圖形交互界面設(shè)計(jì)—— 觸屏坐標(biāo)識別

發(fā)布時(shí)間:2024-01-18 09:17:06 瀏覽量:325次

一,電阻觸摸屏工作原理

  1. 原理圖

2.坐標(biāo)計(jì)算方法

3.觸屏接口

4.觸屏驅(qū)動(dòng)程序

5.使用觸屏驅(qū)動(dòng)——bsp_lcd.h

6.bsp_xpt2046_lcd.h解析

¤54行:定義XPT2046觸摸屏的坐標(biāo)掃描方向

//1:豎屏 2:橫屏,根據(jù)實(shí)際情況自行修改,與屏幕顯示方向保持一致

#define macXPT2046_Coordinate_GramScan 2

¤98行:定義全局變量

//觸摸標(biāo)志:按下為1(按下申請外部中斷,在中斷服務(wù)程序中設(shè)置),釋放清零

extern volatile uint8_t ucXPT2046_TouchFlag;

//校準(zhǔn)系數(shù),具體數(shù)據(jù)在bsp_xpt2046_lcd.c中,根據(jù)屏幕顯示方向選擇

extern strType_XPT2046_TouchPara strXPT2046_TouchPara;

7.驅(qū)動(dòng)函數(shù)介紹

¤void XPT2046_Init( void );

¤在LCD_Init()函數(shù)中調(diào)用

¤配置SPI接口CS,MISO,MOSI,CLK引腳工作模式

¤配置觸屏輸入中斷

下降沿觸發(fā),允許中斷,優(yōu)先級0,0

8.設(shè)計(jì)觸屏中斷服務(wù)程序

// EXTI Line --> PE4
void macXPT2046_EXTI_INT_FUNCTION ( void )
{ 
if ( EXTI_GetITStatus ( macXPT2046_EXTI_LINE ) != RESET )
{
 ucXPT2046_TouchFlag = 1; 
 EXTI_ClearITPendingBit ( macXPT2046_EXTI_LINE ); 
}
}

9.驅(qū)動(dòng)函數(shù)介紹

舉例

10.驅(qū)動(dòng)函數(shù)介紹

11.執(zhí)行效果

11.屏幕方向設(shè)置

¤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 //總列數(shù)
 #define macILI9341_DispWindow_PAGE 320 //總行數(shù)

12.程序設(shè)計(jì)技巧—條件編譯

 #define ScreenDirection 1 
 
 //定義校準(zhǔn)系數(shù)
 #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_ON		GPIO_ResetBits(GPIOB, GPIO_Pin_1)
#define LEDBLUE_OFF		GPIO_SetBits(GPIOB, GPIO_Pin_1)
#define LEDGREEN_ON		GPIO_ResetBits(GPIOB, GPIO_Pin_0)
#define LEDGREEN_OFF	GPIO_SetBits(GPIOB, GPIO_Pin_0)
#define LEDRED_ON			GPIO_ResetBits(GPIOB, GPIO_Pin_5)
#define LEDRED_OFF		GPIO_SetBits(GPIOB, GPIO_Pin_5)
void Delay(u32 Cnt)
{
	while(--Cnt);
}
void GPIO_Configration()
{
	GPIO_InitTypeDef GPIO_InitStructure;
	
	//必須先開啟時(shí)鐘再配置引腳
	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;
	char	cStr[ 10 ];
	
	GPIO_Configration();
// 	USARTx_Config();
	LCD_Init();
	ILI9341_GramScan(2);
	FLASH_SPI_initialize();
	
	LEDRED_ON;
	
	ILI9341_Clear(0,0,320,240,macWHITE);
	
	//調(diào)用函數(shù)繪制圖案,顯示字符
// 	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 ) ) //獲取觸摸點(diǎn)的坐標(biāo)	
			{
				
				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);
			} 
 }
	}
}

熱門課程推薦

熱門資訊

請綁定手機(jī)號

x

同學(xué)您好!

您已成功報(bào)名0元試學(xué)活動(dòng),老師會(huì)在第一時(shí)間與您取得聯(lián)系,請保持電話暢通!
確定