查看: 1044|回复: 0

[评测分享] 【NXP OKdo E1双核Cortex M33开发板】测评+ 彩色OLED屏显示驱动

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

    连续签到: 1 天

    [LV.Master]伴坛终老

    发表于 2020-11-27 20:42:03 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 jinglixixi 于 2020-11-27 20:46 编辑

    前面介绍了双色OLED屏的显示,那OKdo E1开发板是否能驱动彩色OLED屏呢?
    答案是肯定的,其显示效果见图1~图3所示。
    1.jpg
    1

    2.jpg
    2

    3.jpg
    3

    有别于I2C接口的双色屏,彩色屏所采用的接口是SPI,故要比双色屏占用更多的I/O口。
    那使用哪些引脚呢?
    这里OLED屏与MCU的连接关系为:
    SCLK--P0.7
    DIN --P1.0
    RST --P0.15
    DC  --P1.5
    CS  --P1.8
    BLK --P0.0
    定义相关引脚输出高低电平的语句为:
    #defineOLED_SCLK_Clr()  GPIO_PinWrite(GPIO, 0u,7u, 0)  //CLK
    #defineOLED_SCLK_Set()  GPIO_PinWrite(GPIO, 0u,7u, 1)

    #defineOLED_SDIN_Clr()  GPIO_PinWrite(GPIO, 1u,0u, 0)  //DIN
    #defineOLED_SDIN_Set()  GPIO_PinWrite(GPIO, 1u,0u, 1)

    #defineOLED_RST_Clr()  GPIO_PinWrite(GPIO, 0u,15u, 0)  //RES
    #defineOLED_RST_Set()  GPIO_PinWrite(GPIO, 0u,15u, 1)

    #defineOLED_DC_Clr()   GPIO_PinWrite(GPIO, 1u,5u, 0)  //DC
    #defineOLED_DC_Set()   GPIO_PinWrite(GPIO, 1u,5u, 1)

    #defineOLED_CS_Clr()   GPIO_PinWrite(GPIO, 1u,8u, 0)  //CS
    #defineOLED_CS_Set()   GPIO_PinWrite(GPIO, 1u,8u, 1)

    #defineOLED_BLK_Clr()  GPIO_PinWrite(GPIO, 0u,0u, 0)  //BLK
    #defineOLED_BLK_Set()  GPIO_PinWrite(GPIO, 0u,0u, 1)
    配置引脚为输出功能的函数为:
    1. void app_oled_init(void)
    2. {
    3. gpio_pin_config_t   gpioPinConfig;
    4. gpioPinConfig.pinDirection = kGPIO_DigitalOutput;
    5. gpioPinConfig.outputLogic  = 1u;
    6. GPIO_PinInit (GPIO, 0u, 7u, &gpioPinConfig);
    7. GPIO_PinInit (GPIO, 1u, 0u, &gpioPinConfig);
    8. GPIO_PinInit (GPIO, 0u, 15u, &gpioPinConfig);
    9. GPIO_PinInit (GPIO, 1u, 5u, &gpioPinConfig);
    10. GPIO_PinInit (GPIO, 0u, 0u, &gpioPinConfig);
    11. GPIO_PinInit (GPIO, 1u, 8u, &gpioPinConfig);
    12. OLED_BLK_Set();
    13. }
    复制代码

    实现图片显示的函数为:
    1. void LCD_ShowPicturea(u16 x1,u16 y1,u16 x2,u16 y2)
    2. {
    3. int i;
    4. LCD_Address_Set(x1,y1,x2,y2);
    5. for(i=0;i<12800;i++)
    6. {
    7. LCD_WR_DATA8(gImage_moled[i*2]);
    8. LCD_WR_DATA8(gImage_moled[i*2+1]);
    9. }
    10. }
    复制代码

    实现图示效果的主程序为:
    1. int main(void)
    2. {
    3. uint8_t  num,vol=10;
    4. uint16_t  i,j,k;
    5. volatile uint8_t s_KeyValue = 0;
    6. POWER_SetBodVbatLevel(kPOWER_BodVbatLevel1650mv, kPOWER_BodHystLevel50mv, false);
    7. BOARD_BootClockFROHF96M();
    8. CLOCK_EnableClock(kCLOCK_Iocon);
    9. IOCON->PIO[1][24] = (IOCON_FUNC1 | IOCON_MODE_INACT  | IOCON_DIGITAL_EN );
    10. IOCON->PIO[0][27] = (IOCON_FUNC1 | IOCON_MODE_INACT  | IOCON_DIGITAL_EN );
    11. CLOCK_DisableClock(kCLOCK_Iocon);
    12. usart_config_t      s_UARTConfig;
    13. CLOCK_AttachClk(kFRO12M_to_FLEXCOMM2);
    14. USART_GetDefaultConfig(&s_UARTConfig);
    15. s_UARTConfig.baudRate_Bps = 9600;
    16. s_UARTConfig.enableTx = true;
    17. s_UARTConfig.enableRx = false;
    18. USART_Init(USART2, &s_UARTConfig, 12000000);
    19. USART_WriteBlocking(USART2, cmd, 10);
    20. SystemCoreClockUpdate();
    21. if (SysTick_Config(SystemCoreClock / 1000U))
    22. {
    23. while (1)
    24. {
    25. }
    26. }
    27. key_init();
    28. app_oled_init();
    29. Lcd_Init();
    30. LCD_Clear(BLACK);
    31. BACK_COLOR=BLACK;
    32. LCD_ShowChinese(28,0,0,32,YELLOW);
    33. LCD_ShowChinese(60,0,1,32,YELLOW);
    34. LCD_ShowChinese(92,0,2,32,YELLOW);
    35. LCD_ShowChinese(20,40,0,16,YELLOW);
    36. LCD_ShowChinese(36,40,1,16,YELLOW);
    37. LCD_ShowChinese(52,40,2,16,YELLOW);
    38. LCD_ShowChinese(68,40,3,16,YELLOW);
    39. LCD_ShowChinese(84,40,4,16,YELLOW);
    40. LCD_ShowChinese(100,40,5,16,YELLOW);
    41. LCD_ShowChinese(116,40,6,16,YELLOW);
    42. LCD_ShowString(0,60,"   0.96 TFT SPI",YELLOW);
    43. while(key_read()!= KEY3_NUM);
    44. LCD_Clear(BLACK);
    45. LCD_ShowString(10,0,"LCD_W:",RED);      
    46. LCD_ShowNum(70,0,LCD_W,3,RED);
    47. LCD_ShowString(10,20,"LCD_H:",RED);
    48. LCD_ShowNum(70,20,LCD_H,2,RED);
    49. for(i=0;i<4;i++)
    50. {
    51. LCD_ShowPicture(i*40,40,39+i*40,79);
    52. }
    53. while(key_read()!= KEY3_NUM);
    54. LCD_ShowPicturea(0,0,159,79);
    55. while(1);
    56. }
    复制代码


    回复

    使用道具 举报

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

    本版积分规则

    关闭

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

    手机版|小黑屋|与非网

    GMT+8, 2024-11-27 08:40 , Processed in 0.120905 second(s), 17 queries , MemCache On.

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

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.