找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2032|回复: 2
打印 上一主题 下一主题
收起左侧

24LC16 64的读写操作 源码

[复制链接]
跳转到指定楼层
楼主
ID:315949 发表于 2018-4-25 09:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机源程序如下:
  1. #include <Program.h>

  2. uint data attenuation = 3000;   // 衰减量,表示50dB
  3. uint data frequency = 100;   //  频率值,表示1000MHz
  4. uint data num;

  5. //存放22个定标电压值,分别对应于0mw, 5mw, 10mw,..........100mw
  6. uint code Volt0[22] = {0,98,317,493,631,747,849,944,1031,1111,1187,1256,1325,1381,1429,1479,1527,1570,1629,1653,1692,1741};
  7. uint code Volt1[22] = {0,97,316,491,629,745,846,941,1028,1108,1184,1253,1322,1379,1426,1476,1524,1567,1624,1651,1690,1740};
  8. uint code Volt2[22] = {0,97,318,494,632,748,849,942,1028,1106,1180,1246,1307,1363,1416,1464,1509,1549,1590,1625,1661,1690};
  9. uint code Volt3[22] = {0,97,315,490,626,742,843,937,1023,1102,1176,1244,1315,1367,1415,1464,1510,1551,1598,1630,1667,1712};
  10. uint code Volt4[22] = {0,95,311,483,617,731,832,923,1008,1085,1158,1223,1294,1343,1390,1438,1483,1522,1564,1596,1631,1675};
  11. uint code Volt5[22] = {0,95,310,483,618,732,833,925,1009,1087,1161,1227,1299,1348,1396,1443,1488,1529,1572,1604,1640,1684};
  12. uint code Volt6[22] = {0,94,309,481,615,729,830,921,1005,1082,1156,1222,1294,1343,1391,1439,1484,1524,1567,1600,1635,1680};
  13. uint code Volt7[22] = {0,94,308,479,612,725,825,916,999,1076,1150,1215,1289,1336,1384,1432,1477,1518,1560,1594,1629,1674};
  14. uint code Volt8[22] = {0,93,303,471,603,715,814,904,986,1062,1135,1200,1274,1325,1368,1416,1462,1502,1543,1578,1613,1659};

  15. void main()
  16. {
  17.         uchar i, adhigh, adlow;
  18. //        AUXR = AUXR|0x02;
  19.         Dlms(3000);
  20.         P2 = 0;
  21.         Dlms(2000);
  22.         Write24LC16P(0xa0, 0xfc, (uchar)(frequency/256));
  23.         Write24LC16P(0xa0, 0xfd, (uchar)(frequency%256));
  24.         Write24LC16P(0xa0, 0xfe, (uchar)(attenuation/256));
  25.         Write24LC16P(0xa0, 0xff, (uchar)(attenuation%256));
  26.         for(i = 0; i < 22; i++)
  27.         {
  28.                 adhigh = (uchar)(Volt0[i] /256);
  29.                 adlow = (uchar)(Volt0[i]%256);
  30.                 Write24LC16P(0xa0, i*2, adhigh);
  31.                 Write24LC16P(0xa0, (i*2 + 1), adlow);
  32.         }
  33.         for(i = 0; i < 22; i++)
  34.         {
  35.                 adhigh = (uchar)(Volt1[i] /256);
  36.                 adlow = (uchar)(Volt1[i]%256);
  37.                 Write24LC16P(0xa0, (44 + i*2), adhigh);
  38.                 Write24LC16P(0xa0, (44 + i*2 + 1), adlow);
  39.         }
  40.         for(i = 0; i < 22; i++)
  41.         {
  42.                 adhigh = (uchar)(Volt2[i] /256);
  43.                 adlow = (uchar)(Volt2[i]%256);
  44.                 Write24LC16P(0xa0, (88 + i*2), adhigh);
  45.                 Write24LC16P(0xa0, (88 + i*2 + 1), adlow);
  46.         }
  47.         for(i = 0; i < 22; i++)
  48.         {
  49.                 adhigh = (uchar)(Volt3[i] /256);
  50.                 adlow = (uchar)(Volt3[i]%256);
  51.                 Write24LC16P(0xa0, (132 + i*2), adhigh);
  52.                 Write24LC16P(0xa0, (132 + i*2 + 1), adlow);
  53.         }
  54.         for(i = 0; i < 22; i++)
  55.         {
  56.                 adhigh = (uchar)(Volt4[i] /256);
  57.                 adlow = (uchar)(Volt4[i]%256);
  58.                 Write24LC16P(0xa0, (176 + i*2), adhigh);
  59.                 Write24LC16P(0xa0, (176 + i*2 + 1), adlow);
  60.         }
  61.         for(i = 0; i < 22; i++)
  62.         {
  63.                 adhigh = (uchar)(Volt5[i] /256);
  64.                 adlow = (uchar)(Volt5[i]%256);
  65.                 Write24LC16P(0xa2, i*2, adhigh);
  66.                 Write24LC16P(0xa2, (i*2 + 1), adlow);
  67.         }
  68.         for(i = 0; i < 22; i++)
  69.         {
  70.                 adhigh = (uchar)(Volt6[i] /256);
  71.                 adlow = (uchar)(Volt6[i]%256);
  72.                 Write24LC16P(0xa2, (44 + i*2), adhigh);
  73.                 Write24LC16P(0xa2, (44 + i*2 + 1), adlow);
  74.         }
  75.         for(i = 0; i < 22; i++)
  76.         {
  77.                 adhigh = (uchar)(Volt7[i] /256);
  78.                 adlow = (uchar)(Volt7[i]%256);
  79.                 Write24LC16P(0xa2, (88 + i*2), adhigh);
  80.                 Write24LC16P(0xa2, (88 + i*2 + 1), adlow);
  81.         }
  82.         for(i = 0; i < 22; i++)
  83.         {
  84.                 adhigh = (uchar)(Volt8[i] /256);
  85.                 adlow = (uchar)(Volt8[i]%256);
  86.                 Write24LC16P(0xa2, (132 + i*2), adhigh);
  87.                 Write24LC16P(0xa2, (132 + i*2 + 1), adlow);
  88.         }
  89.         P2 = 0xff;
  90.        while(1)  ;
  91. }

  92. //****************************************************************************
  93. //探头上24LC16 的读写操作
  94. void write_8bitP(uchar ch)      //注意延时????!!!!
  95. {
  96.         uchar i=8;
  97.         SCL=0;
  98.         Dlus(5);
  99.         while (i--)
  100.         {
  101.                 SDA_P=(bit)(ch&0x80);
  102.                 Dlus(5);
  103.                 ch<<=1;
  104.                 SCL=1;
  105.                 Dlus(5);
  106.                 SCL=0;
  107.                 Dlus(1);
  108.         }
  109.         Dlms(5);
  110. }

  111. void ACKP(void)   //等待ACK 位
  112. {
  113.         SDA_P=1;
  114.         SCL=0;
  115.         Dlus(5);
  116.         SCL=1;
  117.         while(SDA_P) {;} //ACK
  118.         SCL=0;
  119.         Dlus(1);
  120. }

  121. void Write24LC16P(uchar ctr_byte, word_addr, ddata)  // ctr_bytr: 1010xxx0
  122. {
  123.         SCL=1;
  124.         Dlus(5);
  125.         SDA_P=0;
  126.         Dlus(5);
  127.         SCL=0; //START
  128.         write_8bitP(ctr_byte); //control byte
  129.         ACKP();
  130.         write_8bitP(word_addr);  //word address
  131.         ACKP();
  132.         write_8bitP(ddata);
  133.         ACKP();
  134.         SDA_P =0;
  135.         Dlus(5);
  136.         SCL=1;
  137.         Dlus(5);
  138.         SDA_P =1; //STOP
  139.         Dlms(15);
  140. }

  141. /*
  142. uchar Read24LC16P(uchar ctr_byte, word_addr)  // ctr_bytr: 1010xxx0
  143. {
  144.         uchar ddata=0;
  145.         uchar i=8;
  146.         SCL=1; //
  147.         Dlus(5);//
  148.         SDA_P=0;
  149.         Dlus(5);
  150.         SCL=0; //START
  151.         write_8bitP(ctr_byte); //control byte
  152.         ACKP();
  153.         write_8bitP(word_addr);  //word address
  154.         ACKP();
  155.         //以上是一个“哑”写操作,相当于设置当前地址

  156.         SCL=1;
  157.         Dlus(5);
  158.         SDA_P=0;
  159.         Dlus(5);
  160.         SCL=0; //START
  161.         write_8bitP(ctr_byte|0x01); //control byte
  162.         ACKP();
  163.         while (i--)
  164.         {
  165.                 SDA_P=1;
  166.                 ddata<<=1;
  167.                 SCL=0;
  168.                 Dlus(5);
  169.                 SCL=1;
  170.                 Dlus(1);  //
  171.                 if (SDA_P) ddata|=0x01;
  172.         }

  173.         SCL=0;
  174.         Dlus(5);
  175.         SCL=1;
  176.         Dlus(5);
  177.         SDA_P=0;
  178.         Dlus(5);
  179.         SCL=1;
  180.         Dlus(5);
  181.         SDA_P=1; //STOP
  182.         Dlus(5);
  183.         return ddata;
  184. }
  185. */
  186. /*
  187. //*****************************************************************************
  188. //探头上24LC64的读写操作

  189. void Write24LC64P(uint address,uchar ddata)
  190. {
  191.         SCL=1;
  192.         Dlus(5);
  193.         SDA_P=0;
  194.         Dlus(5);
  195.         SCL=0; //START
  196.         write_8bitP(0xa0); //写从地址
  197.         ACKP();
  198.         write_8bitP((uchar)(address>>8));
  199.         ACKP();
  200.         write_8bitP((uchar)(address&0x00FF));
  201.         ACKP();
  202.         write_8bitP(ddata);
  203.         ACKP();
  204.         SDA_P=0;
  205.         Dlus(5);
  206.         SCL=1;
  207.         Dlus(5);
  208.         SDA_P=1; //STOP
  209.         Dlms(5);
  210. }

  211. uchar Read24LC64P(uint address)
  212. {
  213.         uchar ddata=0;
  214.         uchar i=8;
  215.         SCL=1;
  216.         Dlus(5);
  217.         SDA_P=0;
  218.         Dlus(5);
  219.         SCL=0; //START
  220.         write_8bitP(0xa0); //写从地址
  221.         ACKP();
  222.         write_8bitP((uchar)(address>>8));
  223.         ACKP();
  224.         write_8bitP((uchar)(address&0x00FF));
  225.         ACKP();
  226.         //以上是一个“哑”写操作,相当于设置当前地址

  227.         SCL=1;
  228.         Dlus(5);
  229.         SDA_P=0;
  230.         Dlus(5);
  231.         SCL=0; //START
  232.         write_8bitP(0xa1); //写从地址,置为读模式
  233.         ACKP();
  234.         while (i--)
  235.         {
  236.                 SDA_P=1;
  237.                 ddata<<=1;
  238.                 SCL=0;
  239.                 Dlus(5);
  240.                 SCL=1;
  241.                 Dlus(1);   //
  242.                 if (SDA_P) ddata|=0x01;
  243.         }

  244.         SCL=0;
  245.         Dlus(5);
  246.         SCL=1;
  247.         Dlus(5);
  248.         SDA_P=0;
  249.         Dlus(5);
  250.         SCL=1;
  251.         Dlus(5);
  252.         SDA_P=1; //STOP
  253.         Dlus(5);
  254.         return ddata;
  255. }
  256. */
  257. //*****************************************************************************

  258. void Dlms(uint n)                //MCU模式时延时n ms子程序
  259. {
  260.       uchar j;
  261.       while((n--) > 0)
  262.       {
  263.               for(j = 0;j < 125;j++)
  264.               {;}
  265.       }
  266. }

  267. void Dlus(uint n)                //MCU模式时延时n*8us子程序
  268. {
  269.       while((n--) > 0)
  270.       {
  271.               {;}
  272.       }
  273. }

复制代码

所有资料51hei提供下载:
509555821252314.rar (1.92 KB, 下载次数: 19)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:65759 发表于 2020-9-27 10:24 | 只看该作者
有没有PCB电路图啊?
回复

使用道具 举报

板凳
ID:76802 发表于 2020-11-14 08:47 | 只看该作者
垃圾资料,和5460 没有关系
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表