📄 24c02.c
字号:
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit a=P1^0;
sbit b=P1^1;
sbit c=P1^2;
sbit clk=P3^6;
sbit sda=P3^7;
const uchar table[]={
0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f};
void delay_24C02()
{ ; ; ; ; }
void delay(uint k)
{
uint i;
for(;k>0;k--)
for(i=110;i>0;i--);
}
void HC138(uchar i)
{
a=i&0x01;
b=i&0x02;
c=i&0x04;
}
/**************************************
数码管显示函数,带参数
要实现显示时,调用函数带一个实参即可
******************************/
void display(uchar num)
{
uchar ge,shi,bai;
bai=num/100;
shi=num%100/10;
ge=num%10;
HC138(0);
P2=table[ge];
delay(2);
HC138(1);
P2=table[shi];
delay(2);
HC138(2);
P2=table[bai];
delay(2);
}
void init_24C02()//24C02初始化
{
sda=1;
delay_24C02();
clk=1;
delay_24C02();
}
void start()//24C02启动信号
{
sda=1;delay_24C02();
clk=1;delay_24C02();
sda=0;delay_24C02();
}
void stop()//24C02终止信号
{
sda=0;delay_24C02();
clk=1;delay_24C02();
sda=1;delay_24C02();
}
void respons()//应答信号
{
uchar i=0;
clk=1;delay_24C02();
while((sda==1)&&(i<255)) i++;
clk=0;
delay_24C02();
}
void No_ack()
{
sda=1;
clk=1;
delay_24C02();
clk=0;
delay_24C02();
}
void write_byte(uchar date)//写一个字节,共8位
{
uchar i,temp;
temp=date;
for(i=0;i<8;i++)
{
clk=0;
delay_24C02();
if(temp&0x80)
sda=1;
else
sda=0;
clk=1;
delay_24C02();
temp<<=1;
}
clk=0;delay_24C02();
sda=1;delay_24C02();
}
uchar read_byte()//读一个字节
{
uchar i,k;
for(i=0;i<8;i++)
{
clk=1;
delay_24C02();
k<<=1;
if(sda)
k++;
clk=0;
delay_24C02();
}
return k;
}
void write_add(uchar address,uchar date)//指定地址写一个数据
{
start();
write_byte(0xa0);
respons();
write_byte(address);
respons();
write_byte(date);
respons();
stop();
}
uchar read_add(uchar address)//读出指定地址的数据
{
uchar date;
start();
write_byte(0xa0);
respons();
write_byte(address);
respons();
start();
write_byte(0xa1);
respons();
date=read_byte();
No_ack();
stop();
return date;
}
void main()
{
uchar temp,i,j;
init_24C02();
for(i=0;i<40;i++)//往AT24C02地址0到20分别写入0至20数据
{
write_add(i,i);
delay(20);
}
delay(2000);
while(1)
{
for(i=0;i<40;i++)//分别从0至20地址读出数据进行显示
{
temp=read_add(i);
for(j=0;j<50;j++)//相当于延时,因为数码管要实现动态扫描
display(temp);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -