?? at24c02測試程序.c
字號:
/************************************************
AT24C02測試程序,向其中一個地址(0x66)寫數據(0x06),然后讀取
數碼管中顯示出來
****************************************************/
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit LE1=P2^7;
sbit A=P2^0;
sbit BB=P2^1;
sbit C=P2^2;
uchar tempt;
//uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,
// 0x6d,0x7d,0x07,0x7f,0x6f};
void delay(uint t)
{
uchar j;
for(;t>0;t--)
for(j=19;j>0;j--);
}
/*****AT24C02**************************************************************************************/
sbit AT24C02_SDA=P1^4;
sbit AT24C02_SCL=P1^3;
bit AT24C02_ACK; //AT24C02 應答標志位
void delayI2C();
void AT24C02Start();
void AT24C02Stop();
void AT24C02Respons();
void Init_AT24C02();
void AT24C02Write_Byte(uchar dat_I2C);
void AT24C02Write(uchar addrI2C,uchar datI2C);
void delayI2C()
{
_nop_(); //延時要大于4.7us
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
void Init_AT24C02()
{
AT24C02_SDA=1;
delayI2C();
AT24C02_SCL=1;
delayI2C();
}
void AT24C02Start()
{
AT24C02_SDA=1;
_nop_();
AT24C02_SCL=1;
delayI2C();
AT24C02_SDA=0;
delayI2C();
AT24C02_SCL=0;
_nop_();
_nop_();
}
void AT24C02Stop()
{
AT24C02_SDA=0;
_nop_();
AT24C02_SCL=1;
delayI2C();
AT24C02_SDA=1;
delayI2C();
}
void AT24C02Respons()
{
uchar i;
AT24C02_SCL=1;
delayI2C();
while((AT24C02_SDA==1)&&(i<250))
i++;
AT24C02_SCL=0;
delayI2C();
}
void AT24C02Write_Byte(uchar dat_I2C)
{
uchar i,tempI2C;
tempI2C=dat_I2C;
for(i=0;i<8;i++)
{
tempI2C=tempI2C<<1;
AT24C02_SCL=0;
delayI2C();
AT24C02_SDA=CY;
delayI2C();
AT24C02_SCL=1;
delayI2C();
}
AT24C02_SCL=0;
delayI2C();
AT24C02_SDA=1;
delayI2C();
}
unsigned char AT24C02Read_Byte()
{
uchar i,k;
k=0;
AT24C02_SCL=0;
delayI2C();
AT24C02_SDA=1;
delayI2C();
for(i=0;i<8;i++)
{
AT24C02_SCL=1;
delayI2C();
k=(k<<1)|AT24C02_SDA;
AT24C02_SCL=0;
delayI2C();
}
AT24C02_SCL=0;
delayI2C();
return(k);
}
void AT24C02Write(uchar addrI2C,uchar datI2C)
{
AT24C02Start();
AT24C02Write_Byte(0xa0);
AT24C02Respons();
AT24C02Write_Byte(addrI2C);
AT24C02Respons();
AT24C02Write_Byte(datI2C);
AT24C02Respons();
AT24C02Stop();
}
unsigned char AT24C02Read(uchar addrI2C)
{
uchar ic;
AT24C02Start();
AT24C02Write_Byte(0xa0);
AT24C02Respons();
AT24C02Write_Byte(addrI2C);
AT24C02Respons();
AT24C02Start();
AT24C02Write_Byte(0xa1);
AT24C02Respons();
ic=AT24C02Read_Byte();
AT24C02Stop();
return ic;
}
void Init()
{
P1=0xff;
P2=0xff;
P0=0xff;
}
void Display()
{
LE1=1;//選通hc573
//分別依次選通數碼管的位選端
A=0;
BB=0;
C=0;
P0=tempt;
delay(20);
A=1;
BB=0;
C=0;
P0=tempt;
delay(20);
A=0;
BB=1;
C=0;
P0=tempt;
delay(20);
A=1;
BB=1;
C=0;
P0=tempt;
delay(20);
A=0;
BB=0;
C=1;
P0=tempt;
delay(20);
A=1;
BB=0;
C=1;
P0=tempt;
delay(20);
A=0;
BB=1;
C=1;
P0=tempt;
delay(20);
A=1;
BB=1;
C=1;
P0=tempt;
delay(20);
P0=0x00;
LE1=0;
}
void main()
{
Init();
Init_AT24C02();
AT24C02Write(0x66,0x06);
delay(1000);
tempt=AT24C02Read(0x66);
while(1)
{
Display();
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -