备赛记录第一天——感为八路传感器IIC使用

注:本文记录的原因是方便资料整理和电赛使用,所以有些地方写的可能不是那么清楚,望见谅。

1、使用元器件:感为八路灰度传感器、STM32;

2、配置过程:感为八路灰度传感器每次使用前均需校准,校准方式如下,注意在校准时不要插任何跳线帽。

3、代码编写:

  博主使用的是IIC通信,获取八路传感器的10值,根据资料,传感器的八路10值会被打包成一个char类型8位数据,例如:当八路传感器均为高电平时,输出1111 1111;代码根据江科大IIC例程改编,这里不再赘述:

#include "main.h"
#include "gpio.h"
#define Huidu_Address 0x9E
#define Huidu_Num_Address 0xDD


void Huidu_W_SCL(uint8_t BitValue)
{
	HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,(GPIO_PinState)BitValue);
	Delay_us(10);
}

void Huidu_W_SDA(uint8_t BitValue)
{
	HAL_GPIO_WritePin(GPIOB,GPIO_PIN_15,(GPIO_PinState)BitValue);
	Delay_us(10);
}

uint8_t Huidu_R_SDA(void)
{
	uint8_t BitValue;
	BitValue =HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_15);
	Delay_us(10);
	return BitValue;
}
void Huidu_Init(void)
{
  MX_GPIO_Init();
		Huidu_W_SCL(1);
Huidu_W_SDA(1);

}
void Huidu_Start(void)
{
Huidu_W_SCL(1);
Huidu_W_SDA(1);
Huidu_W_SDA(0);
Huidu_W_SCL(0);
}
void Huidu_Stop(void)
{
Huidu_W_SCL(0);
Huidu_W_SDA(0);
Huidu_W_SCL(1);
Huidu_W_SDA(1);
}
void Huidu_SendByte(uint8_t Byte)
{
uint8_t i=0;
for(i=0;i<8;i++)
{
Huidu_W_SDA(Byte & (0x80>>i));
Huidu_W_SCL(1);
Huidu_W_SCL(0);
}
}
uint8_t Huidu_ReceiveByte(void)
{
    uint8_t Byte=0x00;
Huidu_W_SDA(1);
uint8_t i=0;
for(i=0;i<8;i++)
{
    Huidu_W_SCL(1);
   if(Huidu_R_SDA()==1)
   Byte|=(0x80>>i);
   Huidu_W_SCL(0);
}
return Byte;
}

uint8_t Huidu_ReceiveAck(void)
{
	uint8_t AckBit;
	Huidu_W_SDA(1);
	Huidu_W_SCL(1);
	AckBit = Huidu_R_SDA();
	Huidu_W_SCL(0);
	return AckBit;
}
void Huidu_SendAck(uint8_t AckBit)
{
Huidu_W_SDA(AckBit);
Huidu_W_SCL(1);
Huidu_W_SCL(0);
}
void Huidu_GetNum_Start(void)
{
	Huidu_Start();
	Huidu_SendByte(Huidu_Address);
	Huidu_ReceiveAck();
	Huidu_SendByte(Huidu_Num_Address);
	Huidu_ReceiveAck();
	Huidu_Stop();
}
char Huidu_GetNum(void)
{
	char GetNum;
	Huidu_Start();
	Huidu_SendByte(Huidu_Address | 0x9F);
	Huidu_ReceiveAck();
	GetNum = Huidu_ReceiveByte();
	Huidu_SendAck(1);
   Huidu_Stop();
return GetNum;
}

有以下三种读取方式:

我选择第二种,并在OLED上显示:

主程序代码:

  Huidu_Init();
 Huidu_GetNum_Start();
  while (1)
  {
		aa=Huidu_GetNum();
	  OLED_ShowSignedNum(2, 1, aa, 8);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }

记得初始化

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值