
如果您想在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上一直不亮等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)