浦江一水 发表于 2024-6-29 21:04:29

SPI-TFT(240x240)彩屏@屠龙刀-32G12K128 驱动 | TFT取代OLED12864

屠龙刀-32G12K128 驱动 SPI-TFT彩屏/240x240
此前用屠龙刀-32G12K128实验板过驱动1.8寸128x160彩屏,
而今实验驱动 TFT(240x240) 1.3寸 彩屏, 两者有所不同,
前者屏幕尺寸稍大、I/O接口为八针、分辨率低,
驱动芯片为ST7735,在屠龙刀三实验板上要外接背光控制线 !
后者屏幕尺寸小,I/O接口为七针,分辨率高, 驱动芯片为ST7789,
在屠龙刀三实验板上直接插入,无须另外改接线。
彩屏具有240x240的分辨率,
对于使用STCAI单片机做项目而言,更具有实用意义。
若作为屠龙刀三的标配,其显示效果和展示信息量,
应该远胜于使用单色OLED12864显示屏了。
且看实验演示......


主程序如下:
//===========================================================
// OLED 1.3" 彩色显示屏 240*240 实验程序
// 驱动: ST7789
// 基于: 32G12K128芯片实验板编程 屠龙刀三核心实验板
// 整理:编程: 浦晓明(浦江一水) For 国芯论坛 2024-06-28 PXM
//===========================================================
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "STC32G.h"
#include "LCD_7789.H"
#include "PIC.H"


//unsigned char k;
//char S;


void Delay1ms(void)      //@22.1184MHz, 还有很强的拓展空间,如 33.1776MHz
{ unsigned char data i, j;
_nop_();_nop_();
i = 22;      j = 128;
do
{ while (--j);
} while (--i);
}
void Delayms(unsigned int count)
{ unsigned int i;
for(i=0;i<count;i++)      
Delay1ms();            
}
//主程序入口
void main(void)
{ unsigned char i;
unsigned int wait=0;
//IO端口初始化
WTST= 0; //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
//EAXFR = 1; //扩展寄存器(XFR)访问使能
CKCON = 0; //提高访问XRAM速度
//IO端口初始化//全部为双向口
P0M1 = 0x00;   P0M0 = 0x04;   //设置为准双向口
P1M1 = 0x00;   P1M0 = 0x00;   //设置为准双向口
P2M1 = 0x00;   P2M0 = 0x00;   //设置为准双向口
P3M1 = 0x00;   P3M0 = 0x00;   //设置为准双向口
P4M1 = 0x00;   P4M0 = 0x00;   //设置为准双向口
P5M1 = 0x00;   P5M0 = 0x00;   //设置为准双向口
LCD_Init();
while(1)
{ //循环演示
    LCD_CLS(1);                        //蓝色清屏
    for(i=0;i<16;i++)LCD_Box(i*15,180,15,50,7,7,i);//显示彩色条(色号0..15)
    LCD_Point(5,5,15);            //画点测试
    LCD_Line(5,5,175,175,12);   //两点一线
    LCD_Box0(25,25,40,40,15);            //画空心方框
    LCD_Box0(30,30,30,30,15);            //画空心方框
    LCD_Box0(35,35,20,20,15);            //画空心方框
    LCD_Box0(40,40,10,10,15);            //画空心方框
    LCD_Box(20,95,200,28,15,0,4);               //画矩形方框(可指定边框色和填充色)
    LCD_A08(120,15,"A08_012345",15,1,10);//显示6*8字符串
    LCD_A12(120,30,"A12_012345",15,1,10);//显示8*12字符串
    LCD_A16(120,45,"A16_012345",15,1,10);//显示8*16字符串
    LCD_A24(120,64,"A24_0123",15,1,8);       //显示12*24字符串
    LCD_H16(65,102,"单片机STC32G",14,4);   //16点阵中西文混合显示字符串
    LCD_H24(44,135,"单片机STC32G",11,0);   //24点阵中西文混合显示字符串
    Delayms(2000);   //延时2秒
    LCD_CLS(0);       //黑色清屏
    LCD_Box(0,0,239,24,1,1,1);                //等效于局部清屏
    LCD_A16( 8,3,"LCD_ST7789_240*240_DEMO.",10,1,24);//显示标题字符串
    for(i=0;i<16;i++)LCD_Box(i*15,219,15,20,7,7,i);            //显示彩色条(色号0..15)
    LCD_BMP( 38, 45,64,64,P_SET);          //彩色图标显示
    LCD_BMP(140, 40,64,64,P_ZER);
    LCD_BMP( 38,135,64,64,P_XSW);
    LCD_BMP(140,135,64,64,P_SYS);
    Delayms(2000);   //延时2秒
    LCD_CLS(0);       //黑色清屏
    for(i=0;i<16;i++)LCD_Line(0,i*15,i*15,239,10);//画两点一线

    for(i=0;i<16;i++)LCD_Line(i*15,0,239,i*15,10);//绿色斜线
    LCD_LineH(0,239,239,10);   //画水平线
    LCD_LineV(239,0,239,10);   //画垂直线
    Delayms(2000);   //延时2秒
    for(i=0;i<60;i++)LCD_Box0(120-2*i,120-2*i,4*i,4*i,10);   //绿色方框
    for(i=0;i<60;i++)LCD_Box0(120-2*i,120-2*i,4*i,4*i,9);    //蓝色方框
    for(i=0;i<60;i++)LCD_Box0(120-2*i,120-2*i,4*i,4*i,14);   //黄色方框
    for(i=0;i<60;i++)LCD_Box0(120-2*i,120-2*i,4*i,4*i,12);   //红色方框
    LCD_H24(86,110,"STC32G", 0,80);    //24点阵显示西文字符串(背景透明)黑色阴影。
    LCD_H24(84,108,"STC32G",15,80);   //24点阵显示西文字符串(背景透明)黄色字体。
    Delayms(2000);   //延时2秒
}
}



