📄 iic_bit.c
字号:
#define IIC_READ 0XA1 //定义读指令
#define IIC_WRITE 0XA0 //定义写指令
#define NOP _nop_()
#define uchar unsigned char
#define uint unsigned int
#include "reg52.h"
#define IIC_READ 0XA1 //定义读指令
#define IIC_WRITE 0XA0 //定义写指令
#define NOP _nop_()
//#define SDA INT0
//#define SCL T0
//==============================
uchar xdata buff[2000]; //save the byte read out form iic device in test operation
uchar xdata readbuff[232];//测试数组,暂存写入读出数据
//uchar writebuff[32];
//===============================
sbit SDA=P3^5;//P2^7; //THE SDA BIT IS PORT 2 BIT 7
sbit SCL=P3^4;//P2^6; //THE SCL BIT IS PORT 2 BIT 6
sbit SEN=P3^3;//P2^6; //THE SCL BIT IS PORT 2 BIT 6
sbit STE=P3^2;//P2^6; //THE SCL BIT IS PORT 2 BIT 6
uchar setclk[13]={0x00,0x00,0x12};
uchar getclk[13];
uchar const seg[11]={0x7f,0x44,0xbd,0xf5,0xe6,0xf3,0xfb,0x65,0xff,0xf7,0x00};
uchar dis[8]={0,0,0,0}; //设置显示缓冲存储器
uchar bdata bbyte;//定义位操作用数组,采用此方法可提高位操作速度
sbit a0=bbyte^0;
sbit a1=bbyte^1;
sbit a2=bbyte^2;
sbit a3=bbyte^3;
sbit a4=bbyte^4;
sbit a5=bbyte^5;
sbit a6=bbyte^6;
sbit a7=bbyte^7;
delay(void);
//========================================
bit IFACK; //record the SDA state to confirn if ACK has happened
bit NO_ACK; //no ack flag
bit BUS_FAULT; //bus fault flag
//========================================
code uchar test_y_z[2000] =
{
104, //字体构成图象的宽度
46, //字体构成图象的高度
0, //字体的颜色
0xff, //字体的背景色
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0xFF,0xFE,0xDF,0x00,0x1C,0x0E,
0x1D,0xFE,0xAF,0xFF,0xFF,0xFF,0xF8,0xFF,0xFE,0xBF,0xF5,0xFD,0xEF,0xD0,0x21,0xB7,
0xFF,0xFF,0xFF,0xF8,0xFF,0xFD,0x81,0x80,0x3C,0x0E,0xD7,0xBD,0xBF,0xFF,0xFF,0xFF,
0xF8,0xFF,0xF9,0x7D,0xB5,0xBD,0xEE,0xD0,0x20,0x03,0xFF,0xFF,0xFF,0xF8,0xFF,0xF4,
0xEF,0x80,0x3C,0x0E,0xD7,0xFD,0xBF,0xFF,0xFF,0xFF,0xF8,0xFF,0xFD,0xAB,0xF7,0xFF,
0xFE,0x10,0x3D,0x37,0xFF,0xFF,0xFF,0xF8,0xFF,0xFD,0xAB,0x00,0x00,0x03,0xD2,0xB8,
0xAF,0xFF,0xFF,0xFF,0xF8,0xFF,0xFD,0x6D,0xEE,0xFB,0x7F,0x90,0x25,0xDF,0xFF,0xFF,
0xFF,0xF8,0xFF,0xFC,0xED,0xC5,0xF9,0x06,0x4A,0xBD,0x9B,0xFF,0xFF,0xFF,0xF8,0xFF,
0xFD,0xEF,0xF8,0xF6,0x7F,0xDA,0xBC,0x6B,0x7B,0xEF,0xBD,0xF8,0xFF,0xFD,0x8F,0x07,
0x2F,0x03,0x1F,0x31,0xF3,0xFF,0xFF,0xFF,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0xEA,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xE1,0xFF,0xFD,0xFF,0xF8,0xF1,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xE0,0x3F,0xDC,0xFF,0xF8,0xC0,0x2F,0xFF,0xFF,0xF3,0xFF,0xFF,0xFF,0xFF,
0xBD,0x8C,0xFF,0xF8,0xF1,0xFF,0xFF,0xFF,0xC7,0xEF,0xFF,0xFC,0xFF,0xB9,0x04,0xFF,
0xF8,0xE8,0xFF,0xFF,0xFF,0x07,0x1F,0x7F,0xFF,0x3F,0xF0,0x20,0xFF,0xF8,0xDB,0x7F,
0xFF,0xFC,0x0C,0x1C,0x7F,0x7F,0xCF,0xEE,0x71,0xFF,0xF8,0xFB,0xF7,0xE3,0xF8,0x00,
0x10,0xDF,0x8F,0xF3,0xFE,0x7D,0xFF,0xF8,0xFF,0xFB,0xC1,0xF0,0x00,0x00,0x97,0xC1,
0xF8,0xFE,0xFF,0xEF,0xF8,0xFB,0xEB,0x98,0xE0,0x00,0x39,0x10,0xF0,0x3C,0x3F,0xFF,
0xBF,0xF8,0xFF,0xF1,0xA4,0xE0,0x00,0x04,0x10,0x1C,0x06,0x1F,0x8F,0x97,0xF8,0xFF,
0xD1,0x8A,0xC0,0x00,0x00,0x30,0x00,0x01,0x0F,0x07,0x8F,0xF8,0xFF,0xE0,0x8A,0x00,
0x00,0x00,0x30,0x38,0x00,0x06,0x33,0x1B,0xF8,0xFF,0xA0,0x44,0x00,0x00,0x00,0x50,
0x40,0x00,0x06,0x4B,0x17,0xF8,0xFF,0xC0,0x60,0x00,0x0F,0xC0,0x48,0x00,0x00,0x02,
0xA2,0x05,0xF8,0xFF,0x40,0x70,0x00,0x3F,0xE0,0x88,0x00,0x00,0x00,0xA2,0x03,0xF8,
0xFF,0x80,0xF8,0x00,0x00,0xF1,0x04,0x07,0xE0,0x00,0x44,0x01,0xF8,0xFE,0x81,0xE8,
0x00,0x01,0xC2,0x04,0x4F,0xF8,0x00,0x0F,0x03,0xF8,0xFF,0x00,0x08,0x00,0x01,0x84,
0x02,0x3E,0x00,0x00,0x1F,0x82,0xF8,0xFD,0x00,0x10,0x00,0x00,0x88,0x01,0x06,0x00,
0x00,0x10,0x41,0xF8,0xFE,0x01,0xE0,0x01,0x13,0x08,0x00,0x87,0x00,0x00,0x10,0x01,
0xB8,0xFF,0x06,0x20,0x00,0x88,0x10,0x00,0x43,0x00,0x00,0x10,0x01,0x18,0xFD,0x0A,
0x10,0x01,0x44,0x10,0x00,0x22,0x00,0x00,0x18,0x01,0xB8,0xF8,0x11,0x10,0x00,0x80,
0x10,0x00,0x21,0x91,0x00,0x14,0x01,0xF8,0xFC,0x10,0x88,0x70,0x00,0x10,0x00,0x10,
0x22,0x03,0xE0,0x00,0xB8,0xFE,0x20,0x84,0x4C,0x00,0x20,0x00,0x10,0x45,0x05,0x31,
0x00,0xF8,0xF4,0x20,0x43,0x8B,0x80,0xC0,0x00,0x10,0x02,0x08,0x88,0x80,0xB8,0xFC,
0x20,0x40,0x08,0xFF,0x00,0x00,0x10,0x00,0x18,0x40,0x40,0x78,0xF6,0x20,0x40,0x08,
0x80,0x00,0x00,0x08,0x00,0x68,0x40,0x00,0xD8,0xFC,0x20,0x40,0x08,0x80,0x00,0x00,
0x06,0x03,0x90,0x20,0x20,0x68,
};
code uchar test_y_a[2000] =
{
24, //字体构成图象的宽度
240, //字体构成图象的高度
0, //字体的颜色
0xff, //字体的背景色
0x00,0x01,0x00,0x00,0x83,0x00,0x00,0x83, //"单",
0x00,0x00,0x42,0x00,0x00,0x62,0x00,0x00,
0x64,0x60,0x02,0x1F,0xE0,0x03,0xF8,0x60,
0x02,0x18,0x40,0x02,0x1A,0x40,0x02,0xFE,
0x40,0x02,0x98,0x40,0x02,0x18,0x40,0x02,
0x3F,0xC0,0x03,0xF8,0x00,0x03,0x18,0x00,
0x00,0x18,0x7C,0x01,0xFF,0xF0,0x3F,0x98,
0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,
0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,
0x00,0x00,0x20,0x04,0x00,0xF0,0x04,0x7F, //"用",
0xE0,0x07,0xF8,0x20,0x06,0x10,0x20,0x06,
0x10,0x20,0x06,0x10,0x20,0x06,0x1F,0xA0,
0x06,0xFC,0x20,0x06,0x10,0x20,0x06,0x10,
0x20,0x06,0x10,0x20,0x04,0x1F,0xA0,0x05,
0xF8,0x20,0x04,0x10,0x20,0x04,0x10,0x20,
0x04,0x10,0x20,0x08,0x10,0x20,0x08,0x10,
0x20,0x18,0x10,0x20,0x10,0x11,0xA0,0x20,
0x10,0xE0,0x60,0x10,0x60,0x00,0x00,0x00,
0x00,0x04,0x00,0x00,0x06,0x00,0x02,0x06, //"片",
0x00,0x03,0x06,0x00,0x01,0x06,0x00,0x01,
0x06,0x00,0x01,0x06,0x00,0x01,0x06,0x00,
0x01,0x06,0x78,0x01,0x3F,0xF0,0x01,0xF8,
0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x01,
0x03,0x00,0x03,0x7F,0x00,0x03,0xE3,0x00,
0x02,0x03,0x00,0x02,0x03,0x00,0x02,0x03,
0x00,0x06,0x03,0x00,0x04,0x03,0x00,0x04,
0x03,0x00,0x08,0x03,0x00,0x08,0x03,0x00,
0x04,0x00,0x00,0x02,0x00,0x00,0x02,0x08, //"机",
0x40,0x02,0x0F,0xC0,0x02,0x08,0xC0,0x02,
0x08,0xC0,0x02,0x68,0xC0,0x7F,0xE8,0xC0,
0x66,0x08,0xC0,0x06,0x08,0xC0,0x07,0x08,
0xC0,0x0F,0x88,0xC0,0x0A,0xD8,0xC0,0x0A,
0x58,0xC0,0x12,0x18,0xC0,0x12,0x18,0xC0,
0x22,0x10,0xC4,0x22,0x10,0xC4,0x42,0x10,
0xC4,0x02,0x30,0xC6,0x02,0x20,0xC6,0x02,
0x20,0xC6,0x06,0x40,0x7E,0x06,0x80,0x00,
0x00,0x00,0x00,0x00,0x48,0x08,0x1F,0xEF, //"驱",
0xFC,0x1C,0x4E,0x00,0x00,0x48,0x20,0x04,
0xC8,0x30,0x04,0xC8,0x30,0x04,0x8A,0x20,
0x0C,0x89,0x60,0x08,0x89,0xE0,0x08,0xA8,
0xC0,0x0B,0xE8,0xC0,0x1F,0x68,0xE0,0x00,
0x68,0xA0,0x00,0x69,0xB0,0x01,0x49,0x30,
0x1E,0x4A,0x10,0x70,0x4A,0x00,0x00,0x4C,
0x00,0x02,0xC8,0x0C,0x03,0x8F,0xFE,0x01,
0x8C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x80,0x00,0x00,0xC0,0x00,0x00, //"动",
0xC0,0x00,0x00,0x80,0x03,0xF0,0x80,0x06,
0x00,0x80,0x00,0x00,0x80,0x00,0x01,0x80,
0x00,0x01,0x98,0x01,0xFF,0xF8,0x3F,0x0D,
0x18,0x01,0x01,0x10,0x03,0x03,0x10,0x02,
0x02,0x10,0x02,0x42,0x30,0x04,0x26,0x30,
0x04,0x74,0x20,0x0F,0xBC,0x20,0x1E,0x08,
0x20,0x18,0x08,0x60,0x00,0x11,0x60,0x00,
0x20,0xC0,0x00,0x60,0xC0,0x00,0x80,0x00,
0x00,0x20,0x00,0x00,0x30,0x00,0x00,0x30, //"电",
0x00,0x00,0x30,0x00,0x08,0x20,0x40,0x08,
0x27,0xC0,0x0F,0xFF,0xC0,0x0E,0x20,0xC0,
0x0C,0x20,0x80,0x0C,0x26,0x80,0x04,0xFE,
0x80,0x05,0xA0,0x80,0x04,0x20,0x80,0x04,
0x20,0x80,0x04,0x3F,0x80,0x07,0xFC,0x00,
0x0C,0x20,0x00,0x04,0x20,0x08,0x04,0x20,
0x08,0x00,0x30,0x08,0x00,0x30,0x08,0x00,
0x1F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x02,0x00,0x08,0x03,0x00,0x09,0x83, //"脑",
0x00,0x0F,0x81,0x00,0x08,0x80,0x0C,0x08,
0x8F,0xFC,0x08,0xFC,0x00,0x08,0x80,0xC0,
0x0F,0x88,0xC0,0x08,0x84,0x90,0x08,0xA5,
0x98,0x08,0xB3,0x10,0x0F,0xB3,0x10,0x08,
0x93,0x10,0x08,0x93,0x90,0x08,0x96,0x90,
0x18,0x94,0xD0,0x10,0x98,0x10,0x10,0x90,
0x10,0x10,0x90,0x10,0x37,0xBF,0xF0,0x23,
0xB8,0x10,0x21,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x02,0x00,0xC0,0x03,0xFF, //"显",
0xC0,0x03,0xE0,0xC0,0x03,0x00,0xC0,0x03,
0x06,0x80,0x03,0xFE,0x80,0x03,0x00,0x80,
0x01,0x00,0x80,0x01,0x0F,0x80,0x03,0xFE,
0x00,0x01,0x44,0x00,0x01,0x64,0x20,0x08,
0x64,0x60,0x04,0x64,0x60,0x06,0x64,0xC0,
0x03,0x64,0x80,0x03,0x65,0x00,0x02,0x65,
0x00,0x00,0x64,0x00,0x00,0x64,0x08,0x00,
0x7F,0xFC,0x1F,0xFC,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x3F, //"示",
0xE0,0x03,0xF0,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,
0x07,0xFF,0xF0,0x1F,0x18,0x00,0x00,0x08,
0x00,0x00,0x88,0x00,0x00,0xC9,0x00,0x01,
0x88,0xC0,0x01,0x08,0x60,0x03,0x08,0x30,
0x06,0x08,0x38,0x04,0x08,0x18,0x08,0x08,
0x00,0x10,0x58,0x00,0x00,0x38,0x00,0x00,
0x18,0x00,0x00,0x18,0x00,0x00,0x00,0x00
};
void start(void)
{
SCL=0;
SDA=1;
SCL=1;
SDA=0;
SCL=0;
}
//=======================================
//FUNCTION:ROUTES TO PROVIDE A STOP SIGNAL
void stop(void)
{
SCL=0;
SDA=0;
SCL=1;
SDA=1;
SCL=0;
}
//=====================================
//FUNCTION:ROUTES TO PROVIDE ACK SINGAL
void ack(void)
{
SCL=0;
SDA=0;
SCL=1;
SCL=0;
}
//=====================================
//FUNCTION:ROUTES TO RELEASE THE SDA TO RECEIVE A ACK SIGNAL
// OR TO PROVIDE A NO_ACK SIGNAL
//type=1等待应答信号
//type=0 产生无应答信号
void nack(uchar type)
{
SCL=0;
SDA=1;
SCL=1;
IFACK=SDA;
SCL=0;
if(type)
{
if(IFACK)//如果无应答信号,则置标志位NO_ACK,程序中止
{
NO_ACK=1;//用户可以加入自己的异常处理程序
//while(1);
}
else NO_ACK=0;
}
}
//=======================================================
//FUNCTION:THE IIC DEVICE SHIFT OUT A BYTE TO THE MASTER
uchar inbyte(void) {//从IIC器件中读出数据
SDA=1;
SCL=1;
a7=SDA;
SCL=0;
SCL=1;
a6=SDA;
SCL=0;
SCL=1;
a5=SDA;
SCL=0;
SCL=1;
a4=SDA;
SCL=0;
SCL=1;
a3=SDA;
SCL=0;
SCL=1;
a2=SDA;
SCL=0;
SCL=1;
a1=SDA;
SCL=0;
SCL=1;
a0=SDA;
SCL=0;
return(bbyte);
}
//=======================================================
//FUNCTION:THE IIC DEVICE SHIFT IN A BYTE FROM THE MASTER
void outbyte(uchar outdata) {//将数据写放IIC器件
bbyte=outdata;
SDA=a7;
SCL=1;
SCL=0;
SDA=a6;
SCL=1;
SCL=0;
SDA=a5;
SCL=1;
SCL=0;
SDA=a4;
SCL=1;
SCL=0;
SDA=a3;
SCL=1;
SCL=0;
SDA=a2;
SCL=1;
SCL=0;
SDA=a1;
SCL=1;
SCL=0;
SDA=a0;
SCL=1;
SCL=0;
}
//======================================================
//FUNCTION:BYTE WRITE. 'add' THE WRITE ADDRESS, 'wbyte' THE DATA WANT TO WRITE
void writebyte(uint add,uchar wbyte)//add为写入地址,wbyte为写入数据
{
uchar temph,templ;
temph=(uchar)(add/256);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -