基于51单片机的红外测速系统(简单项目)

        基于51单片机的红外测速系统使用STC89C52RC作为系统,利用L298N作为电机驱动器件,使用TM1638驱动数码管继续显示,程序运行,电机转动,对射式红外测量编码盘产生的下降沿,一般而言,在指定时间内获得的下降沿越多,表示电机速度越快。

一、硬件设计

1、TM1638

TM1638,一款由台湾晶豪科技(ESMT)设计的高性能、多功能LED驱动/控制器,专门用于驱动8位共阴极或共阳极的LED数码管显示,以及16个独立的LED或按键。这款芯片以其集成度高、功能全面和易于使用而受到电子工程师和爱好者的青睐。

主要功能与特性:

驱动能力:TM1638能同时驱动8位LED数码管和16个独立的LED或按键,适用于各种显示和输入控制需求。
通信接口:支持串行SPI通信协议,可与微控制器轻松连接,简化了电路设计。
显示控制:提供多种显示模式,包括静态显示和滚动显示,支持亮度调节和显示内容的动态控制。
低功耗设计:工作电压范围为2.7V至5.5V,低功耗特性使得其在电池供电的移动设备中应用广泛。
集成键盘扫描:内置键盘扫描功能,可自动识别16个按键的状态,减轻了主控器的负担,提升了系统的响应速度。

2、编码器测速(对射式红外)

        对射式红外传感器,一种基于红外线发射与接收原理的非接触式位置检测技术,广泛应用于自动化控制、安防系统、工业检测以及环境监测等领域。这种传感器通过红外发射器发出红外光束,由对应的接收器接收,当有物体阻挡光束路径时,接收器检测到信号变化,从而实现物体检测或计数

二、软件设计

1、TM1638驱动数码管

#include "nixie.h"sbit TM1638STB = P1^0;
sbit TM1638CLK = P1^1;
sbit TM1638DIO = P1^2;unsigned char Data[]={0x3f,0x30,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};//TM1638写一个字节(只负责送数据到线上)
void TM1638_WByte(ucahr cmd)
{uchar i;for (i = 0; i < 8; i++){TM1638CLK = 0;TM1638DIO = cmd & 0x01;cmd >>= 1;TM1638CLK = 1;}
}void TM1638_clear()
{uchar i;TM1638STB = 1;TM1638STB = 0;TM1638_WByte(0x40);for (i = 0; i < 16; i ++)TM1638_WByte(0x00);//在所有16个地址中写入0x00TM1638STB = 1;TM1638STB = 0;TM1638_WByte(0xc0);//设置显示地址为0x00TM1638STB = 1;
}void nixie_Init()
{TM1638_clear();TM1638STB = 0;TM1638_WByte(0x88);//1000 1000显示开,脉冲宽度为1/16TM1638STB = 1;TM1638STB = 0;TM1638_WByte(0x44);//普通模式,地址固定,写显示数据TM1638STB = 1;}void nixie(uchar pos, uchar num, uchar dot){TM1638STB = 0;TM1638_WByte(0xc0 + pos*2);if(dot==1)TM1638_WByte(Data[num] | 0x80);if(dot==0)TM1638_WByte(Data[num]);TM1638STB = 1;
}

2、编码器测速

        编码器测速结合了外部中断和定时器,定时器捕捉指定时间内产生的下降沿,得出速度。

#include <reg52.h> 
#include <intrins.h> 
#include "delay.h"
#include "Timer0.h"
#include "KEY.h"
#include "nixie.h"sbit Motor = P1^5;typedef unsigned int u16;
typedef unsigned char u8;//变量定义
u16 pulse_count=0;
u16 pulse_res=0;
u8 KeyNum=0, mode=0;
unsigned char Counter,Compare=0;void Timer1_Init(){//TMOD=0x01;TMOD&=0x0f;//1与任何数&为原数,0与任何数|为原数TMOD|=0x10;TF1=0;TR1=1;TL1 = 0x9C;				//设置定时初始值TH1 = 0xFF;				//设置定时初始值ET1=1;EA=1;PT1=1;
}// 外部中断INT0的中断服务子程序
void ext1_isr() interrupt 2
{pulse_count++;
}void ext1_config()
{// 设置INT1IT1=1;  // 设置外部中断1触发方式为下降沿触发EX1=1;  // 打开外部中断1的中断允许EA=1; // 打开总中断允许
}void main()
{//利用外部中断捕捉,下降沿,获取流速ext1_config();//定时器初始化Timer0_Init();Timer1_Init();nixie_Init();while(1){KeyNum = KEY();if(KeyNum==1)mode++;mode %= 2;if(mode==0)Compare = 0;if(mode==1)Compare = 25;nixie(0,pulse_res/1000%10,0);nixie(1,pulse_res/100%10,0);nixie(2,pulse_res/10%10,1);nixie(3,pulse_res%10,0);}
}//流速处理逻辑
void Velocity()
{//计算流速pulse_res = (int)(pulse_count/2);//显示流速//脉冲清零pulse_count=0;
}void Timer0_Routine() interrupt 1
{static unsigned int T0Count,T0Count1,T0Count2;TL0 = 0x18;				//设置定时初始值TH0 = 0xFC;				//设置定时初始值//定时器扫描按键T0Count1++;if(T0Count1>=20){T0Count1=0;Key_Loop();	}//定时计数T0Count++;if(T0Count>=1000){T0Count=0;Velocity();}
}void Timer1_Routine() interrupt 3
{TL1 = 0x9C;				//设置定时初始值TH1 = 0xFF;				//设置定时初始值324Counter++;Counter%=100;if(Counter<Compare){Motor= 1;}else{Motor = 0;}
}

