触摸屏的使用(st7796s)"/>
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 设置系统主频为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)
发布评论