基于GD32F450开发板的TFT串口屏图像显示

[复制链接]
2450|3
 楼主| jinglixixi 发表于 2017-5-26 09:18 | 显示全部楼层 |阅读模式
在实现LCD5110屏显示之后,本打算完成I2C接口的OLED屏显示,无奈经多次测试似乎在GD32F450上无法实现,故只得进行SPI接口的2.2寸TFT彩色屏测试。
为了便于连线,TFT屏与GD32F450开发板的连接是通过Arduino接口,相应的连接关系如下:
CS -- PE2    REST -- PE5    DC -- PE6      SDI -- PE4     SCK -- PD0    LED+ -- PD1
GND可直接从Arduino接口取用,而稍有遗憾的是3.3V 电源则要从其位置引用。
在相应引脚设置为输出模式的情况下,其输出高低电平的语句定义如下:  
#define LCD_CS_High() gpio_bit_set(GPIOE, GPIO_PIN_2);
#define LCD_CS_Low()  gpio_bit_reset(GPIOE, GPIO_PIN_2);

#define LCD_REST_High() gpio_bit_set(GPIOE, GPIO_PIN_5);
#define LCD_REST_Low()  gpio_bit_reset(GPIOE, GPIO_PIN_5);

#define LCD_DC_High() gpio_bit_set(GPIOE, GPIO_PIN_6);
#define LCD_DC_Low()  gpio_bit_reset(GPIOE, GPIO_PIN_6);

#define LCD_SDI_High() gpio_bit_set(GPIOE, GPIO_PIN_4);
#define LCD_SDI_Low()  gpio_bit_reset(GPIOE, GPIO_PIN_4);

#define LCD_SCK_High() gpio_bit_set(GPIOD, GPIO_PIN_0);
#define LCD_SCK_Low()  gpio_bit_reset(GPIOD, GPIO_PIN_0);

#define LCD_LED_High() gpio_bit_set(GPIOD, GPIO_PIN_1);
#define LCD_LED_Low()  gpio_bit_reset(GPIOD, GPIO_PIN_1);

在其它函数基本不变的情况下,即可实现TFT屏的显示驱动。
为实现图像的显示,可将图像数据存放到数组中以供读取,实现的显示效果如图所示。
图片1.png
对应的引脚配置函数为:
  1. void SPI_CONFIG()
  2. {
  3. rcu_periph_clock_enable(RCU_GPIOE);
  4. gpio_mode_set          (GPIOE, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,   GPIO_PIN_2| GPIO_PIN_5| GPIO_PIN_6| GPIO_PIN_4);
  5. gpio_output_options_set(GPIOE, GPIO_OTYPE_PP,    GPIO_OSPEED_50MHZ,GPIO_PIN_2| GPIO_PIN_5| GPIO_PIN_6| GPIO_PIN_4);
  6. rcu_periph_clock_enable(RCU_GPIOD);
  7. gpio_mode_set          (GPIOD, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,   GPIO_PIN_0| GPIO_PIN_1);
  8. gpio_output_options_set(GPIOD, GPIO_OTYPE_PP,    GPIO_OSPEED_50MHZ,GPIO_PIN_0| GPIO_PIN_1);
  9. GPIO_BOP(GPIOD) = GPIO_PIN_1;
  10.         rcu_periph_clock_enable(RCU_GPIOB);
  11. gpio_mode_set          (GPIOB, GPIO_MODE_INPUT, GPIO_PUPD_NONE,   GPIO_PIN_14);
  12. gpio_output_options_set(GPIOB, GPIO_OTYPE_PP,   GPIO_OSPEED_50MHZ, GPIO_PIN_14);
  13. }
初始化函数为:
  1. void Lcd_Init(void)
  2. {   
  3.         LCD_REST_Low();
  4.         delay_1ms(20);   
  5.         LCD_REST_High();
  6.         delay_1ms(20);
  7.     LCD_CS_Low();  
  8.         LCD_WR_REG(0xCB);   
  9.     LCD_WR_DATA8(0x39);
  10.     LCD_WR_DATA8(0x2C);
  11.     LCD_WR_DATA8(0x00);
  12.     LCD_WR_DATA8(0x34);
  13.     LCD_WR_DATA8(0x02);
  14.     LCD_WR_REG(0xCF);  
  15.     LCD_WR_DATA8(0x00);
  16.     LCD_WR_DATA8(0XC1);
  17.     LCD_WR_DATA8(0X30);
  18.     LCD_WR_REG(0xE8);  
  19.     LCD_WR_DATA8(0x85);
  20.     LCD_WR_DATA8(0x00);
  21.     LCD_WR_DATA8(0x78);
  22.     LCD_WR_REG(0xEA);  
  23.     LCD_WR_DATA8(0x00);
  24.     LCD_WR_DATA8(0x00);
  25.     LCD_WR_REG(0xED);  
  26.     LCD_WR_DATA8(0x64);
  27.     LCD_WR_DATA8(0x03);
  28.     LCD_WR_DATA8(0X12);
  29.     LCD_WR_DATA8(0X81);
  30.     LCD_WR_REG(0xF7);  
  31.     LCD_WR_DATA8(0x20);
  32.     LCD_WR_REG(0xC0);      
  33.     LCD_WR_DATA8(0x23);   
  34.     LCD_WR_REG(0xC1);      
  35.     LCD_WR_DATA8(0x10);   
  36.     LCD_WR_REG(0xC5);      
  37.     LCD_WR_DATA8(0x3e);   
  38.     LCD_WR_DATA8(0x28);
  39.     LCD_WR_REG(0xC7);      
  40.     LCD_WR_DATA8(0x86);   
  41.     LCD_WR_REG(0x36);      
  42.     LCD_WR_DATA8(0x48);   
  43.     LCD_WR_REG(0x3A);   
  44.     LCD_WR_DATA8(0x55);
  45.     LCD_WR_REG(0xB1);   
  46.     LCD_WR_DATA8(0x00);  
  47.     LCD_WR_DATA8(0x18);
  48.     LCD_WR_REG(0xB6);     
  49.     LCD_WR_DATA8(0x08);
  50.     LCD_WR_DATA8(0x82);
  51.     LCD_WR_DATA8(0x27);  
  52.     LCD_WR_REG(0xF2);     
  53.     LCD_WR_DATA8(0x00);
  54.     LCD_WR_REG(0x26);     
  55.     LCD_WR_DATA8(0x01);
  56.     LCD_WR_REG(0xE0);     
  57.     LCD_WR_DATA8(0x0F);
  58.     LCD_WR_DATA8(0x31);
  59.     LCD_WR_DATA8(0x2B);
  60.     LCD_WR_DATA8(0x0C);
  61.     LCD_WR_DATA8(0x0E);
  62.     LCD_WR_DATA8(0x08);
  63.     LCD_WR_DATA8(0x4E);
  64.     LCD_WR_DATA8(0xF1);
  65.     LCD_WR_DATA8(0x37);
  66.     LCD_WR_DATA8(0x07);
  67.     LCD_WR_DATA8(0x10);
  68.     LCD_WR_DATA8(0x03);
  69.     LCD_WR_DATA8(0x0E);
  70.     LCD_WR_DATA8(0x09);
  71.     LCD_WR_DATA8(0x00);
  72.     LCD_WR_REG(0XE1);   
  73.     LCD_WR_DATA8(0x00);
  74.     LCD_WR_DATA8(0x0E);
  75.     LCD_WR_DATA8(0x14);
  76.     LCD_WR_DATA8(0x03);
  77.     LCD_WR_DATA8(0x11);
  78.     LCD_WR_DATA8(0x07);
  79.     LCD_WR_DATA8(0x31);
  80.     LCD_WR_DATA8(0xC1);
  81.     LCD_WR_DATA8(0x48);
  82.     LCD_WR_DATA8(0x08);
  83.     LCD_WR_DATA8(0x0F);
  84.     LCD_WR_DATA8(0x0C);
  85.     LCD_WR_DATA8(0x31);
  86.     LCD_WR_DATA8(0x36);
  87.     LCD_WR_DATA8(0x0F);
  88.     LCD_WR_REG(0x11);     
  89.     delay_1ms(120);
  90.     LCD_WR_REG(0x29);     
  91.     LCD_WR_REG(0x2c);
  92. }
主函数为:
  1. int main(void)
  2. {
  3. systick_config();
  4. SPI_CONFIG();
  5. Lcd_Init();
  6. show_pic(gImage_123);
  7. while (1);
  8. }




vibra2016 发表于 2017-5-29 17:53 | 显示全部楼层
这个功能蛮强大的,直接驱动彩屏的。
zhangbo1985 发表于 2017-5-29 17:54 | 显示全部楼层
这个开发板的我有,这个屏的部分我这是没有的哈
 楼主| jinglixixi 发表于 2017-5-30 11:13 | 显示全部楼层
zhangbo1985 发表于 2017-5-29 17:54
这个开发板的我有,这个屏的部分我这是没有的哈

屏是自己配,都是红色像是套装,哈哈!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

521

主题

2949

帖子

39

粉丝
快速回复 在线客服 返回列表 返回顶部