备战第一天记录:八路传感器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 */
}
记得初始化
作者:小疯纸~