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、实例现象

相关推荐
小龙报6 天前
【51单片机】 给单片机加 “安全锁”!看门狗 WDT:原理 + 配置 + 复位验证全拆解,让程序稳定不跑飞
驱动开发·stm32·单片机·嵌入式硬件·物联网·51单片机·硬件工程
恶魔泡泡糖7 天前
51单片机DS1302时钟
单片机·嵌入式硬件·51单片机
嵌入式×边缘AI:打怪升级日志9 天前
C语言算术赋值运算复习笔记
c语言·stm32·单片机·算法·51单片机·proteus·代码
想放学的刺客9 天前
整理了120道单片机嵌入式面试题与答案,覆盖了硬件电路和C语言等核心领域。
c语言·c++·stm32·单片机·嵌入式硬件·mcu·51单片机
恶魔泡泡糖9 天前
51单片机-DS18B20温度传感器
单片机·嵌入式硬件·51单片机
小龙报11 天前
【51单片机】不止是调光!51 单片机 PWM 实战:呼吸灯 + 直流电机正反转 + 转速控制
数据结构·c++·stm32·单片机·嵌入式硬件·物联网·51单片机
送外卖的工程师11 天前
STM32 驱动五线四相步进电机(28BYJ-48+ULN2003)教程
stm32·单片机·嵌入式硬件·mcu·物联网·51单片机·proteus
清风66666613 天前
基于51单片机的双档交流电压表设计与实现
单片机·嵌入式硬件·毕业设计·51单片机·课程设计·期末大作业
vQFQJbUiJ14 天前
matlab/simulink三相四桥臂逆变器仿真模型 采用的是电压外环电流内环控制策略,交流...
51单片机
小龙报18 天前
【51单片机】51 单片机 IIC 协议深度解析:时序实现 + GXHT3L 连续转换模式 + 数据解析
c语言·数据结构·stm32·单片机·嵌入式硬件·物联网·51单片机