标题: 单片机驱动24c02存储器读写实验 Proteus仿真和源代码 [打印本页]

作者: 51黑电子happy    时间: 2017-4-5 03:50
标题: 单片机驱动24c02存储器读写实验 Proteus仿真和源代码
单片机驱动24c02存储器读写实验的仿真原理图(proteus仿真工程文件可到本帖附件下载):



单片机24c02读写源代码:
  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. sbit  sda=P2^1;
  4. sbit  scl=P2^0;

  5. void delay()        //延时应大于4.7us
  6. { ;;;}

  7. void start()        //开始发送数据
  8. {  sda=1;
  9.    delay();         //scl在高电平期间,sda由高到低
  10.    scl=1;
  11.    delay();
  12.    sda=0;
  13.    delay();
  14. }

  15. void stop()         //停止发送数据
  16. {  sda=0;             //scl在高电平期间,sda由高到低
  17.    delay();
  18.    scl=1;
  19.    delay();
  20.    sda=1;
  21.    delay();
  22. }

  23. void response()
  24. {  uchar i;
  25.    scl=1;
  26.    delay();
  27.    if((sda==1)&&i<250) i++;        //应答sda为0,非应答为1
  28.    scl=0;                          //释放总线
  29.    delay();
  30. }

  31. void  noack()
  32. {  scl=1;
  33.    delay();
  34.    scl=1;
  35.    delay();
  36.    scl=0;
  37.    delay();
  38.    sda=0;
  39.    delay();
  40. }
  41. void init()                      //初始化
  42. {  sda=1;
  43.    delay();
  44.    scl=1;
  45.    delay();
  46. }
  47. void write_byte(uchar date)     //写一个字节
  48. {  uchar i,temp;
  49.    temp=date;
  50.    for(i=0;i<8;i++)
  51.    {  temp=temp<<1;
  52.       scl=0;                    //scl上跳沿写入
  53.       delay();
  54.       sda=CY;                   //溢出位
  55.       delay();
  56.       scl=1;
  57.       delay();
  58. scl=0;
  59. delay();
  60.    }
  61.    scl=0;
  62.    delay();
  63. sda=1;
  64. delay();
  65. }
  66. uchar read_byte()
  67. {  uchar i,k;
  68.    scl=0;
  69.    delay();
  70.    sda=1;
  71.    delay();
  72.    for(i=0;i<8;i++)
  73.    {  scl=1;
  74.       delay();
  75.       k=(k<<1)|sda;
  76.       scl=0;
  77.       delay();
  78.    }
  79.    return k;
  80. }
  81. void delay1(uchar x)
  82. {  uchar a,b;
  83.    for(a=x;a>0;a--)
  84.    for(b=200;b>0;b--);
  85. }

  86. void write_add(uchar address,uchar date)
  87. {  start();
  88.    write_byte(0xa0);                    //设备地址
  89.    response();
  90.    write_byte(address);
  91.    response();
  92.    write_byte(date);
  93.    response();
  94.    stop();
  95. }

  96. uchar read_add(uchar address)
  97. {  uchar date;
  98.    start();
  99.    write_byte(0xa0);
  100.    response();
  101.    write_byte(address);
  102.    response();
  103.    start();
  104.    write_byte(0xa1);                //1表示接收地址
  105.    response();
  106.    date=read_byte();
  107.    noack();
  108.    stop();
  109.    return date;
  110. }
  111. void main()
  112. {  uchar kk;
  113.    init();

  114.    kk=0;
  115.    
  116.    write_add(kk,0x55);               //向0单元写入数据0fH,
  117.   
  118.    delay1(100);
  119.    
  120.   
  121.     P1=read_add(kk);                  //低电平灯亮
  122.    
  123. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码




该系列源码包含有很多非常经典,代码风格十分规范,而且注释详细的单片机例程,还带仿真,对于MCU学习特别是初学者是很有帮助的,全部源码下载(共几十个项目):http://www.51hei.com/bbs/dpj-80575-1.html

本例程下载(含proteus仿真工程文件与源码):
单片机驱动24c02存储器读写实验.rar (47.11 KB, 下载次数: 411)


作者: 南阳的雾霾    时间: 2017-5-7 20:44
感谢楼主,帮了我大忙
作者: L2018    时间: 2018-12-30 10:35
谢谢分享
作者: hj0787    时间: 2019-1-8 13:46

谢谢楼主分享,正好需要这个

作者: 8585    时间: 2019-1-8 18:53
支持谢谢分享


作者: tommy5201314    时间: 2020-4-29 11:38
仿真中能看出24C02的存储效果吗?
作者: vpigsong    时间: 2020-5-29 18:12
感谢分享

作者: 欧阳逸洛    时间: 2020-6-10 20:27
支持谢谢分享
作者: dhbt2021    时间: 2021-12-19 16:26
24C02存储器可以掉电保存数据吗?
作者: scccx8106    时间: 2024-10-12 15:41
感谢楼主,帮了我大忙
作者: 3wjkdhus    时间: 2024-10-16 22:43
tommy5201314 发表于 2020-4-29 11:38
仿真中能看出24C02的存储效果吗?

完全没问题,每页可以存储0-255,有255页




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1