查看: 2822|回复: 5

【RT1052】OLED屏显示功能的实现

[复制链接]
  • TA的每日心情
    奋斗
    2023-2-15 00:12
  • 签到天数: 969 天

    [LV.10]以坛为家III

    175

    主题

    2843

    帖子

    34

    金牌会员

    Rank: 6Rank: 6

    积分
    7090
    最后登录
    2023-4-20
    发表于 2018-11-7 20:42:49 | 显示全部楼层 |阅读模式
           RT1052开发板是一款面向中高档应用的产品,因而其配置的显示的显示器件也为触摸屏。这样就使得它留给使用者的扩展端口比较少,要想自行扩展就主要向矩阵键盘接口KEY PAD着手了
           为了给其配置一个必要的显示窗口,本人所选的显示器件是I2C接口的OLED屏,它只需占用2个GPIO口即可使用。为达到图1的显示效果,OLED屏使用的是P24中的引脚1和3,所使用的是GPIO1_IO25和GPIO1_IO27。
    1.jpg
    OLED屏显示效果
    2.jpg

          为使SCLK和SDIN引脚输出高低电平,其定义引脚如下:
    #define  OLED_SCLK_Set()  GPIO_PinWrite(GPIO1, (25U), 1U);   
    #define  OLED_SCLK_Clr()  GPIO_PinWrite(GPIO1, (25U), 0U);
    #define  OLED_SDIN_Set()  GPIO_PinWrite(GPIO1, (27U), 1U);   
    #define  OLED_SDIN_Clr()  GPIO_PinWrite(GPIO1, (27U), 0U);
         配置GPIO1_IO25和GPIO1_IO27为输出端口的函数为:
    1. void LCD_GPIO_Cogfig(void)
    2. {
    3.         gpio_pin_config_t led_config = {kGPIO_DigitalOutput, 0, kGPIO_NoIntmode};
    4.         GPIO_PinInit(GPIO1, (25U), &led_config);
    5.         GPIO_PinInit(GPIO1, (27U), &led_config);
    6. }
    复制代码


          OLED屏的初始化函数为:
    1. void OLED_Init(void)
    2. {
    3.         LCD_GPIO_Cogfig();
    4.         OLED_SCLK_Set();
    5.         OLED_SDIN_Set();
    6.         delay_ms(800);
    7.         OLED_WR_Byte(0xAE,OLED_CMD);//--display off
    8.         OLED_WR_Byte(0x00,OLED_CMD);//---set low column address
    9.         OLED_WR_Byte(0x10,OLED_CMD);//---set high column address
    10.         OLED_WR_Byte(0x40,OLED_CMD);//--set start line address  
    11.         OLED_WR_Byte(0xB0,OLED_CMD);//--set page address
    12.         OLED_WR_Byte(0x81,OLED_CMD); // contract control
    13.         OLED_WR_Byte(0xFF,OLED_CMD);//--128   
    14.         OLED_WR_Byte(0xA1,OLED_CMD);//set segment remap
    15.         OLED_WR_Byte(0xA6,OLED_CMD);//--normal / reverse
    16.         OLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64)
    17.         OLED_WR_Byte(0x3F,OLED_CMD);//--1/32 duty
    18.         OLED_WR_Byte(0xC8,OLED_CMD);//Com scan direction
    19.         OLED_WR_Byte(0xD3,OLED_CMD);//-set display offset
    20.         OLED_WR_Byte(0x00,OLED_CMD);//
    21.         
    22.         OLED_WR_Byte(0xD5,OLED_CMD);//set osc division
    23.         OLED_WR_Byte(0x80,OLED_CMD);//
    24.         
    25.         OLED_WR_Byte(0xD8,OLED_CMD);//set area color mode off
    26.         OLED_WR_Byte(0x05,OLED_CMD);//
    27.         
    28.         OLED_WR_Byte(0xD9,OLED_CMD);//Set Pre-Charge Period
    29.         OLED_WR_Byte(0xF1,OLED_CMD);//
    30.         
    31.         OLED_WR_Byte(0xDA,OLED_CMD);//set com pin configuartion
    32.         OLED_WR_Byte(0x12,OLED_CMD);//
    33.         
    34.         OLED_WR_Byte(0xDB,OLED_CMD);//set Vcomh
    35.         OLED_WR_Byte(0x30,OLED_CMD);//
    36.         
    37.         OLED_WR_Byte(0x8D,OLED_CMD);//set charge pump enable
    38.         OLED_WR_Byte(0x14,OLED_CMD);//
    39.         
    40.         OLED_WR_Byte(0xAF,OLED_CMD);//--turn on oled panel
    41. }
    复制代码


         实现图1所示效果的主程序为:
    1. int main(void)
    2. {
    3.     uint16_t i=0;
    4.     gpio_pin_config_t led_config = {kGPIO_DigitalOutput, 0, kGPIO_NoIntmode};
    5.     BOARD_ConfigMPU();
    6.     BOARD_InitPins();
    7.     BOARD_BootClockRUN();
    8.     BOARD_InitDebugConsole();
    9.     /* Print a note to terminal. */
    10.     PRINTF("\r\n OLED 屏驱动测试\r\n");
    11.     GPIO_PinInit(EXAMPLE_LED_GPIO, EXAMPLE_LED_GPIO_PIN, &led_config);
    12.     OLED_Init();
    13.     OLED_Clear();
    14.     OLED_ShowString(0,2,"OK1052-C",12);
    15.     OLED_ShowString(0,4,"0.96' OLED TEST",12);
    16.     OLED_ShowString(0,6,"JLXX 2018/10/6",12);
    17.     while(1)
    18.     {
    19.         delay();
    20.         if (g_pinSet)
    21.         {
    22.             GPIO_PinWrite(EXAMPLE_LED_GPIO, EXAMPLE_LED_GPIO_PIN, 0U);
    23.             g_pinSet = false;
    24.         }
    25.         else
    26.         {
    27.             GPIO_PinWrite(EXAMPLE_LED_GPIO, EXAMPLE_LED_GPIO_PIN, 1U);
    28.             g_pinSet = true;
    29.         }
    30.     }
    31. }
    复制代码

          有了OLED屏这个显示串口,我们在观察运行结果就可以不完全依赖调试串口了。
    回复

    使用道具 举报

  • TA的每日心情
    郁闷
    2018-11-9 13:32
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    1

    主题

    35

    帖子

    1

    注册会员

    Rank: 2

    积分
    54
    最后登录
    2018-11-9
    发表于 2018-11-7 21:42:22 | 显示全部楼层
    不错哦,顶你一下
    加油吖加油
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    2018-11-9 13:32
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    1

    主题

    35

    帖子

    1

    注册会员

    Rank: 2

    积分
    54
    最后登录
    2018-11-9
    发表于 2018-11-7 21:42:38 | 显示全部楼层
    这个板子好用吗?
    加油吖加油
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-2-15 00:12
  • 签到天数: 969 天

    [LV.10]以坛为家III

    175

    主题

    2843

    帖子

    34

    金牌会员

    Rank: 6Rank: 6

    积分
    7090
    最后登录
    2023-4-20
     楼主| 发表于 2018-11-8 09:41:14 | 显示全部楼层
    mrwang80 发表于 2018-11-7 21:42
    这个板子好用吗?

    好可以,就是供扩展的接口少了些,如果配一块将显示接口转接为批准的插排的接口就更好了!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-4-10 22:38
  • 签到天数: 1335 天

    [LV.10]以坛为家III

    88

    主题

    4292

    帖子

    12

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    9049
    最后登录
    2024-4-13
    发表于 2018-11-8 09:57:51 | 显示全部楼层
    楼主这个想法真心棒啊~~
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-2-15 00:12
  • 签到天数: 969 天

    [LV.10]以坛为家III

    175

    主题

    2843

    帖子

    34

    金牌会员

    Rank: 6Rank: 6

    积分
    7090
    最后登录
    2023-4-20
     楼主| 发表于 2018-11-8 10:07:47 | 显示全部楼层
    jobszheng5 发表于 2018-11-8 09:57
    楼主这个想法真心棒啊~~

    多谢支持!
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-19 19:03 , Processed in 0.141928 second(s), 27 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表