?? 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 + -