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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

proteus仿真單片機開發板上做At24c02讀寫試驗

[復制鏈接]
跳轉到指定樓層
樓主
ID:223055 發表于 2017-8-2 02:29 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
自己做的一個仿真的單片機開發板,有完整的試驗步驟和仿真工程文件提供
板子上帶擴展ROM空間(i^2c 24c02)、adc(數字電壓表)、dac(信號發生器)、矩形按鍵(計算器),四個任務通過獨立按鍵進行切換

下面是At24c02讀寫部分的的單片機源程序
完整代碼和仿真工程文件請下載http://www.zg4o1577.cn/bbs/dpj-91558-1.html

  1. #include <reg51.h>
  2. #include "i2c.h"
  3. #include "lcd.h"

  4. //按鍵IO
  5. sbit K1=P3^0;
  6. sbit K2=P3^1;
  7. sbit K3=P3^2;
  8. sbit K4=P3^3;
  9. sbit key=P3^4;

  10. //--定義全局變量--//
  11. unsigned char wordCode0[6] = "write:";
  12. unsigned char wordCode1[6] = " read:";

  13. //--聲明全局函數--//
  14. void At24c02Write(unsigned char ,unsigned char );
  15. unsigned char At24c02Read(unsigned char );
  16. void Delay10ms(unsigned int c);   //誤差 0us


  17. /*******************************************************************************
  18. * 函數名         : main
  19. * 函數功能                 : 主函數
  20. *******************************************************************************/

  21. void num24c02()
  22. {
  23.         unsigned int num0 = 0,num1 = 0,n;

  24.         LcdInit();

  25.         LcdWriteCom(0x80);
  26.         for(n=0; n<6; n++)
  27.         {
  28.                 LcdWriteData(wordCode0[n]);
  29.         }
  30.         LcdWriteCom(0x80 + 0x40);
  31.         for(n=0; n<6; n++)
  32.         {
  33.                 LcdWriteData(wordCode1[n]);
  34.         }
  35.         while(key)
  36.         {
  37.                 if(K1 == 0)                 //按鍵1按下
  38.                 {
  39.                         Delay10ms(1);
  40.                         if(K1 == 0)
  41.                                 At24c02Write(2,num0);
  42.                         while((n < 50)&&(K3==0))
  43.                         {
  44.                                 n++;
  45.                                 Delay10ms(1);        
  46.                         }                        
  47.                         n=0;
  48.                         n=0;
  49.                 }
  50.                
  51.                 if(K2 == 0)                 //按鍵2按下
  52.                 {
  53.                         Delay10ms(1);
  54.                         if(K2 == 0)
  55.                                 num1 = At24c02Read(2);
  56.                         while((n < 50)&&(K2 == 0))
  57.                         {
  58.                                 n++;
  59.                                 Delay10ms(1);        
  60.                         }                        
  61.                         n=0;
  62.                 }                        
  63.                 if(K3 == 0)                 //按鍵3按下
  64.                 {
  65.                         Delay10ms(1);
  66.                         if(K3 == 0)
  67.                                 num0++;
  68.                         while((n < 50)&&(K3 == 0))
  69.                         {
  70.                                 n++;
  71.                                 Delay10ms(1);        
  72.                         }                        
  73.                         n=0;
  74.                         if(num0==256)
  75.                                 num0=0;
  76.                 }
  77.                         
  78.                 if(K4 == 0)                 //按鍵4按下
  79.                 {
  80.                         Delay10ms(1);
  81.                         if(K4 == 0)
  82.                                 num0 = 0;
  83.                         while((n < 50) && (K4 == 0))
  84.                         {
  85.                                 n++;
  86.                                 Delay10ms(1);        
  87.                         }                        
  88.                         n=0;
  89.                 }

  90.                 LcdWriteCom(0x86);                                                        
  91.                 LcdWriteData('0' + (num0%1000%100/10));//十位
  92.                 LcdWriteData('0' + (num0%1000%100%10));//個位
  93.                 LcdWriteCom(0x89);
  94.                 LcdWriteData('a');
  95.                 LcdWriteData('d');
  96.                 LcdWriteData('d');
  97.                 LcdWriteData('r');                                                        
  98.                 LcdWriteData('0' + (num0%1000%100/10));//十位
  99.                 LcdWriteData('0' + (num0%1000%100%10));//個位
  100.                 LcdWriteCom(0x86 + 0x40);                                       
  101.                 LcdWriteData('0' + (num1%1000%100/10));//十位
  102.                 LcdWriteData('0' + (num1%1000%100%10));//個位
  103.                         
  104.         }
  105. }                                                                        

  106. /*******************************************************************************
  107. * 函 數 名         : Delay10ms
  108. * 函數功能                   : 延時函數,延時10ms
  109. *******************************************************************************/

  110. void Delay10ms(unsigned int c)   //誤差 0us
  111. {
  112.     unsigned char a, b;
  113.     for (;c>0;c--)
  114.         {
  115.                 for (b=38;b>0;b--)
  116.                 {
  117.                         for (a=130;a>0;a--);
  118.                 }         
  119.         }      
  120. }

  121. /*******************************************************************************
  122. * 函 數 名         : void At24c02Write(unsigned char addr,unsigned char dat)
  123. * 函數功能                   : 往24c02的一個地址寫入一個數據
  124. *******************************************************************************/

  125. void At24c02Write(unsigned char addr,unsigned char dat)
  126. {
  127.         I2C_Start();
  128.         I2C_SendByte(0xa0, 1);//發送寫器件地址
  129.         I2C_SendByte(addr, 1);//發送要寫入內存地址
  130.         I2C_SendByte(dat, 0);        //發送數據
  131.         I2C_Stop();
  132. }
  133. /*******************************************************************************
  134. * 函 數 名         : unsigned char At24c02Read(unsigned char addr)
  135. * 函數功能                   : 讀取24c02的一個地址的一個數據
  136. *******************************************************************************/

  137. unsigned char At24c02Read(unsigned char addr)
  138. {
  139.         unsigned char num;
  140.         I2C_Start();
  141.         I2C_SendByte(0xa0, 1); //發送寫器件地址
  142.         I2C_SendByte(addr, 1); //發送要讀取的地址
  143.         I2C_Start();
  144.         I2C_SendByte(0xa1, 1); //發送讀器件地址
  145.         num=I2C_ReadByte(); //讀取數據
  146.         I2C_Stop();
  147.         return num;        
  148. }
