基于51单片机计步器—无线蓝牙APP上传

2024-06-22 12:12

本文主要是介绍基于51单片机计步器—无线蓝牙APP上传,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

基于51单片机计步器设计

(程序+原理图+设计报告)

功能介绍

具体功能:

本设计由STC89C52单片机最小系统+ADXL345加速度传感器+lcd1602液晶电路+蓝牙模块电路+呼吸灯电路+电源电路组成。

1.通过ADXL345检测步数,然后通过蓝牙模块将步数,路程,卡路里及运动状态实时传输到手机;

2.有动态呼吸灯指示走路情况;

3.液晶lcd1602实时显示步数,路程,卡路里及运动状态,运动状态分stand、lie、walk、run;

​演示视频:

基于51单片机计步器—无线蓝牙APP上传 

添加图片注释,不超过 140 字(可选)

程序

#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include<stdio.h>
#include "delay.h"
#include "math.h"
#include "adxl345.h"
#include "1602.h"
/***公众号:木子单片机****/
sbit led=P1^4;	 //引脚定义unsigned char ReadAdxl345;		 //定时读取adxl345
char dis0[16];		   //串口数据显示
xdata char dis1[16];		   //串口数据显示
xdata char dis2[16];		   //串口数据显示
unsigned long time_20ms=0;	   //定时器计数
unsigned char ReportFlag=0;	   //数据上报标志unsigned int BuShu=0; 	//累计步数
float JuLi=0;			//累计距离
float KaLuLi=0;			//累计卡路里
unsigned char statFlag = 0;//状态
void Init_Timer0(void);		   //函数声明
void SendStr(unsigned char *s,unsigned char length);
void UART_Init(void);
void SendByte(unsigned char dat);
void BuShuCheck(void);void main (void)
{     Init_Timer0();        //定时器0初始化UART_Init();LCD_Init();           //初始化液晶DelayMs(20);          //延时有助于稳定LCD_Clear(); Init_ADXL345();	  //清屏if(Single_Read_ADXL345(0X00)==0xe5)	//读出的数据为0XE5,表示正确{DelayMs(5);}else{DelayMs(3);}led=1;while (1)         //主循环{if(ReadAdxl345==1)   //定时读取adxl345数据{BuShuCheck();			//检测步数sprintf(dis1,"B:%04d J:%4.1fm ",BuShu/2,JuLi);	//打印LCD_Write_String(0,0,dis1);//显示sprintf(dis2,"%7.2fcal ",KaLuLi);	   	//打印LCD_Write_String(0,1,dis2);//显示			if(statFlag == 0)//站着状态{LCD_Write_String(11,1,"Stand");}else if(statFlag == 1)躺着状态{LCD_Write_String(11,1,"Lie  ");}else if(statFlag == 2)//跑着状态{LCD_Write_String(11,1,"Run  ");}else if(statFlag == 3)//走着状态{LCD_Write_String(11,1,"Walk ");}}if(ReportFlag==1)	//2s{ReportFlag=0;sprintf(dis0,"*B:%04d",BuShu/2);	//上报步数SendStr(dis0,7);sprintf(dis0,"J:%04.1fm",JuLi);			//上报距离SendStr(dis0,7);sprintf(dis0,"K:%07.2fcal",KaLuLi);	   	//上报卡路里SendStr(dis0,12);if(statFlag == 0)//站着状态{SendStr("Stand#",6);}else if(statFlag == 1)躺着状态{SendStr("Lie  #",6);}else if(statFlag == 2)//跑着状态{SendStr("Run  #",6);}else if(statFlag == 3)//走着状态{SendStr("Walk #",6);}SendStr("\r\n",2);}}
}void BuShuCheck(void)
{static unsigned char ErrorNum=0;	   //变量定义static unsigned char NormalNum=0;static unsigned char CheckNum=0;	   //变量定义static unsigned char shuNum=0;static unsigned char ceNum=0;static unsigned int remBuShu=0;ReadAdxl345=0;ReadData_x();CheckNum++;//检测次数if((temp_X<650)||(abs(temp_Y)>400))       //查看正常次数{led=0;			//呼吸灯ErrorNum++;	//记录次数shuNum++;//竖直状态++}else{NormalNum++; ceNum++;led=1;} //呼吸灯//侧着状态++	if((NormalNum!=0)&&(ErrorNum!=0))	//			从角度判断走了一步{ErrorNum=0;NormalNum=0;BuShu++;JuLi=(float)(BuShu/2)*0.45;	  //计算距离KaLuLi=JuLi*70*0.832;		 //卡路里计算 走路 距离*体重*系数}if(CheckNum>=20){if((ceNum!=0)&&(shuNum==0)){statFlag = 0;//站着状态}else if((ceNum==0)&&(shuNum!=0)){statFlag = 1;//躺着状态}else if((ceNum!=0)&&(shuNum!=0)){if((BuShu - remBuShu)>=6)//跑着 一个周期大于3步{statFlag = 2;}//跑着状态else{statFlag = 3;}//走着状态remBuShu = BuShu;//记录上次步数			} CheckNum=0;ceNum=0;		//清空计数shuNum=0;			}
}
void Init_Timer0(void)
{TMOD |= 0x01;	  //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响		     TH0=(65536-20000)/256;		  //重新赋值 20msTL0=(65536-20000)%256;EA=1;            //总中断打开ET0=1;           //定时器中断打开TR0=1;           //定时器开关打开
}void Timer0_isr(void) interrupt 1 
{TH0=(65536-20000)/256;		  //重新赋值 20msTL0=(65536-20000)%256;time_20ms++;if(time_20ms%5==0){ReadAdxl345=1;}if(time_20ms%50==0){ReportFlag=1;}
}

