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


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


3.觸屏接口

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

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

6.bsp_xpt2046_lcd.h解析

¤54行:定義XPT2046觸摸屏的坐標(biāo)掃描方向
//1:豎屏 2:橫屏,根據(jù)實際情況自行修改,與屏幕顯示方向保持一致
#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ū)動函數(shù)介紹
¤void XPT2046_Init( void );
¤在LCD_Init()函數(shù)中調(diào)用
¤配置SPI接口CS,MISO,MOSI,CLK引腳工作模式
¤配置觸屏輸入中斷
下降沿觸發(fā),允許中斷,優(yōu)先級0,0
8.設(shè)計觸屏中斷服務(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ū)動函數(shù)介紹

舉例

10.驅(qū)動函數(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è)計技巧—條件編譯
#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;
//必須先開啟時鐘再配置引腳
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 ) ) //獲取觸摸點的坐標(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);
}
}
}
}
熱門資訊
1. 10個免費學(xué)習(xí)UI設(shè)計的網(wǎng)站 提升你的設(shè)計能力
怎樣可以提升你的UI設(shè)計能力!第一個:站酷站酷想必是設(shè)計師都知道的一個網(wǎng)站,里面不止有UI設(shè)計的資源,還有其他設(shè)計的,不如:平面設(shè)計、網(wǎng)頁設(shè)計、字體...
2. iPhone6的UI設(shè)計尺寸規(guī)范,原來如此重要!
想要了解iPhone6界面設(shè)計的尺寸規(guī)范嗎?這里為您詳細介紹iPhone6的UI設(shè)計尺寸規(guī)范,包括界面尺寸、圖標(biāo)尺寸、可點擊高度規(guī)范、搜索欄高度規(guī)范以及界面元素之間的距離規(guī)范。
3. 移動端UI設(shè)計中常見的5種APP界面類型,你get到了嗎?
通過介紹移動端UI設(shè)計中的閃屏頁、引導(dǎo)頁、浮層引導(dǎo)頁、空白頁和首頁等5種APP界面類型,幫助大家更好地了解UI設(shè)計的基本知識
4. 12個絕佳的UI設(shè)計網(wǎng)站,助力你的創(chuàng)作之旅!
將為大家介紹12個絕佳的UI設(shè)計網(wǎng)站,這些網(wǎng)站不僅可以為你提供靈感,還可以幫助你學(xué)習(xí)新的技巧,助力你的創(chuàng)意之旅!dribbbleDribbble 是一個面向設(shè)計師的...
5. 移動端列表頁和表單頁設(shè)計秘訣:讓你的APP點擊率翻倍
在移動端設(shè)計中,列表頁和表單頁是不可或缺的部分。一個好的列表頁和表單頁設(shè)計能夠讓用戶輕松地獲取信息并產(chǎn)生點擊欲望,從而提高點擊率。本文將為你...
6. 史上最全,平面設(shè)計UI設(shè)計必備的77個國內(nèi)外素材、設(shè)計資源網(wǎng)站
ui設(shè)計社區(qū),大神太多了。3、behance: https://www.behance.net/ ,著名設(shè)計... 對于品牌設(shè)計師來說,除了圖案素材收集之外,還有一個很重要的,就是設(shè)計故...
7. 推薦10本適合UI設(shè)計師看的書籍,輕松掌握技能!
對于想要提高自己的設(shè)計能力和創(chuàng)造力的小白和UI設(shè)計師來說,這本書是一個很好的選擇。4.《設(shè)計的覺醒》(IKKO TANAKA)推薦理由: 這本書是日本現(xiàn)代平面...
8. 設(shè)計中的色彩心理學(xué):淺析中西方色彩的歷史演變與設(shè)計應(yīng)用
摘要:本文探討了色彩的歷史演變和設(shè)計應(yīng)用。通過對色彩在早期文明社會中的實用運用、不同文化背景下色彩觀念的差異、色彩在設(shè)計中的重要性以及新興技...
9. 武漢UI設(shè)計培訓(xùn)班費用怎么樣?想學(xué)UI設(shè)計要多少錢?
想了解武漢UI設(shè)計培訓(xùn)班的費用是多少嗎?不知道學(xué)UI設(shè)計要花多少錢?不妨看看這篇文章,了解UI設(shè)計培訓(xùn)班的學(xué)費價格以及學(xué)習(xí)內(nèi)容。
10. 零基礎(chǔ)學(xué)UI設(shè)計要多久?培訓(xùn)完能拿多少工資?
探索零基礎(chǔ)UI設(shè)計培訓(xùn)的時長與薪資前景。了解數(shù)字藝術(shù)教育領(lǐng)域的專業(yè)課程,以及培訓(xùn)后的職業(yè)發(fā)展機會。
最新文章
同學(xué)您好!