查看: 3034|回复: 0

[经验] 初玩GD32F207小红板那些事之平衡小车——OLED

[复制链接]
  • TA的每日心情
    开心
    2017-6-17 09:42
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2016-2-23 00:15:23 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 沙漠之风 于 2016-2-23 15:23 编辑

    今天和大家分享下基于小红板(GD32F207)送餐机器人的液晶显示部分,该部分中我将用到硬件SPI来驱动OLED。
    一、OLED
    OLED,既有机发光二极管(Organic Light-Emitting Diode),有称为有机电激光显示(Organic Electroluminesence Display, OELD)。OLED由于同时具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于绕曲性面板、使用温度范围广、构造及制程较简单等优异之特性,被认为是下一代的平面显示器新兴技术应用技术。
    LCD都需要背光源,而OLED不需要,因为它是自发光的。这样同样的显示,OLED效果要来得好一些。以目前的技术,OLED的尺寸还很难以大型化,但是分辨率确可以做到很高。我这次选用的OLED显示模块有以下特点:
    1、模块有单色和双色两种可选,单色威威纯蓝色,而双色则为黄蓝双色。
    2、尺寸小,显示尺寸为0.96寸,而模块的尺寸仅为27mm*26mm大小。
    3、高分辨率,该模块的分辨率为128*64。
    4、 多种接口方式,该模块提供了总共5种接口包括:6800、8080两种并行接口方式、3线或4线的串行SPI接口方式、IIC接口方式(只需要2跟线就可以控制OLED了!)。
    5、不需要高压,直接接3.3V 就可以工作了。
    这里要提醒大家的是,该模块不和5.0V接口兼容,所以请大家在使用的时候一定要小心,别直接接到5V的系统上面去,否则可能烧坏模块。以上5种模式通过模块的BS0~2设置,BS0~2的设置与模块接口模式的关系表如下
                                               OLED接口.png
    二、OLED四线串行(SPI)方式
       CS:OLED片选信号
     RST(RES):硬复位OLED
       DC:命令/数据标志(0,读写命令;1,读写数据)。
       SCLK:串行时钟线。在4线串行模式下,D0信号线作为串行时钟线SCLK.
       SDIN: 串行数据线。在4线串行模式下,D1信号线作为串行数据线SDIN。
       模块的D2需要悬空,其他引脚可以接到GND。在4线串行模式下,只能往模块写数据而不能读数据。
       在4线SPI模式下,每个数据长度均为8位,在SCLK的上升沿,数据从SDIN移入到SSD1306,并且是高位在前的。DC线还是用作命令/数据的标志线。在4线SPI模式下,写操作的时序下图。
                                            spi通讯.png
    三、代码部分
       1、 主程序部分我们初始了系统时钟,初始化了串口,LCD,然后在屏幕上显示四行文字。
    1.       int main(void)
    2. {
    3.                 SysTick_Configuration();
    4.                 USART1_GIPIO_CONFIG(115200);
    5.                 LCD_Init();
    6.         fd4[0]=electrect_V;
    7.     while (1)
    8.     {
    9.                         LCD_CLS();
    10.                 LCD_P16x16Ch(4,0,7,fd1);  //
    11.                 LCD_P8x16Str(8,2,"shamozhihuong");   
    12.                 LCD_P16x16Ch(12,4,4,fd2);
    13.                         itoa(electrect_V, dis_STR1, 10);//此处将数值转换成字符串
    14.                         LCD_P8x16Str(78,4,dis_STR1);
    15.                                 LCD_P8x16Str(96,4,"V");
    16.                 LCD_P6x8Str(12,7,"407550350@QQ.COM");
    17.                 Delay_1ms(3000);                            //延时

    18.     }
    19. }
    复制代码
    2、LCD初始程序
    1. /*********************12864初始化***********************/
    2. void LCD_Init(void)
    3. {
    4.         OLEO_Int();
    5.         OLED_RST_L;
    6.         Delay_1ms(1000);
    7.         OLED_RST_H;
    8.         //从上电到下面开始初始化要有足够的时间,即等待RC复位完毕

    9.     LCD_WrCmd(0xae);//--turn off oled panel

    10.     LCD_WrCmd(0xa8);//--set multiplex ratio(1 to 64)
    11.     LCD_WrCmd(0x3f);//--1/64 duty
    12.     LCD_WrCmd(0xd3);//-set display offset        Shift Mapping RAM Counter (0x00~0x3F)
    13.     LCD_WrCmd(0x00);//-not offset
    14.     LCD_WrCmd(0x40);//--set start line address  Set Mapping RAM Display Start Line (0x00~0x3F)
    15.     //LCD_WrCmd(0xa0);//--Set SEG/Column Mapping     0xa0左右反置 0xa1正常
    16.     //LCD_WrCmd(0xc0);//Set COM/Row Scan Direction   0xc0上下反置 0xc8正常

    17.                 LCD_WrCmd(0xa1);//--Set SEG/Column Mapping     0xa0左右反置 0xa1正常
    18.     LCD_WrCmd(0xc8);//Set COM/Row Scan Direction   0xc0上下反置 0xc8正常


    19.     LCD_WrCmd(0xda);//--set com pins hardware configuration
    20.     LCD_WrCmd(0x12);
    21.     LCD_WrCmd(0x81);//--set contrast control register
    22.     LCD_WrCmd(0xcf); // Set SEG Output Current Brightness
    23.     LCD_WrCmd(0xa4);// Disable Entire Display On (0xa4/0xa5)
    24.     LCD_WrCmd(0xa6);// Disable Inverse Display On (0xa6/a7)
    25.     LCD_WrCmd(0xd5);//--set display clock divide ratio/oscillator frequency
    26.     LCD_WrCmd(0x80);//--set divide ratio, Set Clock as 100 Frames/Sec
    27.     LCD_WrCmd(0x8d);//--set Charge Pump enable/disable
    28.     LCD_WrCmd(0x14);//--set(0x10) disable
    29.     LCD_WrCmd(0xaf);//--turn on oled panel

    30.     LCD_WrCmd(0xd9);//--set pre-charge period
    31.     LCD_WrCmd(0xf8);//Set Pre-Charge as 15 Clocks & Discharge as 1 Clock

    32.     LCD_WrCmd(0xdb);//--set vcomh
    33.     LCD_WrCmd(0x40);//Set VCOM Deselect Level                                       
    34. }
    复制代码
    3、主意部分(整形数据转换成字符串数据)
    1. /******************************************************
    2.                 整形数据转字符串函数
    3.         char *itoa(int value, char *string, int radix)
    4.                 radix=10 标示是10进制        非十进制,转换结果为0;  

    5.             例:d=-379;
    6.                 执行        itoa(d, buf, 10); 后
    7.                
    8.                 buf="-379"                                                                                     
    9. **********************************************************/
    10. char *itoa(int value, char *string, int radix)
    11. {
    12.     int     i, d;
    13.     int     flag = 0;
    14.     char    *ptr = string;

    15.     /* This implementation only works for decimal numbers. */
    16.     if (radix != 10)
    17.     {
    18.         *ptr = 0;
    19.         return string;
    20.     }

    21.     if (!value)
    22.     {
    23.         *ptr++ = 0x30;
    24.         *ptr = 0;
    25.         return string;
    26.     }

    27.     /* if this is a negative value insert the minus sign. */
    28.     if (value < 0)
    29.     {
    30.         *ptr++ = '-';

    31.         /* Make the value positive. */
    32.         value *= -1;
    33.     }

    34.     for (i = 10000; i > 0; i /= 10)
    35.     {
    36.         d = value / i;

    37.         if (d || flag)
    38.         {
    39.             *ptr++ = (char)(d + 0x30);
    40.             value -= (d * i);
    41.             flag = 1;
    42.         }
    43.     }

    44.     /* Null terminate the string. */
    45.     *ptr = 0;

    46.     return string;

    47. } /* NCL_Itoa */
    复制代码
    四、试验验证

                                                  OLED.jpg
    五、源代码

    OLED液晶显示.zip (59.05 KB, 下载次数: 10)
    回复

    使用道具 举报

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

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2024-12-24 21:15 , Processed in 0.125447 second(s), 17 queries , MemCache On.

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

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.