×
单片机 > 单片机程序设计 > 详情

51单片机驱动OLED

发布时间:2024-05-24 发布时间:
|

51单片机源程序如下:

#include

#include "function.h"

#include "word_lib.h"


#define X_WIDTH 128 //显示屏每行的显示点数

#define Y_WIDTH 64 //显示屏每列的显示点数


/*************************************************************************************

以下为设置控制OLED的端口,D0、D1、RST、DC依次对应OLED的CK、DI、RST、DC

**************************************************************************************/

sbit OLED_D0 = P1^0;

sbit OLED_D1 = P1^1;

sbit OLED_RST= P1^2;

sbit OLED_DC = P1^3;


/*************************************************************************************

函数名称: void OLED_WrCmd(unsigned char cmd)

函数功能: OLED显示屏下指令操作

调用函数: 无

入口参数: cmd

出口参数: 无

返回值: 无

其他: 可以不理解,直接拿过来用

**************************************************************************************/

void OLED_WrCmd(unsigned char cmd)

{

unsigned char i=8;

OLED_DC=0;;;;

OLED_D0=0;;;;

while(i--)

{

if(cmd&0x80)

{

OLED_D1=1;

}

else

{

OLED_D1=0;;;;

}

OLED_D0=1;;;;

;;;;;;


OLED_D0=0;;

cmd<<=1;;

}

}


/**************************************************************************************

函数名称: void OLED_Fill(unsigned char bmp_dat)

函数功能: 让OLED清屏或者全屏亮,取决于参数

调用函数: OLED_WrCmd(0xb0+y); OLED_WrDat(bmp_dat);

入口参数: bmp_dat//一般为0x00或者0xff

出口参数: 无

返回值: 无

其他: 可用此函数进行清屏操作,如OLED_Fill(0),可以清除所有的显示

***************************************************************************************/

void OLED_Fill(unsigned char bmp_dat)

{

unsigned char y,x;

for(y=0;y<8;y++)

{

OLED_WrCmd(0xb0+y);

OLED_WrCmd(0x01);

OLED_WrCmd(0x10);

for(x=0;x

OLED_WrDat(bmp_dat);

}

}


/******************************************************************************************************

函数名称: void OLED_Init(void)

函数功能: OLED显示屏初始化

调用函数: OLED_WrCmd(unsigned char cmd),写命令ue592CD_Fill(0x00); //初始清屏 OLED_Set_Pos(0,0);写地址

入口参数: 无

出口参数: 无

返回值: 无

其他: 可以不理解,直接拿过来用

*******************************************************************************************************/

void OLED_Init(void)

{

OLED_D0=1;

//OLED_CS=1; //预制SLK和SS为高电平

OLED_RST=0;

;;;;;;;

OLED_RST=1;

//从上电到下面开始初始化要有足够的时间,即等待RC复位完毕


OLED_WrCmd(0xae);//--turn off oled panel

OLED_WrCmd(0x00);//---set low column address

OLED_WrCmd(0x10);//---set high column address

OLED_WrCmd(0x40);//--set start line address Set Mapping RAM Display Start Line (0x00~0x3F)

OLED_WrCmd(0x81);//--set contrast control register

OLED_WrCmd(0xcf); // Set SEG Output Current Brightness

OLED_WrCmd(0xa1);//--Set SEG/Column Mapping 0 左右反置 0xa1正常

OLED_WrCmd(0xc8);//Set COM/Row Scan Direction 0xc0上下反置 0xc8正常

OLED_WrCmd(0xa6);//--set normal display

OLED_WrCmd(0xa8);//--set multiplex ratio(1 to 64)

OLED_WrCmd(0x3f);//--1/64 duty

OLED_WrCmd(0xd3);//-set display offset Shift Mapping RAM Counter (0x00~0x3F)

OLED_WrCmd(0x00);//-not offset

OLED_WrCmd(0xd5);//--set display clock divide ratio/oscillator frequency

OLED_WrCmd(0x80);//--set divide ratio, Set Clock as 100 Frames/Sec

OLED_WrCmd(0xd9);//--set pre-charge period

OLED_WrCmd(0xf1);//Set Pre-Charge as 15 Clocks & Discharge as 1 Clock

OLED_WrCmd(0xda);//--set com pins hardware configuration

OLED_WrCmd(0x12);

OLED_WrCmd(0xdb);//--set vcomh

OLED_WrCmd(0x40);//Set VCOM Deselect Level

OLED_WrCmd(0x20);//-Set Page Addressing Mode (0x00/0x01/0x02)

OLED_WrCmd(0x02);//

OLED_WrCmd(0x8d);//--set Charge Pump enable/disable

OLED_WrCmd(0x14);//--set(0x10) disable

OLED_WrCmd(0xa4);// Disable Entire Display On (0xa4/0xa5)

OLED_WrCmd(0xa6);// Disable Inverse Display On (0xa6/a7)

OLED_WrCmd(0xaf);//--turn on oled panel

OLED_Fill(0x00); //初始清屏

OLED_Set_Pos(0,0);

}


/**********************************************************************************

函数名称: void OLED_WrDat(unsigned char dat)

函数功能: 写下点,每次写8个,从上到下竖着写,亮是1,灭是0

调用函数: 无

入口参数: dat//一般为0x**,8位,即8个点,亮或灭

出口参数: 无

返回值: 无

其他:

**********************************************************************************/

void OLED_WrDat(unsigned char dat)

{

unsigned char i=8;

OLED_DC=1;;;;

OLED_D0=0;;;;

;;;;

while(i--)

{

if(dat&0x80)

{

OLED_D1=1;

} //1.1

else

{

OLED_D1=0;

}

OLED_D0=1;

;;;;;;

//;;

OLED_D0=0;;;;

dat<<=1;

}

}


/************************************************************************************

函数名称: void OLED_Set_Pos(unsigned char x, unsigned char y)

函数功能: 确定点亮显示屏的起始位置

调用函数: OLED_WrCmd

入口参数: x、y分别为起始位置的横纵坐标

出口参数: 无

返回值: 无

其他:

*************************************************************************************/

void OLED_Set_Pos(unsigned char x, unsigned char y)

{

OLED_WrCmd(0xb0+y);

OLED_WrCmd(((x&0xf0)>>4)|0x10);

OLED_WrCmd((x&0x0f)|0x01);

}


/***********************************************************************************

函数名称: void Show_En_small(unsigned charx,unsigned char y,unsigned char En[])

函数功能: 写数字或字母,但建议用此函数写字母或冒号等符号,调用例子见main函数,

后面有专门写数字的函数。

调用函数: OLED_WrDat (); OLED_Set_Pos();

入口参数: x、y确定横纵坐标,En[]确定显示内容

出口参数: 无

返回值: 无

其他:

*************************************************************************************/


void Show_En

[1] [2]
51单片机驱动OLED点数


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
51单片机的数码管动态扫描方法