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

相关推荐
iCxhust6 小时前
微机原理实践教程(汇编篇)---A002流水灯
汇编·单片机·嵌入式硬件·51单片机·微机原理
iCxhust8 小时前
led_pattern = (led_pattern << 1) | (led_pattern >> 7)执行顺序
stm32·单片机·嵌入式硬件·51单片机·微机原理
llilian_161 天前
晶体频率测试仪 破解晶振品控核心难题:晶体频率网络测试仪深度解析 晶体网络分析仪
网络·功能测试·单片机·嵌入式硬件·测试工具·51单片机
iCxhust2 天前
将8088 BootLoader分拆烧写到8086 ROM中
stm32·单片机·嵌入式硬件·51单片机·微机原理
llilian_162 天前
晶振测量仪 晶振频率测试仪器的多领域应用解析 晶振频率测试仪器
功能测试·单片机·嵌入式硬件·测试工具·51单片机
智者知已应修善业2 天前
【51单片机控制的交通信号灯三按键切换调节时分秒加减】2023-8-26
c++·经验分享·笔记·算法·51单片机
iCxhust3 天前
如何在汇编中修改CS:IP
汇编·单片机·嵌入式硬件·51单片机·微机原理
国产芯片设计3 天前
小家电驱动开发实战:远乐YL1628在电饭煲显示面板的应用与调试
单片机·嵌入式硬件·mcu·51单片机·硬件工程
国产芯片设计3 天前
DIY实战|0.8寸WiFi自动授时电子钟,国产数码管驱动芯片方案分享
stm32·单片机·mcu·51单片机·硬件工程