基于单片机霍尔传感器速度检测系统设计


前言

💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗
👇🏻 精彩专栏 推荐订阅👇🏻
单片机设计精品实战案例
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人

资料获取

文章底部名片,详细资料联系我。

设计介绍

基于单片机霍尔传感器速度检测系统设计是一种高效、精确的速度检测方案,广泛应用于工业自动化、机械设备、电动车辆等领域。以下是对该系统设计的详细介绍:

该系统基于单片机和霍尔传感器技术,设计了一套用于速度检测的综合性系统。该系统能够实时监测和控制电机的转速,或者用于其他需要速度检测的场景,如自行车速度检测等。通过单片机接收和处理霍尔传感器检测到的信号,实现速度的准确计算和实时显示。

功能介绍

51速度检测系统设计-霍尔-LCD1602-LED

本设计由STC89C52单片机电路+霍尔测速传感器电路+LED指示灯电路+LCD1602液晶显示电路+电源电路。

1、液晶实时显示速度。

2、如果速度0-1km/h。只是绿灯亮,同时只是绿灯对应的端口输出低电平。

3、如果速度1-1.5km/h。只是黄灯亮,同时只是黄灯对应的端口输出低电平。

4、如果速度1.5-2km/h。只是红灯亮,同时只是红灯对应的端口输出低电平。

4、如果速度超过2km/h。只是蓝灯亮,同时只是蓝灯对应的端口输出低电平。

直径是2cm。

设计程序


#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include<stdio.h>
#include "1602.h"
#include "delay.h"

sbit led_gre = P1^0;
sbit led_blu = P1^1;
sbit led_yel = P1^2;
sbit led_red = P1^3;

unsigned long PluNum=0;	//检测速度转化来的脉冲量
unsigned long time_ms;		   //定时器计数
float sudu=0;				//转速计算
char displaytemp[16];		   //显示更新暂存
unsigned char DealSudu=0;	  //处理速度
void Init_Timer0(void);		 //函数声明
/*------------------------------------------------
                    主函数
------------------------------------------------*/
void main (void)
{                  
	Init_Timer0();        //定时器0初始化
	EX0=1;         //外部中断0开
	IT0=1;         //边沿触发
    EA=1;          //全局中断开
	LCD_Init();           //初始化液晶
	DelayMs(20);          //延时有助于稳定
	LCD_Clear();          //清屏

	LCD_Write_String(0,0,"My Designer!    ");  //初始化
	while (1)         //主循环
	{
		if(DealSudu==1)	  //处理速度
		{
			DealSudu=0;
			sudu=3.6*3.1415*0.02*(float)PluNum/5;	//直径*3.1415 周长	*3.6转化为km/h
			PluNum=0;
			sprintf(displaytemp,"sd:%5.2fkm/h",sudu);	 //打印
			LCD_Write_String(0,1,displaytemp);	//显示
			if(sudu < 1)
			{
			 	led_gre = 0; led_yel = 1; led_red = 1; led_blu = 1;		 //绿 灯亮
			}
			
		}
	}
}

void Init_Timer0(void)
{
	TMOD |= 0x01;	  //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响		     
	TH0=(65536-20000)/256;		  //重新赋值 20ms
	TL0=(65536-20000)%256;
	EA=1;            //总中断打开
	ET0=1;           //定时器中断打开
	TR0=1;           //定时器开关打开
}

void Timer0_isr(void) interrupt 1 
{
	static unsigned char Count=0;	   //计数
//	TH0=(65536-20000)/256;		  //重新赋值 20ms
//	TL0=(65536-20000)%256;	
	TL0 = 0x00;		//设置定时初值	  50ms
	TH0 = 0x4C;		//设置定时初值

	Count++;
	if(Count>100)		//3s进行处理
	{
		Count = 0;
	 	DealSudu=1;
	}
}

/*------------------------------------------------
                 外部中断程序
------------------------------------------------*/
void ISR_Key(void) interrupt 0 using 1
{
	PluNum++;		//脉冲计数
}




具体实现截图

在这里插入图片描述

在这里插入图片描述

设计获取

文章下方名片联系我即可~

精彩专栏推荐订阅:在下方专栏👇🏻

毕业设计精品实战案例

收藏关注不迷路!!

🌟文末获取设计🌟

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值