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

標題: 基于51單片機GSM防盜報警設計 [打印本頁]

作者: 是我的單片機    時間: 2019-6-24 14:19
標題: 基于51單片機GSM防盜報警設計
這是我們寫的代碼,大家給檢查一下哪里有錯誤,沒有錯誤的話供大家參考
#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();        //發送短信函數
}   
}

作者: 是我的單片機    時間: 2019-6-24 14:23
其他的資料后續會上傳的




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 日日干夜夜操 | 91精品久久久久久久久久入口 | 伊人久久免费 | 国产精品久久久久久久久久不蜜臀 | 亚洲一区二区三区福利 | 久久天天躁狠狠躁夜夜躁2014 | 日韩精品一 | 91精品国产综合久久久久久丝袜 | 在线看日韩 | 免费国产一区二区视频 | 久久机热 | 国产精品日本一区二区在线播放 | 一区二区亚洲 | 欧美一区二区三区在线看 | 欧美一区二区 | 播放一级毛片 | 久久国产99 | 精品九九九| 日本精品一区二区三区视频 | 成人小视频在线 | 99精品欧美一区二区三区 | 国产日韩精品视频 | 99re在线视频观看 | 国产高清精品在线 | 影音先锋亚洲资源 | 久久久久国产 | 天天天天操 | 欧美精品一区免费 | 亚洲精品视频免费 | 欧美激情精品久久久久 | 蜜桃视频在线观看www社区 | 日韩一区二区三区精品 | 九九热这里只有精品6 | 国产激情网站 | www亚洲免费国内精品 | 日韩欧美在线视频 | 97影院2| 日韩不卡一区二区三区 | 操亚洲| 男女羞羞免费网站 | 国产第1页|