使用OLED屏在输出信息较多时还是有些难以满足需求,前面有驱动SPI接口OLED屏的经验,这此就使用SPI接口来驱动TFT串口屏。在构建中文字库的情况下,可便捷地实现图1所示的中文界面。 此外,若将位图的数据存放到数组中,还可以实现图片的显示,其效果见图2所示。 图1 文字显示界面
图2 图片显示效果
TFT串口屏的引脚仍然是通过KEY_PAD接口来连接,电源则从P13接口获取,其连接关系如下: CS --P1.24 REST --P1.28 DC --P1.26 SDI --P1.27 SCK --P1.25 LED --P1.30
输出高低电平的定义语句如下: #define LCD_CS_High() GPIO_PinWrite(GPIO1, (24U), 1U); #define LCD_CS_Low() GPIO_PinWrite(GPIO1, (24U), 0U); #define LCD_REST_High() GPIO_PinWrite(GPIO1, (28U), 1U); #define LCD_REST_Low() GPIO_PinWrite(GPIO1, (28U), 0U); #define LCD_DC_High() GPIO_PinWrite(GPIO1, (26U), 1U); #define LCD_DC_Low() GPIO_PinWrite(GPIO1, (26U), 0U); #define LCD_SDI_High() GPIO_PinWrite(GPIO1, (27U), 1U); #define LCD_SDI_Low() GPIO_PinWrite(GPIO1, (27U), 0U); #define LCD_SCK_High() GPIO_PinWrite(GPIO1, (25U), 1U); #define LCD_SCK_Low() GPIO_PinWrite(GPIO1, (25U), 0U); #define LCD_LED_High() GPIO_PinWrite(GPIO1, (30U), 1U); #define LCD_LED_Low() GPIO_PinWrite(GPIO1, (30U), 0U);
配置相应引脚为输出端口的函数为: - void LCD_GPIO_Cogfig(void)
- {
- gpio_pin_config_t led_config = {kGPIO_DigitalOutput, 0, kGPIO_NoIntmode};
- GPIO_PinInit(GPIO1, (25U), &led_config);
- GPIO_PinInit(GPIO1, (27U), &led_config);
- GPIO_PinInit(GPIO1, (24U), &led_config);
- GPIO_PinInit(GPIO1, (26U), &led_config);
- GPIO_PinInit(GPIO1, (28U), &led_config);
- GPIO_PinInit(GPIO1, (30U), &led_config);
- GPIO_PinWrite(GPIO1, (30U), 1U);
- }
复制代码
使TFT串口屏清屏的函数为: - void LCD_Clear(uint16_t Color)
- {
- char VH,VL;
- uint16_t 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 showimage(unsigned int x,unsigned int y)
- {
- unsigned int i,j,k;
- unsigned int da;
- k=0;
- for(i=0;i<320;i++)
- {
- LCD_SetCursor(x,y+i);
- LCD_WriteRAM_Prepare();
- for(j=0;j<240;j++)
- {
- da=gImage_ybc[k*2];
- da<<=8;
- da|=gImage_ybc[k*2+1];
- LCD_WR_DATA(da);
- k++;
- }
- }
- }
复制代码
实现图1和图2的显示主程序为: - int main(void)
- {
- uint16_t i=0;
- gpio_pin_config_t sw_config = {
- kGPIO_DigitalInput, 0,
- kGPIO_IntRisingEdge,
- };
- GPIO_PinInit(GPIO5, (0U), &sw_config);
- gpio_pin_config_t led_config = {kGPIO_DigitalOutput, 0, kGPIO_NoIntmode};
- BOARD_ConfigMPU();
- BOARD_InitPins();
- BOARD_BootClockRUN();
- BOARD_InitDebugConsole();
- delay();
- LCD_GPIO_Cogfig();
- Lcd_Init();
- showimage(0,0);
- while (1 == GPIO_PinRead(GPIO5, (0U)));
- LCD_Clear(RED);
- BACK_COLOR=RED;
- POINT_COLOR=WHITE;
- showhanzi16(20,20,0);
- showhanzi16(36,20,1);
- showhanzi16(124,20,2);
- showhanzi16(140,20,3);
- showhanzi16(156,20,4);
- showhanzi16(56,50,5);
- showhanzi16(72,50,6);
- showhanzi16(88,50,7);
- LCD_ShowString(52,20,100,16,16," OK1052-C");
- LCD_ShowString(20,50,48,16,16,"TFT");
- LCD_ShowString(20,80,90,16,16,"JINGLIXIXI");
- LCD_ShowString(20,110,90,16,16,"2018-11-10");
- while(1);
- }
复制代码
|