硬件设计

使用元器件:

单片机:STC89C52;

(注意:单片机是通用的,无论51还是52、无论stc还是at都一样,引脚功能都一样。程序也是一样的。)

无极性电容:30P;DC座(小);

极性电容:10uF;LED灯;

下载口2.54排针;按键;

LCD1602液晶;电源开关;

2.54单排针;2.54单排座;

蓝白电位器;蓝牙模块;

电阻:10K、1K;

ADXL345 倾斜模块;

晶振:11.0592M;

导线:若干;

添加图片注释,不超过 140 字(可选)

流程图:

添加图片注释,不超过 140 字(可选)

设计资料

01原理图

本系统原理图采用Altium Designer19设计,具体如图!

添加图片注释,不超过 140 字(可选)

02程序

本设计使用软件keil5版本编程设计!具体如图!

添加图片注释,不超过 140 字(可选)

03设计报告

一万两千字设计报告,具体如下!

添加图片注释,不超过 140 字(可选)

04设计资料

        资料获取请关注同名公众号,全部资料包括程序(含注释)、AD原理图、设计报告、流程图、结构框图、实物图、元件清单等。具体内容如下,全网最全! !

可以关注下方公众号!

点赞分享一起学习成长。

这篇关于基于51单片机计步器—无线蓝牙APP上传的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1084258

相关文章

全屋WiFi 7无死角! 华硕 RP-BE58无线信号放大器体验测评

《全屋WiFi7无死角!华硕RP-BE58无线信号放大器体验测评》家里网络总是有很多死角没有网,我决定入手一台支持Mesh组网的WiFi7路由系统以彻底解决网络覆盖问题,最终选择了一款功能非常... 自2023年WiFi 7技术标准(IEEE 802.11be)正式落地以来,这项第七代无线网络技术就以超高速

电脑蓝牙连不上怎么办? 5 招教你轻松修复Mac蓝牙连接问题的技巧

《电脑蓝牙连不上怎么办?5招教你轻松修复Mac蓝牙连接问题的技巧》蓝牙连接问题是一些Mac用户经常遇到的常见问题之一,在本文章中,我们将提供一些有用的提示和技巧,帮助您解决可能出现的蓝牙连接问... 蓝牙作为一种流行的无线技术,已经成为我们连接各种设备的重要工具。在 MAC 上,你可以根据自己的需求,轻松地

GitLab文件的上传与下载方式

《GitLab文件的上传与下载方式》:本文主要介绍GitLab文件的上传与下载方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录GitLab 项目拉取到本地GitLab 项目上传方法方法 1:本地项目未初始化Git方法 2:本地项目已初始化GitGitLab 上

Nginx 413修改上传文件大小限制的方法详解

《Nginx413修改上传文件大小限制的方法详解》在使用Nginx作为Web服务器时,有时会遇到客户端尝试上传大文件时返回​​413RequestEntityTooLarge​​... 目录1. 理解 ​​413 Request Entity Too Large​​ 错误2. 修改 Nginx 配置2.1

Java应用如何防止恶意文件上传

《Java应用如何防止恶意文件上传》恶意文件上传可能导致服务器被入侵,数据泄露甚至服务瘫痪,因此我们必须采取全面且有效的防范措施来保护Java应用的安全,下面我们就来看看具体的实现方法吧... 目录恶意文件上传的潜在风险常见的恶意文件上传手段防范恶意文件上传的关键策略严格验证文件类型检查文件内容控制文件存储

Java实现MinIO文件上传的加解密操作

《Java实现MinIO文件上传的加解密操作》在云存储场景中,数据安全是核心需求之一,MinIO作为高性能对象存储服务,支持通过客户端加密(CSE)在数据上传前完成加密,下面我们来看看如何通过Java... 目录一、背景与需求二、技术选型与原理1. 加密方案对比2. 核心算法选择三、完整代码实现1. 加密上

在React聊天应用中实现图片上传功能

《在React聊天应用中实现图片上传功能》在现代聊天应用中,除了文字和表情,图片分享也是一个重要的功能,本文将详细介绍如何在基于React的聊天应用中实现图片上传和预览功能,感兴趣的小伙伴跟着小编一起... 目录技术栈实现步骤1. 消息组件改造2. 图片预览组件3. 聊天输入组件改造功能特点使用说明注意事项

springboot上传zip包并解压至服务器nginx目录方式

《springboot上传zip包并解压至服务器nginx目录方式》:本文主要介绍springboot上传zip包并解压至服务器nginx目录方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录springboot上传zip包并解压至服务器nginx目录1.首先需要引入zip相关jar包2.然

Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案

《Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案》:本文主要介绍Vue3组件中getCurrentInstance()获取App实例,但是返回nu... 目录vue3组件中getCurrentInstajavascriptnce()获取App实例,但是返回n

如何解决idea的Module:‘:app‘platform‘android-32‘not found.问题

《如何解决idea的Module:‘:app‘platform‘android-32‘notfound.问题》:本文主要介绍如何解决idea的Module:‘:app‘platform‘andr... 目录idea的Module:‘:app‘pwww.chinasem.cnlatform‘android-32