为了进行图像显示,彩色屏的使用是不可少的,这里选取的是一款SPI接口的2.2寸TFT显示屏,其显示分辨率为320*240像素点。
为便于连接,所使用的是J7扩展接口,见图1所示。
图1 扩展接口
该显示屏与开发板的连接关系为:
CS---PB13
REST
---PB14
DC
---PB15
SDI
---PB12
SCK
---PB0
BLK---3.3V
相关引脚输出高低电平的引脚定义为:
#define LCD_CS_High() GPIO_WriteBit(GPIOB, GPIO_Pin_13,Bit_SET) // CS
#define LCD_CS_Low()
GPIO_WriteBit(GPIOB, GPIO_Pin_13,Bit_RESET)
#define LCD_REST_High() GPIO_WriteBit(GPIOB,
GPIO_Pin_14,Bit_SET) // RES
#define LCD_REST_Low()
GPIO_WriteBit(GPIOB, GPIO_Pin_14,Bit_RESET)
#define LCD_DC_High()
GPIO_WriteBit(GPIOB, GPIO_Pin_15,Bit_SET) // DC
#define LCD_DC_Low()
GPIO_WriteBit(GPIOB, GPIO_Pin_15,Bit_RESET)
#define LCD_SDI_High() GPIO_WriteBit(GPIOB, GPIO_Pin_12,Bit_SET) // DIN
#define LCD_SDI_Low()
GPIO_WriteBit(GPIOB, GPIO_Pin_12,Bit_RESET)
#define LCD_SCK_High() GPIO_WriteBit(GPIOB,
GPIO_Pin_0,Bit_SET) // CLK
#define LCD_SCK_Low()
GPIO_WriteBit(GPIOB, GPIO_Pin_0,Bit_RESET)
以GPIO口模拟SPI发送字节数据的函数为:
void LCD_Writ_Bus(unsigned char com)
{
unsigned char uci;
for(uci=0;uci<8;uci++)
{
if(com & 0x80)
{
LCD_SDI_High();
}
else
{
LCD_SDI_Low();
}
com = com << 1;
Delay_Us(1);
LCD_SCK_Low();
LCD_SCK_High();
}
}
为便于测试TFT屏的驱动效果,可利用参数清屏函数来进行,该清屏函数的内容为:
void LCD_Clear(unsigned int Color)
{
char VH,VL;
unsigned int i,j;
VH=Color>>8;
VL=Color;
Address_set(0,0,LCD_W-1,LCD_H-1);
for(i=0;i<LCD_W;i++)
{
for (j=0;j<LCD_H;j++)
{
LCD_WR_DATA8(VH);
LCD_WR_DATA8(VL);
}
}
}
经程序的下载测试,可完成指定色彩的刷屏处理,说明基本的驱动函数没有问题。
在色彩清屏函数的基础上,可完成图像显示函数的设计,该函数的内容为:
void show_pic(const unsigned char *p)
{
int i,j;
unsigned char picH,picL;
Address_set(20,20,179,99);
for(i=0;i<80;i++)
{
for(j=0;j<160;j++)
{
picH=*p++;
picL=*p++;
LCD_WR_DATA8(picH);
LCD_WR_DATA8(picL);
}
}
}
实现图像显示的主程序为:
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
Delay_Init();
GPIO_INIT();
tft_Init();
BACK_COLOR=YELLOW;
POINT_COLOR=RED;
LCD_Clear(RED);
Delay_Ms(1000);
show_pic(gImage_RW);
while(1)
{
Delay_Ms(250);
GPIO_WriteBit(GPIOA,GPIO_Pin_0, Bit_RESET);
Delay_Ms(250);
GPIO_WriteBit(GPIOA,GPIO_Pin_0, Bit_SET);
}
}
在程序下载后,其显示效果如图2所示。
值得指出的是:CH32V208的Flash容量为128KB,而对于一幅满屏的图片则要占用3202402=153.6KB,因此在程序中是无法存放一幅满屏图像的。
图2 显示效果
此外,该显示屏提供控制字可自由的切换屏幕的显示模式,图3所示为横屏模式下的图像显示效果。
相应的屏幕显示模式控制语句为:
LCD_WR_REG(0x36);
LCD_WR_DATA8(0x48); // 48、68 为竖屏,28、E8 为横屏。
图3 横屏显示效果
更多回帖