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

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

一、环境介绍

单片机型号:  STC89C52


编程软件: keil5


编程语言:  C语言


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


完整源码下载地址:  https://download.csdn.net/download/xiaolong1126626497/19766960


资料包里包含了: 51单片机源码、Android手机APP源码、可执行文件apk、各种报警声音、说明文档、下载工具。


二、功能与硬件介绍

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


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


功能介绍:


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


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


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


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


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


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

image.png

APP界面:

image.png

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

image.png

image.png

image.png

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


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



三、51单片机代码

#include <REG52.H>
#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代码

image.png

image.png

image.png

image.png

目录
相关文章
|
15天前
|
Linux 测试技术 语音技术
【车载Android】模拟Android系统的高负载环境
本文介绍如何将Linux压力测试工具Stress移植到Android系统,用于模拟高负载环境下的CPU、内存、IO和磁盘压力,帮助开发者优化车载Android应用在多任务并发时的性能问题,提升系统稳定性与用户体验。
127 6
|
15天前
|
Java 数据库 Android开发
基于Android的电子记账本系统
本项目研究开发一款基于Java与Android平台的开源电子记账系统,采用SQLite数据库和Gradle工具,实现高效、安全、便捷的个人财务管理,顺应数字化转型趋势。
|
11月前
|
人工智能 搜索推荐 物联网
Android系统版本演进与未来展望####
本文深入探讨了Android操作系统从诞生至今的发展历程,详细阐述了其关键版本迭代带来的创新特性、用户体验提升及对全球移动生态系统的影响。通过对Android历史版本的回顾与分析,本文旨在揭示其成功背后的驱动力,并展望未来Android可能的发展趋势与面临的挑战,为读者呈现一个既全面又具深度的技术视角。 ####
|
6月前
|
安全 搜索推荐 Android开发
Android系统SELinux安全机制详解
如此看来,SELinux对于大家来说,就像那位不眠不休,严阵以待的港口管理员,守护我们安卓系统的平安,维护这片海港的和谐生态。SELinux就这样,默默无闻,却卫士如山,给予Android系统一份厚重的安全保障。
208 18
|
11月前
|
算法 JavaScript Android开发
|
11月前
|
IDE Java 开发工具
移动应用与系统:探索Android开发之旅
在这篇文章中,我们将深入探讨Android开发的各个方面,从基础知识到高级技术。我们将通过代码示例和案例分析,帮助读者更好地理解和掌握Android开发。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和技巧。让我们一起开启Android开发的旅程吧!
|
11月前
|
监控 Java Android开发
深入探讨Android系统的内存管理机制
本文将深入分析Android系统的内存管理机制,包括其内存分配、回收策略以及常见的内存泄漏问题。通过对这些方面的详细讨论,读者可以更好地理解Android系统如何高效地管理内存资源,从而提高应用程序的性能和稳定性。
394 16
|
10月前
|
监控 Java Android开发
深入探索Android系统的内存管理机制
本文旨在全面解析Android系统的内存管理机制,包括其工作原理、常见问题及其解决方案。通过对Android内存模型的深入分析,本文将帮助开发者更好地理解内存分配、回收以及优化策略,从而提高应用性能和用户体验。
|
10月前
|
存储 安全 Android开发
探索Android系统的最新安全特性
在数字时代,智能手机已成为我们生活中不可或缺的一部分。随着技术的不断进步,手机操作系统的安全性也越来越受到重视。本文将深入探讨Android系统最新的安全特性,包括其设计理念、实施方式以及对用户的影响。通过分析这些安全措施如何保护用户免受恶意软件和网络攻击的威胁,我们希望为读者提供对Android安全性的全面了解。
|
11月前
|
安全 Android开发 iOS开发
深入探讨Android与iOS系统的差异及未来发展趋势
本文旨在深入分析Android和iOS两大移动操作系统的核心技术差异、用户体验以及各自的市场表现,进一步探讨它们在未来技术革新中可能的发展方向。通过对比两者的开放性、安全性、生态系统等方面,本文揭示了两大系统在移动设备市场中的竞争态势和潜在变革。

热门文章

最新文章