?
一、環(huán)境介紹
單片機(jī)型號(hào): STC89C52
編程語(yǔ)言: C語(yǔ)言
手機(jī)APP:采用QT設(shè)計(jì),程序支持跨平臺(tái)編譯運(yùn)行(Android、IOS、Windows、Linux都可以編譯運(yùn)行,對(duì)應(yīng)平臺(tái)上QT的環(huán)境搭建,之前博客已經(jīng)發(fā)了文章講解)
二、功能與硬件介紹
單片機(jī)采用STC89C52,資料非常豐富,keil建工程的時(shí)候選擇AT89C52即可。
與手機(jī)通信的藍(lán)牙采用:HC05 串口藍(lán)牙。
功能介紹:
防丟功能主要是依靠藍(lán)牙來(lái)判斷是否已經(jīng)斷開(kāi)。
1. 開(kāi)發(fā)板復(fù)位后,藍(lán)牙如果未連接狀態(tài),5秒之后蜂鳴器就會(huì)報(bào)警
2. 藍(lán)牙一旦連接成功后,就需要以300ms的頻率向設(shè)備發(fā)送指定的數(shù)據(jù),保活。
3. 如果藍(lán)牙連接上之后,沒(méi)有發(fā)送數(shù)據(jù)到設(shè)備,300ms之后蜂鳴器就會(huì)報(bào)警。
4. APP上可以手動(dòng)點(diǎn)擊觸發(fā)報(bào)警
5. 單片機(jī)按下復(fù)位鍵可以清除報(bào)警

APP界面:

如果自己不想焊接,想要直接模塊化搭建環(huán)境,可以直接淘寶買(mǎi)系統(tǒng)板+模塊即可:


?編輯


?編輯


