查看: 6642|回复: 3

[原创] 【我要创作】基于KL26Z的双色OLED屏信息显示

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

    连续签到: 1 天

    [LV.10]以坛为家III

    175

    主题

    2843

    帖子

    34

    金牌会员

    Rank: 6Rank: 6

    积分
    7124
    最后登录
    2023-4-20
    发表于 2017-3-10 17:03:08 | 显示全部楼层 |阅读模式
        OLED屏是一种基于有机发光二极管(Organic Light-Emitting Diode的显示器件,由于具备自发光,需背光、对比度高、厚度薄、视角广、反应速度快等优异特性,被认为是下一代的平面显示器新兴应用技术。
    OLED有单色和双色两种类型可选,其中单色为纯蓝色,而双色则为黄蓝两种颜色尺寸其显示尺寸为0.96寸,分辨率为128*64
    在接口方式方面它有两种接口方式,即SPI接口方式和IIC接口方式为了节省GPIO口的占用,本人选择的是IIC接口方式。在电源方面,该显示器件是直接使用3.3V工作电压
    为实现显示功能,该OLED屏与KL26Z开发板的连接方式如图1所示,其中SCL和SDA引脚分布与PB2和PB3相连
    图片3.png
    1 OLED屏连接方式

    为使OLED屏能正常工作,输出高低电平的定义语句如下:
        #define  OLED_SCLK_Clr() FGPIOB_PCOR |= 1<<2
        #define  OLED_SCLK_Set() FGPIOB_PSOR |= 1<<2        
        #define  OLED_SDIN_Clr() FGPIOB_PCOR |= 1<<3
    #define  OLED_SDIN_Set() FGPIOB_PSOR |= 1<<3
    相应的初始化函数为:
    1. void OLED_Init(void)
    2. {        
    3.         SIM_SCGC5 |= SIM_SCGC5_PORTB_MASK;   
    4.           PORTB_PCR2  |= PORT_PCR_MUX(1);
    5.         PORTB_PCR3  |= PORT_PCR_MUX(1);
    6.           GPIOB_PDDR  |= 1<<2;
    7.     GPIOB_PDDR  |= 1<<3;
    8.         delay_ms(800);  
    9.     OLED_WR_Byte(0xAE,OLED_CMD);//--display off
    10.         OLED_WR_Byte(0x00,OLED_CMD);//---set low column address
    11.         OLED_WR_Byte(0x10,OLED_CMD);//---set high column address
    12.         OLED_WR_Byte(0x40,OLED_CMD);//--set start line address  
    13.         OLED_WR_Byte(0xB0,OLED_CMD);//--set page address
    14.         OLED_WR_Byte(0x81,OLED_CMD); // contract control
    15.         OLED_WR_Byte(0xFF,OLED_CMD);//--128   
    16.         OLED_WR_Byte(0xA1,OLED_CMD);//set segment remap
    17.         OLED_WR_Byte(0xA6,OLED_CMD);//--normal / reverse
    18.         OLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64)
    19.         OLED_WR_Byte(0x3F,OLED_CMD);//--1/32 duty
    20.         OLED_WR_Byte(0xC8,OLED_CMD);//Com scan direction
    21.         OLED_WR_Byte(0xD3,OLED_CMD);//-set display offset
    22.         OLED_WR_Byte(0x00,OLED_CMD);//
    23.         OLED_WR_Byte(0xD5,OLED_CMD);//set osc division
    24.         OLED_WR_Byte(0x80,OLED_CMD);//
    25.         OLED_WR_Byte(0xD8,OLED_CMD);//set area color mode off
    26.         OLED_WR_Byte(0x05,OLED_CMD);//
    27.         OLED_WR_Byte(0xD9,OLED_CMD);//Set Pre-Charge Period
    28.         OLED_WR_Byte(0xF1,OLED_CMD);//
    29.         OLED_WR_Byte(0xDA,OLED_CMD);//set com pin configuartion
    30.         OLED_WR_Byte(0x12,OLED_CMD);//
    31.         OLED_WR_Byte(0xDB,OLED_CMD);//set Vcomh
    32.         OLED_WR_Byte(0x30,OLED_CMD);//
    33.         OLED_WR_Byte(0x8D,OLED_CMD);//set charge pump enable
    34.         OLED_WR_Byte(0x14,OLED_CMD);//
    35.         OLED_WR_Byte(0xAF,OLED_CMD);//--turn on oled panel
    36. }
    复制代码
    此外,所涉及的函数有:
    void IIC_Start(void);      //  启动函数
    void IIC_Stop(void);      //  停止函数
    void Write_IIC_Command(unsigned char IIC_Command);     //  指令发送函数
    void Write_IIC_Data(unsigned char IIC_Data);              //  数据发送函数
    void Write_IIC_Byte(unsigned char IIC_Byte);              //  字节发送函数   
    void IIC_Wait_Ack(void);  //  等待应答函数
    相应的内容如下:
    1. void IIC_Start(void)
    2. {
    3.         OLED_SCLK_Set();
    4.         OLED_SDIN_Set();
    5.         OLED_SDIN_Clr();
    6.         OLED_SCLK_Clr();
    7. }

    8. void IIC_Stop(void)
    9. {
    10.     OLED_SCLK_Set() ;
    11.         OLED_SDIN_Clr();
    12.         OLED_SDIN_Set();
    13. }

    14. void IIC_Wait_Ack(void)
    15. {
    16.         OLED_SCLK_Set() ;
    17.         OLED_SCLK_Clr();
    18. }

    19. void Write_IIC_Byte(unsigned char IIC_Byte)
    20. {
    21.         unsigned char i;
    22.         unsigned char m,da;
    23.         da=IIC_Byte;
    24.         OLED_SCLK_Clr();
    25.         for(i=0;i<8;i++)               
    26.         {
    27.                 m=da;
    28.                 m=m&0x80;
    29.                 if(m==0x80)
    30.                 {OLED_SDIN_Set();}
    31.                 else OLED_SDIN_Clr();
    32.                 da=da<<1;
    33.                 OLED_SCLK_Set();
    34.                 OLED_SCLK_Clr();
    35.         }
    36. }

    37. void Write_IIC_Command(unsigned char IIC_Command)
    38. {
    39.    IIC_Start();
    40.    Write_IIC_Byte(0x78);      //Slave address,SA0=0
    41.    IIC_Wait_Ack();       
    42.    Write_IIC_Byte(0x00);                        //write command
    43.    IIC_Wait_Ack();       
    44.    Write_IIC_Byte(IIC_Command);
    45.    IIC_Wait_Ack();       
    46.    IIC_Stop();
    47. }

    48. void Write_IIC_Data(unsigned char IIC_Data)
    49. {
    50.    IIC_Start();
    51.    Write_IIC_Byte(0x78);                        //D/C#=0; R/W#=0
    52.    IIC_Wait_Ack();       
    53.    Write_IIC_Byte(0x40);                        //write data
    54.    IIC_Wait_Ack();       
    55.    Write_IIC_Byte(IIC_Data);
    56.    IIC_Wait_Ack();       
    57.    IIC_Stop();
    58. }

    59. void OLED_WR_Byte(unsigned dat,unsigned cmd)
    60. {
    61.          if(cmd)
    62.          {
    63.      Write_IIC_Data(dat);
    64.          }
    65.          else
    66.          {
    67.      Write_IIC_Command(dat);
    68.          }
    69. }
    复制代码
    显示字符与图像的主函数如下:
    1. //0.96’ IIC_OLED屏显示
    2. #include "includes.h"
    3. #include "bmp.h"
    4. #include "oled.h"
    5. int  main (void)
    6. {
    7.         INT8U t = 0;
    8.         SystemCoreClockUpdate();           
    9.                 OLED_Init();                         
    10.                 OLED_Clear() ;
    11.                 t=' ';
    12.                 OLED_ShowCHinese(0,0,0);  
    13.                 OLED_ShowCHinese(18,0,1);
    14.                 OLED_ShowCHinese(36,0,2);
    15.                 OLED_ShowCHinese(54,0,3);
    16.                 OLED_ShowCHinese(72,0,4);
    17.                 OLED_ShowCHinese(90,0,5);
    18.                 OLED_ShowCHinese(108,0,6);
    19.             Delay_50ms(1000);
    20.         Delay_50ms(1000);
    21.             Delay_50ms(1000);
    22.             Delay_50ms(1000);
    23.                 Delay_50ms(1000);
    24.         Delay_50ms(1000);
    25.             Delay_50ms(1000);
    26.             Delay_50ms(1000);
    27.             OLED_Clear();
    28.             while(t<'~')
    29.             {               
    30.                 OLED_ShowString(6,0,"0.96' OLED TEST",16);
    31.                 OLED_ShowString(8,2,"ZHONGJINGYUAN",16);  
    32.             OLED_ShowString(20,4,"2014/05/01",16);  
    33.                 OLED_ShowString(0,6,"ASCII:",16);  
    34.                 OLED_ShowString(63,6,"CODE:",16);  
    35.                 OLED_ShowChar(48,6,t,16);     //ASCII          
    36.                 t++;
    37.                 OLED_ShowNum(103,6,t,3,16);   //ASCII        
    38.                 delay_ms(1000);
    39.         delay_ms(1000);
    40.             }       
    41.                 OLED_DrawBMP(0,0,128,8,BMP1);  
    42.                 delay_ms(1000);
    43.         delay_ms(1000);
    44.             while(1);
    45. }
    复制代码
    OLED屏所显示的图像效果如图2所示。
    图片4.png
    2 图像显示效果


    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-9-15 08:42
  • 签到天数: 1952 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    1

    主题

    4686

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    9405
    最后登录
    2023-9-15
    发表于 2017-3-10 22:27:36 | 显示全部楼层
    学习啦!
    今天天气不错!签到!
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-24 08:30
  • 签到天数: 50 天

    连续签到: 1 天

    [LV.5]常住居民I

    22

    主题

    817

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1713
    最后登录
    2019-12-7
    发表于 2017-3-11 13:03:38 | 显示全部楼层
    谢谢分享   
    回复 支持 反对

    使用道具 举报

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

    连续签到: 1 天

    [LV.10]以坛为家III

    175

    主题

    2843

    帖子

    34

    金牌会员

    Rank: 6Rank: 6

    积分
    7124
    最后登录
    2023-4-20
     楼主| 发表于 2017-3-11 16:56:53 | 显示全部楼层

    感谢支持!!!
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-8-21 08:43 , Processed in 0.088862 second(s), 23 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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