復制代碼






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

使用道具 舉報

沙發
ID:214494 發表于 2018-1-19 14:17 | 只看該作者
下載地址在哪里?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩欧美在线观看视频网站 | 91精品www | 成人特区 | 蜜桃视频麻豆 | 欧美精品在线免费观看 | 成人一区二区三区在线 | 日本黄色一级片视频 | 国产在线不卡视频 | 精品国产91乱码一区二区三区 | 在线视频一区二区三区 | 国产成人精品一区二区三区 | 一区日韩| 91久久北条麻妃一区二区三区 | 一本一道久久a久久精品综合蜜臀 | 亚洲福利一区 | 黄色网址在线免费观看 | 黄a免费网络 | 九九久久久 | 国产高清久久久 | 久久国产亚洲 | 欧美日本韩国一区二区三区 | 二区三区av | 久久69精品久久久久久久电影好 | 免费人成激情视频在线观看冫 | 毛片a级 | 青青草综合 | 日本一二三区在线观看 | 91精品国产综合久久福利软件 | 999久久久久久久久6666 | 国产成人精品a视频一区www | 久久一区 | 国产一级电影在线观看 | 在线a视频网站 | 久久综合一区二区 | aⅴ色国产 欧美 | 久热精品在线 | 国产精品精品视频 | 九九热在线视频免费观看 | 91精品久久久久久久久 | av在线一区二区 | 国产亚洲精品久久午夜玫瑰园 |