三、项目演示

        程序运行系统默认风扇不转动,如下:

        点击运行,风扇开始转动,同时数码管显示速度值,如下:

四、项目总结

        通过本次设计,实现了定时器和对射式红外结合编码盘,实现对直流电机的测速,详情参考我的bilibili,如下:

基于51单片机的红外测速系统_哔哩哔哩_bilibili

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1537858.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【pytorch学习笔记,利用Anaconda安装pytorch和paddle深度学习环境+pycharm安装---免额外安装CUDA和cudnn】

作者链接: link 一、安装pytorch环境 1.打开打开anaconda的终端后 conda env list然后创建一个名字叫pytorch&#xff0c;python是3.8版本的环境 conda create -n pytorch python3.8再次看环境 conda env list# conda environments: #显示如下环境 base …

基于springboot的慕课学习平台设计与实现

博主介绍&#xff1a;专注于Java .net php phython 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设&#xff0c;从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟 我的博客空间发布了1000毕设题目 方便大家学习使用 感兴趣的可以…

【STM32 ST-LINK Utility】工具使用和如何编译HEX和BIN文件

【STM32 ST-LINK Utility】工具使用和如何编译HEX和BIN文件 一、STM32 ST-LINK UtilitySTM32 ST-LINK Utility简介功能概述&#xff1a; STM32 ST-LINK Utility作用使用场景&#xff1a; 二、KEIL生成HEX和BIN文件1. 生成HEX文件2. 生成BIN文件 三、STM32 ST-LINK Utility烧录1…

pywebview 中错误使用async

错误代码 正确示例 完整代码 前端代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>pywebview …

分布式事务学习笔记(四)微服务实现Stata AT模式、Stata Saga模式介绍

文章目录 前言4 Seata AT 模式4.1 实现原理4.2 脏写问题4.3 微服务实现AT模式4.3.1 新建数据库表4.3.2 修改配置文件4.3.3 重启服务并测试 5 Seata Saga 模式 前言 分布式事务学习笔记(一)分布式事务问题、CAP定理、BASE理论、Seata 分布式事务学习笔记(二)Seata架构、TC服务器…

小间距LED显示屏的技术原理分析

在现代显示技术领域&#xff0c;小间距LED显示屏以其卓越的显示效果和灵活的应用场景&#xff0c;逐渐成为市场的新宠。本文将深入探讨小间距LED显示屏的技术原理&#xff0c;分析其在显示领域的应用优势。 A、小间距LED显示屏的基本概念 小间距LED显示屏是指LED灯珠之间的间距…

大模型微调基本概念指北,零基础入门到精通,收藏这一篇就够了

本文主要分享一下大模型微调相关的基本概念&#xff0c;包括大模型(GPT)训练流程、微调(SFT)方法&分类&框架&最佳实践、强化学习(RLHF)&#xff0c;最后则是分享了如何训练垂直领域大模型。 本文是参考网上博客、文章后进行总结而成&#xff0c;旨在让刚接触大模型…

03-Mac系统PyCharm主题设置

目录 1. 打开PyCharm窗口 2. Mac左上角点击PyCharm&#xff0c;点击Settings 3. 点击第一项Appearance& Behavior 4. 点击Appearance 5. 找到Theme进行设置 1. 打开PyCharm窗口 2. Mac左上角点击PyCharm&#xff0c;点击Settings 3. 点击第一项Appearance& Behavi…

软考高级:嵌入式系统:片级初始化、板级初始化、系统级初始化 AI 解读

