這次要測試的是驅(qū)動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)//產(chǎn)生啟動時序
{
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)//產(chǎn)生停止時序
{
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初始化與驅(qū)動程序
void OLED_Write_CMD(uint8_t oled_cmd)//寫命令函數(shù)
{
IIC_Start();
IIC_Send_Byte(0x78);//模塊地址
IIC_SCL(0);
DelayUs(2);
IIC_SCL(1);
DelayUs(2);
IIC_SCL(0);
DelayUs(2);//跳過應(yīng)答位
IIC_Send_Byte(0x00);//寫命令
IIC_SCL(0);
DelayUs(2);
IIC_SCL(1);
DelayUs(2);
IIC_SCL(0);
DelayUs(2);//跳過應(yīng)答位
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.顯示效果
-
顯示屏
+關(guān)注
關(guān)注
28文章
4602瀏覽量
76371 -
OLED12864
+關(guān)注
關(guān)注
1文章
6瀏覽量
9237
發(fā)布評論請先 登錄

uCGUI 在 OLED12864 上的運行效果
轉(zhuǎn): GD32驅(qū)動12832OLED顯示屏
基于PROTEUS軟件的OLED12864仿真問題
用51單片機驅(qū)動oled顯示屏
0.96寸OLED12864顯示屏設(shè)計方案
STC12C5A60S2單片機控制OLED12864顯示屏的程序
基于OLED12864液晶顯示屏的直觀賽道描繪方法
基于單片機的OLED顯示系統(tǒng)設(shè)計與實現(xiàn)
用Microchip Curiosity PIC32MX470驅(qū)動OLED12864顯示屏

使用STM32單片機核心板應(yīng)用0.96OLED顯示屏的驅(qū)動程序免費下載

使用51單片機實現(xiàn)LCD12864顯示屏顯示的仿真文件免費下載
使用51單片機實現(xiàn)LCD12864顯示屏顯示的仿真文件免費下載
I2C OLED顯示屏的51單片機/STM32/Arduino驅(qū)動程序
單片機控制OLED12864顯示屏之模塊化編程

評論