欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5432|回復: 0
收起左側

EEPROM AT24CO2讀寫操作

[復制鏈接]
ID:72519 發表于 2015-1-21 21:44 | 顯示全部樓層 |閱讀模式
時間過的真快轉眼天氣冷了,這讓懶惰的我都來不及適應,最近是東一下西一下的 把  IIC總線接口的EEPROM 勉強學會點,留下點痕跡留著以后品味當時的心情吧!



  1. # include  <reg52.h>
  2. # define uchar unsigned char            //宏定義
  3. # define uint unsigned int
  4. uchar shi,ge,dd,ff,write;        //定義局變量
  5. sbit sda=P2^1;        //聲明P2口
  6. sbit scl=P2^0;        //聲明P2口
  7. sbit duan=P2^6;
  8. sbit wei=P2^7;
  9. uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
  10. 0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}        ;        //LED數組顯示
  11. void delay() //微秒級延時
  12. { ; ;}
  13. void delayms(uchar a)  //毫秒延時
  14. {
  15. uchar x,y;
  16. for(x=a;x>0;x--)
  17.    for(y=0;y<110;y++);
  18. }
  19. void init()          //AT24C02初始化
  20. {
  21. sda=1;
  22. delay();
  23. scl=1;
  24. delay();
  25. }
  26. void start()   //AT24C02啟動信號
  27. {
  28. sda=1;
  29. delay();
  30. scl=1;
  31. delay();
  32. sda=0;
  33. delay();
  34. }
  35. void stop()         //AT24C02停止信號
  36. {
  37. sda=0;
  38. delay();
  39. scl=1;
  40. delay();
  41. sda=1;
  42. delay();
  43. }
  44. void respons()         //AT24C02應答
  45. {
  46.    uchar i;
  47.    scl=1;
  48.    delay();
  49.    while((sda==1)&&(i<255))i++;
  50.    scl=0;
  51.    delay();

  52. }
  53. void write_byte(uchar a)   //AT24C02寫一個字節
  54. {
  55. uchar i,j;
  56. j=a;
  57. for(i=0;i<8;i++)
  58. {
  59. scl=0;
  60. delay();
  61. j=j<<1;
  62. sda=CY;
  63. scl=1;
  64. delay();
  65. }
  66. scl=0;
  67. delay();
  68. sda=1;
  69. delay();
  70. }
  71. uchar read_byte()  //AT24C02讀一個字節
  72. {
  73. uchar i,j;
  74. for(i=0;i<8;i++)
  75. {
  76. scl=0;
  77. delay();
  78. sda=1;
  79. delay();
  80. scl=1;
  81. j=(j<<1)|sda;
  82. delay();
  83. }
  84. return j;  

  85. }  
  86. void add_write(uchar address,uchar date) //AT240C2任意地址寫一個字節數據
  87. {
  88. start();
  89. write_byte(0xae);
  90. respons();
  91. write_byte(address);
  92. respons();
  93. write_byte(date);
  94. respons();
  95. stop();
  96. }
  97. uchar add_read_byte(uchar address)        //AT24C02任意地址讀
  98. {
  99. uchar w;
  100. start();
  101. //        respons();
  102. write_byte(0xae);
  103. //        delayms(100);
  104. respons();
  105. write_byte(address);
  106. respons();
  107. start();
  108. write_byte(0xaf);
  109. respons();
  110. w=read_byte();
  111. stop();
  112. return w;
  113. }
  114. void display(uchar shi,uchar ge) //LED數碼管顯示
  115. {
  116.   //shi=dd/10;
  117.   //ge=dd%10;
  118. wei=0;
  119. duan=1;
  120. P0=table[shi];
  121. duan=0;
  122. P0=0xff;
  123. wei=1;
  124. P0=0xfe;
  125. wei=0;
  126. delayms(10);
  127. P0=0xff;
  128. duan=1;
  129. P0=table[ge];
  130. duan=0;
  131. P0=0xff;
  132. wei=1;
  133. P0=0xfd;
  134.     delayms(5);
  135. wei=0;
  136. }
  137. void stime()        //初始化定時器0并啟動
  138. {
  139. TMOD=0X01;
  140. TH1=(65535-5000)/256;
  141. TH0=(65535-5000)%256;
  142. EA=1;
  143. ET0=1;
  144. TR0=1;
  145. }
  146. void t0()interrupt 1   //定時器0中斷函數并重新裝初值
  147. {
  148.     uchar i;
  149. TH1=(65535-5000)/256;
  150. TH0=(65535-5000)%256;
  151. i++;
  152. if(i==20)
  153.     {        write++;
  154.     ff=1;
  155. i=0;
  156.    if(write==100)
  157. write=0;
  158. }

  159. }
  160. void main()          //主程序
  161. {
  162. init();
  163. write=add_read_byte(5);
  164.     if(write>100)
  165. write=0;
  166. stime();
  167. while(1)
  168. {
  169.     // dd=write;

  170. if(ff==1)
  171. {
  172.         add_write(5,write);
  173. ff=0;        
  174. }
  175. display(write/10,write%10);
  176. }
  177. }   
復制代碼



回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表