⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 24c02.c

📁 52单片机开发板的实例程序
💻 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 + -