文章目录
- 一、霍尔传感器
-
- [ 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、实例现象
