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
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』