STM32触摸屏的使用(st7796s)

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

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

st7796s stm32
VCC VCC
GND GND
MOSI PB15
MISO PB14
LED PB9
SCK PB13
DC/RS PB10
RST PB12
CS  PB11
T_IRQ PC10
T_DO PC2
T_DIN PC3
T_CS PC13
T_CLK PC0

一、字体、图片显示

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

 对于中文字体,必须进行取模,我们这里用到的软件是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 设置系统主频为72MHZ
  uart_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.com)https://github.com/qq-hh/qq-hh-My_Project_stm32

二、触摸点击功能

我这里做了几个按钮,同时接了一个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 设置系统主频为72MHZ
  uart_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.com)https://github.com/qq-hh/qq-hh-My_Project_stm32欢迎大家下载!

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

猜你喜欢

转载自blog.csdn.net/weixin_58125062/article/details/126043739#comments_28478331
今日推荐