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

[复制链接]
759|2
 楼主| jinglixixi 发表于 2016-11-15 15:59 | 显示全部楼层 |阅读模式
      当掌握了编译和下载方法后,真正发挥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 / reverse
  16. d        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.        
  34.         OLED_WR_Byte(0xAF,OLED_CMD);//--turn on oled panel
  35. }
下图是为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. }

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
xyz549040622 发表于 2016-11-15 20:42 | 显示全部楼层
可以放出源码吗?看到好像只做了个界面。
 楼主| jinglixixi 发表于 2016-11-16 13:08 | 显示全部楼层
xyz549040622 发表于 2016-11-15 20:42
可以放出源码吗?看到好像只做了个界面。

还没完全移植完,LM4F120XL的键入处理与以前ARM的用法不太一样,正在调试。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

519

主题

2944

帖子

39

粉丝
快速回复 在线客服 返回列表 返回顶部