前言
💗博主介绍:✌全网粉丝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++; //脉冲计数
}
具体实现截图
设计获取
文章下方名片联系我即可~
精彩专栏推荐订阅:在下方专栏👇🏻
毕业设计精品实战案例
收藏关注不迷路!!
🌟文末获取设计🌟