IIC 扫描

[复制链接]
查看812 | 回复8 | 2023-9-27 23:14:01 | 显示全部楼层 |阅读模式
分享一个前一段时间自己写的一个IIC扫描的代码(逐个访问IIC地址从0x00到0xFF,如果你程序已经实现了IIC功能,则可以自己写一个扫描方法基于下面代码),可以用于扫描挂载在当前IIC串口上的设备地址,并且统计出当前有多少个IIC设备同时显示在LCD1602上。
核心代码如下,如果要移植的话请根据自己的单片机定义IIC GPIO并且初始化LCD,下面代码是基于STC89C51

  1. #include <reg52.h>
  2. #include "I2C.h"
  3. #include "LCD1602.h"
  4. #include "Delay.h"



  5. unsigned char count;

  6. //Scan IIC address
  7. void I2C_AddressScan() {
  8.     unsigned char address;
  9.     LCD_Init();

  10.     // from 0x00 to 0xFF
  11.     for (address = 0x00; address < 0xFF; address++) {
  12.         I2C_Start();
  13.         I2C_SendByte(address);
  14.         if (!I2C_ReceiveAck()) {
  15.             //delay for clearly see the address change on lcd1602
  16.             Delay(2000);
  17.             count+=1;
  18.             LCD_ShowString(1,1,"0X");
  19.             LCD_ShowHexNum(1,3,address,2);
  20.         }

  21.         // after done , the sum will be shown on the screen
  22.         if(address == 0xFE) {
  23.             LCD_ShowString(2,1, "Count:");
  24.             LCD_ShowNum(2,7,count,3);
  25.         }
  26.         I2C_Stop();
  27.     }
  28. }
复制代码
完整代码如下

I2C_Scanner-main.zip (420 Bytes, 下载次数: 0)
回复

使用道具 举报

lsrly | 2023-9-28 11:04:46 | 显示全部楼层
51的也可以发呀
回复 支持 反对

使用道具 举报

496199544 | 2023-9-28 11:33:47 | 显示全部楼层
学习
回复

使用道具 举报

WangChong | 2023-9-28 11:54:13 | 显示全部楼层
lsrly 发表于 2023-9-28 11:04
51的也可以发呀

移植下不就是小安派了吗
回复 支持 反对

使用道具 举报

王乐乐 | 2023-9-28 12:00:27 | 显示全部楼层
打卡学习
回复

使用道具 举报

jkernet | 2023-9-28 12:50:33 | 显示全部楼层
学习了
回复

使用道具 举报

WangChong | 2023-9-28 20:28:07 | 显示全部楼层
回复 支持 反对

使用道具 举报

干簧管 | 2023-12-3 22:55:38 | 显示全部楼层
不错,可以找从机地址
回复 支持 反对

使用道具 举报

1084504793 | 2023-12-30 18:34:03 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则