STC32G液晶应用程序
TFT液晶应用学习中STC32G-DEMO-CODE-V9.6-20230425
37-2.4寸ILI9341驱动TFT显示屏实验程序
main.c
/*---------------------------------------------------------------------*/
/* --- STC MCU Limited ------------------------------------------------*/
/* --- STC 1T Series MCU Demo Programme -------------------------------*/
/* --- Mobile: (86)13922805190 ----------------------------------------*/
/* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
/* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/
/* --- Web: www.STCMCU.com --------------------------------------------*/
/* --- Web: www.STCMCUDATA.com---------------------------------------*/
/* --- QQ:800003751 -------------------------------------------------*/
/* 液晶屏驱动程序参考wiki技术网站提供的开源源码,仅供学习使用 */
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
/*---------------------------------------------------------------------*/
//=========================================电源接线================================================//
//VDD接DC 3.3V电源
//GND接地
//=======================================液晶屏数据线接线==========================================//
//本模块数据总线类型为8位并口
//液晶屏模块 STC32G
// LCD_D0~D7 接 P60~P67 //液晶屏8位数据线
//=======================================液晶屏控制线接线==========================================//
//液晶屏模块 STC32G
// LCD_RS 接 P45 //数据/命令选择控制信号
// LCD_RD 接 P44 //读控制信号
// LCD_RST 接 P43 //复位信号
// LCD_WR 接 P42 //写控制信号
// LCD_CS 接 P34 //片选控制信号
//================================================================================================//
// 本实验测试使用的2.4寸320*240的并口彩屏,是在淘宝店 https://kcer001.taobao.com/ 提供的样品彩屏上测试通过的
//**************************************************************************************************/
#include "sys.h"
#include "lcd.h"
#include "gui.h"
#include "test.h"
//主函数
void main(void)
{
WTST = 0;//设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
EAXFR = 1; //扩展寄存器(XFR)访问使能
CKCON = 0; //提高访问XRAM速度
//液晶屏初始化
LCD_Init();
//循环进行各项测试
while(1)
{
main_test(); //测试主界面
Test_Read(); //读ID和颜色值测试
Test_Color(); //简单刷屏填充测试
Test_FillRec(); //GUI矩形绘图测试
Test_Circle(); //GUI画圆测试
Test_Triangle(); //GUI三角形填充测试
English_Font_test();//英文字体示例测试
Chinese_Font_test();//中文字体示例测试
Pic_test(); //图片显示示例测试
Rotate_Test();//屏幕旋转测试
}
}
test.h
/*---------------------------------------------------------------------*/
/* --- STC MCU Limited ------------------------------------------------*/
/* --- STC 1T Series MCU Demo Programme -------------------------------*/
/* --- Mobile: (86)13922805190 ----------------------------------------*/
/* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
/* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/
/* --- Web: www.STCMCU.com --------------------------------------------*/
/* --- Web: www.STCMCUDATA.com---------------------------------------*/
/* --- QQ:800003751 -------------------------------------------------*/
/* 液晶屏驱动程序参考wiki技术网站提供的开源源码,仅供学习使用 */
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
/*---------------------------------------------------------------------*/
//=========================================电源接线================================================//
//VDD接DC 3.3V电源
//GND接地
//=======================================液晶屏数据线接线==========================================//
//本模块数据总线类型为8位并口
//液晶屏模块 STC32G
// LCD_D0~D7 接 P60~P67 //液晶屏8位数据线
//=======================================液晶屏控制线接线==========================================//
//液晶屏模块 STC32G
// LCD_RS 接 P45 //数据/命令选择控制信号
// LCD_RD 接 P44 //读控制信号
// LCD_RST 接 P43 //复位信号
// LCD_WR 接 P42 //写控制信号
// LCD_CS 接 P34 //片选控制信号
//================================================================================================//
// 本实验测试使用的2.4寸320*240的并口彩屏,是在淘宝店 https://kcer001.taobao.com/ 提供的样品彩屏上测试通过的
//**************************************************************************************************/
#ifndef __TEST_H__
#define __TEST_H__
void DrawTestPage(u8 *str);
void Test_Color(void);
void Test_FillRec(void);
void Test_Circle(void);
void Test_Triangle(void);
void English_Font_test(void);
void Chinese_Font_test(void);
void Pic_test(void);
void Load_Drow_Dialog(void);
void Touch_Test(void);
void main_test(void);
void Rotate_Test(void);
void Test_Read(void);
#endiftest.c
/*---------------------------------------------------------------------*/
/* --- STC MCU Limited ------------------------------------------------*/
/* --- STC 1T Series MCU Demo Programme -------------------------------*/
/* --- Mobile: (86)13922805190 ----------------------------------------*/
/* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
/* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/
/* --- Web: www.STCMCU.com --------------------------------------------*/
/* --- Web: www.STCMCUDATA.com---------------------------------------*/
/* --- QQ:800003751 -------------------------------------------------*/
/* 液晶屏驱动程序参考wiki技术网站提供的开源源码,仅供学习使用 */
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
/*---------------------------------------------------------------------*/
//=========================================电源接线================================================//
//VDD接DC 3.3V电源
//GND接地
//=======================================液晶屏数据线接线==========================================//
//本模块数据总线类型为8位并口
//液晶屏模块 STC32G
// LCD_D0~D7 接 P60~P67 //液晶屏8位数据线
//=======================================液晶屏控制线接线==========================================//
//液晶屏模块 STC32G
// LCD_RS 接 P45 //数据/命令选择控制信号
// LCD_RD 接 P44 //读控制信号
// LCD_RST 接 P43 //复位信号
// LCD_WR 接 P42 //写控制信号
// LCD_CS 接 P34 //片选控制信号
//================================================================================================//
// 本实验测试使用的2.4寸320*240的并口彩屏,是在淘宝店 https://kcer001.taobao.com/ 提供的样品彩屏上测试通过的
//**************************************************************************************************/
#include <stdio.h>
#include "lcd.h"
#include "string.h"
#include "sys.h"
#include "gui.h"
#include "test.h"
#include "pic.h"
//========================variable==========================//
u16 ColorTab={RED,GREEN,BLUE,YELLOW,BRED};//定义颜色数组
u16 ColornTab={RED,MAGENTA,GREEN,DARKBLUE,BLUE,BLACK,LIGHTGREEN};
//=====================end of variable======================//
/*****************************************************************************
* @name :void DrawTestPage(u8 *str)
* @date :2018-08-09
* @function :Drawing test interface
* @parameters :str:the start address of the Chinese and English strings
* @retvalue :None
******************************************************************************/
void DrawTestPage(u8 *str)
{
//绘制固定栏up
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,str,16,1);//居中显示
Gui_StrCenter(0,lcddev.height-18,WHITE,BLUE,"www.STCMCUDATA.com",16,1);//居中显示
//绘制测试区域
//LCD_Fill(0,20,lcddev.width,lcddev.height-20,WHITE);
}
/*****************************************************************************
* @name :void main_test(void)
* @date :2018-08-09
* @function :Drawing the main Interface of the Comprehensive Test Program
* @parameters :None
* @retvalue :None
******************************************************************************/
void main_test(void)
{
DrawTestPage("2.4寸TFT屏测试程序");
Gui_StrCenter(0,30,RED,BLUE,"宏晶科技",16,1);//居中显示
Gui_StrCenter(0,60,RED,BLUE,"STC MCU Limited",16,1);//居中显示
Gui_StrCenter(0,90,MAGENTA,BLUE,"Tel: 86-0513-55012928",16,1);//居中显示
Gui_StrCenter(0,120,BLUE,BLUE,"www.STCAI.com",16,1);//居中显示
delay_ms(1500);
delay_ms(1500);
}
/*****************************************************************************
* @name :void Test_Color(void)
* @date :2018-08-09
* @function :Color fill test(white,black,red,green,blue)
* @parameters :None
* @retvalue :None
******************************************************************************/
void Test_Color(void)
{
//DrawTestPage("测试1:纯色填充测试");
LCD_Fill(0,0,lcddev.width,lcddev.height,WHITE);
Show_Str(20,30,BLUE,YELLOW,"BL Test",16,1);delay_ms(800);
LCD_Fill(0,0,lcddev.width,lcddev.height,RED);
Show_Str(20,30,BLUE,YELLOW,"RED ",16,1);delay_ms(800);
LCD_Fill(0,0,lcddev.width,lcddev.height,GREEN);
Show_Str(20,30,BLUE,YELLOW,"GREEN ",16,1);delay_ms(800);
LCD_Fill(0,0,lcddev.width,lcddev.height,BLUE);
Show_Str(20,30,RED,YELLOW,"BLUE ",16,1);delay_ms(800);
}
/*****************************************************************************
* @name :void Test_FillRec(void)
* @date :2018-08-09
* @function :Rectangular display and fill test
Display red,green,blue,yellow,pink rectangular boxes in turn,
1500 milliseconds later,
Fill the rectangle in red,green,blue,yellow and pink in turn
* @parameters :None
* @retvalue :None
******************************************************************************/
void Test_FillRec(void)
{
u8 i=0;
DrawTestPage("测试3:GUI矩形填充测试");
LCD_Fill(0,20,lcddev.width,lcddev.height-20,WHITE);
for (i=0; i<5; i++)
{
POINT_COLOR=ColorTab;
LCD_DrawRectangle(lcddev.width/2-80+(i*15),lcddev.height/2-80+(i*15),lcddev.width/2-80+(i*15)+60,lcddev.height/2-80+(i*15)+60);
}
delay_ms(1500);
LCD_Fill(0,20,lcddev.width-1,lcddev.height-20,WHITE);
for (i=0; i<5; i++)
{
POINT_COLOR=ColorTab;
LCD_DrawFillRectangle(lcddev.width/2-80+(i*15),lcddev.height/2-80+(i*15),lcddev.width/2-80+(i*15)+60,lcddev.height/2-80+(i*15)+60);
}
delay_ms(1500);
}
/*****************************************************************************
* @name :void Test_Circle(void)
* @date :2018-08-09
* @function :circular display and fill test
Display red,green,blue,yellow,pink circular boxes in turn,
1500 milliseconds later,
Fill the circular in red,green,blue,yellow and pink in turn
* @parameters :None
* @retvalue :None
******************************************************************************/
void Test_Circle(void)
{
u8 i=0;
DrawTestPage("测试4:GUI画圆填充测试");
LCD_Fill(0,20,lcddev.width,lcddev.height-20,WHITE);
for (i=0; i<5; i++)
gui_circle(lcddev.width/2-80+(i*25),lcddev.height/2-50+(i*25),ColorTab,30,0);
delay_ms(1500);
LCD_Fill(0,20,lcddev.width-1,lcddev.height-20,WHITE);
for (i=0; i<5; i++)
gui_circle(lcddev.width/2-80+(i*25),lcddev.height/2-50+(i*25),ColorTab,30,1);
delay_ms(1500);
}
/*****************************************************************************
* @name :void Test_Triangle(void)
* @date :2018-08-09
* @function :triangle display and fill test
Display red,green,blue,yellow,pink triangle boxes in turn,
1500 milliseconds later,
Fill the triangle in red,green,blue,yellow and pink in turn
* @parameters :None
* @retvalue :None
******************************************************************************/
void Test_Triangle(void)
{
u8 i=0;
DrawTestPage("测试5:GUI Triangle填充测试");
LCD_Fill(0,20,lcddev.width,lcddev.height-20,WHITE);
for(i=0;i<5;i++)
{
POINT_COLOR=ColorTab;
Draw_Triangel(lcddev.width/2-80+(i*20),lcddev.height/2-20+(i*15),lcddev.width/2-50-1+(i*20),lcddev.height/2-20-52-1+(i*15),lcddev.width/2-20-1+(i*20),lcddev.height/2-20+(i*15));
}
delay_ms(1500);
LCD_Fill(0,20,lcddev.width-1,lcddev.height-20,WHITE);
for(i=0;i<5;i++)
{
POINT_COLOR=ColorTab;
Fill_Triangel(lcddev.width/2-80+(i*20),lcddev.height/2-20+(i*15),lcddev.width/2-50-1+(i*20),lcddev.height/2-20-52-1+(i*15),lcddev.width/2-20-1+(i*20),lcddev.height/2-20+(i*15));
}
delay_ms(1500);
}
/*****************************************************************************
* @name :void English_Font_test(void)
* @date :2018-08-09
* @function :English display test
* @parameters :None
* @retvalue :None
******************************************************************************/
void English_Font_test(void)
{
DrawTestPage("测试6:英文显示测试");
POINT_COLOR=RED;
BACK_COLOR=BLUE;
LCD_ShowString(10,30,12,"6X12:abcdefghijklmnopqrstuvwxyz",0);
LCD_ShowString(10,45,12,"6X12:ABCDEFGHIJKLMNOP0123456789",1);
LCD_ShowString(10,60,12,"6X12:~!@#$%^&*()_+{}:<>?/|-+.",0);
LCD_ShowString(10,80,16,"8X16:abcdefghijklmnopqrstuvwxyz",0);
LCD_ShowString(10,100,16,"8X16:ABCDEFGHIJKLMNOP0123456789",1);
LCD_ShowString(10,120,16,"8X16:~!@#$%^&*()_+{}:<>?/|-+.",0);
delay_ms(1500);
}
/*****************************************************************************
* @name :void Chinese_Font_test(void)
* @date :2018-08-09
* @function :chinese display test
* @parameters :None
* @retvalue :None
******************************************************************************/
void Chinese_Font_test(void)
{
DrawTestPage("测试7:中文显示测试");
Show_Str(10,30,BLUE,YELLOW,"16X16:江苏国芯科技有限公司欢迎您",16,0);
Show_Str(10,50,BLUE,YELLOW,"16X16:Welcome宏晶科技",16,0);
Show_Str(10,70,BLUE,YELLOW,"24X24:深圳市中文测试",24,1);
Show_Str(10,100,BLUE,YELLOW,"32X32:字体测试",32,1);
delay_ms(1500);
}
/*****************************************************************************
* @name :void Pic_test(void)
* @date :2018-08-09
* @function :picture display test
* @parameters :None
* @retvalue :None
******************************************************************************/
void Pic_test(void)
{
DrawTestPage("测试8:图片显示测试");
//LCD_Fill(0,20,lcddev.width,lcddev.height-20,WHITE);
Gui_Drawbmp16(30,30,gImage_qq);
Show_Str(30+12,75,BLUE,YELLOW,"QQ",16,1);
Gui_Drawbmp16(90,30,gImage_qq);
Show_Str(90+12,75,BLUE,YELLOW,"QQ",16,1);
Gui_Drawbmp16(150,30,gImage_qq);
Show_Str(150+12,75,BLUE,YELLOW,"QQ",16,1);
delay_ms(1500);
}
/*****************************************************************************
* @name :void Rotate_Test(void)
* @date :2018-08-09
* @function :rotate test
* @parameters :None
* @retvalue :None
******************************************************************************/
void Rotate_Test(void)
{
u8 i=0;
u8 *Direction={"Rotation:0","Rotation:90","Rotation:180","Rotation:270"};
for(i=0;i<4;i++)
{
LCD_direction(i);
DrawTestPage("测试9:屏幕角度测试");
Show_Str(20,30,BLUE,YELLOW,Direction,16,1);
Gui_Drawbmp16(30,50,gImage_qq);
delay_ms(1000);delay_ms(1000);
}
LCD_direction(USE_HORIZONTAL);
}
/*****************************************************************************
* @name :void Test_Read(void)
* @date :2018-11-13
* @function :read test
* @parameters :None
* @retvalue :None
******************************************************************************/
void Test_Read(void)
{
u16 lcd_id,color;
u8 buf = {0},i;
u8 cbuf = {0};
DrawTestPage("测试2:读ID和颜色值测试");
LCD_Fill(0,20,lcddev.width,lcddev.height-20,WHITE);
lcd_id = LCD_Read_ID();
sprintf((char *)buf,"ID:0x%x",lcd_id);
Show_Str(50,25,BLUE,YELLOW,buf,16,1);
for (i=0; i<7; i++)
{
POINT_COLOR=ColornTab;
LCD_DrawFillRectangle(40-10,55+i*25-10,40+10,55+i*25+10);
color = LCD_ReadPoint(40,55+i*25);
sprintf((char *)cbuf,"read color:0x%04x",color);
Show_Str(40+20,55+i*25-8,POINT_COLOR,YELLOW,cbuf,16,1);
}
delay_ms(1500);
}
看都看不懂对我来说不重要 但是代码看着很舒服,{:4_174:} 感谢,你这块屏没有触摸吗 学习了,谢谢 学习了 触摸一直调不通
页:
[1]