C51_AH3144霍尔传感器

文章目录

  • 一、霍尔传感器
    • [   1、霍尔传感器分类](#   1、霍尔传感器分类)
    • [   2、AH3144:](#   2、AH3144:)
  • 二、代码实例
    • [   1、查询方式(物体计数)](#   1、查询方式(物体计数))
    • [   2、外部中 断方式(电机测速)](#   2、外部中 断方式(电机测速))
    • [   3、实例现象](#   3、实例现象)

一、霍尔传感器

霍尔传感器是一种基于霍尔效应的磁敏传感器,可用于检测磁场强度、物体位置、转速等场景,在 51 单片机项目中应用广泛(如电机测速、接近开关、行程检测)。

1、霍尔传感器分类

2、AH3144:

AH3144是一款数字式单极霍尔开关集成电路,主要用于磁感应检测和位置控制。

引脚:

二、代码实例

1、查询方式(物体计数)

c 复制代码
		#include <reg52.h>
		#include "LCD1602.h"
		#include <intrins.h>
		
		// 定义引脚
		sbit Hall_OUT = P1^0;  // 霍尔传感器输出连接P1.0
		sbit LED = P2^1;       // LED指示灯,用于显示检测状态
		
		unsigned int count = 0;  // 计数变量
		
		void Delay_ms(unsigned int ms) {  // 毫秒级延时函数
		    unsigned int i, j;
		    for(i = ms; i > 0; i--)
		        for(j = 110; j > 0; j--);
		}
		
		void main(void) {
		    LED = 1;  // 初始LED熄灭
		        LCD_Init();
		    while(1) {
		        if(Hall_OUT == 0) {  // 检测到磁场(物体靠近)
		            Delay_ms(20);    // 消抖延时
		            if(Hall_OUT == 0) {
		                count++;     // 计数加1
		                LED = 0;     // LED点亮
		                while(Hall_OUT == 0);  // 等待物体离开
		                LED = 1;     // LED熄灭
		            }
		        }
		        LCD_ShowSignedNum(1,1,count,3); //将计数显示到LCD1602
		    }
		}

2、外部中 断方式(电机测速)

c 复制代码
		#include <reg52.h>
		#include "LCD1602.h"
		#include <intrins.h>
		
		// 定义引脚
		sbit Hall_OUT = P3^2;  // 霍尔输出连接P3.2(外部中断0引脚)
		sbit LED = P1^1;
		
		unsigned int count = 0;  // 中断计数
		unsigned int rpm = 0;    // 转速(转/分钟) 
		unsigned char time_flag = 0;  // 计时标志
		
		// 定时器0初始化(100ms定时)
		void Timer0_Init(void) {
		    TMOD |= 0x01;  // 定时器0工作模式1(16位定时器)
		    TH0 = 0x4C;    // 初值设置,11.0592MHz晶振,定时100ms
		    TL0 = 0x00;
		    ET0 = 1;       // 使能定时器0中断
		    TR0 = 1;       // 启动定时器0
		    EA = 1;        // 开启总中断
		}
		
		// 外部中断0初始化
		void Int0_Init(void) {
		    IT0 = 1;  // 下降沿触发中断(磁场靠近时,OUT从高变低)
		    EX0 = 1;  // 使能外部中断0
		    EA = 1;   // 开启总中断
		}
		
		// 外部中断0服务函数(检测到磁铁时执行)
		void Int0_Service() interrupt 0 {
		    count++;  // 计数加1
		}
		
		// 定时器0服务函数(100ms定时)
		void Timer0_Service() interrupt 1 {
		    TH0 = 0x4C;
		    TL0 = 0x00;
		    time_flag++;
		    if(time_flag == 10) {  // 累计1秒
		        time_flag = 0;
		        rpm = count * 60;  // 转速 = 每秒计数 * 60(假设转轴1个磁铁)
		        count = 0;         // 清零计数
		        LED = ~LED;        // LED闪烁,指示程序运行
		    }
		}
		
		void main(void) {
		    Timer0_Init();
		    Int0_Init();
		        LCD_Init();
		    while(1) {
		      // 可在此处将rpm值通过串口发送到上位机显示
		        LCD_ShowSignedNum(1,1,rpm,3);
		    }
		}

3、实例现象

相关推荐
智者知已应修善业11 小时前
【51单片机单按键切换广告屏】2023-5-17
c++·经验分享·笔记·算法·51单片机
智者知已应修善业1 天前
【51单片机独立按键控制数码管动态显示和LED间隔闪烁并清零】2023-5-28
c语言·经验分享·笔记·算法·51单片机
zd8451015002 天前
51单片机-矩阵按键程序代码
矩阵·51单片机
智者知已应修善业2 天前
【51单片机1,左边4个LED灯先闪烁2次后,右边4个LED灯再闪烁2次:2,接着所用灯一起闪烁3次,接着重复步骤1,如此循环。】2023-5-19
c++·经验分享·笔记·算法·51单片机
zd8451015002 天前
51单片机-串口程序代码
单片机·嵌入式硬件·51单片机
4caf12 天前
作业2:6位数码管静态显示
嵌入式硬件·51单片机
智者知已应修善业3 天前
【51单片机利用外部中断编写程序用两个按键控制数码管显示从0到9,S1控制加计数0—9,S2控制减计数9—0。】
c语言·经验分享·笔记·算法·51单片机
智者知已应修善业3 天前
【51单片机实现0-7和8-1循环显示共阴数码管】2023-5-12
c语言·经验分享·笔记·算法·51单片机
蜕变的小白3 天前
☆嵌入式硬件的学习 :51单片机 知识总结
单片机·嵌入式硬件·51单片机
fie88894 天前
基于51单片机的航模遥控器6通道接收机程序
单片机·嵌入式硬件·51单片机