📄 iic.c
字号:
#include <stdio.h>
#include <reg51.h>
#include <absacc.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
sbit scl=P3^0; //24c02 SCL
sbit sda=P3^1; //24c02 SDA
uchar code disptable[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01, //0,1,2,3,4,5,6,7,8
0x09,0x11,0xc1,0x63,0x85,0x61,0x71,0xff}; //9,null
sbit P20=P2^0;
sbit P21=P2^1;
sbit P22=P2^2;
sbit P23=P2^3;
sbit P24=P2^4;
sbit P25=P2^5;
bdata uchar flag;
sbit flag0=flag^0;
sbit flag1=flag^1;
sbit flag2=flag^2;
sbit flag3=flag^3;
sbit flag4=flag^4;
sbit flag5=flag^5;
sbit flag6=flag^6;
sbit flag7=flag^7;
uchar x24c02_read(uchar address); //从24c02的地址address中读取一个字节数据
void x24c02_write(uchar address,uchar info);//向24c02的address地址中写入一字节数据info
void x24c02_init(); //24c02初始化子程序
void delay1(uchar x);
void x24c01_init();
void start();
void stop();
void writex(uchar j);
uchar readx();
void clock();
uchar i;
void delay(uchar x) { /*--延时子程序--*/
uchar y;
while(x-->0) {
for(y=0;y<125;y++) {;}
}
}
void x24c02_init()
{
scl=1; sda=1;
}
void start()
{
sda=1;
scl=1;
sda=0;
scl=0;
}
void stop()
{
scl=0;
sda=0;
scl=1;
sda=1;
}
void writex(uchar j)
{
uchar i,temp;
temp=j;
for (i=0;i<8;i++)
{
sda=(bit)(temp&0x80);
scl=1;
scl=0;
temp=temp<<1;
}
scl=0;
sda=1;
}
uchar readx()
{
uchar i,j,k=0;
scl=0;
sda=1;
for (i=0;i<8;i++)
{
scl=1;
if (sda==1) j=1;
else j=0;
k=(k<<1)|j;
scl=0;
}
return(k);
}
void clock()
{
uchar i=0;
sda=1;
scl=1;
i=sda;
scl=0;
}
uchar x24c02_read(uchar address)
{
uchar i;
start();
writex(0xa0);
clock();
writex(address);
clock();
start();
writex(0xa1);
clock();
i=readx();
stop();
delay(5);
return(i);
}
void x24c02_write(uchar address,uchar info)
{
EA=0;
start();
writex(0xa0);
clock();
writex(address);
clock();
writex(info);
clock();
stop();
EA=1;
delay(5);
}
void disp(void)
{
P0=0x25;
P20=1;
delay(5);
P20=0;
P0=0x99;
P21=1;
delay(5);
P21=0; //显示24
P0=0xff;
P22=1;
delay(5);
P22=0;
P0=0xff;
P23=1;
delay(5);
P23=0;
P0=disptable[i/16];
P24=1;
delay(5);
P24=0;
P0=disptable[i%16];
P25=1;
delay(5);
P25=0;
}
void disperr(void)
{
P0=0x25;
P20=1;
delay(5);
P20=0;
P0=0x99;
P21=1;
delay(5);
P21=0; //显示24err
P0=0xff;
P22=1;
delay(5);
P22=0;
P0=0x61;
P23=1;
delay(5);
P23=0;
P0=0xf1;
P24=1;
delay(5);
P24=0;
P0=0xf5;
P25=1;
delay(5);
P25=0;
}
void dispgood(void)
{
P0=0x25;
P20=1;
delay(5);
P20=0;
P0=0x99;
P21=1;
delay(5);
P21=0; //显示24 good
P0=0x09;
P22=1;
delay(5);
P22=0;
P0=0x03;
P23=1;
delay(5);
P23=0;
P0=0x03;
P24=1;
delay(5);
P24=0;
P0=0x85;
P25=1;
delay(5);
P25=0;
}
//====================================================================//
void main ()
{
uchar data addr,dat,j;
x24c02_init();
flag0=1;flag1=0;
addr=0;
dat=0x55;
while(flag0)
{
x24c02_write(addr,dat);
i=dat;
for(j=0;j<20;j++)
disp();
j=x24c02_read(addr);
if(j!=dat)flag1=1;
addr++;
dat++;
if(addr==0x11)flag0=0;
}
if(flag1){
i=0;
while(1)disperr();
}
else{
i=255;
while(1){
dispgood();
}
}
//x24c02_init();
}
//===================================================================//
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -