查看: 3264|回复: 1

ART-Pi开发板驱动彩色OLED屏

[复制链接]
  • TA的每日心情
    奋斗
    2023-5-10 20:09
  • 签到天数: 1742 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    发表于 2020-12-11 21:30:35 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 jinglixixi 于 2020-12-11 22:20 编辑

    ART-Pi开发板在外设资源方面,尤其是人机交互方面急需补充,为此我们为它配置了一个彩色OLED屏来作为显示的窗口。
    该彩色OLED屏与MCU的连接关系为:
    SCLK---PH11
    SDA---PH12
    RST---PH13
    DC ---PH15
    CS ---PH7
    BLK ---PH9
    为便于进行快速的移植,这里采用I/O口模拟SPI通信的方式来进行驱动。
    在驱动时,相关引脚输出高低电平的引脚定义为:
    #define OLED_SCLK_Clr()HAL_GPIO_WritePin(GPIOH,GPIO_PIN_11,GPIO_PIN_RESET)//CLK
    #define OLED_SCLK_Set()HAL_GPIO_WritePin(GPIOH,GPIO_PIN_11,GPIO_PIN_SET)

    #define OLED_SDIN_Clr()HAL_GPIO_WritePin(GPIOH,GPIO_PIN_12,GPIO_PIN_RESET)//DIN
    #define OLED_SDIN_Set()HAL_GPIO_WritePin(GPIOH,GPIO_PIN_12,GPIO_PIN_SET)

    #define OLED_RST_Clr() HAL_GPIO_WritePin(GPIOH,GPIO_PIN_13,GPIO_PIN_RESET) //RES
    #define OLED_RST_Set()  HAL_GPIO_WritePin(GPIOH,GPIO_PIN_13,GPIO_PIN_SET)

    #define OLED_DC_Clr()  HAL_GPIO_WritePin(GPIOH,GPIO_PIN_15,GPIO_PIN_RESET) //DC
    #define OLED_DC_Set()  HAL_GPIO_WritePin(GPIOH,GPIO_PIN_15,GPIO_PIN_SET)

    #define OLED_CS_Clr()  HAL_GPIO_WritePin(GPIOH,GPIO_PIN_7,GPIO_PIN_RESET) //CS
    #define OLED_CS_Set()  HAL_GPIO_WritePin(GPIOH,GPIO_PIN_7,GPIO_PIN_SET)

    #define OLED_BLK_Clr() HAL_GPIO_WritePin(GPIOH,GPIO_PIN_9,GPIO_PIN_RESET) //BLK
    #define OLED_BLK_Set() HAL_GPIO_WritePin(GPIOH,GPIO_PIN_9,GPIO_PIN_SET)

    为使相关引脚配置为输出功能其功能函数为:
    1. void app_oled_init()
    2. {
    3. GPIO_InitTypeDef GPIO_Initure;
    4. __HAL_RCC_GPIOH_CLK_ENABLE();
    5. GPIO_Initure.Pin=GPIO_PIN_7|GPIO_PIN_9|GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_15;
    6. GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;
    7. GPIO_Initure.Speed=GPIO_SPEED_FREQ_LOW;
    8. HAL_GPIO_Init(GPIOH,&GPIO_Initure);
    9. }
    复制代码

    使OLED屏显示图1和图2显示效果的主程序为:
    1. int main(void)
    2. {
    3. u8 i;
    4. Cache_Enable();
    5. HAL_Init();
    6. Stm32_Clock_Init(160,5,2,4);
    7. delay_init(400);
    8. LED_Init();
    9. Lcd_Init();
    10. LCD_Clear(BLACK);
    11. BACK_COLOR=BLACK;
    12. LCD_ShowChinese(28,0,0,32,YELLOW);
    13. LCD_ShowChinese(60,0,1,32,YELLOW);
    14. LCD_ShowChinese(92,0,2,32,YELLOW);
    15. LCD_ShowChinese(20,40,0,16,YELLOW);
    16. LCD_ShowChinese(36,40,1,16,YELLOW);
    17. LCD_ShowChinese(52,40,2,16,YELLOW);
    18. LCD_ShowChinese(68,40,3,16,YELLOW);
    19. LCD_ShowChinese(84,40,4,16,YELLOW);
    20. LCD_ShowChinese(100,40,5,16,YELLOW);
    21. LCD_ShowChinese(116,40,6,16,YELLOW);
    22. LCD_ShowString(0,60,"0.96 TFT SPI",YELLOW);
    23. delay_ms(1000);
    24. LCD_Clear(BLACK);
    25. LCD_ShowString(10,0,"LCD_W:",RED);
    26. LCD_ShowNum(70,0,LCD_W,3,RED);
    27. LCD_ShowString(10,20,"LCD_H:",RED);
    28. LCD_ShowNum(70,20,LCD_H,2,RED);
    29. for(i=0;i<4;i++)
    30. {
    31. LCD_ShowPicture(i*40,40,39+i*40,79);
    32. }
    33. delay_ms(1000);
    34. while(1)
    35. {
    36. LED2(1);
    37. delay_ms(500);
    38. LED2(0);
    39. delay_ms(500);
    40. }
    41. }
    复制代码
    1.jpg
    图1 显示字符

    2.jpg
    图2 显示图案

    在完成了OLED屏的显示驱动后,再有显示的问题就无需完全依赖串口通信了,况且它的表现形式也是串口所无法替代的。

    点评

    cool  发表于 2020-12-18 14:33
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-5-21 03:31 , Processed in 0.113357 second(s), 17 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.