标题:
oled清屏不起效果,附单片机程序
[打印本页]
作者:
单片机55818
时间:
2021-3-8 23:16
标题:
oled清屏不起效果,附单片机程序
#include <reg52.h>
#define OLED_CMD 0 //写命令
#define OLED_DATA 1 //写数据
#define OLED_MODE
sbit IIC_CLK = P4^3;
sbit IIC_DATA = P4^0;
void OLED_Clear (void);
void OLED_Set_Pos(unsigned char x, unsigned char y);
void OLED_WR_Byte(unsigned char dat, unsigned char cmd);
void OLED_WritrDate(unsigned char dat);
void OLED_WriteCommand(unsigned char dat);
void IIC_Start(void);
void IIC_Stop(void);
unsigned char IIC_Wait_Ack(void);
void Write_IIC_Byte(unsigned char IIC_Byte);
void main (void)
{
while(1)
{
OLED_Clear ();
}
}
void OLED_Clear (void)
{
unsigned char i, n;
for (i = 0; i <8; i++)
{
OLED_Set_Pos(0, i);
for (n =0; n<128; n++)OLED_WR_Byte(0x00, OLED_DATA);
}
}
void OLED_Set_Pos(unsigned char x, unsigned char y)
{
OLED_WR_Byte(0xb0+y,OLED_CMD);
OLED_WR_Byte(((x&0xf0)>>4)|0x10,OLED_CMD);//高地址
OLED_WR_Byte((x&0x0f),OLED_CMD); //低地址
}
void OLED_WR_Byte(unsigned char dat, unsigned char cmd)
{
if (cmd == OLED_DATA)
OLED_WritrDate(dat);
else
OLED_WriteCommand(dat);
}
void OLED_WritrDate(unsigned char dat)
{
IIC_Start();
Write_IIC_Byte (0x78);
IIC_Wait_Ack();
Write_IIC_Byte(0x40);//数字寄存器
IIC_Wait_Ack();
Write_IIC_Byte(dat);
IIC_Wait_Ack();
IIC_Stop();
}
void OLED_WriteCommand(unsigned char dat)
{
IIC_Start();
Write_IIC_Byte (0x78);
IIC_Wait_Ack();
Write_IIC_Byte(0x00);//命令寄存器
IIC_Wait_Ack();
Write_IIC_Byte(dat);
IIC_Wait_Ack();
IIC_Stop();
}
void IIC_Start(void)
{
IIC_CLK = 1;
IIC_DATA = 1;
//delay();
IIC_DATA = 0;
//delay();
IIC_CLK = 0;
//delay();
}
void IIC_Stop(void)
{
IIC_DATA = 0;
//delay();
IIC_CLK = 1;
//delay();
IIC_DATA = 0;
//delay();
}
unsigned char IIC_Wait_Ack(void)
{
unsigned char ucErrTime=0;
IIC_DATA=1; //准备、待拉低
//_nop_();_nop_();
IIC_CLK=1;
//_nop_();_nop_();
while(IIC_DATA)
{
ucErrTime++;
if(ucErrTime>250)
{
IIC_Stop();
//SendString("ERORR\n");
return 1;
}
}
IIC_CLK=0;
//delay();
return 0;
}
void Write_IIC_Byte(unsigned char IIC_Byte)
{
unsigned char i;
unsigned char m,da;
da=IIC_Byte;
//IIC_CLK = 0;
for(i=0;i<8;i++)
{
//delay();
m=da&0x80;
if(m==0x80)
{
IIC_DATA = 1;
}
else IIC_DATA = 0;
da=da<<1; //移往下一位
//delay();
IIC_CLK = 1; //开始传输
//delay();
IIC_CLK = 0; //传输完毕
}
}
作者:
hhdsdy
时间:
2021-3-9 00:03
是什么情况也要说一下啊,当我们是神仙什么都知道啊?
作者:
wwh2382
时间:
2021-3-9 08:19
和不同厂家不同驱动有很大关系
作者:
zyczyczyc
时间:
2021-3-9 08:53
有些oled,需要refresh一下,刷新缓存,才能显示
作者:
心有浮生
时间:
2021-3-9 13:26
不知道你的有没有片选信号,看程序应该没啥问题,你查一下iic是不是时序不对之类的。清屏最好不要放while(1)里面,不停的刷屏幕也可能有问题。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1