找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4013|回复: 2
收起左侧

IIC总线24C02.H文件下载

[复制链接]
ID:70976 发表于 2014-12-25 20:37 | 显示全部楼层 |阅读模式
本帖最后由 daniu 于 2014-12-25 20:51 编辑

24C02.H文件是iic总线存储器的驱动 大家可以另存为到硬盘下载到电脑


  1. #ifndef __24C02_H__
  2. #define __24C02_H__

  3. #define uchar unsigned char
  4. #define uint unsigned int

  5. sbit at24c04_scl=P3^2;//时钟端口
  6. sbit at24c04_sda=P3^3;//数据端口

  7. unsigned char temp_1;//定义全局变量存放暂时值
  8. unsigned char biao;

  9. void delayic(uchar t)
  10. {
  11. uchar i,j;
  12. for(i=0;i<t;i++)
  13. {
  14.   for(j=0;j<255;j++);
  15. }
  16. }
  17. void delayic_m(uchar t)
  18. {
  19. uchar i;
  20. for(i=0;i<t;i++);
  21. }

  22. void sta(void)//启动模块
  23. {
  24. at24c04_sda=1;
  25. at24c04_scl=1;
  26. delayic_m(1);
  27. at24c04_sda=0;
  28. delayic_m(1);
  29. at24c04_scl=0;
  30. }
  31. void stop(void)//停止模块
  32. {
  33. at24c04_sda=0;
  34. at24c04_scl=1;
  35. delayic_m(1);
  36. at24c04_sda=1;
  37. delayic_m(1);
  38. at24c04_scl=0;
  39. }
  40. uchar cack(void)//应答检测模块,有应答返回值是0
  41. {
  42. uchar i;
  43. i=0;
  44. at24c04_sda=1;
  45. at24c04_scl=1;
  46. if(at24c04_sda==1)i=1;
  47. at24c04_scl=0;
  48. return i;
  49. }
  50. void mnack(void)//发非应答模块
  51. {
  52. at24c04_sda=1;
  53. at24c04_scl=1;
  54. delayic_m(1);
  55. at24c04_scl=0;
  56. at24c04_sda=0;
  57. }
  58. void wrbyt(uchar date_w24)//写入一个字节
  59. {
  60. uchar i,j;
  61. j=0x80;
  62. for(i=0;i<8;i++)
  63. {
  64.   if((date_w24&j)==0)
  65.   {
  66.    at24c04_sda=0;
  67.    at24c04_scl=1;
  68.    delayic_m(1);
  69.    at24c04_scl=0;
  70.   }
  71.   else
  72.   {
  73.    at24c04_sda=1;
  74.    at24c04_scl=1;
  75.    delayic_m(1);
  76.    at24c04_scl=0;
  77.    at24c04_sda=0;
  78.   }
  79.   j=j>>1;
  80. }
  81. }
  82. uchar rdbyt(void)//读出一个字节
  83. {
  84. uchar i,j;
  85. j=0x00;
  86. for(i=0;i<8;i++)
  87. {
  88.   at24c04_sda=1;
  89.   at24c04_scl=1;
  90.   if(at24c04_sda==0)
  91.   {
  92.    j=j&0xfe;
  93.   }
  94.   else
  95.   {
  96.    j=j|0x01;
  97.   }
  98.   if(i!=7)j=j<<1;
  99.   at24c04_scl=0;
  100. }
  101. return j;
  102. }
  103. void WRITE_IIC(uchar addr_ic,uchar data_ic)//写入数据操作
  104. {
  105. for(biao=0;biao<1;biao++)
  106. {
  107.   sta();//启动
  108.   wrbyt(0xa0);//写入,写指令
  109.   if(cack()!=0)
  110.   break;
  111.   wrbyt(addr_ic);//写入要写地址
  112.   if(cack()!=0)
  113.   break;
  114.   wrbyt(data_ic);//写设定的值
  115.   if(cack()!=0)
  116.   break;
  117.   stop();
  118.   delayic(20);
  119.   delayic(20);//间隔
  120. }
  121. }
  122. uchar READ_IIC(uchar addr_ic)//读取数据操作
  123. {
  124. uchar mid_ic;//中间变量
  125. for(biao=0;biao<1;biao++)
  126. {
  127.   sta();//启动
  128.   wrbyt(0xa0);//写入,写指令,写指令是0xa0(片选地址线全部接地)
  129.   if(cack()!=0)//检测应答,正常情况下返回值都是0,忙时除外
  130.   break;
  131.   wrbyt(addr_ic);//写入要读地址
  132.   if(cack()!=0)//检测应答
  133.   break;
  134.   sta();//单字节读取需要重新启动
  135.   wrbyt(0xa1);//写入,读命令,读指令是0xa1(片选地址线全部接地)
  136.   if(cack()!=0)//检测应答
  137.   break;
  138.   mid_ic=rdbyt();//将读出的数据存放在中间变量中
  139.   mnack();//发非应答信号
  140.   stop();//停止IC读写
  141.   delayic(20);
  142.   delayic(20);//IC的重新启动读写要间隔较长的时间
  143. }
  144. return mid_ic;
  145. }

  146. #endif
复制代码



回复

使用道具 举报

ID:102826 发表于 2016-1-17 05:36 | 显示全部楼层
感觉不错
回复

使用道具 举报

ID:97249 发表于 2016-1-18 15:37 | 显示全部楼层
本帖最后由 红尘有你 于 2016-1-18 15:40 编辑

for(biao=0;biao<1;biao++)求这个biao的含义
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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