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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3241|回復(fù): 1
收起左側(cè)

關(guān)于AT24c02的單片機讀取

[復(fù)制鏈接]
ID:238749 發(fā)表于 2017-10-31 18:42 | 顯示全部樓層 |閱讀模式
想寫一個單片機程序,用AT24c02來實現(xiàn)四個按鍵,一個按鍵讀取,一個保存數(shù)據(jù),一個讓數(shù)據(jù)從0自加,一個讓數(shù)據(jù)清零,數(shù)碼管顯示,先顯示一位。。


現(xiàn)在可以自加和清零,但是保存不行,讀取也每次都會讀到5,程序如下請指點。


  1. /*******main***************/
  2. #include<I2c.h>

  3. uchar code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

  4. uchar num,disp[4];
  5. sbit k2=P3^0;//¶áè¡
  6. sbit k1=P3^1;//±£′æ
  7. sbit k3=P3^2;//×Ô¼ó
  8. sbit k4=P3^3;        //Çåáã

  9. //uchar code wei[2]={0x80,0x40};

  10. void delay(uint i)
  11. {
  12.         while(i--);        
  13. }

  14. void Keypros()
  15. {P3=P3|0x0f;
  16.         if(k1==0)
  17.         {
  18.                 delay(1000);  //Ïû¶¶′|àí
  19.                 if(k1==0)
  20.                 {
  21.                         At24c02_Write(1,num);   //ÔúμØÖ·1ÄúD′èëêy¾Ynum
  22.                 }
  23.                 while(!k1);
  24.         }
  25.         
  26.                 if(k2==0)
  27.         {
  28.                 delay(1000);  //Ïû¶¶′|àí
  29.                 if(k2==0)
  30.                 {
  31.                         num=At24c02_Read(1);          //¶áè¡EEPROMμØÖ·1ÄúμÄêy¾Y±£′æÔúnumÖD
  32.                 }
  33.                 while(!k2);
  34.         }
  35.                         if(k3==0)
  36.         {
  37.                 delay(100);  //Ïû¶¶′|àí
  38.                 if(k3==0)
  39.                 {
  40.                         num++;           //êy¾Y¼ó1
  41.                         if(num>255)num=0;
  42.                 }
  43.                 while(!k3);
  44.         }
  45.         
  46.         
  47.                 if(k4==0)
  48.         {
  49.                 delay(1000);  //Ïû¶¶′|àí
  50.                 if(k4==0)
  51.                 {
  52.                         num=0;                 //êy¾YÇåáã
  53.                 }
  54.                 while(!k4);
  55.         }        
  56. }


  57. void datapros()
  58. {
  59.   disp[0]=smgduan[num%10];
  60.         disp[1]=smgduan[num/10];        
  61. }

  62. void DigDisplay()
  63. {
  64.         uchar  i;
  65.         for(i=0;i<1;i++)
  66.         {
  67.                 P2=0xfe;
  68.                 P0=disp[i];
  69.                 delay(100);
  70.                 P0=0x00;P2=0x00;
  71.         }
  72. }               

  73. void main()
  74. {
  75.         while(1)
  76.         {               
  77.                 datapros();
  78.                 DigDisplay();
  79.                 Keypros();
  80.         }
  81. }







  82. /********************I2c*/*/*/*/*****************/


  83. #include<I2c.h>

  84. void Delay10us()
  85. {
  86.         unsigned char a,b;
  87.         for(b=1;b>0;b--)
  88.                 for(a=2;a>0;a--);
  89. }

  90. void I2c_Start()
  91. {
  92.         SCL=0;
  93.         Delay10us();        
  94.   SDA=1;
  95.         Delay10us();
  96.         SCL=1;
  97.         Delay10us();
  98.         SDA=0;
  99.         Delay10us();

  100. }

  101. //void ack()
  102. //{
  103. //SCL=0;
  104. //        _nop_();
  105. //        SDA=0;
  106. //        SCL=1;
  107. //        _nop_();
  108. //        SCL=0;
  109. //        _nop_();
  110. //        SDA=1;
  111. //        
  112. //}
  113. void I2c_Stop()
  114. {
  115.         SCL=0;
  116.         Delay10us();        
  117.         SDA=0;
  118.         Delay10us();
  119.         SCL=1;
  120.         Delay10us();
  121.         SDA=1;
  122.         Delay10us();
  123. }

  124. uchar I2c_SendByte(uchar dat)
  125. {
  126.   uchar i,b=0;
  127.         for(i=0;i<8;i++)
  128.         {
  129.           SDA=dat>>7;
  130.           dat=dat<<1;
  131.                 Delay10us();
  132.                 SCL=1;
  133.                 Delay10us();
  134.                 SCL=0;
  135.                 Delay10us();               
  136.         }
  137.         SDA=1;
  138.         Delay10us();
  139.         SCL=1;
  140.         while(SDA)
  141.         {
  142.                 if(++b>200)
  143.                         SCL=0;
  144.                 Delay10us();
  145.                 return 0;
  146.         }
  147.         SCL=0;
  148.         Delay10us();
  149.         return 1;        
  150. //        ack();
  151. }

  152. uchar I2c_ReadByte()
  153. {
  154.         uchar i,dat=0;
  155.         SDA=1;
  156.         Delay10us();
  157.         for(i=0;i<8;i++)
  158.         {
  159.         SCL=1;
  160.         Delay10us();
  161.         dat<<=1;
  162.         dat|=SDA;
  163.         Delay10us();        
  164.                 SCL=0;
  165.                 Delay10us();        
  166.                
  167.         }
  168.         return dat;
  169. }

  170. void At24c02_Write(uchar address,uchar dat)
  171. {

  172.   I2c_Start();
  173.         I2c_SendByte(0xa0);
  174.         I2c_SendByte(address);
  175.         I2c_SendByte(dat);
  176.         I2c_Stop();        
  177. }

  178. uchar At24c02_Read(uchar address)
  179. {
  180. uchar dat;
  181.   I2c_Start();        
  182.         I2c_SendByte(0xa0);
  183.         I2c_SendByte(address);
  184.         I2c_Start();
  185.         I2c_SendByte(0xa1);
  186.         dat=I2c_ReadByte();
  187.         I2c_Stop();        
  188.         return dat;

  189. }



  190. /*************************I2c.h**************************/


  191. #ifndef _I2c_H_
  192. #define _I2c_H_
  193. #include<reg52.h>
  194. #include<intrins.h>
  195. typedef unsigned int uint;
  196. typedef unsigned char uchar;

  197. sbit SCL=P2^1;
  198. sbit SDA=P2^0;

  199. void I2c_Start();
  200. void I2c_Stop();
  201. unsigned char I2c_SendByte(unsigned char dat);
  202. unsigned char I2c_ReadByte();
  203. void At24c02_Write(unsigned char addr,unsigned char dat);
  204. unsigned char At24c02_Read(unsigned char addr);
  205. #endif
