查看: 3740|回复: 4

【RT1052】基于SPI接口的OLED屏显示

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

    [LV.10]以坛为家III

    175

    主题

    2843

    帖子

    34

    金牌会员

    Rank: 6Rank: 6

    积分
    7092
    最后登录
    2023-4-20
    发表于 2018-11-8 10:10:07 | 显示全部楼层 |阅读模式
        前面介绍了I2C接口OLED屏的使用方法,这里再介绍一下SPI接口的OLED屏用法,当然使用的还是键盘端口(KPP)。
        OLED屏与RT1052的连接关系如下:
        CS  --P1.24
        DC  --P1.26
        RST --P1.28
        DIN --P1.27  D1   
        SCLK--P1.25  D0
        使个引脚输出高低电平的定义如下:
    #define OLED_CS_Clr()       GPIO_PinWrite(GPIO1, (24U), 0U);
    #define OLED_CS_Set()       GPIO_PinWrite(GPIO1, (24U), 1U);
    #define OLED_DC_Clr()       GPIO_PinWrite(GPIO1, (26U), 0U);
    #define OLED_DC_Set()       GPIO_PinWrite(GPIO1, (26U), 1U);
    #define OLED_RST_Clr()     GPIO_PinWrite(GPIO1, (28U), 0U);
    #define OLED_RST_Set()      GPIO_PinWrite(GPIO1, (28U), 1U);
    #define OLED_SDIN_Clr()    GPIO_PinWrite(GPIO1, (27U), 0U);
    #define OLED_SDIN_Set()     GPIO_PinWrite(GPIO1, (27U), 1U);
    #define OLED_SCLK_Clr()    GPIO_PinWrite(GPIO1, (25U), 0U);
    #define OLED_SCLK_Set()     GPIO_PinWrite(GPIO1, (25U), 1U);
        配置各引脚为输出端口的函数为:
    void LCD_GPIO_Cogfig(void)
    {
        gpio_pin_config_t led_config ={kGPIO_DigitalOutput, 0, kGPIO_NoIntmode};
        GPIO_PinInit(GPIO1, (25U),&led_config);
        GPIO_PinInit(GPIO1, (27U),&led_config);
        GPIO_PinInit(GPIO1, (24U),&led_config);
        GPIO_PinInit(GPIO1, (26U),&led_config);
        GPIO_PinInit(GPIO1, (28U),&led_config);
        GPIO_PinInit(GPIO1, (30U),&led_config);
        GPIO_PinInit(GPIO1, (31U),&led_config);
    }

    该OLED屏的初始化函数为:
    void OLED_Init(void)
    {
        LCD_GPIO_Cogfig();
        OLED_RST_Set();
        delay_ms(100);
        OLED_RST_Clr();
        delay_ms(100);
        OLED_RST_Set();
        OLED_WR_Byte(0xAE,OLED_CMD);//--turnoff oled panel
        OLED_WR_Byte(0x00,OLED_CMD);//---setlow column address
        OLED_WR_Byte(0x10,OLED_CMD);//---sethigh column address
        OLED_WR_Byte(0x40,OLED_CMD);//--setstart line address  Set Mapping RAM   
        OLED_WR_Byte(0x81,OLED_CMD);//--set contrastcontrol register
        OLED_WR_Byte(0xCF,OLED_CMD); //Set SEG Output Current Brightness
        OLED_WR_Byte(0xA1,OLED_CMD);//--SetSEG/Column Mapping
        OLED_WR_Byte(0xC8,OLED_CMD);//SetCOM/Row Scan Direction
        OLED_WR_Byte(0xA6,OLED_CMD);//--setnormal display
        OLED_WR_Byte(0xA8,OLED_CMD);//--setmultiplex ratio(1 to 64)
        OLED_WR_Byte(0x3f,OLED_CMD);//--1/64duty
        OLED_WR_Byte(0xD3,OLED_CMD);//-setdisplay offset
        OLED_WR_Byte(0x00,OLED_CMD);//-notoffset
        OLED_WR_Byte(0xd5,OLED_CMD);//--setdisplay clock divide ratio/oscillator frequency
        OLED_WR_Byte(0x80,OLED_CMD);//--setdivide ratio, Set Clock as 100 Frames/Sec
        OLED_WR_Byte(0xD9,OLED_CMD);//--setpre-charge period
        OLED_WR_Byte(0xF1,OLED_CMD);//SetPre-Charge as 15 Clocks & Discharge as 1 Clock
        OLED_WR_Byte(0xDA,OLED_CMD);//--setcom pins hardware configuration
        OLED_WR_Byte(0x12,OLED_CMD);
        OLED_WR_Byte(0xDB,OLED_CMD);//--setvcomh
        OLED_WR_Byte(0x40,OLED_CMD);//SetVCOM Deselect Level
        OLED_WR_Byte(0x20,OLED_CMD);//-SetPage Addressing Mode (0x00/0x01/0x02)
        OLED_WR_Byte(0x02,OLED_CMD);//
        OLED_WR_Byte(0x8D,OLED_CMD);//--setCharge Pump enable/disable
        OLED_WR_Byte(0x14,OLED_CMD);//--set(0x10)disable
        OLED_WR_Byte(0xA4,OLED_CMD);//Disable Entire Display On (0xa4/0xa5)
        OLED_WR_Byte(0xA6,OLED_CMD);//Disable Inverse Display On (0xa6/a7)
        OLED_WR_Byte(0xAF,OLED_CMD);//--turnon oled panel
        OLED_WR_Byte(0xAF,OLED_CMD);/*display ON*/
        OLED_Clear();
        OLED_Set_Pos(0,0);  
    }

    snap.jpg
    SPI 接口OLED屏显示效果

    实现图示效果的主程序为:
    int main(void)
    {
        uint16_t i=0;
        gpio_pin_config_t led_config ={kGPIO_DigitalOutput, 0, kGPIO_NoIntmode};
        BOARD_ConfigMPU();
        BOARD_InitPins();
        BOARD_BootClockRUN();
        BOARD_InitDebugConsole();
        GPIO_PinInit(EXAMPLE_LED_GPIO,EXAMPLE_LED_GPIO_PIN, &led_config);
        delay();
        OLED_Init();
        OLED_Clear();
        OLED_ShowString(8,0,"OK1052-C");
        OLED_ShowString(8,2,"OLEDTEST");
        OLED_ShowString(8,4,"JINGLIXIXI");  
        OLED_ShowString(8,6,"2018/11/8");
        while(1);
    }

    回复

    使用道具 举报

  • TA的每日心情

    2021-2-4 09:24
  • 签到天数: 190 天

    [LV.7]常住居民III

    38

    主题

    591

    帖子

    28

    金牌会员

    Rank: 6Rank: 6

    积分
    2193
    最后登录
    2023-12-1
    发表于 2018-11-8 10:10:54 | 显示全部楼层
    前排学习
    哎...今天够累的,签到来了~
    回复

    使用道具 举报

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

    [LV.10]以坛为家III

    175

    主题

    2843

    帖子

    34

    金牌会员

    Rank: 6Rank: 6

    积分
    7092
    最后登录
    2023-4-20
     楼主| 发表于 2018-11-8 10:14:08 | 显示全部楼层

    哈哈,还是羡慕你那块屏。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-26 15:16
  • 签到天数: 266 天

    [LV.8]以坛为家I

    3300

    主题

    6547

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    32032
    最后登录
    2024-4-26
    发表于 2018-11-8 10:29:35 | 显示全部楼层
    看看,谢谢楼主的分享
    签到签到
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    昨天 15:22
  • 签到天数: 820 天

    [LV.10]以坛为家III

    71

    主题

    2446

    帖子

    24

    金牌会员

    Rank: 6Rank: 6

    积分
    5519
    最后登录
    2024-4-26
    发表于 2018-11-8 10:56:38 | 显示全部楼层
    谢谢分享
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2024-4-27 12:40 , Processed in 0.124892 second(s), 23 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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