1. Zave测速模块红外槽型光耦对射光电传感器码盘计数器
所谓测电机转速,是对不含编码器的电机的老式测速方法。
2. TCRT5000红外反射光电开关
工作电压 3.3V-5V 输出形式 :数字开关量输出(0 和 1) 检测反射距离:1mm~25mm 适用 功能介绍: TCRT5000 传感器的红外发射二极管不断发射红外线,当发射出的红外线没有被反射回来或被反射回来但强度不够大时,红外接收管一直处于关断状态,此时模块的输出端为高电平,指示二极管一直处于熄灭状态;被检测物体出现在检测范围内时,红外线被反射回来且强度足够大,红外接收管饱和,此时模块的输出端为低电平,指示二极管被点亮。
在检测反射距离内,若检测面为黑色,指示灯灭,输出高电平。 在检测反射距离内,若检测面为白色,指示灯亮,输出低电平。
接线如下:
循迹传感器 | 单片机 |
---|
VCC | 3.3-5V | GND | GND | D0 | 开关信号输出 | A0(一般不接) | 模拟信号输出 |
开关式传感器,我们就不需要采用ADC采样,直接将PA1口作为输入。将PA1口的高低电平作为判定逻辑的条件即可。
uint16_t RAY;
RAY = HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_1);
if(RAY == 1)
{
HAL_GPIO_WritePin(GPIOF,GPIO_PIN_10,GPIO_PIN_RESET);
}
else
{
HAL_GPIO_WritePin(GPIOF,GPIO_PIN_10,GPIO_PIN_SET);
}
HAL_Delay(8);
3.MAX7219数码管显示
、 电路图:
MAX7219是一种集成化的串行输入/输出共阴极显示驱动器,它连接微处理器与8位数字的7段数字LED显示,也可以连接条线图显示器或者64个独立的LED。其上包括一个片上的B型BCD编码器、多路扫描回路、段字驱动器,而且还有一个8* 8的静态RAM 用来存储每一一个数据。只有一个外部寄存器用来设置各个LED的段电流。 只需要3个I0口即可驱动8位数码管,数码管显示时无闪烁,支持级联! 连线如下:
数码管 | 单片机 |
---|
VCC | 5V | GND | GND | DIN | P00 | CS | P01 | CLK | P02 |
接线说明: (以提供的程序为例,可以接任意I0口,在程序中修改端口定义即可) :
#include "sgt.h"
const int32_t pow10[]={0,10,100,1000,10000,100000,1000000,10000000};
const int8_t font[]="-EHLP ";
#define PIN_DIN(state) HAL_GPIO_WritePin(GPIOF, GPIO_PIN_13, (GPIO_PinState)state)
#define PIN_CS(state) HAL_GPIO_WritePin(GPIOF, GPIO_PIN_12, (GPIO_PinState)state)
#define PIN_CLK(state) HAL_GPIO_WritePin(GPIOF, GPIO_PIN_14, (GPIO_PinState)state)
void Write_Max7219_byte(uint8_t DATA);
void Write_Max7219(uint8_t address,uint8_t dat);
void Segments_WriteSingle(uint8_t pos,int8_t ch,bool point);
void Write_Max7219_byte(uint8_t DATA)
{
PIN_CS(0);
for(uint8_t i=0;i<8;i++)
{
PIN_CLK(0);
uint8_t DIN=(DATA&0x80)>>7;
PIN_DIN(DIN);
DATA=DATA<<1;
PIN_CLK(1);
}
}
void Write_Max7219(uint8_t address,uint8_t dat)
{
PIN_CS(0);
Write_Max7219_byte(address);
Write_Max7219_byte(dat);
PIN_CS(1);
}
void Segments_Init(void)
{
Write_Max7219(0x09, 0xff);
Write_Max7219(0x0a, 0x03);
Write_Max7219(0x0b, 0x07);
Write_Max7219(0x0c, 0x01);
Write_Max7219(0x0f, 0x00);
}
void Segments_WriteSingle(uint8_t pos,int8_t ch,bool point)
{
if(ch>10)
{
for(uint8_t i=0;i<6;i++)
if(ch==font[i])
{
ch=10+i;
break;
}
}
if(point)
ch|=0x80;
Write_Max7219(pos+1,ch);
}
void Segments_ClearAll()
{
for(uint8_t i=0;i<8;i++)
{
Write_Max7219(i+1,0x0f);
}
}
void Segments_Write_Int(int32_t num)
{
if(num<-9999999||num>99999999)
return;
Segments_ClearAll();
bool isNgt=num<0;
uint8_t i=0;
if(num<0)
num=-num;
do
{
Segments_WriteSingle(i,num%10,false);
num/=10;
i++;
}while(num!=0);
if(isNgt)
Segments_WriteSingle(i,'-',false);
}
void Segments_Write_Float(float fnum,uint8_t decimals)
{
Segments_ClearAll();
int32_t num=fnum*pow10[decimals];
bool isNgt=num<0;
uint8_t i;
if(num<0)
num=-num;
else if(num==0)
Segments_WriteSingle(0,0,false);
for(i=0;num!=0||i<decimals+1;i++)
{
bool point=false;
if(i==decimals)
point=true;
Segments_WriteSingle(i,num%10,point);
num/=10;
}
if(isNgt)
Segments_WriteSingle(i,'-',false);
}
4.TFT显示屏 2.8寸可触摸
|