32G12K128实验箱点亮3线SPI总线TFT彩屏成功
正在学习使用32G12K128单片机,冲哥的视频课程也看了十几集了,熟悉了一些基础知识后开始想用STC32G12K128实验箱-V9.6试验箱实现一些想法,比如驱动TFT彩屏。经过几天的努力终于使我手里的这个TFT模块驱动成功,模块的型号是BW3532MIB、自带的驱动芯片为:ILI9481,模块内配置的驱动模式为MOSI、SCLK、CS三线9bit数据SPI总线,对于三线SPI总线的定义或有不同,但我的屏幕就是这三条线+RST的接口模式,而9bit数据是由数据的最高位的一位代表指令/数据+8位数据的传输方式,这种数据总线对于51单片机硬件SPI总线而言只能采用连续两次发送8位数据的模式驱动,效率很低,所以我仍然采用软件模拟SPI总线的方法来实现通讯,代码不是我写的而是搬运了一段很经典的代码,简洁明了易懂好用,代码如下://---------------------------------------------------
u8 bdata bitdata; //定义可位寻址的数据bitdata
sbit bit7=bitdata^7; //以下分别定义bitdata各位的名称
sbit bit6=bitdata^6;
sbit bit5=bitdata^5;
sbit bit4=bitdata^4;
sbit bit3=bitdata^3;
sbit bit2=bitdata^2;
sbit bit1=bitdata^1;
sbit bit0=bitdata^0;
//==============写指令============================
void LCD_WR_REG(u16 comd) //代码中加入延时后可以使用系统时钟频率45MHz
{
bitdata=comd;
sda=0;//D/C=0写指令
scl=0;NOP1();
scl=1;
sda=bit7;
scl=0;NOP1();
scl=1;
sda=bit6;
scl=0;NOP1();
scl=1;
sda=bit5;
scl=0;NOP1();
scl=1;
sda=bit4;
scl=0;NOP1();
scl=1;
sda=bit3;
scl=0;NOP1();
scl=1;
sda=bit2;
scl=0;NOP1();
scl=1;
sda=bit1;
scl=0;NOP1();
scl=1;
sda=bit0;
scl=0;NOP1();
scl=1;
}
//===============写8位数据===========================
voidLCD_WR_DATA(u16 dat)
{
bitdata=dat;
sda=1;//D/C=1写数据
scl=0;NOP1();
scl=1;
sda=bit7;
scl=0;NOP1();
scl=1;
sda=bit6;
scl=0;NOP1();
scl=1;
sda=bit5;
scl=0;NOP1();
scl=1;
sda=bit4;
scl=0;NOP1();
scl=1;
sda=bit3;
scl=0;NOP1();
scl=1;
sda=bit2;
scl=0;NOP1();
scl=1;
sda=bit1;
scl=0;NOP1();
scl=1;
sda=bit0;
scl=0;NOP1();
scl=1;
}
由于多年使用STC单片机的习惯,新编代码还是从改编例程开始,于是复制了STC32试验箱例程:“37-2.4寸ILI9341驱动TFT显示屏实验程序”,开始修改相关代码使例程适应我的这个TFT屏,经过几天的努力终于调通了代码实现了这款TFT彩屏的显示,见下图:
代码分享如下:
{:4_250:} 求大神分享一个stc8H驱动三线SPI_TFT屏的案例,本人小白玩不转三线SPI屏
页:
[1]