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 文件在工程文件包中,供有兴趣的爱好者参考:
{:4_174:} 感谢神农鼎管理员的鲜花鼓励和指导。
昨发新贴今改观了,估计是神管深夜亲自操刀编辑斧正,足见对STC新手爱好者习作的首肯和支持,让人感动,辛苦了。
本实验的编程,是比较粗浅和简单的,意在抛砖引玉。
尚有提升打磨空间:
1,提高主频,效果必然更好些。(本人屠龙刀三实验板,一直处于仿真芯片状态,固定在了22.1184,本实验忽略了调整);
2,本实验是采用模拟IO驱动,意为方便移植,其实可再探索使用硬件SPI方式,以获得更快速度;
3,还可再探索加入DMA方式,因分辨率高,显示缓存变大,更应考虑DMA方式,以提高效率。
总之,还有待努力学习,充分利用和发挥STC单片机的功能特点。
流逝哥 爱上了楼主的程序,放到 STC8051U 上拍了个视频
https://www.bilibili.com/video/BV1nM4m1276U
# #助力电子爱好者 # #单片机 #STC8051U STC最强单片机8051U,点赞,关注,分享,主页加群主,一起玩电子!_哔哩哔哩_bilibili
记号收藏学习! 学习了{:5_273:} 点赞学习,感谢分享经验
点赞,下载实验,感谢分享 开始学习{:4_197:}