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 } } /****************************************************************************************************** 函数名称: void OLED_Init(void) 函数功能: OLED显示屏初始化 调用函数: OLED_WrCmd(unsigned char cmd),写命令CD_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 0xa0左右反置 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_small (unsigned char x,unsigned char y,unsigned char En[]) { unsigned char e=0,i=0,j=0; while (En[j] != '