久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2443|回復: 1
打印 上一主題 下一主題
收起左側

基于51單片機GSM防盜報警設計

[復制鏈接]
跳轉到指定樓層
樓主
ID:570658 發表于 2019-6-24 14:19 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
這是我們寫的代碼,大家給檢查一下哪里有錯誤,沒有錯誤的話供大家參考
#include<reg52.h>
#include <intrins.h>
#include <absacc.h>    //頭文件
#define uint unsigned int
#define uchar unsigned char   //宏定義
//按鍵
sbit key1=P3^2;    //布防
sbit key2=P3^3;    //撤防
sbit key3=P3^4;    //緊急報警
sbit BUZZ=P0^4;    //蜂鳴器
sbit rsd=P2^4;    //熱釋電輸入
sbit LED_B=P2^3;   //布防指示燈
sbit LED_S=P2^0;   //發送消息指示燈
uchar code PhoneNO[]  ="15046397767"; //接受號碼
uchar code somebody[]  ="8BF76CE8610FFF0167094EBA8FDB516562A58B66830356F4FF01"; //請注意!有人進入報警范圍!              
uint TIME_50ms=0;    //計時的最小分辨率50ms
uint time_continue;    //蜂鳴器鳴響時計時數據暫存
bit flag=0,flag_BF=0;  //flag:值為0時,是布防計時模式,值為1時,是一分鐘等待模式。flag_BF:布防標志位
bit flag_time_start=0; //開始計時標志位
bit again=0;     //一分鐘等待標志位(當發送一條短信后,不能馬上發送第二天,所以等待一分鐘后再檢測是否有人,有人再發送短信)
bit flag_alam;     //報警標志位
bit SOS;      //發送短信時是否是按下緊急按鍵
bit flag_continue;    //繼續計時
bit into_BF=0;
void delay(uint z)//延時函數
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void Uart_init()
{
TMOD= 0X20;  //T1  方式2  ,8位   自動重裝   
TH1=0Xfd;
TL1=0Xfd;     //9600波特率
TR1=1;       // 定時器1啟動  
SM0=0;     // 設置串口的工作模式
SM1=1;      //方式1
REN=0;    // 不允許串口接收數據   
ES=0;       // 串口中斷不允許
EA=1;   // 開啟中斷總開關
}
void SendASC(uchar d) //串口發送字符
{

SBUF=d;    //數據賦值到緩沖區
while(!TI);   //發送完
TI=0;    //清零
}
void SendString(uchar *str)   //串口發送字符串
{
while(*str)      //判斷是否發送完
{
  SendASC(*str) ;    //發送字符
  str++;      //字符位置加
  //delay_uart(1);
}
}
void TIME()      //計時函數
{
if(flag==0)     //布防計時模式
{
  delay(50);    //50ms
  TIME_50ms++;   //50ms變量加1
  if(TIME_50ms%10==0)  //每500ms(50ms*10)
  LED_B=!LED_B;   //布防指示燈取反一次
  
  if(TIME_50ms>=400)  //加到400次,也就是50ms*400=20000ms=20s
  {
   TIME_50ms=0;  //計時變量清零
   flag_BF=1;   //進入布防狀態
   LED_B=0;   //布防指示燈長亮
   flag_time_start=0; //停止計時
   again=1;   //關閉一分鐘等待
  }
}
else      //一分鐘等待模式
{
  delay(50);    //50ms
  TIME_50ms++;   //變量加
  if(TIME_50ms%10==0)  //每加500ms
  {
   LED_B=!LED_B;  //布防指示燈閃爍
   if(flag_alam==1) //報警
   {
    if(flag_continue==0)//進入報警時
    {
     flag_continue=1;//此標志位置一,防止報警時進入
     time_continue=TIME_50ms; //將進入報警時的計時數據暫存
    }
    BUZZ=!BUZZ;  //蜂鳴器取反,也就是閃爍響
    if(TIME_50ms>=time_continue+100)//當報警時間達到5s時
    {
     BUZZ=1;      //關閉蜂鳴器
     flag_continue=0;   //標志位清零,等待下次報警
     flag_alam=0;    //報警變量清零,停止報警
     time_continue=0;   //暫存計時數據清零
    }
   }
  }
  if(TIME_50ms>=1200)     //計時達到60秒
  {
   LED_B=0;      //布防指示燈長亮,準備檢測熱釋電信號
   TIME_50ms=0;     //計時變量清零
   flag_time_start=0;    //停止計時
   again=1;      //關閉一分鐘等待
  }
}
}
//按鍵掃描函數
void keyscan()
{
if(key1==0&&flag_BF==0)//在非布防狀態時布防按鍵按下
{
  delay(5);//延時去抖
  if(key1==0)     //再次判斷按鍵是否按下
  {
   LED_B=0;    //點亮布防LED燈
   flag=0;     //變量清零
   flag_time_start=1;//開始計時變量置一
  }
  while(key1==0);    //按鍵釋放
}
if(flag_time_start==1) //開始計時
{
  TIME();    //調用計時函數
}
if(key2==0)    //撤防按鍵按下
{      
  delay(5);//延時去抖
  if(key2==0)     //再次判斷按鍵是否按下
  {
   BUZZ=1;   //關閉蜂鳴器
   flag_alam=0; //報警變量清零
   flag_BF=0;  //布防變量清零
   flag=0;   //變量清零
   flag_time_start=0;//開始計時變量清零
   LED_S=1;  //關閉發送短信指示燈
   LED_B=1;  //關閉布防指示燈
  }
  while(key2==0);  //按鍵釋放
}
if(key3==0)    //緊急按鍵按下
{
  delay(5);   //延時去抖
  if(key3==0)   //再次判斷按鍵是否按下
  {
   SOS=1;   //手動發送短信變量置一,準備發送短信
   flag_alam=1; //報警變量置一
  }
  while(key3==0);  //按鍵釋放
}
}
void GSM_work()    //發送GSM短信
{
unsigned char send_number; //定義發送手機號的變量
if(rsd==0&&flag_BF==1)  //布防狀態且熱釋電有信號時
flag_alam=1;    //報警變量置一
if((rsd==0&&flag_BF==1&&again==1)||SOS==1)//布防狀態且熱釋電有信號時且不在一分鐘等待時間內  或者   手動按下緊急按鍵
{
  LED_S=0;         //打開發送短信指示燈
  BUZZ=1;          //關閉蜂鳴器
  SendString("AT+CMGF=1\r\n");    //設置文本模式
  
  delay(1000);        //延時,讓GSM模塊有一個反應時間
  
  SendString("AT+CSCS=\"UCS2\"\r\n");   //設置短信格式,發送漢字模式
  
  delay(1000);        //延時
  
  SendString("AT+CSMP=17,0,2,25\r\n");  //設置短信文本模式參數(具體內容參考開發資料內的模塊資料)
  
  delay(1000);        //延時
  
  SendString("AT+CMGS="); //信息發送指令 AT+CMGS=//
  SendASC('"');          //引號
  for(send_number=0;send_number<11;send_number++)  //在每位號碼前加003
  {
   SendASC('0');
   SendASC('0');
   SendASC('3');
   SendASC(PhoneNO[send_number]);     //接收手機號碼
  }     
  SendASC('"');         //引號
  SendASC('\r');   //發送回車指令//
  SendASC('\n');   //發送換行指令//
  
  delay(1000);    //延時
  SendString(somebody);  //發送短信內容

  delay(1000);    //延時
  
  SendASC(0x1a);    //確定發送短信
  
  if(SOS==0)     //不是緊急按鍵發送短信
  {
   again=0;    //again清零,也就是進入一分鐘等待,當計時到一分鐘后,該變量重新置一
   flag_time_start=1;  //開始計時
   flag_alam=1;   //報警
  }
  else if(SOS==1&&flag_time_start==1)  //緊急按鍵發送短信后
  {            
   TIME_50ms=0;      //計時數據清零
   flag_BF=1;       //布防變量置一
   LED_B=0;       //點亮布防指示燈
   flag_time_start=0;     //停止計時
   again=1;       //不進入一分鐘等待
  }
  
  LED_S=1;        //熄滅發送短信指示燈
  SOS=0;         //緊急變量清零
  flag=1;         //變量置一
}
}
void main()          //主函數
{
Uart_init();        //調用中斷初始化函數
while(1)         //進入while循環
{
  keyscan();        //按鍵函數
  GSM_work();        //發送短信函數
}   
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏4 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:570658 發表于 2019-6-24 14:23 | 只看該作者
其他的資料后續會上傳的
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久精品黄色 | 91原创视频在线观看 | 国产福利资源 | 99re在线 | 色综合区| 国产在线二区 | 欧美在线视频观看 | 成人午夜免费网站 | 天啪| 日韩一二区| 国产精品影视 | 免费1区2区3区 | 欧美乱人伦视频 | 人人草人人干 | 黄色电影在线免费观看 | 日本中文字幕日韩精品免费 | 国产精成人| 91精品久久久久 | 俺去俺来也www色官网cms | 欧美一区二区三区的 | 久久久精品一区 | 日韩一级黄色毛片 | 国产成人精品av | 国产精品欧美日韩 | 黑人精品欧美一区二区蜜桃 | 日韩不卡一区二区 | 日韩三级在线观看 | 国产一区亚洲 | 日日夜夜91 | 国产日韩欧美一区二区 | 中文字幕成人免费视频 | 狠狠骚| 中文字幕欧美在线观看 | 天堂中文字幕av | 日本在线播放一区二区 | 亚洲欧美日韩系列 | 国产91av视频 | 欧美一级www片免费观看 | 久久综合九色综合欧美狠狠 | 日韩电影免费观看中文字幕 | 欧美mv日韩mv国产网站91进入 |