找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3428|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

oled清屏不起效果,附單片機(jī)程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:880458 發(fā)表于 2021-3-8 23:16 | 只看該作者 回帖獎(jiǎng)勵(lì) |正序?yàn)g覽 |閱讀模式
#include <reg52.h>
#define OLED_CMD  0        //寫命令
#define OLED_DATA 1        //寫數(shù)據(jù)
#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);//數(shù)字寄存器
        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; //準(zhǔn)備、待拉低
        //_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; //傳輸完畢
        }

}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

5#
ID:654028 發(fā)表于 2021-3-9 13:26 | 只看該作者
不知道你的有沒有片選信號(hào),看程序應(yīng)該沒啥問題,你查一下iic是不是時(shí)序不對(duì)之類的。清屏最好不要放while(1)里面,不停的刷屏幕也可能有問題。
回復(fù)

使用道具 舉報(bào)

地板
ID:258995 發(fā)表于 2021-3-9 08:53 | 只看該作者
有些oled,需要refresh一下,刷新緩存,才能顯示
回復(fù)

使用道具 舉報(bào)

板凳
ID:748788 發(fā)表于 2021-3-9 08:19 | 只看該作者
和不同廠家不同驅(qū)動(dòng)有很大關(guān)系
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:88256 發(fā)表于 2021-3-9 00:03 | 只看該作者
是什么情況也要說一下啊,當(dāng)我們是神仙什么都知道��?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表