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

一、环境介绍 单片机型号:  stc89c52
编程软件: keil5
编程语言:  c语言
手机app:  采用qt设计,程序支持跨平台编译运行(android、ios、windows、linux都可以编译运行,对应平台上qt的环境搭建,之前博客已经发了文章讲解)
二、功能与硬件介绍 单片机采用stc89c52,资料非常丰富,keil建工程的时候选择at89c52即可。
与手机通信的蓝牙采用:hc05 串口蓝牙。
功能介绍: 
防丢功能主要是依靠蓝牙来判断是否已经断开。
1. 开发板复位后,蓝牙如果未连接状态,5秒之后蜂鸣器就会报警
2. 蓝牙一旦连接成功后,就需要以300ms的频率向设备发送指定的数据,保活。
3. 如果蓝牙连接上之后,没有发送数据到设备,300ms之后蜂鸣器就会报警。
4. app上可以手动点击触发报警
5. 单片机按下复位键可以清除报警
app界面:
如果自己不想焊接,想要直接模块化搭建环境,可以直接淘宝买系统板+模块即可:
​编辑
​编辑
​编辑
蓝牙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代码



基于开关磁阻电机系统的功率变换器设计
vivo展示部分5G手机预商用场景应用 保证买家款和卖家款是一致的
半导体产业已先于其它产业复苏
3D扫描仪|思看科技荣获浙江省科学技术进步奖和科技小巨人奖
嵌入式软件工程师待遇怎么样 当前企业需要哪些技术
基于51设计的宠物防丢系统(蓝牙+Android上位机)
小鹏发布 智能数据报告
创意设计之DIY摇摆LED时钟
数据分析提供商慧辰股份发布2021年报
世界首个旋式铸造单晶炉研制成功,可降本20%
拆卸集成电路的几种方法
OPPO率先推出基于骁龙的Reno系列新品
大唐电信对内整合对外发动专利战:直指TD盟友
恒温振荡器HZQ-X500(双层)产品特点的说明
蓝牙耳机品牌优势分析 十款蓝牙耳机盘点
荣耀联合VIVIENNE TAM推​出智能手表 一加5G旗舰机细节曝光
专家对比亚迪铁电池表示质疑
自动驾驶的核心技术是人工智能发展的关键钥匙
德州仪器荣获 ASPENCORE 颁发的三项大奖
在SIEMENSI工业通讯中最常用的串口介绍