首先建个显存数组,将要显示的数据写入昌孙显存里,再将整个显存通过梁迅巧显示图片的方式写入5110的RAM里显示就OK啦!我的12864OLED也橡键读不出内部的DDRAM,但我刚用这种方法给12864OLED打点了。
unsigned char xdata memory[128] //显存
//在随意坐标上画点
void OLED_Drawpoint(unsigned char x, unsigned char y,bit dat)
{//x,y,行列坐标;dat,1写,0擦除
unsigned char rdata
rdata=memory[y/8*128+x] //先将对应的字节数据从显存数组读出来
if(dat==1){
memory[y/8*128+x]=rdata|(0x01<<(y%8))//将读出来的数据加上添加点的数据
}
else{
memory[y/8*128+x]=rdata-(0x01<<(y%8))
}
}
OLED_DrawBMP(0,0,128,8,memory)//(显示图片函数)将显存的数据导入显示屏
如果您想在OLED显示屏上显示动图,可以按照下列步骤进行 *** 作:1、首先,准备好您想要显示的动图文件。动图文件可以是GIF格式的图片,也可以是其他格式的图片,如BMP、JPG等。
2、接着,使用OLED显示屏所需的驱动程序和控制软件。这些软件可以通过显示屏厂商的官方网站或者其他渠道获得。
3、将动图文件和驱动程序、控制软件都下载到电脑或者其他设备上。
4、打开驱动程序郑前拦和控制软件,通过软件的界面导入动图文件。
5、调整动图的显示参数,如显示位置、帧率、循环播放等。喊胡
6、点击播放按钮,在OLED显示屏上播放动图。
希望悔闷以上步骤能帮助您在OLED显示屏上显示动图。
#define LCM_RW P2_0 //定义引脚#define LCM_RS P2_1
#define LCM_E P2_2
#define LCM_Data P1
#define Busy0x80 //用于检测LCM状脊大槐态字中的Busy标识
#i nclude <at89x51.h>
void WriteDataLCM(unsigned char WDLCM)
void WriteCommandLCM(unsigned char WCLCM,BuysC)
unsigned char ReadDataLCM(void)
unsigned char ReadStatusLCM(void)
void LCMInit(void)
void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData)
void Delay5Ms(void)
void Delay400Ms(void)
unsigned char code uctech[] = {"uctech"}
unsigned char code net[] = {"uctech.icpcn.com"}
void main(void)
{
Delay400Ms()//启动等待,等LCM讲入工作状态
LCMInit()//LCM初始化
Delay5Ms()//延时片刻(可不要)
DisplayListChar(0, 5, uctech)
DisplayListChar(0, 0, net)
ReadDataLCM()//测试用句无意义
while(1)
}
//写数据
void WriteDataLCM(unsigned char WDLCM)
{
ReadStatusLCM()//检测忙
LCM_Data = WDLCM
LCM_RS = 1
LCM_RW = 0
LCM_E = 0//若晶振速度太高可以在这后加小的仿余延时
LCM_E = 0//延时
LCM_E = 1
}
//写指令
void WriteCommandLCM(unsigned char WCLCM,BuysC) //BuysC为0时忽略忙检测
{
if (BuysC) ReadStatusLCM()//根据需要检测忙
LCM_Data = WCLCM
LCM_RS = 0
LCM_RW = 0
LCM_E = 0
LCM_E = 0
LCM_E = 1
}
//读数据
unsigned char ReadDataLCM(void)
{
LCM_RS = 1
LCM_RW = 1
LCM_E = 0
LCM_E = 0
LCM_E = 1
return(LCM_Data)
}
//读状态
unsigned char ReadStatusLCM(void)
{
LCM_Data = 0xFF
LCM_RS = 0
LCM_RW = 1
LCM_E = 0
LCM_E = 0
LCM_E = 1
while (LCM_Data &Busy)//检测忙信号
return(LCM_Data)
}
void LCMInit(void) //LCM初始化
{
LCM_Data = 0
WriteCommandLCM(0x38,0)//三次显示模式设置樱友,不检测忙信号
Delay5Ms()
WriteCommandLCM(0x38,0)
Delay5Ms()
WriteCommandLCM(0x38,0)
Delay5Ms()
WriteCommandLCM(0x38,1)//显示模式设置,开始要求每次检测忙信号
WriteCommandLCM(0x08,1)//关闭显示
WriteCommandLCM(0x01,1)//显示清屏
WriteCommandLCM(0x06,1)// 显示光标移动设置
WriteCommandLCM(0x0C,1)// 显示开及光标设置
}
//按指定位置显示一个字符
void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
{
Y &= 0x1
X &= 0xF//限制X不能大于15,Y不能大于1
if (Y) X |= 0x40//当要显示第二行时地址码+0x40
X |= 0x80// 算出指令码
WriteCommandLCM(X, 0)//这里不检测忙信号,发送地址码
WriteDataLCM(DData)
}
//按指定位置显示一串字符
void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData)
{
unsigned char ListLength
ListLength = 0
Y &= 0x1
X &= 0xF//限制X不能大于15,Y不能大于1
while (DData[ListLength]>0x20) //若到达字串尾则退出
{
if (X <= 0xF) //X坐标应小于0xF
{
DisplayOneChar(X, Y, DData[ListLength])//显示单个字符
ListLength++
X++
}
}
}
//5ms延时
void Delay5Ms(void)
{
unsigned int TempCyc = 5552
while(TempCyc--)
}
//400ms延时
void Delay400Ms(void)
{
unsigned char TempCycA = 5
unsigned int TempCycB
while(TempCycA--)
{
TempCycB=7269
while(TempCycB--)
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)