相关屏幕驱动 LCD_7789.C/H 文件在工程文件包中,供有兴趣的爱好者参考:






jwd 发表于 2024-6-30 16:09:40

{:4_174:}

浦江一水 发表于 2024-6-30 20:54:28

感谢神农鼎管理员的鲜花鼓励和指导。
昨发新贴今改观了,估计是神管深夜亲自操刀编辑斧正,足见对STC新手爱好者习作的首肯和支持,让人感动,辛苦了。
本实验的编程,是比较粗浅和简单的,意在抛砖引玉。
尚有提升打磨空间:
1,提高主频,效果必然更好些。(本人屠龙刀三实验板,一直处于仿真芯片状态,固定在了22.1184,本实验忽略了调整);
2,本实验是采用模拟IO驱动,意为方便移植,其实可再探索使用硬件SPI方式,以获得更快速度;
3,还可再探索加入DMA方式,因分辨率高,显示缓存变大,更应考虑DMA方式,以提高效率。
总之,还有待努力学习,充分利用和发挥STC单片机的功能特点。

神农鼎 发表于 2024-7-5 20:43:45


流逝哥 爱上了楼主的程序,放到 STC8051U 上拍了个视频
https://www.bilibili.com/video/BV1nM4m1276U

神农鼎 发表于 2024-7-5 20:48:43

# #助力电子爱好者 # #单片机 #STC8051U STC最强单片机8051U,点赞,关注,分享,主页加群主,一起玩电子!_哔哩哔哩_bilibili

wugqsh 发表于 2024-7-9 12:51:27

记号收藏学习!

SiegeLion 发表于 2024-7-10 09:04:42

学习了{:5_273:}

llyymm 发表于 2024-7-11 17:00:35

点赞学习,感谢分享经验

llyymm 发表于 2024-7-23 10:32:48

点赞,下载实验,感谢分享

hyjs 发表于 2024-8-6 08:31:08

开始学习{:4_197:}
页: [1] 2 3
查看完整版本: SPI-TFT(240x240)彩屏@屠龙刀-32G12K128 驱动 | TFT取代OLED12864