|
基于51单片机的OLED底层代码
- #include <reg52.h>
- #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<X_WIDTH;x++)
- OLED_WrDat(bmp_dat);
- }
- }
- /******************************************************************************************************
- 函数名称: 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] != '\0')
- {
- e = En[j] - 32;
- if(x>120)
- {x=0;y++;}
- OLED_Set_Pos(x,y);
- for (i=0; i<6; i++)
- {
- OLED_WrDat(EnSmallWord[e*6+i]);
- }
- x+=6;
- j++;
- }
- }
- /****************************************************************************************
- 函数名称:void Show_Number (unsigned char x, unsigned char y,unsigned char data)
- 函数功能:通过前两个参数给定写坐标,第三个给一个数字,函数即可以在指定的位置写下这个数
- 字,调用一次这个函数只能写下一个数字。具体调用方法见mian函数。
- 调用函数:OLED_WrDat()
- 入口参数:要写坐标x,y,小字库第data行
- 出口参数:无
- 返回值: 无
- 其他: 无
- *****************************************************************************************/
- void Show_Number (unsigned char x,unsigned char y,unsigned char number)
- {
- unsigned char i=0;
- number*=6;
- if(x>120)
- {x=0;y++;}
- OLED_Set_Pos(x,y);
- for (i=0; i<6; i++)
- {
- OLED_WrDat(NumberSmallWord [number+i]);
- }
- }
复制代码
|
评分
-
查看全部评分
|