?
一、環境介紹
單片機型號: STC89C52
編程語言: C語言
手機APP:采用QT設計,程序支持跨平臺編譯運行(Android、IOS、Windows、Linux都可以編譯運行,對應平臺上QT的環境搭建,之前博客已經發了文章講解)
二、功能與硬件介紹
單片機采用STC89C52,資料非常豐富,keil建工程的時候選擇AT89C52即可。
功能介紹:
防丟功能主要是依靠藍牙來判斷是否已經斷開。
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代碼
審核編輯:湯梓紅
?
-
單片機
+關注
關注
6037文章
44558瀏覽量
635355 -
Android
+關注
關注
12文章
3936瀏覽量
127413 -
藍牙
+關注
關注
114文章
5823瀏覽量
170342 -
STC89C52
+關注
關注
41文章
330瀏覽量
82063
發布評論請先 登錄
相關推薦
評論