正在学习使用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位数据===========================
- void LCD_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彩屏的显示,见下图:
代码分享如下:
TFT_ILI9481.zip
(207.96 KB, 下载次数: 60)
|