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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3215|回復: 1
打印 上一主題 下一主題
收起左側

關于AT24c02的單片機讀取

[復制鏈接]
跳轉到指定樓層
樓主
想寫一個單片機程序,用AT24c02來實現四個按鍵,一個按鍵讀取,一個保存數據,一個讓數據從0自加,一個讓數據清零,數碼管顯示,先顯示一位。。


現在可以自加和清零,但是保存不行,讀取也每次都會讀到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
復制代碼


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:111634 發表于 2017-10-31 20:40 | 只看該作者
本帖最后由 zl2168 于 2017-10-31 20:41 編輯

實例49  讀寫AT24C02
Proteus仿真一下,確認有效。
實例49 讀寫IIC AT24C02.rar (38.96 KB, 下載次數: 9)

以上摘自張志良編著《80C51單片機仿真設計實例教程——基于Keil CProteus》清華大學出版社ISBN 978-7-302-41682-1內有常用的單片機應用100案例,用于仿真實驗操作,電路與程序真實可靠可信可行。書中電路和程序設計有詳細說明,程序語句條條有注解。仿真電路和Hex文件能在清華出版社網站免費下載,程序源代碼只能到書上看了。到圖書館借,或到新華書店翻閱,或到網上書店打折購買。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲午夜久久久 | 天堂久久天堂综合色 | 伊人亚洲 | 成人亚洲精品 | 日韩三级| 99爱在线免费观看 | 欧美中文字幕一区 | 日韩精品激情 | 日韩电影一区二区三区 | 精品视频久久久 | 国产一区二 | 中文字幕 国产精品 | 视频在线一区二区 | 亚洲午夜精品在线观看 | 久久精品国产久精国产 | 亚洲超碰在线观看 | 欧美不卡一区二区 | 日韩成人免费 | 国产网站久久 | 亚洲狠狠 | 国产精品成av人在线视午夜片 | 国产精品久久久久久久久久免费看 | 91在线精品视频 | 黄色男女网站 | 中文精品视频 | 欧美视频1| 亚洲欧美中文字幕 | 一级毛毛片 | 久草视频观看 | 男人天堂手机在线视频 | 日韩在线免费看 | 国产精品一区二区欧美黑人喷潮水 | 国产精品日产欧美久久久久 | 九色网址 | 亚洲成人一级 | 久久看看| 99久久中文字幕三级久久日本 | 日本成人中文字幕 | 久久久影院 | 少妇精品亚洲一区二区成人 | 免费精品 |