屠龙刀三STC32G12K128实验板驱动TFT(128x160)彩屏
本帖最后由 浦江一水 于 2024-6-5 09:22 编辑屠龙刀三STC32G12K128实验板驱动TFT(128x160)彩屏
应坛友之需, 手头正好也有相同硬件配置, 匆匆编写了一段实验程序上传,供参考。
屠龙刀三STC32G12K128实验板,已有7针OLED显示屏接口,而本实验用屏是8针引脚的。
前7针的定义排列与实验板接口相同,彩屏多出的第8脚是BL背光控制端。本实验用杜邦线将其接到VCC,使显示屏背光常亮。
(当然也可接到MCU的其它某脚,可开关背光或控制亮度,本实验忽略。)
实验内容分为三页, 间隔2s自动循环切换显示:
第一页展示:
画点、画水平线、画垂直线、中西文字符串显示。
第二页展示:
彩色BMP图标显示。
第三页展示:
自定义32色,(编号0..31),矩形色块显示。
主程序 Main.C
//===========================================================
// TFT1.8"彩色显示屏 160*128 实验程序
// 驱动: ST7735
// 基于: STC32G12K128芯片实验板编程 屠龙刀三核心实验板
// 整理:编程: 浦晓明(浦江一水) For 国芯论坛 2024-06-01
//===========================================================
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "STC32G.h"
#include "LCD_7735.H"
#include "PIC.H"
unsigned char k;
char S;
void Delay1ms(void) //@22.1184MHz
{ unsigned char data i, j;
//_nop_();_nop_();
i = 22; j = 128;
do
{ while (--j);
} while (--i);
}
void Delayms(u16 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; //设置为准双向口: P0.2推挽输出控制背光
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); //蓝色清屏
LCD_Point(5,5,15); //画点测试
LCD_LineH(5,8,50,10); //画水平线
LCD_LineV(5,8,50,10); //画垂直线
LCD_Line(5,8,55,58,12);//两点一线
LCD_Box(10,95,100,28,15,0,4); //画矩形方框(可指定边框色和填充色)
LCD_A08(20,15,"A08_012345",15,1,10);//显示6*8字符串
LCD_A12(20,30,"A12_012345",15,1,10);//显示8*12字符串
LCD_A16(20,45,"A16_012345",15,1,10);//显示8*16字符串
LCD_A24(20,64,"A24_0123",15,1,8); //显示12*24字符串
LCD_H16(24,102,"单片机STC",14,4); //16点阵中西文混合显示字符串
LCD_H24( 8,130,"单片机STC",12,1); //24点阵中西文混合显示字符串
Delayms(2000);
LCD_Box(0,130,127,28,1,1,1); //局部清屏
LCD_BMP( 0, 5,64,64,P_SET); //彩色图标显示
LCD_BMP(64, 5,64,64,P_ZER);
LCD_BMP( 0,69,64,64,P_XSW);
LCD_BMP(64,69,64,64,P_SYS);
LCD_A16(0,140,"LCD_ST7735_DEMO.",10,0,16);
Delayms(2000);
LCD_CLS(0);
for(i=0;i<16;i++)LCD_Box(0, i*10,63,10,7,7,i); //显示彩色块(色号0..15)
for(i=0;i<16;i++)LCD_Box(64,i*10,63,10,7,7,(unsigned char)(i+16));//显示彩色块(色号16..31)
Delayms(2000);
}
}
工程文件包,含LCD7735.C显示屏驱动文件:
ST7735很常见的彩屏,这个可以有 谢谢了,下载认真学习了。 本帖最后由 科学妞妞 于 2024-6-2 19:44 编辑
stc32G的tft彩屏,做的好,放进例程里了,就是原程序直接编译,报错USER\LCD_7735.C(486): warning C47: 'pic': unreferenced parameter,什么意思不懂,怎么解决报错,请问 下载原程序直接编译,报错USER\LCD_7735.C(486): warning C47: 'pic': unreferenced parameter,什么意思不懂,怎么解决报错,请问 感谢分享,手里有一块屏也是ST7735驱动 科学妞妞 发表于 2024-6-2 19:45
下载原程序直接编译,报错USER\LCD_7735.C(486): warning C47: 'pic': unreferenced parameter,什么意思不 ...
这是一个警告,不是错误,是可以忽略的, 再次编译,也许就不提示了。
意思是某个参数未引用到,或者不够严谨,估猜原因是在PIC.H头文件中,有六个图标数组定义,而本实验程序中只用了四个。
这也与编译器版本及设置条件有关, 版本较高的编译器,语法检查比较严格,稍有不慎,就警告。这也是常见的现象,往往换个高版本编译环境就会出现警告提示。
当然应该尽量克服的,要做到无瑕疵、无懈可击。源文件在我这里编译是无警告、无错误的,我用的版本是KeilC51v959+C251。
顺便你也做个试验:删去PIC.H文件图标数组中没有用到那两个图标数组。然后在你的编译环境下,再编译一下,看看是否有警告,如果没有了,也验证了一下我的估猜。
或者用此PIC.H文件覆盖一下...
小涵子爸爸 发表于 2024-6-2 20:15
感谢分享,手里有一块屏也是ST7735驱动
感谢这位坛友的浏览与回复。 ST7735_TFT屏是比较常见,也好用,适合爱好者做实验。
正好有一块屏 浦江一水 发表于 2024-6-2 21:29
这是一个警告,不是错误,是可以忽略的, 再次编译,也许就不提示了。
意思是某个参数未引用到,或者不够严 ...
按指导完成上述,再,重新编译,提示USER\LCD_7735.C(389): error C7: compilation aborted
请问