復(fù)制代碼


回復(fù)

使用道具 舉報

ID:111634 發(fā)表于 2017-10-31 20:40 | 顯示全部樓層
本帖最后由 zl2168 于 2017-10-31 20:41 編輯

實例49  讀寫AT24C02
Proteus仿真一下,確認有效。
實例49 讀寫IIC AT24C02.rar (38.96 KB, 下載次數(shù): 9)
24c02.jpg
以上摘自張志良編著《80C51單片機仿真設(shè)計實例教程——基于Keil CProteus》清華大學(xué)出版社ISBN 978-7-302-41682-1內(nèi)有常用的單片機應(yīng)用100案例,用于仿真實驗操作,電路與程序真實可靠可信可行。書中電路和程序設(shè)計有詳細說明,程序語句條條有注解。仿真電路和Hex文件能在清華出版社網(wǎng)站免費下載,程序源代碼只能到書上看了。到圖書館借,或到新華書店翻閱,或到網(wǎng)上書店打折購買。
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久精品手机视频 | 另类视频在线 | 日韩在线大片 | 欧美日韩黄| 美女视频一区 | 亚洲精品一| 国产区一区二区三区 | 亚洲一区不卡 | 亚洲精品国产a久久久久久 中文字幕一区二区三区四区五区 | 可以在线观看av的网站 | 久久成人免费视频 | 婷婷色在线播放 | 日韩免费视频一区二区 | 国产精品视频久久久 | 成人欧美一区二区三区白人 | 欧美日韩亚洲国产综合 | 午夜视频一区 | 男人视频网站 | www.一级片 | 天天拍天天操 | 亚洲国产成人av | 成人精品一区 | 99热热热| 91国在线 | 日韩一区中文字幕 | 亚洲a视频| 国产激情视频在线 | 伊人网在线播放 | 最新免费黄色网址 | 亚洲永久精品国产 | 91xxx在线观看 | 大久| 91精品国产色综合久久不卡98口 | 在线一区视频 | 成人黄色电影在线观看 | 日韩一区在线播放 | 亚洲欧美国产毛片在线 | 欧美一区二区三区视频 | 日本午夜网 | 韩国主播午夜大尺度福利 | 成人小视频在线观看 |