关于 24c02 数据 读写问题?

2019-07-16 03:33发布

  1. <p>
  2. /*   24c02.h*/
  3. sbit SCL = P2^0;
  4. sbit SDA = P2^1;
  5. char write = 0;
  6. /****************延迟函数***************/
  7. void delay()
  8. {;;}

  9. /*************初始化函数**************/
  10. void init()
  11. {
  12.         SCL = 1;
  13.         SDA = 1;
  14. }
  15. /***************起始信号**************/
  16. void start()
  17. {
  18.         SDA = 1;
  19.         delay();
  20.         SCL = 1;
  21.         delay();
  22.         SDA = 0;
  23.         delay();
  24. }

  25. /***************终止信号***************/

  26. void stop()
  27. {
  28.         SDA = 0;
  29.         delay();
  30.         SCL = 1;
  31.         delay();
  32.         SDA = 1;
  33.         delay();
  34. }

  35. /****************应答信号**************/
  36. void response()
  37. {
  38.         int i;

  39.         SCL = 1;
  40.         delay();
  41.         while( (SDA = 1)&&( i < 200 )) i++;
  42.         SCL = 0;
  43.         delay();
  44. }

  45. /*****************写一个字节***********/
  46. void write_byte( char date)
  47. {
  48.          char i,temp;
  49.          temp = date;
  50.          for( i = 0; i < 8; i++)
  51.          {
  52.                  temp = temp << 1;
  53.                 SCL = 0;
  54.                 delay();
  55.                 SDA = CY;
  56.                 delay();
  57.                 SCL = 1;
  58.                 delay();
  59.         }

  60.         SDA = 1;
  61.         delay();
  62. }
  63. /***************读取一个字节**********/
  64. char read_byte()
  65. {
  66.         char i,k;
  67.         SCL = 0;
  68.         delay();
  69.         SDA = 1;                  //总线释放
  70.         delay();
  71.         for ( i = 0; i < 8; i++ )
  72.         {
  73.                 SCL = 1;
  74.                 delay();
  75.                 k = (k<<1)|SDA;
  76.                 SCL = 0;
  77.                 delay();
  78.         }
  79.         SDA = 1;
  80.         delay();

  81.         return k;
  82. }

  83. /******************24c02 数据的写************/

  84. void write_add(unsigned char add, unsigned char date)
  85. {
  86.         start();
  87.         write_byte(0xa0);
  88.         response();
  89.         write_byte(add);
  90.         response();
  91.         write_byte(date);
  92.         response();
  93.         stop();
  94. }
  95. /*******************24c02 数据的读***********/

  96. unsigned char read_add(char add)
  97. {
  98.         char date;
  99.         start();
  100.         write_byte(0xa0);
  101.         response();
  102.         write_byte(add);
  103.         response();
  104.         start();
  105.         write_byte(0xa1);
  106.         response();
  107.         date = read_byte();
  108.         stop();
  109.         return date;       
  110. }
  111. /*24c02.h  end*/



  112. /**********************24c02读写函数*********************/
  113. #include<reg52.h>
  114. #include<intrins.h>
  115. #include"24c02.h"</p><p>void delay1(int x);
  116. unsigned char code   DX[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};  
  117. unsigned char code   WX[2]={0xfe,0xfd};
  118. int num,num1,i;
  119. char LD[2];</p><p>void main()
  120. {
  121. init();
  122. num = read_add(2);
  123. TMOD = 0x10;
  124. TH0 = (65536 - 50000)/256;
  125. TL0 = (65536 - 50000)%256;</p><p> ET1 = 1;
  126. EA = 1;
  127. TR1 = 1;
  128. while(1)
  129. {
  130.    
  131.   if(write == 1)
  132.   {
  133.    write_add(2,num);
  134.   }</p><p>  
  135.   
  136.   LD[0] = DX[num%100/10];
  137.   LD[1] = DX[num%10];
  138.   
  139.   for(i = 0;i < 2; i++)
  140.   {
  141.    P0 = LD[i];
  142.    P1 = WX[i];
  143.    delay1(5);
  144.   } </p><p> }
  145. }</p><p>
  146. time() interrupt 3
  147. {
  148. TH1 = (65536 - 50000)/256;
  149. TL1 = (65536 - 50000)%256;
  150. num1++;
  151. if( num1 == 20 )
  152. {
  153.   num1 = 0;
  154.   num++;
  155.   write = 1;
  156.   
  157. }
  158. }</p><p>void delay1(int x)
  159. {
  160. int i,j;
  161. for( i = x; i > 0; i--)
  162.   for(j = 200; j > 0; j--);
  163. }</p><p>

  164. 程序的功能是 在数码管上显示0~99的数字  从24c02中读取数据  每次关闭电源后 打开电源数码管显示的数值接着之前关闭前的数据。。。。。。。



  165. 为什么次程序不能写入数据? 只能读取初始的 24c02的值 每次重新打开电源都是读取24c02 的值(55)?</p>
复制代码
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。