15.1實驗內容
通過本實驗主要學習以下內容:
- LCD觸控原理
- SPI外設功能
15.2實驗原理
本實驗介紹通過SPI接口控制8080接口屏的touch功能。
15.3硬件設計
8080接口屏touch部分實現如下圖所示,通過SPI接口進行實現。
15.4代碼解析
15.4.1Touch SPI定義
Touch 的SPI定義如下所示:
JSON //定義TOUCH_SPI SPI_MASTER_SCK_GPIO_DEF(TOUCH_SPI,B,3,GPIO_AF_5); SPI_MASTER_MOSI_GPIO_DEF(TOUCH_SPI,B,5,GPIO_AF_5); SPI_MASTER_MISO_GPIO_DEF(TOUCH_SPI,B,4,GPIO_AF_5); SPI_MASTER_CS_GPIO_DEF(TOUCH_SPI,A,8); SPI_TX_DMA_DEF(TOUCH_SPI,SPI0,DMA1,DMA_CH1); SPI_RX_DMA_DEF(TOUCH_SPI,SPI0,DMA1,DMA_CH0); SPI_DEF(TOUCH_SPI,SPI0,SPI_MASTER,SPI_DATASIZE_8BIT,SPI_CK_PL_LOW_PH_1EDGE,SPI_PSC_64,SPI_ENDIAN_MSB,MODE_POLL); |
15.4.2SPI初始化配置
Touch SPI初始化配置如下所示:
JSON void bsp_spi_init(typdef_spi_struct *spix) { driver_spi_init(spix); } |
15.4.3屏幕touch狀態獲取函數
屏幕touch狀態獲取函數如下所示,通過該函數可掃描獲取touch位置。
JSON Drv_Err bsp_touch_scan(uint16_t *x, uint16_t *y) { static uint8_t count=0; uint16_t touch_ad_x,touch_ad_y = 0; /* touch pen is active */ if (SET == bsp_touch_pen_irq()) { if(++count>=20 || lcd_touch_panel_struct.TOUCH_State==1) { lcd_touch_panel_struct.TOUCH_State=1; if((SUCCESS != bsp_touch_ad_xy_get(&touch_ad_x, &touch_ad_y))){ return DRV_ERROR; } // if(invalid_count >= 20){ // return DRV_ERROR; // } }else { return DRV_ERROR; } }else{ count=0; if(lcd_touch_panel_struct.TOUCH_State==1){ lcd_touch_panel_struct.TOUCH_State=2; lcd_touch_panel_struct.Touch_x_Last=*x; lcd_touch_panel_struct.Touch_y_Last=*y; } return DRV_ERROR; } *x=bsp_touch_coordinate_x_get(touch_ad_x); *y=bsp_touch_coordinate_y_get(touch_ad_y); if(count==20) { lcd_touch_panel_struct.TOUCH_State=1; lcd_touch_panel_struct.Touch_x_First=*x; lcd_touch_panel_struct.Touch_y_First=*y; } lcd_touch_panel_struct.Touch_x_Now=*x; lcd_touch_panel_struct.Touch_y_Now=*y; return DRV_SUCCESS; } |
15.4.4主函數
本例程主函數如下所示,在本例程中,8080液晶屏上顯示4個LED圖標,通過觸控點到哪個LED,MCU檢測到后打開對應的LED燈。
JSON int main(void) { uint16_t num[4]={0,0,0,0}; /* store the touch point number on four buttons */ uint8_t count=0; char* led_string[4]={"LED1","LED2","LED3","LED4"} ; uint8_t button_id=0; driver_init(); /* 延時和公共驅動部分初始化 */ bsp_8080_lcd_init(); /* 初始化LCD */ bsp_led_group_init(); //初始化SPI bsp_spi_init(&TOUCH_SPI); /* configure the GPIO of SPI touch panel */ bsp_touch_panel_init(bsp_8080_lcd_parameter.width,bsp_8080_lcd_parameter.height); delay_ms(50); /* clear the LCD screen */ bsp_8080_lcd_clear(WHITE); bsp_8080_lcd_show_log(); bsp_8080_lcd_show_string(a1+30, b1+80,bsp_8080_lcd_parameter.width,FONT_ASCII_24_12,FONT_ASCII_24_12,led_string[0],BLUE); /* draw picture of button on LCD screen */ bsp_8080_lcd_color_fill(a1+30,b1+40,a1+30+40-1,b1+40+40-1,(uint16_t *)(image_off + BMP_HEADSIZE)); bsp_8080_lcd_show_string(a2+30, b1+80,bsp_8080_lcd_parameter.width,FONT_ASCII_24_12,FONT_ASCII_24_12,led_string[1],BLUE); bsp_8080_lcd_color_fill(a2+30,b1+40,a2+30+40-1,b1+40+40-1,(uint16_t *)(image_off + BMP_HEADSIZE)); bsp_8080_lcd_show_string(a1+30, b2+80,bsp_8080_lcd_parameter.width,FONT_ASCII_24_12,FONT_ASCII_24_12,led_string[2],BLUE); bsp_8080_lcd_color_fill(a1+30,b2+40,a1+30+40-1,b2+40+40-1,(uint16_t *)(image_off + BMP_HEADSIZE)); bsp_8080_lcd_show_string(a2+30, b2+80,bsp_8080_lcd_parameter.width,FONT_ASCII_24_12,FONT_ASCII_24_12,led_string[3],BLUE); bsp_8080_lcd_color_fill(a2+30,b2+40,a2+30+40-1,b2+40+40-1,(uint16_t *)(image_off + BMP_HEADSIZE)); while(1){ /* get the position of touch on LCD screen */ if(DRV_SUCCESS == bsp_touch_scan(&touch_x,&touch_y)){ count++; get_touch_area(touch_x,touch_y,num); } else { count=0; } /* generate response to the touch(turn on LED and change picture )*/ if(count==10){ button_id = find_max(num); turn_on_led(button_id); change_picture(button_id); num[0]=num[1]=num[2]=num[3]=0; count=0; } } } |
15.5實驗結果
將本例程燒錄到海棠派開發板中,通過手指點擊屏幕上的LED圖標,可以點亮對應的LED.
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
單片機
+關注
關注
6035文章
44554瀏覽量
634632 -
嵌入式
+關注
關注
5082文章
19104瀏覽量
304798 -
開發板
+關注
關注
25文章
5032瀏覽量
97371 -
GD32
+關注
關注
7文章
403瀏覽量
24328
發布評論請先 登錄
相關推薦
迅為iMX6ULL開發板使用手冊資料下載
的知識點,它都有!《嵌入式Linux開發指南》+《開發板使用手冊》+《裸機使用手冊》鏈接:https://pan.baidu.com/s/1Xat4C-cDa2Gi1UwNckNRTw
發表于 12-02 14:13
【GD32H757Z海棠派開發板使用手冊】第二講 GPIO-按鍵查詢檢測實驗
2.1實驗內容通過本實驗主要學習以下內容:GPIO輸入功能原理;按鍵查詢輸入檢測原理;2.2實驗原理2.2.1GPIO輸入功能原理GD32H7XX系列MCUGPIO輸入配置結構如下圖所
【GD32H757Z海棠派開發板使用手冊】第五講 PMU-低功耗實驗
PMU即電源管理單元,其內部結構下圖所示,由該圖可知,GD32H7XX系列MCU具有三個電源域,包括VDD/VDDA電源域、0.9V電源域以及電池備份域,其中,VDD /VDDA域由電源直接供電
【GD32H757Z海棠派開發板使用手冊】第八講 ADC-規則組多通道采樣實驗
通過本實驗主要學習以下內容:
ADC的簡介
GD32FH757 ADC工作原理
DMA和DMAMUX的原理
規則組多通道循環采樣
【GD32H757Z海棠派開發板使用手冊】第十一講 SPI-SPI NOR FLASH讀寫實驗
通過本實驗主要學習以下內容:
?SPI簡介
?GD32H7 SPI簡介
?SPI NOR FLASH——GD25Q128ESIGR簡介
?使用GD32H7 SPI接口實現對
【GD32H757Z海棠派開發板使用手冊】第十二講 SDIO-SD卡讀寫實驗
SD卡是一種主要以Nand Flash作為存儲介質,具有體積小、數據傳輸速度快以及支持熱插拔的優點。如今,已被廣泛應用于數碼相機、便攜式移動設備以及手機等多種設備中。SD卡的驅動一般有SPI接口或SDIO接口,本例程介紹使用GD32F4xx的SDIO接口驅動SD卡的實現。
【GD32F303紅楓派開發板使用手冊】第二十講 SPI-SPI NAND FLASH讀寫實驗
通過本實驗主要學習以下內容:
?SPI通信協議,參考19.2.1東方紅開發板使用手冊
?GD32F303 SPI操作方式,參考19.2.2東方紅開
評論