久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

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

QQ登錄

只需一步,快速開始

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

I2C接口的SSD1306---OLED驅(qū)動(dòng)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:75926 發(fā)表于 2015-4-10 16:58 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
/*
    這個(gè)液晶只需要兩根線用模擬或者硬件的I2C都可以 硬件設(shè)計(jì)非常簡(jiǎn)單
*/
#define I2C_SDA_LOW()   
#define I2C_SDA_HIGH()

#define I2C_SCL_LOW()
#define I2C_SCL_HIGH()

#defien I2C_SDA_Read()

#define
BIRGTHNESS             //OLED的亮度  00~255

#define OLED_WIDTH    128
#define OLED_HIGH    (8*8)

#define I2C_OLED    0x78

#define I2C_Delay()    //實(shí)現(xiàn)延時(shí)4us

/* 見名知意 移植的時(shí)候只需要把以上的宏的具體實(shí)現(xiàn)方法寫上去 就可以了  下面的代碼用的是普通IO口模擬I2C (速度還是可以的) 這個(gè)芯片 不用上拉電阻 好像也能行
*/  

static void I2C_Start(void)
{
    I2C_SDA_HIGH();
    I2C_SCL_HIGH();
    I2C_Delay();
    I2C_SDA_LOW();
    I2C_Delay();
    I2C_SCL_LOW();
    I2C_Delay();
}

static void I2C_Stop(void)
{
    I2C_SDA_LOW();
    I2C_SCL_HIGH();
    I2C_Delay();
    I2C_SDA_HIGH();
    I2C_Delay();
}

static uint8_t I2C_WaitAck(void)  //0:aCK     1:NoAck
{
    I2C_SDA_HIGH();
    I2C_SCL_HIGH();
    I2C_Delay();
    if(I2C_SDA_Read())
        return 1;
    I2C_SCL_LOW();
    I2C_Delay();
    return 0;
}

static void I2C_SendByte(uint8_t Byte)
{
    uint8_t Cnt;
    for(Cnt=0;Cnt<8;Cnt++)
    {
        if(Byte&0x80)
            I2C_SDA_HIGH();
        else
            I2C_SDA_LOW();
        I2C_SCL_HIGH();
        I2C_Delay();
        I2C_SCL_LOW();
        I2C_Delay();
    }
}

static uint8_t OLED_WriteCmd(uint8_t Cmd)
{
    I2C_Start();
    I2C_SendByte(I2C_OLED);
    if(I2C_WaitAck())
        return 1;
    I2C_SendByte(0x00);
    if(I2C_WaitAck())
        return 2;
    I2C_SendByte(Cmd);
    if(I2C_WaitAck())
        return 3;
    I2C_Stop();
    return 0;
}

static uint8_t OLED_WriteData(uint8_t Data)
{
    I2C_Start();
    I2C_SendByte(I2C_OLED);
    if(I2C_WaitAck())
        return 1;
    I2C_SendByte(0x40);
    if(I2C_WaitAck())
        return 2;
    I2C_SendByte(Data);
    if(I2C_WaitAck())
        return 3;
    I2C_Stop();
    return 0;
}

static uint8_t OLED_SetXY(uint8_t x,uint8_t y)
{
    OLED_WriteCmd(0xb0|y);//y
    OLED_WriteCmd(((0xf0&x)>>4))|0x10);//設(shè)置x高4位
    OLED_WriteCmd(((0x0f&x)>>4))|0x01);//設(shè)置x低4位
}

uint8_t OLED_Clear(void)
{
    uint8_t x,y;
    OLED_SetXY(0,0);
    for(y=0;y<OLED_HIGH/8;y++)
    {
        if(
OLED_SetXY(0,y))
            return 1;

        for(x=0;x<OLED_WIDTH;x++)
        {
            if(
OLED_WriteData(0x00))
                return 2;

        }
    }
    return 0;
}

