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

     

相关推荐
xxwxx__13 天前
51单片机 + ESP8266 TCP通信实战:从零实现WiFi远程控制
c语言·嵌入式硬件·tcp/ip·51单片机
智者知已应修善业14 天前
【51单片机串口通信甲机四个按键模拟四位二进制值发送乙机以十进制显示2位数码管】2024-6-14
c++·经验分享·笔记·算法·51单片机
深圳市晶科鑫实业有限公司15 天前
国产TCXO温补晶振是否可以完美替代欧美日系主流型号
人工智能·stm32·单片机·物联网·51单片机·信息与通信
xxwxx__15 天前
51单片机串口通信完全指南:从原理到实战(发送、接收、回环与控制)
c语言·单片机·嵌入式硬件·51单片机
智者知已应修善业16 天前
【51单片机2个外部中断显示中断历时,初始化8左移3位共阳数码管】2024-6-6
c++·经验分享·笔记·算法·51单片机
智者知已应修善业17 天前
【51单片机8位数码管同时倒计时从9999】2024-1-25
c++·经验分享·笔记·算法·51单片机
H__Rick17 天前
C51学习-DAY4
嵌入式硬件·学习·51单片机·硬件工程
H__Rick17 天前
C51学习-DAY7
单片机·嵌入式硬件·学习·51单片机