查看: 145|回复: 4

[原创] 基于LM4F120XL开发板的OLED屏显示

[复制链接]

54

主题

1

好友

824

积分

举人

Rank: 4

  • TA的每日心情
    奋斗
    昨天 09:25
  • 签到天数: 199 天

    [LV.7]常住居民III

    爱板会员勋章 活跃会员勋章

    发表于 2016-11-15 16:08:41 |显示全部楼层
        当掌握了编译和下载方法后,真正发挥LM4F120XL开发板用途的工作才算开始。要想学会编程,最好的方法就是看看例程,了解他人是怎么来使用的。当然在ARM中最易于着手的就是GPIO了,下面就看看闪灯程序是如何编写的,内容如下:
    1. while(1)
    2.     {
    3.         // Set the GPIO high.
    4.         GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3, GPIO_PIN_3);
    5.         // Delay for a while.
    6.         SysCtlDelay(1000000);
    7.         // Set the GPIO low.
    8.         GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3, 0);
    9.         // Delay for a while.
    10.         SysCtlDelay(1000000);
    11.     }
    复制代码
        原来输出低电平是这样用:GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3, 0);
         而输出高电平则是:GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3, GPIO_PIN_3);
         延时则是这样来实现: SysCtlDelay(1000000);
        下面就看看IIC接口的双色OLED屏怎样来控制,首先要确定一下连接关系,即SCLK与PD6连接,SDIN与PD3连接。这样就可以如下来定义输出电平的高低:
    #define OLED_SCLK_Clr() GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_6, 0)
    #define OLED_SCLK_Set() GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_6, GPIO_PIN_6)   
    #define OLED_SDIN_Clr() GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_3, 0);
    #define OLED_SDIN_Set() GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_3, GPIO_PIN_3) ;
    随后可以用下面的语句来设置PD3PD6为输出口:
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
    SysCtlDelay(1);
    GPIOPinTypeGPIOOutput(GPIO_PORTD_BASE, GPIO_PIN_6|GPIO_PIN_3);
    有了前面的准备工作,再配上中英文的小字库,就可以在OLED原驱动程序的基础上来实现显示功能了。
        对应的OLED初始化程序如下:
    1. //SSD1306                                            
    2. void OLED_Init(void)
    3. {        
    4.     OLED_SCLK_Set();
    5.     OLED_SDIN_Set();       
    6.     Delay_1ms(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 / reversed
    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.         OLED_WR_Byte(0xD5,OLED_CMD);//set osc division
    22.         OLED_WR_Byte(0x80,OLED_CMD);//
    23.         OLED_WR_Byte(0xD8,OLED_CMD);//set area color mode off
    24.         OLED_WR_Byte(0x05,OLED_CMD);//
    25.         OLED_WR_Byte(0xD9,OLED_CMD);//Set Pre-Charge Period
    26.         OLED_WR_Byte(0xF1,OLED_CMD);//
    27.         OLED_WR_Byte(0xDA,OLED_CMD);//set com pin configuartion
    28.         OLED_WR_Byte(0x12,OLED_CMD);//
    29.         OLED_WR_Byte(0xDB,OLED_CMD);//set Vcomh
    30.         OLED_WR_Byte(0x30,OLED_CMD);//
    31.     OLED_WR_Byte(0x8D,OLED_CMD);//set charge pump enable
    32.         OLED_WR_Byte(0x14,OLED_CMD);//
    33. OLED_WR_Byte(0xAF,OLED_CMD);//--turn on oled panel
    34. }
    复制代码
         下图是为MP3点播器制作的界面效果,在添加键控函数和通讯函数的条件下,可以实现MP3的播放,其主程序为:
    1. int main(void)
    2. {
    3.     // Enable the GPIO module.
    4.     SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);         
    5.     SysCtlDelay(1);
    6.     // Configure PD as an output.
    7.         SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
    8.     SysCtlDelay(1);
    9.     GPIOPinTypeGPIOOutput(GPIO_PORTD_BASE, GPIO_PIN_6|GPIO_PIN_3);
    10.         OLED_Init();                         
    11.         OLED_Clear();
    12.         OLED_ShowString(2,0,"mini MP3",16);
    13.         OLED_ShowCHinese(72,0,33);  
    14.         OLED_ShowCHinese(90,0,34);  
    15.         OLED_ShowCHinese(108,0,35);
    16.         OLED_ShowCHinese(2,2,36);  
    17.         OLED_ShowCHinese(20,2,37);
    18.         OLED_ShowString(40,2,":jinglixixi",16);
    19.         OLED_ShowString(32,6,"2016.7.2",16);
    20.         while(1);
    21. }
    复制代码
    图片1.png

    OLED屏的显示效果

    已有 1 人评分铜板 收起 理由
    噗噗熊 + 10 很给力!

    总评分: 铜板 + 10   查看全部评分

    回复

    使用道具 举报

    112

    主题

    62

    好友

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    该用户从未签到

    分区版主职务勋章

    发表于 2016-11-15 16:19:03 |显示全部楼层
    好的技术帖,要赏
    回复

    使用道具 举报

    54

    主题

    1

    好友

    824

    积分

    举人

    Rank: 4

  • TA的每日心情
    奋斗
    昨天 09:25
  • 签到天数: 199 天

    [LV.7]常住居民III

    爱板会员勋章 活跃会员勋章

    发表于 2016-11-15 16:23:04 |显示全部楼层
    噗噗熊 发表于 2016-11-15 16:19
    好的技术帖,要赏

    多谢打赏!!!
    回复

    使用道具 举报

    8

    主题

    0

    好友

    1089

    积分

    进士

    Rank: 5Rank: 5

  • TA的每日心情
    开心
    昨天 08:31
  • 签到天数: 238 天

    [LV.7]常住居民III

    发表于 2016-11-15 16:50:39 |显示全部楼层
    好像是CM4内核?
    回复

    使用道具 举报

    54

    主题

    1

    好友

    824

    积分

    举人

    Rank: 4

  • TA的每日心情
    奋斗
    昨天 09:25
  • 签到天数: 199 天

    [LV.7]常住居民III

    爱板会员勋章 活跃会员勋章

    发表于 2016-11-15 16:56:38 |显示全部楼层
    yanhaijian 发表于 2016-11-15 16:50
    好像是CM4内核?

    据介绍是基于32位ARM Cortex-M4内核的,同ST的STM32F411,原FSL的FRDM-K64F,新唐的M451应该是一类内核。
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    关闭

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


    手机版|爱板网 |网站地图  

    GMT+8, 2016-12-8 00:23 , Processed in 0.114758 second(s), 16 queries , Memcache On.

    苏公网安备 32059002001056号

    Powered by Discuz!

    回顶部