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

📄 24c02.c

📁 利用外部存储24C02完成开机计数实验,每一秒计数一次.
💻 C
字号:
#include <AT89X52.H>
#define uchar unsigned char
#define uint unsigned int
sbit wx1= P3^5;
sbit wx2= P3^6;
sbit scl=P2^2;
sbit sda=P2^3;
void display();
uchar k,count,num,flag;
uchar code table[]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void delay()
 {
  ; ;
  }

void init() //24C02 初始化
 {
  sda=1;
  delay();
  scl=1;
  delay();
  TR0=1;
  ET0=1;
  EA=1;
  }
void start() //开始信号
{
  sda=1;
  delay();
  scl=1;
  delay();
  sda=0;
  delay();
  }
void stop() //结束信号
{
  sda=0;
  delay();
  scl=1;
  delay();
  sda=1;
  delay();
  }
void respons() //应答信号
{
  uchar i=0;
  scl=1;
  delay();
  while((sda==1)&&(i<250))i++; //应答等待,如超时则认为应答成功
  scl=0;
  delay();
  }
void writebyte(uchar dat) //写位操作
{
  uchar i,temp;
  temp=dat;
  for(i=0;i<8;i++)
  {
   temp=temp<<1;
   scl=0;
   delay();
   sda=CY;
   delay();
   scl=1;
   delay();
    }
  scl=0;
  delay();
  sda=1;
  delay();
   }
uchar readbyte() //读位操作
{
  uchar i,k;
  scl=0;
  delay();
  sda=1;
  delay();
  for(i=0;i<8;i++)
  {
   scl=1;
   delay();
   k=(k<<1)|sda;
   scl=0;
   delay();
   }
  return k;

  }
void writeadd(uchar address,uchar info) //向24C02 写数据操作,凡写入都要有形参
{
 start();
 writebyte(0xa0);
 respons();
 writebyte(address);
 respons();
 writebyte(info);
 respons();
 stop();
 }
uchar readadd(uchar address) //从24C02 读数据操作,凡读出都要有返回值
{
 uchar dd;
 start();
 writebyte(0xa0);
 respons();
 writebyte(address);
 respons();
 start();
 writebyte(0xa1);
 respons();
 dd=readbyte();
 stop();
 return dd;
 }
delay1(uchar z)
{
 int x,y;
 for(x=z;x>0;x--)
 for(y=100;y>0;y--);
}
 
 void display(uchar x)
{
 wx1=0;
 P0=table[x/10];
 delay1(1);
 P0=0xff;
 wx1=1;
 wx2=0;
 P0=table[x%10];
 delay1(1);
 P0=0xff;
 wx2=1;
}
void main()
{
 init();
 count=readadd(0);
 delay1(10);
 TH0=(65536-50000)/256;
 TL0=(65536-50000)%256;
 while(1)
 {
  display(count);
 }
}
  


void ser() interrupt 1
{
 TH0=(65536-50000)/256;
 TL0=(65536-50000)%256;
 num++;
 if(num==20)
 {
  count++;
  if(count==100)
  {
   count=0;
  }
  writeadd(0,count);
  delay1(10);  
 }
}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -