0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于51设计的宠物防丢系统(蓝牙+Android上位机)

DS小龙哥-嵌入式技术 来源:DS小龙哥-嵌入式技术 作者:DS小龙哥-嵌入式技 2022-05-27 10:37 次阅读

一、环境介绍

单片机型号: STC89C52

编程软件: keil5

编程语言: C语言

手机APP:采用QT设计,程序支持跨平台编译运行(AndroidIOS、Windows、Linux都可以编译运行,对应平台上QT的环境搭建,之前博客已经发了文章讲解)

二、功能与硬件介绍

单片机采用STC89C52,资料非常丰富,keil建工程的时候选择AT89C52即可。

与手机通信蓝牙采用:HC05 串口蓝牙。

功能介绍:

防丢功能主要是依靠蓝牙来判断是否已经断开。

1. 开发板复位后,蓝牙如果未连接状态,5秒之后蜂鸣器就会报警

2. 蓝牙一旦连接成功后,就需要以300ms的频率向设备发送指定的数据,保活。

3. 如果蓝牙连接上之后,没有发送数据到设备,300ms之后蜂鸣器就会报警。

4. APP上可以手动点击触发报警

5. 单片机按下复位键可以清除报警

APP界面:

如果自己不想焊接,想要直接模块化搭建环境,可以直接淘宝买系统板+模块即可:

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

​编辑

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

​编辑

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

​编辑

蓝牙HC05是主从一体的蓝牙串口模块,简单的说,当蓝牙设备与蓝牙设备配对连接成功后,我们可以忽视蓝牙内部的通信协议,直接将将蓝牙当做串口用。当建立连接,两设备共同使用一通道也就是同一个串口,一个设备发送数据到通道中,另外一个设备便可以接收通道中的数据。

为了简化51单片机的编程代码,可以先使用电脑串口调试助手,将HC05的的参数配置完毕,再接到51单片机上。 将HC05蓝牙配置成从机模式,设置好配对密码。

三、51单片机代码

////////////////////////////////////////
#include 

#define uchar unsigned char 
#define uint unsigned long
    
uchar buffer[8];	//数据缓存数组

uchar rec_flag=0;	//数据处理标志 
sbit BUZZER = P1^3;
sbit KEY = P3^4;


void delay1ms(void)   //误差 0us
{
    unsigned char a,b,c;
    for(c=1;c>0;c--)
        for(b=142;b>0;b--)
            for(a=2;a>0;a--);
}

void Delay(int ms)
{
    while(ms--)
    {
        delay1ms();
    }
}


/************************************************
** 函数名称 : void InitUART(void)
** 函数功能 : 串口初始化函数
** 输    入 : 无
** 输    出 : 无
** 说    明 : 定时器1方式2波特率发生模式,波特率9600bps,晶振11.0592MHZ,误差0%
**TMOD定时器计数器寄存器,SCON串行口寄存器,PCON功率控制寄存器,EA访问外部程序存储器控制信号,ES串口中断允许控制位,TR1定时器1的运行控制位
************************************************/
void InitUART(void)
{
    TMOD = 0x20;
    SCON = 0x50;
    TH1 = 0xFD;
    TL1 = 0xFD;
    PCON = 0x00;
    ES = 1;
    TR1 = 1;
	EA = 1;
}

/*********************************************
**名称:void TxChar(uchar ch)
**功能:串口发送函数
**输入:uchar ch>当前发送数据
**输出:无
*********************************************/
void TxChar(unsigned char ch)
{
	SBUF=ch;  
	while(!TI);
	TI=0;										
}
void putstring(uchar  *puts) //发送数据
{  
	for(;*puts!=199;puts++)   //遇到停止符199结束 
	TxChar(*puts); 
} 
/************************************************
** 函数名称 : void ser(void) interrupt 4
** 函数功能 : 串口接收中断函数
** 输    入 : 无
** 输    出 : 无
** 说    明 : 处理串口发送过来的数据串 
************************************************/
void ser(void) interrupt 4
{
	static uchar i;
    if(RI==1)
    {
        RI  =   0;
        if(rec_flag==0)
		{
			if(SBUF==0xff)
			{
				rec_flag=1;	
				i=0;
			}			
		}
		else
		{
			if(SBUF==0xff)
			{
				rec_flag=0;	
				if(i==3)
				{
					//Communication_Decode();		
				}
				i=0;
			}
			else
			{
				buffer[i]=SBUF;
				i++;
			}
		}		
    }
}
/************************************************
** 函数名称 : void main(void)
** 函数功能 : 主函数
** 输    入 : 无
** 输    出 : 无  
宠物检测

** 说    明 :
************************************************/

