#include "REG51.h"
sbit LCD_SCL=P1^0; //时钟 D0(SCLK)
sbit LCD_SDA=P1^1; //D1(MOSI) 数据
sbit LCD_RST=P1^2; //复位
sbit LCD_DC =P1^3; //数据/命令控制
#define XLevelL 0x00
#define XLevelH 0x10
#define XLevel ((XLevelH&0x0F)*16+XLevelL)
#define Max_Column 128
#define Max_Row 64
#define Brightness 0xCF
#define X_WIDTH 128
#define Y_WIDTH 64
void LCD_DLY_ms(unsigned int ms) //LCD 延时1ms
{
unsigned int a;
while(ms)
{
a=1800;
while(a--);
ms--;
}
return;
}
void LCD_WrDat(unsigned char dat) //**LCD写数据
{
unsigned char i=8;
LCD_DC=1;
for(i=0;i<8;i++) //发送一个八位数据
{
LCD_SCL=0;
LCD_SDA=dat&0x80;
LCD_SCL=1;
dat<<=1;
}
}
void LCD_WrCmd(unsigned char cmd) //****LCD写命令
{
unsigned char i=8;
LCD_DC=0;
for(i=0;i<8;i++) //发送一个八位数据
{
LCD_SCL=0;
LCD_SDA=cmd&0x80;
LCD_SCL=1;
cmd<<=1;;
}
}
void LCD_Setxy(unsigned char x, unsigned char y) //LCD 设置坐标
{
LCD_WrCmd(0xb0+y);
LCD_WrCmd(((x&0xf0)>>4)|0x10);
LCD_WrCmd((x&0x0f)|0x01);
}
void LCD_Fill(unsigned char bmp_dat) //bmp_dat=0x00全屏灭,bmp_dat=0xff全屏亮
{
unsigned char y,x;
for(y=0;y<8;y++)
{
LCD_WrCmd(0xb0+y);
LCD_WrCmd(0x01);
LCD_WrCmd(0x10);
for(x=0;x<X_WIDTH;x++)
LCD_WrDat(bmp_dat);
}
}
/*void LCD_CLS(void) //LCD复位
{
unsigned char y,x;
for(y=0;y<8;y++)
{
LCD_WrCmd(0xb0+y);
LCD_WrCmd(0x01);
LCD_WrCmd(0x10);
for(x=0;x<X_WIDTH;x++)
LCD_WrDat(0);
}
}*/
void LCD_Init(void) //LCD初始化
{
LCD_SCL=1;
LCD_RST=0;
LCD_DLY_ms(50);
LCD_RST=1; //从上电到下面开始初始化要有足够的时间,即等待RC复位完毕
LCD_WrCmd(0xae);//--关闭显示 turn off oled panel
LCD_WrCmd(0x00);//---设置低列地址 set low column address
LCD_WrCmd(0x10);//---高列地址 set high column address
LCD_WrCmd(0x40);//--设置起始地址映射内存显示开始行(0x 00 ~ 0x3f) set start line ad
OLED驱动 (51单片机)
最新推荐文章于 2024-08-01 17:15:42 发布
这篇博客详细介绍了如何使用51单片机来驱动6 * 8像素的OLED显示屏,内容涵盖了相关的硬件连接、驱动程序编写及显示原理。
摘要由CSDN通过智能技术生成