用Microchip Curiosity PIC32MX470驱动OLED12864显示屏

应用案例

3人已加入

描述

这次要测试的是驱动OLED12864显示屏。OLED12864模块使用的是IIC接口,SDA接RF4引脚,SCL接RF5引脚,电源为3.3V。IIC时序使用软件模拟,采用强制读写模式。

1.iic.h文件

#ifndef __IIC_H

#define __IIC_H

#include

#include "system_config.h"

#define IIC_SCL(status)      if(status)

PLIB_PORTS_PinSet(PORTS_ID_0, PORT_CHANNEL_F, PORTS_BIT_POS_5);

else       

PLIB_PORTS_PinClear(PORTS_ID_0, PORT_CHANNEL_F, PORTS_BIT_POS_5) 

#define IIC_SDA_OUT(status)  if(status)

PLIB_PORTS_PinSet(PORTS_ID_0, PORT_CHANNEL_F, PORTS_BIT_POS_4);

else       

PLIB_PORTS_PinClear(PORTS_ID_0, PORT_CHANNEL_F, PORTS_BIT_POS_4)

#define DELAY_US             asm("nop");asm("nop");asm("nop");        asm("nop");

asm("nop");asm("nop");asm("nop");        asm("nop");

asm("nop");asm("nop");asm("nop");        asm("nop");

asm("nop");asm("nop");asm("nop");        asm("nop");

asm("nop");asm("nop");asm("nop");        asm("nop");

asm("nop");asm("nop");asm("nop");        asm("nop");

asm("nop");asm("nop");asm("nop");        asm("nop");

asm("nop");asm("nop");asm("nop");        asm("nop");

asm("nop");asm("nop");asm("nop");        asm("nop");

asm("nop");asm("nop");asm("nop");        asm("nop");

asm("nop");asm("nop");asm("nop");        asm("nop");

asm("nop");asm("nop");asm("nop");        asm("nop");

asm("nop");asm("nop");asm("nop");        asm("nop");

asm("nop");asm("nop");asm("nop");        asm("nop");

asm("nop");asm("nop");asm("nop");        asm("nop");

asm("nop");asm("nop");asm("nop");        asm("nop");

asm("nop");asm("nop");asm("nop");        asm("nop");

asm("nop");asm("nop");asm("nop");        asm("nop");

asm("nop");asm("nop");asm("nop");        asm("nop");

asm("nop");asm("nop");asm("nop");        asm("nop")

void   IIC_Init(void);                        

void   IIC_Start(void);                                       

void   IIC_Stop(void);                                     

void   IIC_Send_Byte(uint8_t data);        

void   DelayMs(uint32_t msDelay );

void   DelayUs(uint32_t usDelay );

2.iic.c文件

#include "iic.h"

void IIC_Start(void)//产生启动时序

{

IIC_SCL(0);

DelayUs(2);

IIC_SDA_OUT(1);

DelayUs(2);

IIC_SCL(1);

DelayUs(2);

IIC_SDA_OUT(0);

DelayUs(2);

IIC_SCL(0);

DelayUs(2);

}          

void IIC_Stop(void)//产生停止时序

{

IIC_SCL(0);

DelayUs(2);

IIC_SDA_OUT(0);

DelayUs(2);

IIC_SCL(1);

DelayUs(2);

IIC_SDA_OUT(1);

DelayUs(2);                                           

}

3.oled.c:OLED初始化与驱动程序

void OLED_Write_CMD(uint8_t oled_cmd)//写命令函数

{

IIC_Start();

IIC_Send_Byte(0x78);//模块地址

IIC_SCL(0);

DelayUs(2);

IIC_SCL(1);

DelayUs(2);

IIC_SCL(0);

DelayUs(2);//跳过应答位

IIC_Send_Byte(0x00);//写命令

IIC_SCL(0);

DelayUs(2);

IIC_SCL(1);

DelayUs(2);

IIC_SCL(0);

DelayUs(2);//跳过应答位

IIC_Send_Byte(oled_cmd);//命令值

IIC_Stop();

}

4.app.c:显示“1234”.

#include "app.h"

#include "oled.h" 

#include "iic.h"

#include "bsp.h"

APP_DATA appData;

void APP_Initialize ( void )

{

appData.state = APP_STATE_INIT;

}

void APP_Tasks ( void )

{

switch ( appData.state )

{

case APP_STATE_INIT:

{

DelayMs(100);

OLED_Init();

OLED_Clear();

appData.state = APP_STATE_SERVICE_TASKS;

break;

}

case APP_STATE_SERVICE_TASKS:

{

OLED_Show_Char0816((16 + 1), 0,0); //"1"

OLED_Show_Char0816((16 + 2), 0,8); //"2"

OLED_Show_Char0816((16 + 3), 0,16);//"3"

OLED_Show_Char0816((16 + 4), 0,24);//"4"

DelayMs(1000);

break;

}

}

}

5.显示效果

OLED显示屏

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分