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

     

相关推荐
AOI小白新手上路2 天前
江科协51单片机 7-2 LCD1602显示时钟实验
单片机·嵌入式硬件·51单片机
艾芯微科技3 天前
B1040A2|DFN1006‑2L 超微型肖特基二极管,便携设备高频整流优选国产器件
网络·单片机·嵌入式硬件·集成测试·51单片机
AOI小白新手上路4 天前
江科协51单片机16-1 AD/DA ADC 三通道综合显示(LCD1602 版)改造说明
单片机·嵌入式硬件·51单片机
AOI小白新手上路4 天前
江科协51单片机16-1 DA数模转换实验(PWM 呼吸灯)
单片机·嵌入式硬件·51单片机
AOI小白新手上路6 天前
江科协51单片机 17-2 红外遥控电机调速实验调试总结
单片机·嵌入式硬件·51单片机
单片机仿真设计6 天前
【proteus仿真】基于 51 单片机距离传感器警报装置设计(仿真图+程序)
单片机·嵌入式硬件·51单片机·proteus·毕设
AOI小白新手上路7 天前
江科协51单片机入门:新建第一个Keil工程,点亮第一个LED(含完整代码)
stm32·单片机·51单片机
XiHongShi201610 天前
51单片机C语言版(1)
嵌入式硬件·学习·51单片机
wuyk55511 天前
《WiFi 嵌入式物联网开发全套实战》| 第01章 WiFi整体架构详解:BSS/ESS/AP/STA模式彻底区分
开发语言·stm32·单片机·嵌入式硬件·mcu·物联网·51单片机
謓泽11 天前
『51单片机』AD/DA
单片机·嵌入式硬件·51单片机·模拟·ad·da·謓泽