📄 at24c02.c
字号:
#include <reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define AddWr 0xa0 //器件地址选择及写标志
#define AddRd 0xa1 //器件地址选择及读标志
/*有关全局变量*/
sbit Sda=P3^7; //at24c08的SDA与P3.7相连
sbit Scl=P3^6; //at24c08的SCL与P3.6相连
sbit LOAD = P3^1; //MAX7219的LOAD与P3.1相连
sbit DIN = P3^0; //MAX7219的DIN与P3.0相连
sbit CLK = P3^2; //MAX7219的CLK与P3.2相连
void mDelay(uint t) //延时
{ uchar i;
while(t--)
{
for(i=0;i<125;i++)
{;}
}
}
void Nop(void) //空操作
{
_nop_();
_nop_();
_nop_();
_nop_();
}
/*起始条件*/
void Start(void)
{
Sda=1;
Scl=1;
Nop();
Sda=0;
Nop();
}
/*停止条件*/
void Stop(void)
{
Sda=0;
Scl=1;
Nop();
Sda=1;
Nop();
}
/*应答位*/
void Ack(void)
{
Sda=0;
Nop();
Scl=1;
Nop();
Scl=0;
}
/*反向应答位*/
void NoAck(void)
{
Sda=1;
Nop();
Scl=1;
Nop();
Scl=0;
}
/*发送数据子程序,Data为要求发送的数据*/
void Send(uchar Data)
{
uchar BitCounter=8;
uchar temp;
do
{
temp=Data;
Scl=0;
Nop();
if((temp&0x80)==0x80)
Sda=1;
else
Sda=0;
Scl=1;
temp=Data<<1;
Data=temp;
BitCounter--;
}
while(BitCounter);
Scl=0;
}
/*读一字节的数据,并返回该字节值*/
uchar Read(void)
{
uchar temp=0;
uchar temp1=0;
uchar BitCounter=8;
Sda=1;
do{
Scl=0;
Nop();
Scl=1;
Nop();
if(Sda)
temp=temp|0x01;
else
temp=temp&0xfe;
if(BitCounter-1)
{
temp1=temp<<1;
temp=temp1;
}
BitCounter--;
}
while(BitCounter);
return(temp);
}
void WrToROM(uchar Data[],uchar Address,uchar Num)
{
uchar i;
uchar *PData;
PData=Data;
for(i=0;i<Num;i++)
{
Start();
Send(0xa0);
Ack();
Send(Address+i);
Ack();
Send(*(PData+i));
Ack();
Stop();
mDelay(20);
}
}
void RdFromROM(uchar Data[],uchar Address,uchar Num)
{
uchar i;
uchar *PData;
PData=Data;
for(i=0;i<Num;i++)
{
Start();
Send(0xa0);
Ack();
Send(Address+i);
Ack();
Start();
Send(0xa1);
Ack();
*(PData+i)=Read();
Scl=0;
NoAck();
Stop();
}
}
/*MAX7219写入*/
void Write(uchar add,uchar dat)
{
uchar ADS,i,l;
LOAD = 0;
i=0;
while(i<16)
{
if(i<8)
{
ADS=add;
}
else
{
ADS=dat;
}
for (l=8;l>=1;l--)
{
CLK = 0;
DIN =ADS&0x80;
ADS=ADS<<1;
CLK = 1;
CLK=0;
}
i=i+8;
}
LOAD = 1;
}
/*MAX7219初始化*/
void Initial(void)
{
Write(0x0A,0xf5);
Write(0x0B,0x07);
Write(0x0C,0x01);
Write(0x09,0xFF);
}
void main()
{ uchar i;
uchar j;
uchar k;
uchar Number[24]={1,2,3,4,5,6,7,8,8,7,6,5,4,3,2,1,8,8,8,8,1,1,1,1};
uchar Buffer[4]={0};
Initial(); //初始化MAX7219
mDelay(500);
WrToROM(Number,0,24); //将Number中的数据写入24C02中
while(1)
{
k=0;
for(i=0;i<6;i++)
{
RdFromROM(Buffer,k,4); //将24C02中的数据每次取出4个给Buffer数组
k=k+4;
for(j=0;j<4;j++)
{
Write(0x01+j,Buffer[j]); //显示从24C02中读出的数据进行验证
}
mDelay(1000);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -