OLED显示动图的步骤

OLED显示动图的步骤,第1张

如果您想在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 Busy 0x80 //用于检测LCM状态字中的Busy标识

#i nclude <at89x51h>

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[] = {"uctechicpcncom"};

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--);

};

如下

#include <msp430x14xh>

typedef unsigned int uint;

typedef unsigned char uchar;

#define BIT(x) (1 << (x))

extern const unsigned char shuzi_table[];

void Send(uchar type,uchar transdata);

/液晶控制IO的宏定义/

#define cyCS 0 //P30,片选信号

#define cySID 1 //P31,串行数据

#define cyCLK 2 //P32,同步时钟

#define cyPORT P3OUT

#define cyDDR P3DIR

/

函数名称:delay_Nus

功 能:延时N个us的时间

参 数:n--延时长度

返回值 :无

/

void delay_Nus(uint n)

{

uchar i;

for(i = n;i > 0;i--)

_NOP();

}

/

函数名称:delay_1ms

功 能:延时约1ms的时间

参 数:无

返回值 :无

/

void delay_1ms(void)

{

uchar i;

for(i = 150;i > 0;i--) _NOP();

}

/

函数名称:delay_Nms

功 能:延时N个ms的时间

参 数:无

返回值 :无

/

void delay_Nms(uint n)

{

uint i = 0;

for(i = n;i > 0;i--)

delay_1ms();

}

/

函数名称:Ini_Lcd

功 能:初始化液晶模块

参 数:无

返回值 :无

/

void Ini_Lcd(void)

{

cyDDR |= BIT(cyCLK) + BIT(cySID) + BIT(cyCS); //相应的位端口设置为输出

delay_Nms(100); //延时等待液晶完成复位

Send(0,0x30); /功能设置:一次送8位数据,基本指令集/

delay_Nus(72);

Send(0,0x02); /DDRAM地址归位/

delay_Nus(72);

Send(0,0x0c); /显示设定:开显示,不显示光标,不做当前显示位反白闪动/

delay_Nus(72);

Send(0,0x01); /清屏,将DDRAM的位址计数器调整为“00H”/

delay_Nus(72);

Send(0,0x06); /功能设置,点设定:显示字符/光标从左到右移位,DDRAM地址加1/

delay_Nus(72);

}

/

函数名称:Send

功 能:MCU向液晶模块发送1一个字节的数据

参 数:type--数据类型,0--控制命令,1--显示数据

transdata--发送的数据

返回值 :无

/

void Send(uchar type,uchar transdata)

{

uchar firstbyte = 0xf8;

uchar temp;

uchar i,j = 3;

if(type) firstbyte |= 0x02;

cyPORT |= BIT(cyCS);

cyPORT &= ~BIT(cyCLK);

while(j > 0)

{

if(j == 3) temp = firstbyte;

else if(j == 2) temp = transdata&0xf0;

else temp = (transdata << 4) & 0xf0;

for(i = 8;i > 0;i--)

{

if(temp & 0x80) cyPORT |= BIT(cySID);

else cyPORT &= ~BIT(cySID);

cyPORT |= BIT(cyCLK);

temp <<= 1;

cyPORT &= ~BIT(cyCLK);

}

//三个字节之间一定要有足够的延时,否则易出现时序问题

if(j == 3) delay_Nus(600);

else delay_Nus(200);

j--;

}

cyPORT &= ~BIT(cySID);

cyPORT &= ~BIT(cyCS);

}

/

函数名称:Clear_GDRAM

功 能:清除液晶GDRAM内部的随机数据

参 数:无

返回值 :无

/

void Clear_GDRAM(void)

{

uchar i,j,k;

Send(0,0x34); //打开扩展指令集

i = 0x80;

for(j = 0;j < 32;j++)

{

Send(0,i++);

Send(0,0x80);

for(k = 0;k < 16;k++)

{

Send(1,0x00);

}

}

i = 0x80;

for(j = 0;j < 32;j++)

{

Send(0,i++);

Send(0,0x88);

for(k = 0;k < 16;k++)

{

Send(1,0x00);

}

}

Send(0,0x30); //回到基本指令集

}

/

函数名称:Draw_PM

功 能:在整个屏幕上画一个

参 数:ptr--指向保存位置的指针

返回值 :无

/

void Draw_PM(const uchar ptr)

{

uchar i,j,k;

Send(0,0x34); //打开扩展指令集

i = 0x80;

for(j = 0;j < 32;j++)

{

Send(0,i++);

Send(0,0x80);

for(k = 0;k < 16;k++)

{

Send(1,ptr++);

}

}

i = 0x80;

for(j = 0;j < 32;j++)

{

Send(0,i++);

Send(0,0x88);

for(k = 0;k < 16;k++)

{

Send(1,ptr++);

}

}

Send(0,0x36); //打开绘图显示

Send(0,0x30); //回到基本指令集

}

/

函数名称:Draw_TX

功 能:在液晶上描绘一个1616的图形

参 数:Yaddr--Y地址,

Xaddr--X地址

dp--指向保存图形数据的指针

返回值 :无

/

void Draw_TX(uchar Yaddr,uchar Xaddr,const uchar dp)

{

uchar j;

uchar k = 0;

Send(0,0x34); //使用扩展指令集,关闭绘图显示

for(j = 0;j < 16;j++)

{

Send(0,Yaddr++); //Y地址

Send(0,Xaddr); //X地址

Send(1,dp[k++]); //送两个字节的显示数据

Send(1,dp[k++]);

}

Send(0,0x36); //打开绘图显示

Send(0,0x30); //回到基本指令集模式

}

取模是高位在前的形式 temp&0x80 用于判断当前temp 最高位是0还是1 是1就点亮 0就清除

正常显示 点亮OLED是蓝色点 清除是黑屏 反白显示就是反过来 点亮的部分清黑屏 不亮的部分显示蓝色

以上就是关于OLED显示动图的步骤全部的内容,包括:OLED显示动图的步骤、那位老大能提供一个stc单片机驱动oled屏(128*64)的keil c程序,要很简单的就行、msp430上怎么控制12864的OLED液晶呢OLED是4线串行控制的。有51单片机例程,可是移植到430上一直不亮等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10108908.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存