久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

i2c總線AT24C02存儲器讀寫程序

作者:佚名   來源:本站原創   點擊數:  更新時間:2012年03月21日   【字體:
#include <reg52.h>
#define uint unsigned int  //定義unsigned int 為uint
#define uchar unsigned char //定義unsigned char  為uchar
#define uchar unsigned char //定義unsigned char  為uchar
#define uint unsigned int  //定義unsigned int 為uint
sbit sda=P3^3;//定義I2C數據線
sbit scl=P3^2;//定義I2C時鐘線
void delay2()//延遲6us函數
{;;;}
void start()//I2C開始時鐘函數
{
   sda=1;
   delay2();//延遲6us是時序要求。
   scl=1;
   delay2();
   sda=0;
   delay2();
}
void stop()//I2C結束時鐘函數
{
   sda=0;
   delay2();//延遲6us是時序要求。
   scl=1;
   delay2();
   sda=1;
   delay2();
}
void respons()//應答函數
{
uchar i;//定義變量I
scl=1;
delay2();
while((sda==1)&&(i<250))i++;//沒有收到應答信號在等
 //過一段時間后還是沒收到自動跳出該語句.相與。
scl=0;
delay2();
}
void init()//初始化函數。
{
 scl=1;
 sda=1;
}
void write_byte(uchar date)//寫一字節函數。
{
  uchar i,temp;
   temp=date;
 for(i=0;i<8;i++)
  {
   temp=temp<<1;//TEMP左移一位!
     scl=0;
     delay2();
     sda=CY;//送走最高位,依次把八位送完。
     scl=1;//保持數據穩定。
     delay2();
    
   }
   scl=0;
   delay2();
   sda=1;//總線釋放。
   delay2();
}
uchar read_byte()//讀一字節函數。帶返回值的函數
{
  uchar i,j,k;
  scl=0;
  delay2();
  sda=1;//總線釋放。
  delay2();
 for(i=0;i<8;i++)
{ 
   scl=1;
   delay2();
   j=sda;
   k=(k<<1)|j;//k左移一位最低位變成了0,再與J相或,J就送到K最低位。
   scl=0;//置低以便下次讀數據。
   delay2();
  }
  return k;
}
void write_add(uchar address,uchar date)
{  start();//I2C開始時鐘函數
   write_byte(0xa0);//at24c02的固定地址A,1010,AO-A3都接地都為0。
   respons();//寫完后調用應答函數
 write_byte(address);//確定從at24c02的第address位置寫數據。
   respons();//寫完后調用應答函數
   write_byte(date);//在芯片第address位置寫date.
   respons();//寫完后調用應答函數
   stop();//I2C結束時鐘函數
}
uchar read_add(uchar address)
{ 
   uchar date;
   start();//I2C開始時鐘函數
   write_byte(0xa0);//開始讀。
   respons();//讀完后調用應答函數
   write_byte(address);//確定從at24c02的第address位置讀數據。
   respons();//讀完后調用應答函數
   start();//I2C開始時鐘函數
   write_byte(0xa1);//讀數據
   respons();//讀完后調用應答函數
   date=read_byte();//送到P1口顯示。
   stop();//I2C結束時鐘函數
   return date;
}
 
uint intnum,aa,ee,dd,cc;
sbit D1=P3^4;//位定義
sbit D2=P3^5;//位定義
sbit D3=P3^7;//位定義
sbit D4=P1^6;//位定義
sbit D5=P1^7;//位定義
void delay (uint z);
void main ()
{
 P1=0xff;
 dd=0;
 D2=0;
 D3=0;
 delay (2200);  
 //aa=5;
 //ee=11000;
 while(1)
{ 
   uchar f,k;
   f=2;
   init();//寫直址,最后低位應為0。
   delay (1);
   k=read_add(f);//送到P1口顯示。//從23地址讀數據
   aa=k;
   ee=aa*2200;
 if(D4==0)
  {  
  delay (100);   
   if(D4==1)
     {
   aa++;
     delay (1);
     init();//寫直址,最后低位應為0。
     write_add(2,aa);//23為at24c02內部儲存地址,0xaa為寫到23地址的數據。
     delay (1);
     k=read_add(2);//送到P1口顯示。//從23地址讀數據
     aa=k;
     stop();
     if(aa==8)
      {
     aa=7;
     }
      }
     }
 if(aa>1)
   {
   if(D5==0)
  { 
  delay (100);   
   if(D5==1)
      {
   aa--;
     delay (1);
     init();//寫直址,最后低位應為0。
     write_add(2,aa);//23為at24c02內部儲存地址,0xaa為寫到23地址的數據。
     delay (1);
     k=read_add(2);//送到P1口顯示。//從23地址讀數據
     aa=k;
     stop();
     //ee=aa*2200;
     if(aa==1)
      {
     aa=2;
    }
       }
     }
    }
  if(dd==0)
  {
   if(D1==0)
   { 
    delay (5000);
     if(D1==0)
       {
    D2=0;
    D3=1;
  dd=1;
      delay (ee);
    D2=0;
    D3=0;
      }
       }
       }
 if(dd==1)
  {
  if(D1==1)
  {
    delay (5000);
     if(D1==1)
     {
    D2=1;
    D3=0;
      dd=0;
    delay (ee);   
      D2=0;
    D3=0;
   }
    }
    }
   }
}
void delay(uint z)//代參數無返回值
 { uint x,y;
   for (x=300;x>0;x--)
 for (y=z;y>0;y--);//100*2000次
}
關閉窗口

相關文章

主站蜘蛛池模板: 欧美国产一区二区三区 | 婷婷国产一区 | 狠狠操狠狠操 | 国产精品久久久久不卡 | 本地毛片 | 999免费观看视频 | 97人人超碰| 亚洲精品视频一区二区三区 | 91 在线| 国产精品不卡 | 国产精品久久一区二区三区 | 成人精品网 | 毛片a级| 日韩中文字幕 | 中文字幕不卡在线观看 | 国产亚洲一区二区三区 | 国产日韩一区二区三区 | 国产精品视频一二三区 | 国产精品揄拍一区二区 | 亚洲成av人片在线观看无码 | 日本一区二区在线视频 | 国产一区二区三区久久久久久久久 | 国产一区二区三区四区三区四 | 欧美视频免费 | 密色视频| www.五月天婷婷.com | 色资源在线观看 | 女人av| 欧美精品一区二区三区四区 在线 | 成人在线观看网址 | 视频国产一区 | 亚洲高清中文字幕 | 天天射美女| 国产一区二区电影网 | www在线视频| 一级毛片视频在线 | 国产精品免费播放 | 日本aⅴ中文字幕 | 欧美一区2区三区4区公司二百 | 国产黄色一级片 | 日韩精品一区二区三区视频播放 |