[MCU] 【AT-START-F403A测评】+彩色OLED屏的显示驱动

jinglixixi   2020-10-9 00:46 楼主

AT32F403A有1024 K字节的内存和96+128 K字节的SRAM,另外还配有高达16 M字节的SPI闪存,面对这么丰富的存储资源不为它配个彩屏啥的,真有点委屈了它们。

这里就先为其配上一个0.96'的彩色OLED屏,该显示屏采用SPI接口,为此将I2C接口和SPI接口联合起来驱动它。

image-20201009003640-1.png image-20201009003640-2.png

图1 接口资源

 

为控制相关引脚的高低电平输出,所定义的语句如下:

#define OLED_SCLK_Set()    GPIO_SetBits(GPIOB, GPIO_Pins_8)

#define OLED_SCLK_Clr()    GPIO_ResetBits(GPIOB, GPIO_Pins_8)

#define OLED_SDIN_Set()    GPIO_SetBits(GPIOB, GPIO_Pins_9)

#define OLED_SDIN_Clr()    GPIO_ResetBits(GPIOB, GPIO_Pins_9)

#define OLED_RST_Clr()    GPIO_ResetBits(GPIOB, GPIO_Pins_11)

#define OLED_RST_Set()    GPIO_SetBits(GPIOB, GPIO_Pins_11)

#define OLED_DC_Clr()     GPIO_ResetBits(GPIOB, GPIO_Pins_12)

#define OLED_DC_Set()     GPIO_SetBits(GPIOB, GPIO_Pins_12)

 #define OLED_CS_Clr()     GPIO_ResetBits(GPIOB, GPIO_Pins_13)

#define OLED_CS_Set()     GPIO_SetBits(GPIOB, GPIO_Pins_13)

#define OLED_BLK_Clr()    GPIO_ResetBits(GPIOB, GPIO_Pins_14)

#define OLED_BLK_Set()    GPIO_SetBits(GPIOB, GPIO_Pins_14)

 

OLED屏的引脚功能定义函数为:

void AT32_OLED_Init(void)
{
  GPIO_InitType GPIO_InitStructure;
  RCC_APB2PeriphClockCmd(RCC_APB2PERIPH_GPIOB, ENABLE);
  GPIO_StructInit(&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pins=GPIO_Pins_8|GPIO_Pins_9|GPIO_Pins_11|GPIO_Pins_12|GPIO_Pins_13|GPIO_Pins_14;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT_PP;
  GPIO_InitStructure.GPIO_MaxSpeed = GPIO_MaxSpeed_10MHz;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
  OLED_BLK_Set();
}

图片的显示函数为:

void LCD_ShowPicturea(u16 x1,u16 y1,u16 x2,u16 y2)
{
           int i;
           LCD_Address_Set(x1,y1,x2,y2);
           for(i=0;i<12800;i++)
           {
                  LCD_WR_DATA8(gImage_moled[i*2]);
                  LCD_WR_DATA8(gImage_moled[i*2+1]);
           }
}

 

实现显示效果的主程序为:

int main(void)  //OLED 0.96 CORLOR
{
         uint8_t i;
         AT32_Board_Init();
         AT32_OLED_Init();
         OLED_Init();
         Delay_ms(200);
         LCD_Clear(BLACK);
         BACK_COLOR=BLACK;
         LCD_ShowString(10,0,"AT32F403A TEST",RED);
         LCD_ShowString(10,20,"OLED Display",RED);
         LCD_ShowString(10,40,"jinglixixi",RED);
         LCD_ShowString(10,60,"2020.10.5",RED);
         Delay_ms(2000);
         LCD_Clear(BLACK);
         LCD_ShowChinese(28,0,0,32,YELLOW);
         LCD_ShowChinese(60,0,1,32,YELLOW);
         LCD_ShowChinese(92,0,2,32,YELLOW);
         LCD_ShowChinese(20,40,0,16,YELLOW);
         LCD_ShowChinese(36,40,1,16,YELLOW);
         LCD_ShowChinese(52,40,2,16,YELLOW);
         LCD_ShowChinese(68,40,3,16,YELLOW);
         LCD_ShowChinese(84,40,4,16,YELLOW);
         LCD_ShowChinese(100,40,5,16,YELLOW);
         LCD_ShowChinese(116,40,6,16,YELLOW);
         LCD_ShowString(20,60,"0.96 TFT SPI",YELLOW);
         Delay_ms(2000);
         LCD_Clear(BLACK);
         LCD_ShowString(10,0,"LCD_W:",RED);
         LCD_ShowNum(70,0,LCD_W,3,RED);
         LCD_ShowString(10,20,"LCD_H:",RED); 
         LCD_ShowNum(70,20,LCD_H,2,RED);
         for(i=0;i<4;i++)
         {
                 LCD_ShowPicture(i*40,40,39+i*40,79);
         }
         Delay_ms(2000);
         LCD_ShowPicturea(0,0,159,79);
         while(1);
}

编译下载后,所显示的效果如图2~图5所示,怎么样存储资源少的芯片是不敢轻易来直接用数组存放图片数据的。

image-20201009003640-3.png

图2 字符串显示

 

image-20201009003640-4.png

图3 中文显示

 

image-20201009003640-5.png

图4 图标显示

 

image-20201009003640-6.png

图5 图片显示

回复评论 (3)

不点屏确实浪费。

点赞  2020-10-9 09:18
引用: damiaa 发表于 2020-10-9 09:18 不点屏确实浪费。

点赞  2020-10-9 13:23

雅特力AT-START-F403A测评汇总

https://bbs.eeworld.com.cn/thread-1143018-1-1.html

玩板看这里: https://bbs.eeworld.com.cn/elecplay.html EEWorld测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现!
点赞  2020-10-9 15:05
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复