一、OLED顯示屏
STC15W408AS單片機(jī)并沒有提供IIC總線的接口,但是我們可以通過(guò)模擬IIC的方式實(shí)現(xiàn)。關(guān)于IIC總線的只是大家可以自行上網(wǎng)搜索。這里以驅(qū)動(dòng)SSD1306芯片的0.96寸的128*64的OLED顯示屏為例。
二、SSD1306芯片的IIC時(shí)序圖


這里我們需要看清楚START信號(hào)和STOP信號(hào)。關(guān)于時(shí)間,芯片的數(shù)據(jù)手冊(cè)也有說(shuō)明。

IIC數(shù)據(jù)傳輸格式

這個(gè)是芯片的數(shù)據(jù)傳輸格式。
手冊(cè)中的這句話和上圖右下角的,也說(shuō)明了芯片的器件地址是0x78或者0x79。至于我們用的OLED液晶是哪一個(gè),需要我們用這兩個(gè)地址測(cè)試,我沒找到哪個(gè)手冊(cè)有說(shuō)明,具體是哪一個(gè)。
關(guān)于芯片的寄存器,手冊(cè)上面有很多,這里不做說(shuō)明,自己查閱手冊(cè)即可。
三、測(cè)試程序
1.IIC.h文件
#ifndef __IIC_H_
#define __IIC_H_
#define u16 unsigned int 
#define u8  unsigned char
void IIC_Start();
void IIC_Stop();
void IIC_Write_Byte(u8 byte);
void IIC_Wait_Ack();
void IIC_Write_Command(u8 cmd);
void IIC_Write_Data(u8 dat);
#endif
2.IIC.c文件
#include "stc15.h"
#include "iic.h"
#define IIC_SCL   P10   // 時(shí)鐘
#define IIC_SDA   P11   // 數(shù)據(jù)
// IIC 開始信號(hào)
void IIC_Start()
{
  IIC_SCL = 1 ;
  IIC_SDA = 1;
  IIC_SDA = 0;
  IIC_SCL = 0;
}
// IIC 停止信號(hào)
void IIC_Stop()
{
  IIC_SCL = 1 ;
//  IIC_SCL = 0;
  IIC_SDA = 0;
  IIC_SDA = 1; 
}
// IIC 應(yīng)答信號(hào)
void IIC_Wait_Ack()
{
  IIC_SCL = 1 ;
  IIC_SCL = 0;
}
// IIC 寫一字節(jié)數(shù)據(jù)
void IIC_Write_Byte(u8 IIC_Byte)
{
  u8 i;
  u8 m,da;
  da = IIC_Byte;
  IIC_SCL = 0;
  for(i = 0;i < 8;i++)     
  {
    m = da;
    //  IIC_SCL = 0;
    m = m&0x80;
    if(m==0x80)
    {
      IIC_SDA = 1;
    }
    else IIC_SDA = 0;
      da = da< 1;
    IIC_SCL = 1;
    IIC_SCL = 0;
  }
}
3.OLED.h文件
#ifndef __OLED_H_
#define __OLED_H_
#define u16 unsigned int 
#define u8  unsigned char
#define OLED_CMD  0  // 寫命令
#define OLED_DATA 1  // 寫數(shù)據(jù)
#define OLED_MODE 0 // 顯示模式
//OLED模式設(shè)置
//0:4線串行模式
//1:并行8080模式
#define OLED_Address 0x78
#define OLED_Cmd  0x00
#define OLED_Data 0x40
#define SIZE 16
#define XLevelL    0x02
#define XLevelH    0x10
#define Max_Column  128
#define Max_Row    64
#define  Brightness  0xFF 
#define X_WIDTH   128
#define Y_WIDTH   64    
//OLED控制用函數(shù)
void OLED_WR_Byte(u8 dat,u8 cmd);   
void OLED_Display_On(void);
void OLED_Display_Off(void);                               
void OLED_Init(void);
void OLED_Clear(void);
void OLED_DrawPoint(u8 x,u8 y,u8 t);
void OLED_Fill(u8 x1,u8 y1,u8 x2,u8 y2,u8 dot);
void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size);
void OLED_ShowNum(u8 x,u8 y,u16 num,u8 len,u8 size2);
void OLED_ShowString(u8 x,u8 y, u8 *p,u8 Char_Size);    
void OLED_Set_Pos(u8 x, u8 y);
void OLED_ShowCHinese(u8 x,u8 y,u8 no);
void OLED_DrawBMP(u8 x0, u8 y0,u8 x1, u8 y1,u8 BMP[]);
void fill_picture(u8 fill_Data);
void Picture();
#endif
 電子發(fā)燒友App
                        電子發(fā)燒友App
                     
                 
                 
           
        
