【GD32307E-START】+ TFT屏驱动及图标化界面绘制
[复制链接]
凭借着GD32307E-START开发板所配置的强大内存,完全可以支撑起图标化的桌面式应用系统设计。
这里就介绍一下GD32307E对2.2' TFT显示屏的显示驱动,该显示屏与MCU的连接关系如下:
SCK---PC0
SDI--- PC1
D/C---PC3
RST--- PC2
CS ---PC4
LED--- PC5
由于该显示屏是一款SPI接口的串口屏,为便于驱动和移植,这里是采用I/O口模拟的方式来实现。
为使相应的引脚输出高低电平,特定义如下的语句:
#define LCD_CS_High() GPIO_BOP(GPIOC) = GPIO_PIN_4
#define LCD_CS_Low() GPIO_BC(GPIOC) = GPIO_PIN_4 //CS
#define LCD_REST_High() GPIO_BOP(GPIOC) = GPIO_PIN_2
#define LCD_REST_Low() GPIO_BC(GPIOC) = GPIO_PIN_2 //RES
#define LCD_DC_High() GPIO_BOP(GPIOC) = GPIO_PIN_3
#define LCD_DC_Low() GPIO_BC(GPIOC) = GPIO_PIN_3 //DC
#define LCD_SDI_High() GPIO_BOP(GPIOC) = GPIO_PIN_1
#define LCD_SDI_Low() GPIO_BC(GPIOC) = GPIO_PIN_1 //SDI
#define LCD_SCK_High() GPIO_BOP(GPIOC) = GPIO_PIN_0
#define LCD_SCK_Low() GPIO_BC(GPIOC) = GPIO_PIN_0 //SCK
#define LCD_LED_High() GPIO_BOP(GPIOC) = GPIO_PIN_5
#define LCD_LED_Low() GPIO_BC(GPIOC) = GPIO_PIN_5 //BLK
而对配置相关引脚为输出功能的函数为:
void SPI_CONFIG(void)
{
rcu_periph_clock_enable(RCU_GPIOC);
gpio_init(GPIOC, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5);
GPIO_BOP(GPIOC) = GPIO_PIN_0;
GPIO_BOP(GPIOC) = GPIO_PIN_1;
GPIO_BOP(GPIOC) = GPIO_PIN_2;
GPIO_BOP(GPIOC) = GPIO_PIN_3;
GPIO_BOP(GPIOC) = GPIO_PIN_4;
LCD_LED_High();
}
由下图可见,在界面中存在多个功能图标,这是由多个存放图标的数组来存储的,并通过对show_tbh()的调用来绘制。
图标化功能界面
图标绘制函数show_tbh()的内容为:
void show_tbh(unsigned int x,unsigned int y,unsigned int n) //200*200
{
unsigned int i,j,k;
unsigned int da;
k=0;
for(i=0;i<50;i++)
{
for(j=0;j<50;j++)
{
if(n==0) da=gImage_tb[k*2];
if(n==1) da=gImage_pwm[k*2];
if(n==2) da=gImage_rtc[k*2];
if(n==3) da=gImage_adc[k*2];
if(n==4) da=gImage_tft[k*2];
if(n==5) da=gImage_sz[k*2];
if(n==6) da=gImage_kz[k*2];
if(n==7) da=gImage_dht[k*2];
da<<=8;
if(n==0) da|=gImage_tb[k*2+1];
if(n==1) da|=gImage_pwm[k*2+1];
if(n==2) da|=gImage_rtc[k*2+1];
if(n==3) da|=gImage_adc[k*2+1];
if(n==4) da|=gImage_tft[k*2+1];
if(n==5) da|=gImage_sz[k*2+1];
if(n==6) da|=gImage_kz[k*2+1];
if(n==7) da|=gImage_dht[k*2+1];
POINT_COLOR=da;
LCD_DrawPoint(x+i,y+j);
k++;
}
}
}
而实现界面绘制的主程序为:
int main(void)
{
gd_eval_key_init(KEY_WAKEUP, KEY_MODE_EXTI);
gd_eval_led_init(LED1);
/* configure systick */
systick_config();
SPI_CONFIG();
delay_1ms(500);
tft_Init();
loop: LCD_Clear(WHITE);
show_tbh(20,240,0);
showhanzi16h(80,280,3,0);
showhanzi16h(80,264,4,0);
show_tbh(20,180,1);
show_tbh(20,120,2);
show_tbh(20,60,3);
showhanzi16h(80,100,5,1);
showhanzi16h(80,84,6,1);
show_tbh(120,60,4);
show_tbh(120,120,5);
show_tbh(120,180,6);
show_tbh(120,240,7);
showhanzi16h(180,280,13,1);
showhanzi16h(180,264,14,1);
showhanzi16h(180,220,11,1);
showhanzi16h(180,204,12,1);
showhanzi16h(180,160,9,1);
showhanzi16h(180,144,10,1);
showhanzi16h(180,100,7,1);
showhanzi16h(180,84,8,1);
BACK_COLOR=WHITE;
POINT_COLOR=RED;
LCD_ShowCharh(80,160,'R',1);
LCD_ShowCharh(80,152,'T',1);
LCD_ShowCharh(80,144,'C',1);
LCD_ShowCharh(80,220,'P',1);
LCD_ShowCharh(80,212,'W',1);
LCD_ShowCharh(80,204,'M',1);
delay_1ms(2000);
while(1);
}
在结合板上按键的情况下,利用该界面可快速地进行功能的切换与调用。
|