STM32触摸屏的使用(st7796s)

编程入门 行业动态 更新时间:2024-10-10 11:22:07

STM32<a href=https://www.elefans.com/category/jswz/34/1759133.html style=触摸屏的使用(st7796s)"/>

STM32触摸屏的使用(st7796s)

这里分享的触摸屏型号是ST7796S,单片机使用的是stm32f103zet6

连线如下,请大家按照一下方式接线。

st7796sstm32
VCCVCC
GNDGND
MOSIPB15
MISOPB14
LEDPB9
SCKPB13
DC/RSPB10
RSTPB12
CS PB11
T_IRQPC10
T_DOPC2
T_DINPC3
T_CSPC13
T_CLKPC0

一、字体、图片显示

字体显示包含中英文,字体大小,字体颜色,背景色,字体位置等,这部分请看代码我在代码中有注释。

 对于中文字体,必须进行取模,我们这里用到的软件是PCtoLCD2002取模软件。

上图文字大小是16*16,常用的还有24*24,32*32。

部分代码如下:

#include "delay.h"
#include "sys.h"
#include "lcd.h"
#include "touch.h"
#include "gui.h"
#include "usart.h"
#include "touch.h"
#include "key.h" 
#include "led.h"
#include "pic.h"
#include "rgb.h"
//#include "FONT.H"
u16 ColorTab[5]={RED,GREEN,BLUE,YELLOW,BRED};//定义颜色数组
void DrawTestPage(u8 *str)
{
//绘制固定栏标题
LCD_Clear(WHITE);
LCD_Fill(0,0,lcddev.width,20,BLUE);
//绘制固定栏down
LCD_Fill(0,lcddev.height-20,lcddev.width,lcddev.height,BLUE);
POINT_COLOR=WHITE;
Gui_StrCenter(0,2,WHITE,BLUE,"触摸屏的使用",16,1);//居中显示
Gui_StrCenter(0,lcddev.height-18,WHITE,BLUE,"好好学习,天天向上!",16,1);//居中显示}//注意Show_Str这个函数可以显示中英文,函数里面依次填入信息为x,y,字体颜色,背景色,文字内容,字宽自高位(常用:16,24,32),
//最后(0/1)是是否需要背景色int main(void)
{	SystemInit();//初始化RCC 设置系统主频为72MHZuart_init(115200);delay_init();LCD_Init();	   //液晶屏初始化DrawTestPage("");while(1){//显示中文Show_Str(10,30,BLUE,YELLOW,"这是中文",16,0);Show_Str(10,80,WHITE,RED,"字体大一点",24,0);Show_Str(10,120,BLUE,YELLOW,"再大一点",32,1);		//显示英文Show_Str(10,180,BLUE,YELLOW,"This is in English !",16,1);	//显示图片,切记图片取模Gui_Drawbmp16(50,220,gImage_a);Gui_Drawbmp16(150,220,gImage_w8);}
}

 图片取模这里用的是Image2lcd,设置如图,请注意高度和宽度的设置应与图片一致,以及代码中也要一致,自己修改图片大小,记得要同步到代码中设置。

void Gui_Drawbmp16(u16 x,u16 y,const unsigned char *p) //显示40*40 
{int i; unsigned char picH,picL; LCD_SetWindows(x,y,x+40-1,y+40-1);//窗口设置for(i=0;i<40*40;i++){	picL=*(p+i*2);	//数据低位在前picH=*(p+i*2+1);				Lcd_WriteData_16Bit(picH<<8|picL);  						}	LCD_SetWindows(0,0,lcddev.width-1,lcddev.height-1);//恢复显示窗口为全屏	
}

 完整工程代码

qq-hh/qq-hh-My_Project_stm32 (github)

二、触摸点击功能

我这里做了几个按钮,同时接了一个RGB共阳极小灯泡,点击亮灯,同时串口输出点击区域,大家也可以将点击处坐标出串口打印查看。

 

 代码如下:

#include "delay.h"
#include "sys.h"
#include "lcd.h"
#include "touch.h"
#include "gui.h"
#include "usart.h"
#include "touch.h"
#include "key.h" 
#include "led.h"
#include "pic.h"
#include "rgb.h"
//#include "FONT.H"
u16 ColorTab[5]={RED,GREEN,BLUE,YELLOW,BRED};//定义颜色数组
void DrawTestPage(u8 *str)
{
//绘制固定栏标题
LCD_Clear(WHITE);
LCD_Fill(0,0,lcddev.width,20,BLUE);
//绘制固定栏down
LCD_Fill(0,lcddev.height-20,lcddev.width,lcddev.height,BLUE);
POINT_COLOR=WHITE;
Gui_StrCenter(0,2,WHITE,BLUE,"触摸屏的使用",16,1);//居中显示
Gui_StrCenter(0,lcddev.height-18,WHITE,BLUE,"好好学习,天天向上!",16,1);//居中显示}//触摸屏功能可以看串口打印触摸点的坐标,我设计了几个按钮,加了一个RGB共阳极小灯泡,连接线详见rgb.c
int main(void)
{	SystemInit();//初始化RCC 设置系统主频为72MHZuart_init(115200);delay_init();LCD_Init();	   //液晶屏初始化DrawTestPage("");u8 key;TP_Init();KEY_Init();RGB_Init();LCD_Fill(100,50,150,100,RED);Show_Str(108,65,BLUE,YELLOW,"LED1",16,1);LCD_Fill(100,150,150,200,BLUE);Show_Str(108,165,	RED,YELLOW,"LED2",16,1);LCD_Fill(100,250,150,300,GREEN);Show_Str(108,265,BLUE,YELLOW,"LED3",16,1);while(1){key=KEY_Scan();tp_dev.scan(0); 		 if(tp_dev.sta&TP_PRES_DOWN)			//触摸屏被按下{	//printf("x= %d\r\n",tp_dev.x);if(tp_dev.x<150&&tp_dev.x>100&&tp_dev.y>50&&tp_dev.y<100){	printf("hello \r\n");RED1=1;GREEN1=0;BLUE1=0;}if(tp_dev.x<150&&tp_dev.x>100&&tp_dev.y>150&&tp_dev.y<200){	printf("world \r\n");RED1=1;GREEN1=1;BLUE1=0;}if(tp_dev.x<150&&tp_dev.x>100&&tp_dev.y>250&&tp_dev.y<300){	printf("lalala \r\n");RED1=1;GREEN1=0;BLUE1=1;}}delay_us(200000);}}

完整工程qq-hh/qq-hh-My_Project_stm32 (github)!

如有不足之处请多多支出,感谢反馈。

更多推荐

STM32触摸屏的使用(st7796s)

本文发布于:2024-02-06 18:41:48,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1750661.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:触摸屏   st7796s

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!