#include "oled.h"
#include "stdlib.h"
#include "oledfont.h"
#include "delay.h"
#include "usart.h"
//SSD1306 OLED 驱动IC驱动代码
//驱动方式:IIC
//OLED的显存
//存放格式如下.
//[0]0 1 2 3 ... 127
//[1]0 1 2 3 ... 127
//[2]0 1 2 3 ... 127
//[3]0 1 2 3 ... 127
//[4]0 1 2 3 ... 127
//[5]0 1 2 3 ... 127
//[6]0 1 2 3 ... 127
//[7]0 1 2 3 ... 127
u8 OLED_GRAM[128][8];
//更新显存到LCD
void OLED_Refresh_Gram(void)
{
u8 i,n;
for(i=0;i<8;i++)
{
OLED_WR_Byte (0xb0+i,OLED_CMD); //设置页地址(0~7)
OLED_WR_Byte (0x00,OLED_CMD); //设置显示位置—列低地址
OLED_WR_Byte (0x10,OLED_CMD); //设置显示位置—列高地址
for(n=0;n<128;n++)OLED_WR_Byte(OLED_GRAM[n][i],OLED_DATA);
}
}
void OLED_IIC_START(void)
{
SDA_OUT(); //SDA线输出
OLED_SDIN=1;
OLED_SCLK=1;
delay_us(4);
OLED_SDIN=0;//START:when CLK is high,DATA change form high to low
delay_us(4);
OLED_SCLK=0;//钳住IIC总线,准备发送或者接收数据
}
void OLED_IIC_STOP(void)
{
SDA_OUT(); //SDA线输出
OLED_SCLK=0;
OLED_SDIN=0;//STOP:when CLK is high DATA change form low to high
delay_us(4);
OLED_SCLK=1;
OLED_SDIN=1;//发送I2C总线结束信号
delay_us(4);
}
//等待应答信号到来
//返回值: 1,接收应答失败,停止IIC总线
// 0,接收应答成功
//单片机作为主设备等待从设备的应答信号
u8 OLED_IIC_WAITACK(void)
{
u8 timer=0;
OLED_SDIN=1;delay_us(1);//和开发教程IIC顺序不同
OLED_SCLK=1;delay_us(1);
SDA_IN(); //SDA设置为输入和开发教程IIC顺序不同
while(OLED_SDIN_IN)
{
timer++;
if(timer++>250)
{
OLED_IIC_STOP();
return 1;
}
}
OLED_SCLK=0;//时钟输出0
return 0;
}
//IIC发送一个字节
void MCU_Send_Byte(u8 txd)
{