IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 传感器应用——测速模块、寻迹传感器、数码管显示、TFT显示屏(二) -> 正文阅读

[嵌入式]传感器应用——测速模块、寻迹传感器、数码管显示、TFT显示屏(二)

1. Zave测速模块红外槽型光耦对射光电传感器码盘计数器

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
所谓测电机转速,是对不含编码器的电机的老式测速方法。

2. TCRT5000红外反射光电开关

在这里插入图片描述
工作电压 3.3V-5V
输出形式 :数字开关量输出(0 和 1)
检测反射距离:1mm~25mm 适用
功能介绍:
TCRT5000 传感器的红外发射二极管不断发射红外线,当发射出的红外线没有被反射回来或被反射回来但强度不够大时,红外接收管一直处于关断状态,此时模块的输出端为高电平指示二极管一直处于熄灭状态;被检测物体出现在检测范围内时,红外线被反射回来且强度足够大,红外接收管饱和,此时模块的输出端为低电平,指示二极管被点亮。

在检测反射距离内,若检测面为黑色,指示灯灭,输出高电平。
在检测反射距离内,若检测面为白色,指示灯亮,输出低电平。

接线如下:

循迹传感器单片机
VCC3.3-5V
GNDGND
D0开关信号输出
A0(一般不接)模拟信号输出

在这里插入图片描述
开关式传感器,我们就不需要采用ADC采样,直接将PA1口作为输入。将PA1口的高低电平作为判定逻辑的条件即可。

uint16_t RAY;
		RAY = HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_1);//检测PA1口电平
		if(RAY == 1)//若为高电平则点亮LED1,即检测到黑色,点亮led
		{
			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位数码管,数码管显示时无闪烁,支持级联!
连线如下:

数码管单片机
VCC5V
GNDGND
DINP00
CSP01
CLKP02

接线说明: (以提供的程序为例,可以接任意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);

/********************************************/
//功能:向MAX7219写入字节
//入口参数:DATA 
//出口参数:无
void Write_Max7219_byte(uint8_t DATA)         
{   
	PIN_CS(0);	//CS
	for(uint8_t i=0;i<8;i++)
	{		  
		PIN_CLK(0);//CLK
		uint8_t DIN=(DATA&0x80)>>7;
		PIN_DIN(DIN);//DIN
		DATA=DATA<<1;
		PIN_CLK(1);//CLK
	}                                 
}

/********************************************/
//功能:向MAX7219写入数据
//入口参数:address、dat
//出口参数:无
void Write_Max7219(uint8_t address,uint8_t dat)
{ 
	PIN_CS(0);//CS
	Write_Max7219_byte(address);           //写入地址,即数码管编号
	Write_Max7219_byte(dat);               //写入数据,即数码管显示数字 
	PIN_CS(1);	//CS                        
}

void Segments_Init(void)
{
	Write_Max7219(0x09, 0xff);       //译码方式:BCD码
	Write_Max7219(0x0a, 0x03);       //亮度
	Write_Max7219(0x0b, 0x07);       //扫描界限;8个数码管显示
	Write_Max7219(0x0c, 0x01);       //掉电模式:0,普通模式:1
	Write_Max7219(0x0f, 0x00);       //显示测试:1;测试结束,正常显示:0
}

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寸可触摸

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-08-07 12:15:04  更:2021-08-07 12:17:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 2:36:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计