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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 22512|回復: 1
打印 上一主題 下一主題
收起左側

I2C接口的SSD1306---OLED驅動

[復制鏈接]
跳轉到指定樓層
樓主
ID:75926 發表于 2015-4-10 16:58 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
/*
    這個液晶只需要兩根線用模擬或者硬件的I2C都可以 硬件設計非常簡單
*/
#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()    //實現延時4us

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

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);//設置x高4位
    OLED_WriteCmd(((0x0f&x)>>4))|0x01);//設置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)
{
   // 延時一下 再初始化
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 分享淘帖 頂 踩
回復

使用道具 舉報

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

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品一区二区三区在线观看国产 | 久久一区二区av | 欧美jizzhd精品欧美巨大免费 | 日韩欧美三区 | 艹逼网 | 久久99精品久久久久蜜桃tv | 91视频网 | 免费一看一级毛片 | 国产精品一区二区av | 日韩在线视频网址 | 日韩精品一区二区三区久久 | 男女在线网站 | 美女福利视频一区 | 男人久久天堂 | 视频在线一区 | 在线观看成年人视频 | 久久久久久久久久一区二区 | 日韩精品在线播放 | 久久久久久久国产精品视频 | 中文字幕99 | 国产色爽 | 国产精品自产av一区二区三区 | 亚洲iv一区二区三区 | 亚洲一区二区视频在线播放 | 日韩在线xx| 亚洲成人一区二区在线 | 视频精品一区二区三区 | 最近中文字幕在线视频1 | 日韩免费在线 | 超碰在线影院 | 国产午夜视频 | 久久免费视频2 | 精品国模一区二区三区欧美 | 免费国产视频在线观看 | 99精品一区 | 亚洲国产成人av好男人在线观看 | 精品免费国产一区二区三区四区 | 国产精品精品久久久 | 国产精品福利久久久 | 久久精品色欧美aⅴ一区二区 | av三级|