Arduino爱好者

 找回密码
 立即注册

QQ登录

只需一步,快速开始

12
返回列表 发新帖
楼主: eagler8

[经验] 【Arduino】108种传感器模块系列实验(69)---AT24C256存储模块

[复制链接]
 楼主| 发表于 2019-7-25 17:20 | 显示全部楼层
08.jpg
 楼主| 发表于 2019-7-25 17:40 | 显示全部楼层
本帖最后由 eagler8 于 2020-9-2 09:41 编辑
  1. /*
  2. 【Arduino】66种传感器模块系列实验(69)
  3. 实验六十九: AT24C256 I2C接口 EEPROM 存储模块
  4. 程序之二
  5. */

  6. #include <Wire.h>
  7. #define EEPROM_ADDR 0x50     
  8.       
  9. void setup()
  10. {
  11.   Wire.begin();                        
  12.   Serial.begin(9600);

  13.   // TESTS FOR EACH FUNCTION BEGIN HERE
  14.   Serial.println("Writing Test:");
  15.   for (int i=0; i<20; i++){            
  16.     i2c_eeprom_write_byte(EEPROM_ADDR,i,i+65);   
  17.     Serial.print(". ");
  18.     delay(10);                        
  19.   }
  20.   Serial.println("");
  21.   delay(500);

  22.   Serial.println("Reading Test:");
  23.   for (int i=0; i<20; i++){            
  24.     Serial.write(i2c_eeprom_read_byte(EEPROM_ADDR, i));
  25.     Serial.print(" ");
  26.   }

  27.   byte PageData[30];                  
  28.   byte PageRead[30];                  
  29.   for (int i=0; i<30; i++){            
  30.     PageData = 0;
  31.     PageRead = 0;
  32.   }
  33.   Serial.println("");
  34.   for (int i=0; i<30; i++) PageData = i+33;  
  35.   Serial.println("Writing Page Test:");
  36.   i2c_eeprom_write_page(EEPROM_ADDR, 100, PageData, 28 );
  37.   Serial.println("Reading Page Test:");
  38.   i2c_eeprom_read_buffer( EEPROM_ADDR, 100, PageRead, 28);
  39.   for (int i=0; i<28; i++){
  40.     Serial.write(PageRead);   
  41.     Serial.print(" ");
  42.   }
  43. }

  44. void loop()
  45. {
  46. }

  47. void i2c_eeprom_write_byte( int deviceaddress, unsigned int eeaddress, byte data )
  48. {
  49.   int rdata = data;
  50.   Wire.beginTransmission(deviceaddress);
  51.   Wire.write((int)(eeaddress >> 8));   
  52.   Wire.write((int)(eeaddress & 0xFF));  
  53.   Wire.write(rdata);
  54.   Wire.endTransmission();
  55. }


  56. void i2c_eeprom_write_page
  57. ( int deviceaddress, unsigned int eeaddresspage, byte* data, byte length )
  58. {
  59.   Wire.beginTransmission(deviceaddress);
  60.   Wire.write((int)(eeaddresspage >> 8));
  61.   Wire.write((int)(eeaddresspage & 0xFF));
  62.   byte c;
  63.   for ( c = 0; c < length; c++)
  64.     Wire.write(data[c]);
  65.   Wire.endTransmission();
  66.   delay(10);                           
  67. }

  68. byte i2c_eeprom_read_byte( int deviceaddress, unsigned int eeaddress )
  69. {
  70.   byte rdata = 0xFF;
  71.   Wire.beginTransmission(deviceaddress);
  72.   Wire.write((int)(eeaddress >> 8));   
  73.   Wire.write((int)(eeaddress & 0xFF));  
  74.   Wire.endTransmission();
  75.   Wire.requestFrom(deviceaddress,1);
  76.   if (Wire.available()) rdata = Wire.read();
  77.   return rdata;
  78. }

  79. void i2c_eeprom_read_buffer( int deviceaddress, unsigned int eeaddress, byte *buffer, int length )
  80. {
  81.   Wire.beginTransmission(deviceaddress);
  82.   Wire.write((int)(eeaddress >> 8));   
  83.   Wire.write((int)(eeaddress & 0xFF));  
  84.   Wire.endTransmission();
  85.   Wire.requestFrom(deviceaddress,length);
  86.   
  87.   for ( int c = 0; c < length; c++ )
  88.     if (Wire.available()) buffer[c] = Wire.read();
  89. }
复制代码

 楼主| 发表于 2019-7-25 17:42 | 显示全部楼层
09.jpg
 楼主| 发表于 2019-7-25 18:29 | 显示全部楼层
10.jpg
 楼主| 发表于 2019-7-25 18:41 | 显示全部楼层
11.jpg
 楼主| 发表于 2019-7-25 18:45 | 显示全部楼层
12.jpg
 楼主| 发表于 2020-9-2 09:41 | 显示全部楼层

谢谢鼓励,多交流
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino爱好者

GMT+8, 2022-12-7 01:20 , Processed in 0.070981 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表