生活化例子 想象一下你要启动一辆车&#xff0c;这个过程就可以类比成嵌入式系统的初始化过程。 片级初始化&#xff1a;相当于启动汽车引擎&#xff0c;确保发动机、变速箱这些核心部件能够正常工作。板级初始化&#xff1a;就像检查车子的电子系统、灯光、车窗是否正常&am…

整流电路的有源逆变工作状态

目录 1. 逆变的概念 2. 有源逆变的条件 3. 电流电路的概念 4. 产生逆变的条件 5. 三相桥式全控整流电路的有源逆变工作状态 6. 逆变角的概念 7. 逆变失败的原因 8. 最小逆变角的限制 整流电路的有源逆变状态是指通过控制整流器&#xff0c;使其将直流电源的能量反向送回…

如何写出军工级的代码?

编写军工级代码意味着要达到极高的可靠性、安全性、可维护性和效率&#xff0c;这通常涉及到严格的标准和流程。以下是一些关键点&#xff0c;帮助你编写军工级的代码&#xff1a; 1. 遵循严格的开发流程 军工项目通常需要遵循特定的软件开发标准&#xff0c;例如&#xff1a;…

农产品自主供销小程序--论文源码调试讲解

第二章 开发技术介绍 此次管理系统的关键技术和架构由B/S结构、java和mysql数据库&#xff0c;是本系统的关键开发技术&#xff0c;对系统的整体、数据库、功能模块、系统页面以及系统程序等设计进行了详细的研究与规划。 2.1 系统开发平台 在该在线农产品自主供销小程序中&a…

WebMagic:强大的Java网络爬虫框架

上班苦上班累&#xff0c;上班就想打瞌睡。 在当今信息爆炸的时代&#xff0c;数据的获取和处理变得越来越重要。网络爬虫作为获取网络数据的重要工具&#xff0c;已经成为许多开发者和数据科学家的必备技能。今天&#xff0c;我们将介绍一个广受欢迎的Java网络爬虫框架——We…

为什么Python有了列表list、元组tuple、字典dict这样的容器后,还要弄个集合set?

因为set是数学意义上的集合&#xff0c;拥有唯一和无序的特性&#xff0c;即用来存放没有顺序且无重复的数据&#xff0c;并且元素是不可变的。 这和list、tuple完全不同&#xff0c;这两个能存放相同的元素&#xff0c;且支持索引&#xff0c;有顺序。 set可以很方便的进行并…

激光模组多少钱一套?具体费用的决定因素

激光模组作为现代科技领域的重要组件&#xff0c;然而&#xff0c;对于许多潜在买家而言&#xff0c;激光模组的价格往往是一个令人困惑的问题。本文将跟大家一起探讨激光模组的价格范围及其具体费用的决定因素。 激光模组的价格范围 激光模组的价格因多种因素而异&#xff0c;…

【2025深圳春季全球高端食品展览会展位开始预订】

2025深圳春季全球高端食品展览会 时间&#xff1a;2025年2月23-25日 地点&#xff1a;深圳国际会展中心&#xff08;宝安&#xff09; 随着全球食品行业的蓬勃发展&#xff0c;中国作为世界第二大经济体&#xff0c;其食品市场规模持续扩大&#xff0c;展现出巨大的发展潜力…

.NET 一款免杀的白名单工具可执行系统命令

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等&#xff08;包括但不限于&#xff09;进行检测或维护参考&#xff0c;未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…

优化内容个性化:无限住宅代理如何做到的

数字化时代&#xff0c;个性化内容是提升用户体验和增加用户粘性的关键因素。企业通过个性化内容来满足用户的独特需求和兴趣&#xff0c;从而提高用户满意度和转化率。然而&#xff0c;个性化内容的实现需要准确的用户数据和行为分析&#xff0c;这就要求企业能够有效地收集和…

陶哲轩对OpenAI o1模型使用体验的观察

&#x1f989; AI新闻 &#x1f680; 陶哲轩对OpenAI o1模型使用体验的观察 摘要&#xff1a;陶哲轩在8月份使用OpenAI最新模型o1&#xff0c;发现其在解决数学问题方面有所进步&#xff0c;能成功识别克莱姆定理&#xff0c;但仍存在错误。虽然o1比之前的模型表现更好&#…

腾讯百度阿里华为常见算法面试题TOP100(5):子串、堆

之前总结过字节跳动TOP50算法面试题&#xff1a; 字节跳动常见算法面试题top50整理_沉迷单车的追风少年-CSDN博客_字节算法面试题 子串 560.和为K的子数组 class Solution { public:int subarraySum(vector<int>& nums, int k) {// 寻找在区间[i, j]的和为k的值// 用…