void main(void)
{
	uint STOP=0,a=0,a1=0;
	uchar bueezr_flag=0,bueezr_count=0,buzzer_time=3;//蜂鸣器报警变量
	uchar rxbuf[9];
	InitUART();
	rxbuf[0]='A';
	rxbuf[1]=25;
	rxbuf[2]='B';
	rxbuf[3]=99;
	rxbuf[4]='C';
	rxbuf[5]=99;
	rxbuf[6]='D';
	rxbuf[7]=99;
	rxbuf[8]=199;
	while(1)
	{
		putstring(rxbuf);//发送数据函数
		Delay(300); //延时300ms
		if(KEY==0 && !bueezr_flag){while(KEY==0);rxbuf[1]=22;bueezr_flag=1;}
		if(KEY==0 && bueezr_flag){while(KEY==0);rxbuf[1]=11;bueezr_flag=0;a=0;BUZZER=1;}
		if(!a)STOP++;	
		
        //FF 00 00 01 FF 
        //
        //判断APP下发的数据
		if(buffer[2]==0x01) //取消蜂鸣器
		{
			STOP=0;
			a1=1;
			buffer[2]=0x00;
		}
		
        //15个300ms还没有收到APP下发的数据,继续报警
		if(STOP>15 && a1)
		{
			bueezr_flag=1;			
		}
			
		if(buffer[1]==0x01)  //手动模式报警
		{
			bueezr_flag=1;//蜂鸣器直接响
			a=1;  //手动模式标志位
		}
		
		/*******蜂鸣器报警********/
		bueezr_count++;if(bueezr_count>buzzer_time*10)bueezr_count=buzzer_time+1;
		if(bueezr_count%buzzer_time==0 && bueezr_flag)
		{
			BUZZER=~BUZZER;//蜂鸣器取反  发出声音提示
		}		
	}	
}


四、Android手机APP代码


审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6001

    文章

    43970

    浏览量

    620770
  • Android
    +关注

    关注

    12

    文章

    3851

    浏览量

    125628
  • 蓝牙
    +关注

    关注

    112

    文章

    5428

    浏览量

    165633
  • STC89C52
    +关注

    关注

    39

    文章

    327

    浏览量

    81228
收藏 人收藏

    评论

    相关推荐

    基于低功耗蓝牙技术的寻物器方案介绍

    ),是外出寻物的贴身好伙伴。产品功能及特点:1、 适用性广本设备体积小巧,便于携带,通过和手机的绑定,可广泛适用于钱包,小孩,宠物,公文包,行李拖箱,等其他贵重物品的
    发表于 07-20 08:36

    蓝牙4.0器方案参考介绍

    的贴身好伙伴。设计原理: 手机与之间基于蓝牙4.0协议的2.4G进行无线通信,以通信时的信号强度(RSSI)为参考,再加上一系列的滤波算法,最终基本上实现测量手机与
    发表于 03-21 11:12

    【CANNON申请】低功耗蓝牙器设计

    MCU。蓝牙器是结合生活中经常一些小东西的情况想出来的创意,希望有机会实现。项目描述:项目主要目的是制作一个蓝牙
    发表于 01-26 14:34

    基于ZigBee的宠物系统,对这个项目有意的请联系我哦

    基于ZigBee的宠物系统,对这个项目有意的请联系我哦 qq:779379808功能:1.宠物定位功能 2.安全范围内丢失报警
    发表于 04-14 22:22

    基于CSU8DL3510的自拍器设计

    低功耗技术的推出,一颗纽扣电池就能工作一年,使蓝牙器成为不二选择。本文介绍一种基于芯海CSU8DL3510的蓝牙4.0
    发表于 08-09 09:31

    天工测控:蓝牙网关应用于宠物医院__室内定位

    现在的宠物医院一般都会有宠物寄养服务,为了避免因宠物引发的不良影响,SKYLAB君建议试试蓝牙网关室内定位方案,精准室内定位
    发表于 06-13 15:48

    儿童智能器设计方案

      系统软件流程  3.4 系统预计实现结果  (一)丢失提醒功能:  可以将手腕式的发件器(也叫子)带在小朋友的手腕上,当然也可放在贵重物品上(如手机、钱包、笔记本电脑、相机、甚
    发表于 11-12 10:40

    电子防盗器能实现什么功能?

    在工作、生活快节奏的现代社会,走老人、小孩或宠物;被偷手机、行李等贵重物品;遗忘钥匙、钱包等物件的事情几乎每天都在发生。电子防盗器属于安
    发表于 08-23 06:12

    蓝牙器方案

    蓝牙智能器工作原理:蓝牙智能器是一种采用蓝牙
    发表于 11-05 11:28

    蓝牙器的特点和功能

    智能蓝牙器,是采用蓝牙技术专门为智能手机设计的器。其工作原理主要是通过距离变化来判断物品
    发表于 12-24 09:44

    如何制作器?

    求大神介绍,蓝牙器(就是用手机蓝牙连接,超过距离蓝牙断开,
    发表于 04-28 23:45

    蓝牙器原理和作用

    想必大家都有丢失过东西吧,比如丢失过手机、钱包、自行车、电动车等等,甚至丢失儿童、老人,丢失设备事小,但是丢失儿童、老人的话,那对一个家庭是一种多么沉痛的打击啊。所以就出现了器这样设备。蓝牙智能
    发表于 10-13 10:55

    分享一种蓝牙4.2器的设计方案

    蓝牙4.2器的设计原理是什么?蓝牙4.2器有哪些功能?
    发表于 06-26 07:58

    怎样去设计一个基于51宠物系统

    ,对应平台上QT的环境搭建,之前博客已经发了文章讲解)完整源码下载地址里包含了: 51单片源码、Android手机APP源码、可执行文件apk、各...
    发表于 12-08 07:19

    基于51设计的宠物防丢系统(蓝牙+Android上位机)

    基于51设计的宠物防丢系统(蓝牙+Android上位机)
    发表于 11-25 14:51 39次下载
    基于<b class='flag-5'>51</b>设计的<b class='flag-5'>宠物</b>防丢<b class='flag-5'>系统</b>(<b class='flag-5'>蓝牙</b>+<b class='flag-5'>Android</b><b class='flag-5'>上位</b>机)