uint8_t OLED_Init(void)
{
   // 延時(shí)一下 再初始化
OLED_Delay(100000);    if(OLED_WriteCmd(0xae))
        return 1;//--turn off oled panel
    if(OLED_WriteCmd(0x00))
          return 2;//---set low column address
    if(OLED_WriteCmd(0x10))
        return 3;//---set high column address
    if(OLED_WriteCmd(0x40))
        return 4;//--set start line address  Set Mapping RAM Display Start Line (0x00~0x3F)
    if(OLED_WriteCmd(0x81))
        return 5;//--set contrast control register
    if(OLED_WriteCmd(Brightness))
        return 6; // Set SEG Output Current Brightness
    if(OLED_WriteCmd(0xa1))
        return 7;//--Set SEG/Column Mapping     0xa0左右反置 0xa1正常
    if(OLED_WriteCmd(0xc8))
        return 8;//Set COM/Row Scan Direction   0xc0上下反置 0xc8正常
    if(OLED_WriteCmd(0xa6))
        return 9;//--set normal display
    if(OLED_WriteCmd(0xa8))
        return 10;//--set multiplex ratio(1 to 64)
    if(OLED_WriteCmd(0x3f))
                return 11;//--1/64 duty
    if(OLED_WriteCmd(0xd3))
        return 12;//-set display offset        Shift Mapping RAM Counter (0x00~0x3F)
    if(OLED_WriteCmd(0x00))
        return 13;//-not offset
    if(OLED_WriteCmd(0xd5))
        return 14;//--set display clock divide ratio/oscillator frequency
    if(OLED_WriteCmd(0x80))
        return 15;//--set divide ratio, Set Clock as 100 Frames/Sec
    if(OLED_WriteCmd(0xd9))
        return 16;//--set pre-charge period
    if(OLED_WriteCmd(0xf1))
        return 17;//Set Pre-Charge as 15 Clocks & Discharge as 1 Clock
    if(OLED_WriteCmd(0xda))
        return 18;//--set com pins hardware configuration
    if(OLED_WriteCmd(0x12))
        return 19;
    if(OLED_WriteCmd(0xdb))
        return 20;//--set vcomh
    if(OLED_WriteCmd(0x40))
        return 21;//Set VCOM Deselect Level
    if(OLED_WriteCmd(0x20))
        return 22;//-Set Page Addressing Mode (0x00/0x01/0x02)
    if(OLED_WriteCmd(0x02))
        return 23;//
    if(OLED_WriteCmd(0x8d))
        return 24;//--set Charge Pump enable/disable
    if(OLED_WriteCmd(0x14))
        return 25;//--set(0x10) disable
    if(OLED_WriteCmd(0xa4))
        return 26;// Disable Entire Display On (0xa4/0xa5)
    if(OLED_WriteCmd(0xa6))
        return 27;// Disable Inverse Display On (0xa6/a7)
    if(OLED_WriteCmd(0xaf))
        return 28;//--turn on oled panel
    if(OLED_Clear(0x00))
        return 29; //初始清屏
    if(OLED_SetXY(0,0))
        return 30;
    return 0;
}





分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:119067 發(fā)表于 2016-5-8 16:46 | 只看該作者
您好,我想用stc12c5a32s2寫一個(gè)時(shí)鐘程序在IIC-oled12864上顯示,但是不知道時(shí)鐘數(shù)據(jù)怎樣在oled上顯示
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 一区二区在线不卡 | 日本午夜一区二区三区 | 欧美在线观看免费观看视频 | 91影院在线观看 | 天天曰天天曰 | 国产ts人妖系列高潮 | 欧美视频成人 | 成人精品视频在线观看 | 成人在线视频免费看 | 99久久99 | 91精品久久久久久久久久入口 | 精品免费国产一区二区三区四区介绍 | 97热在线 | 黄色国产 | 日本在线中文 | 欧美在线一区二区视频 | 日韩在线视频免费观看 | 亚洲二区在线 | 国产成人综合在线 | 国产成人精品免费视频大全最热 | 99riav3国产精品视频 | 在线观看的av | 久久久久无码国产精品一区 | www.久久| 亚洲一区二区精品视频 | 国产精品av久久久久久久久久 | 精品网站999www | 射欧美 | 自拍视频一区二区三区 | 在线天堂免费中文字幕视频 | 日韩免费一区 | 91看国产 | 亚洲国产高清在线观看 | 中文字幕一区在线观看视频 | 成人h视频 | 免费日韩av网站 | 久久久噜噜噜www成人网 | 欧美精品欧美精品系列 | 日韩免费av一区二区 | 成人不卡 | 天堂一区二区三区四区 |