?編輯
藍(lán)牙HC05是主從一體的藍(lán)牙串口模塊,簡(jiǎn)單的說(shuō),當(dāng)藍(lán)牙設(shè)備與藍(lán)牙設(shè)備配對(duì)連接成功后,我們可以忽視藍(lán)牙內(nèi)部的通信協(xié)議,直接將將藍(lán)牙當(dāng)做串口用。當(dāng)建立連接,兩設(shè)備共同使用一通道也就是同一個(gè)串口,一個(gè)設(shè)備發(fā)送數(shù)據(jù)到通道中,另外一個(gè)設(shè)備便可以接收通道中的數(shù)據(jù)。
為了簡(jiǎn)化51單片機(jī)的編程代碼,可以先使用電腦串口調(diào)試助手,將HC05的的參數(shù)配置完畢,再接到51單片機(jī)上。 將HC05藍(lán)牙配置成從機(jī)模式,設(shè)置好配對(duì)密碼。
三、51單片機(jī)代碼
////////////////////////////////////////
#include
#define uchar unsigned char
#define uint unsigned long
uchar buffer[8]; //數(shù)據(jù)緩存數(shù)組
uchar rec_flag=0; //數(shù)據(jù)處理標(biāo)志
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();
}
}
/************************************************
** 函數(shù)名稱(chēng) : void InitUART(void)
** 函數(shù)功能 : 串口初始化函數(shù)
** 輸 入 : 無(wú)
** 輸 出 : 無(wú)
** 說(shuō) 明 : 定時(shí)器1方式2波特率發(fā)生模式,波特率9600bps,晶振11.0592MHZ,誤差0%
**TMOD定時(shí)器計(jì)數(shù)器寄存器,SCON串行口寄存器,PCON功率控制寄存器,EA訪問(wèn)外部程序存儲(chǔ)器控制信號(hào),ES串口中斷允許控制位,TR1定時(shí)器1的運(yùn)行控制位
************************************************/
void InitUART(void)
{
TMOD = 0x20;
SCON = 0x50;
TH1 = 0xFD;
TL1 = 0xFD;
PCON = 0x00;
ES = 1;
TR1 = 1;
EA = 1;
}
/*********************************************
**名稱(chēng):void TxChar(uchar ch)
**功能:串口發(fā)送函數(shù)
**輸入:uchar ch>當(dāng)前發(fā)送數(shù)據(jù)
**輸出:無(wú)
*********************************************/
void TxChar(unsigned char ch)
{
SBUF=ch;
while(!TI);
TI=0;
}
void putstring(uchar *puts) //發(fā)送數(shù)據(jù)
{
for(;*puts!=199;puts++) //遇到停止符199結(jié)束
TxChar(*puts);
}
/************************************************
** 函數(shù)名稱(chēng) : void ser(void) interrupt 4
** 函數(shù)功能 : 串口接收中斷函數(shù)
** 輸 入 : 無(wú)
** 輸 出 : 無(wú)
** 說(shuō) 明 : 處理串口發(fā)送過(guò)來(lái)的數(shù)據(jù)串
************************************************/
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++;
}
}
}
}
/************************************************
** 函數(shù)名稱(chēng) : void main(void)
** 函數(shù)功能 : 主函數(shù)
** 輸 入 : 無(wú)
** 輸 出 : 無(wú)
寵物檢測(cè)
** 說(shuō) 明 :
************************************************/
void main(void)
{
uint STOP=0,a=0,a1=0;
uchar bueezr_flag=0,bueezr_count=0,buzzer_time=3;//蜂鳴器報(bào)警變量
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);//發(fā)送數(shù)據(jù)函數(shù)
Delay(300); //延時(shí)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下發(fā)的數(shù)據(jù)
if(buffer[2]==0x01) //取消蜂鳴器
{
STOP=0;
a1=1;
buffer[2]=0x00;
}
//15個(gè)300ms還沒(méi)有收到APP下發(fā)的數(shù)據(jù),繼續(xù)報(bào)警
if(STOP>15 && a1)
{
bueezr_flag=1;
}
if(buffer[1]==0x01) //手動(dòng)模式報(bào)警
{
bueezr_flag=1;//蜂鳴器直接響
a=1; //手動(dòng)模式標(biāo)志位
}
/*******蜂鳴器報(bào)警********/
bueezr_count++;if(bueezr_count>buzzer_time*10)bueezr_count=buzzer_time+1;
if(bueezr_count%buzzer_time==0 && bueezr_flag)
{
BUZZER=~BUZZER;//蜂鳴器取反 發(fā)出聲音提示
}
}
}
四、Android手機(jī)APP代碼




審核編輯:湯梓紅
?
-
單片機(jī)
+關(guān)注
關(guān)注
6055文章
44788瀏覽量
643458 -
Android
+關(guān)注
關(guān)注
12文章
3956瀏覽量
129057 -
藍(lán)牙
+關(guān)注
關(guān)注
115文章
5957瀏覽量
172431 -
STC89C52
+關(guān)注
關(guān)注
41文章
330瀏覽量
82639
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
藍(lán)牙4.0防丟器設(shè)計(jì)方案
基于低功耗藍(lán)牙技術(shù)的尋物防丟器方案介紹
藍(lán)牙4.0防丟器方案參考介紹
【CANNON申請(qǐng)】低功耗藍(lán)牙防丟器設(shè)計(jì)
基于ZigBee的寵物防丟系統(tǒng),對(duì)這個(gè)項(xiàng)目有意的請(qǐng)聯(lián)系我哦
天工測(cè)控:藍(lán)牙網(wǎng)關(guān)應(yīng)用于寵物醫(yī)院__室內(nèi)定位防走丟
藍(lán)牙防丟器的特點(diǎn)和功能
藍(lán)牙防丟器原理和作用
為避免家人走丟,如何快速制作一款藍(lán)牙防丟器
藍(lán)牙BLE實(shí)現(xiàn)防丟器的方法

基于51設(shè)計(jì)的寵物防丟系統(tǒng)(藍(lán)牙+Android上位機(jī))

評(píng)論