HBZLL 发表于 2023-10-17 16:42:12

STC32G液晶应用程序

TFT液晶应用学习中

angmall 发表于 2023-10-28 08:33:31



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);
}



wzaefd 发表于 2023-11-3 22:16:56

看都看不懂对我来说不重要 但是代码看着很舒服,{:4_174:}

jkernet 发表于 2023-11-9 13:07:33

感谢,你这块屏没有触摸吗

HBZLL 发表于 2023-11-10 14:06:42

学习了,谢谢

hustc 发表于 2023-12-4 10:21:32

学习了

hzbin 发表于 2024-7-31 22:16:16

触摸一直调不通
页: [1]
查看完整版本: STC32G液晶应用程序