在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于單片機的兒童防丟失系統設計

精通單片機與嵌入式 ? 來源:精通單片機與嵌入式 ? 2023-12-04 09:06 ? 次閱讀

功能

(1)通過LCD12864顯示GPS模塊的經緯度數據;

(2)可設定當前的定位位置,自動計算與設定位置的距離,當檢測到位置超過設定位置200M時,通過GPRS模塊發送報警信息

(3)報警時通過通過蜂鳴器發出警報;

(4)根據位置自動計算定位的距離,當找到兒童時,成人可主動關閉警報器;

(5)可實現“一一鍵報警”功能,當按下按鍵時,主動發送當前的位置給設定的手機號;

(6)當找到兒童時,可手動取消報警。

系統框圖

fbae1714-9234-11ee-939d-92fbcf53809c.png

原理圖

fc991804-9234-11ee-939d-92fbcf53809c.png

程序源代碼

#include  "project.h"
unsigned char ucMode = 0;
unsigned char xdata Longitude[13] = "E:";  //保存經度數據
unsigned char xdata Latitude[13] = "N:";//保存緯度數據
bit PosSuc = 0;  //定位成功的標志,為1時表示定位成功,為0表示定位不成功
double fLongitude = 0.0;   //保存浮點型數據,經度
double fLatitude = 0.0;    //保存浮點型數據, 緯度


double fLongitudeLoa = 0.0; //當前所在地的經度
double fLatitudeLoa = 0.0;    //當前所在地的緯度


    double Dis = 0.0;  
#define PI                      3.1415926
#define EARTH_RADIUS            6378.004        //地球近似半徑
 
// 求弧度
double radian(double d)
{
    return d * PI / 180.0;   //角度1? = π / 180
}
 
//計算距離
double get_distance(double lat1, double lng1, double lat2, double lng2)
{
    xdata double radLat1 = radian(lat1);
    xdata double radLat2 = radian(lat2);
    xdata double a = radLat1 - radLat2;
    xdata double b = radian(lng1) - radian(lng2);
     
    xdata double dst = 2 * asin((sqrt(pow(sin(a / 2), 2) + cos(radLat1) * cos(radLat2) * pow(sin(b / 2), 2) )));
     
    dst = dst * EARTH_RADIUS;
    //dst= round(dst * 10000) / 10000;
    return dst;
}






/*********************************************************************************************************
** 函數名稱:      ProcRxBuf
** 函數描述:      處理GPS接收的數據
** 輸入參數:      NONE
** 輸出參數:      NONE
** 返回值:        NONE
*********************************************************************************************************/
void ProcRxBuf(void)
{
    if(RxFlag == 1)  //數據接收完畢
    {
        
        EA = 0;
        RxFlag = 0;
        
        if(RxBuf[17] == 'A')
        {      
            ucMode = 1;
            if(PosSuc == 0)   //初次定位成功
            {
                
                fLongitudeLoa = fLongitude; //當前所在地的經度
                fLatitudeLoa = fLatitude;    //當前所在地的緯度
                fLongitudeLoa = fLongitude; //當前所在地的經度
                fLatitudeLoa = fLatitude;    //當前所在地的緯度   
                PosSuc = 1;
            }
            LCD_Location(1,0);
            LCD_Display("  GPS 定位成功  ");
            PosSuc = 1;  //定位成功標志置1
            Latitude[0] = 'N';
            Latitude[1] = ':';
            fLatitude = (double)atof(&RxBuf[21]) / (double)60.0 + (RxBuf[19] - 0x30)*10 + (RxBuf[20]- 0x30);
            Latitude[12] = 0;
            Latitude[2] =  (unsigned long)fLatitude %100 / 10 + 0x30;
            Latitude[3] =  (unsigned long)fLatitude % 10+ 0x30;
            Latitude[4] =  '.';
            Latitude[5] =  (unsigned long)(fLatitude * 10) % 10+ 0x30;
            Latitude[6] =  (unsigned long)(fLatitude * 100) % 10+ 0x30;
            Latitude[7] =  (unsigned long)(fLatitude * 1000) % 10+ 0x30;
            Latitude[8] =  (unsigned long)(fLatitude * 10000) % 10+ 0x30;
            Latitude[9] =  (unsigned long)(fLatitude * 100000) % 10+ 0x30;
            Latitude[10] =  (unsigned long)(fLatitude * 1000000) % 10+ 0x30;
            Latitude[11] =  (unsigned long)(fLatitude * 10000000) % 10+ 0x30;
            Latitude[12] = 0;          


            Longitude[0] = 'E';
            Longitude[1] = ':';   
            fLongitude = (double)atof(&RxBuf[34]) / (double)60.0 + (RxBuf[31] - 0x30)*100 + (RxBuf[32]- 0x30) * 10 + (RxBuf[33]- 0x30);
            Longitude[2] =  (unsigned long)fLongitude / 100 + 0x30;
            Longitude[3] =  (unsigned long)fLongitude %100 / 10 + 0x30;
            Longitude[4] =  (unsigned long)fLongitude % 10+ 0x30;
            Longitude[5] =  '.';
            Longitude[6] =  (unsigned long)(fLongitude * 10) % 10+ 0x30;
            Longitude[7] =  (unsigned long)(fLongitude * 100) % 10+ 0x30;
            Longitude[8] =  (unsigned long)(fLongitude * 1000) % 10+ 0x30;
            Longitude[9] =  (unsigned long)(fLongitude * 10000) % 10+ 0x30;
            Longitude[10] =  (unsigned long)(fLongitude * 100000) % 10+ 0x30;
            Longitude[11] =  (unsigned long)(fLongitude * 1000000) % 10+ 0x30;
            Longitude[12] = 0;    
        }
        else
        {
            PosSuc = 0;   //定位成功標志清零
        }
        
        memset(RxBuf,0,80);
        RxWP = 0;
        EA = 1;
    }
}


bit Key1Up = 1;  //按鍵松開標志,為1時表示按鍵已經松開,為0時,表示按鍵未松開
sbit KEY1 = P3^4;  //按鍵,按下按鍵時發送定位信息到手機
sbit KEY2 = P3^5;  //按鍵,按下按鍵時存儲正確的定位信息


/*********************************************************************************************************
** 函數名稱:      SendHelp
** 函數描述:      發送求救信息
** 輸入參數:      NONE
** 輸出參數:      NONE
** 返回值:        NONE
*********************************************************************************************************/
void SendHelp(double Dis)
{
    unsigned char i = 0;
    xdata unsigned char ucTemp[45] = {0};


    for(i = 0; i < 13;i++)
    {
        ucTemp[i] = Latitude[i];
    }
    for(i = 0; i < 13; i++)
    {
        ucTemp[i+12] = Longitude[i];
    }
    strcat(ucTemp,"distance=");
    ucTemp[33] = ((unsigned long)Dis % 100 /  10 + 0x30);
    ucTemp[34] = ((unsigned long)Dis %10 + 0x30);
    ucTemp[35] = ('.');
    ucTemp[36] = ((unsigned long)(Dis * 10) %  10 + 0x30);
    ucTemp[37] = ((unsigned long)(Dis * 100) %  10 + 0x30);
    ucTemp[38] = ((unsigned long)(Dis * 1000) %  10 + 0x30);
    ucTemp[39] = 'k';
    ucTemp[40] = 'm';
    SendSMS(ucTemp,41);  //發送手機短信 
    DelayMs(1000);
    UART1_ClearRxBuf();
}


/*********************************************************************************************************
** 函數名稱:      ProcKey
** 函數描述:      處理按鍵函數,按鍵按下時發送定位信息到手機
** 輸入參數:      NONE
** 輸出參數:      NONE
** 返回值:        NONE
*********************************************************************************************************/
void ProcKey1(void)
{    


    if( (Key1Up == 1) && (KEY1 == 0))  //按鍵處于松開狀態時,按鍵按下,定位完成才判斷按鍵
    {
        DelayMs(20);   //防抖動延時
        if(KEY1 == 0)
        {       
            Key1Up = 0;            
            if(PosSuc == 1)
            {            
                SendHelp(Dis);
            }
            else if(PosSuc == 0)
            {
                LCD_Location(3,0);
                LCD_Display("請等定位成功    ");
                DelayMs(2000);
                LCD_Location(3,0);
                LCD_Display("                ");
            }
        }
    }    
    else if(KEY1 == 1)
    {
        Key1Up = 1;
    }
}

審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6043

    文章

    44621

    瀏覽量

    638570
  • gps
    gps
    +關注

    關注

    22

    文章

    2903

    瀏覽量

    166745
  • GPRS
    +關注

    關注

    21

    文章

    984

    瀏覽量

    129649
  • 程序
    +關注

    關注

    117

    文章

    3795

    瀏覽量

    81415

原文標題:【011】基于51單片機、GPS、GPRS的兒童防丟失系統(源代碼、原理圖、參考論文、演示視頻等)

文章出處:【微信號:精通單片機與嵌入式,微信公眾號:精通單片機與嵌入式】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    基于AT89C51單片機追尾系統

    基于AT89C51單片機追尾系統
    發表于 08-14 11:35

    基于單片機的智能小區安系統

    求基于單片機的智能小區安系統 論文及原理圖呀 有償也行
    發表于 04-16 23:01

    如何去實現一種基于單片機的智能安系統設計

    設計簡介:本設計是基于單片機的智能安系統,主要實現以下功能:可通過LCD1602安狀態和是否有人;可通過按鍵控制安狀態;通過人體紅外監
    發表于 02-18 06:44

    如何去實現一種基于單片機酒駕系統設計

    本設計是基于單片機酒駕系統,主要實現以下功能:可通過LCD1602顯示車內酒精濃度;可通過按鍵調整酒精濃度最大值;通過人體紅外檢測是否有人;通過MQ-3檢測酒精濃度。標簽:51單片機
    發表于 02-18 07:51

    Silabs的Flash單片機丟失程序原因

    本內容介紹了Silabs的Flash單片機丟失程序原因
    發表于 06-14 15:07 ?122次下載
    Silabs的Flash<b class='flag-5'>單片機</b><b class='flag-5'>丟失</b>程序原因

    基于STC12單片機的電梯系統設計

    介紹了基于STC12單片機的電梯系統設計,以STC12C5A60S2-351單片機作為控制器,紅外測距傳感器和加速傳感器將測得數據發送到單片機
    發表于 12-19 16:57 ?2689次閱讀
    基于STC12<b class='flag-5'>單片機</b>的電梯<b class='flag-5'>防</b>墜<b class='flag-5'>系統</b>設計

    如何使用GPS和GSM進行兒童走失的單片機定位系統設計

    鑒于傳統兒童走失系統使用的局限性 , 設計一種利用單片機控制 、 GPS 定 位 和 GSM 通 信 等 技術的兒童
    發表于 03-25 08:00 ?30次下載
    如何使用GPS和GSM進行<b class='flag-5'>兒童</b><b class='flag-5'>防</b>走失的<b class='flag-5'>單片機</b>定位<b class='flag-5'>系統</b>設計

    基于單片機的智能安系統

    設計簡介:本設計是基于單片機的智能安系統,主要實現以下功能:可通過LCD1602安狀態和是否有人; 可通過按鍵控制安狀態; 通過人體紅
    發表于 12-23 19:31 ?26次下載
    基于<b class='flag-5'>單片機</b>的智能安<b class='flag-5'>防</b><b class='flag-5'>系統</b>

    基于單片機酒駕系統

    本設計是基于單片機酒駕系統,主要實現以下功能:可通過LCD1602顯示車內酒精濃度; 可通過按鍵調整酒精濃度最大值; 通過人體紅外檢測是否有人; 通過MQ-3檢測酒精濃度。標簽:51單片機
    發表于 12-23 19:32 ?3次下載
    基于<b class='flag-5'>單片機</b>的<b class='flag-5'>防</b>酒駕<b class='flag-5'>系統</b>

    基于51單片機酒駕檢測系統設計Proteus仿真

    基于51單片機酒駕檢測系統設計Proteus仿真
    發表于 12-30 09:33 ?27次下載

    基于STM32單片機丟失手環系統設計

    通過STM32單片機進行主控,兩個NRF024L01進行數據的發射和接收,發射端的位置信息首先會在顯示屏上進行顯示,并且會通過無線模塊將位置信息傳輸到接收端的顯示屏上進行顯示。系統內為了實現丟功能
    的頭像 發表于 08-08 15:14 ?1953次閱讀

    基于51單片機的汽車碰撞系統設計

    電子發燒友網站提供《基于51單片機的汽車碰撞系統設計.pdf》資料免費下載
    發表于 10-08 09:54 ?2次下載
    基于51<b class='flag-5'>單片機</b>的汽車<b class='flag-5'>防</b>碰撞<b class='flag-5'>系統</b>設計

    單片機與GSM的實用型安報警系統的設計

    電子發燒友網站提供《單片機與GSM的實用型安報警系統的設計.pdf》資料免費下載
    發表于 10-30 10:29 ?0次下載
    <b class='flag-5'>單片機</b>與GSM的實用型安<b class='flag-5'>防</b>報警<b class='flag-5'>系統</b>的設計

    基于單片機的汽車碰撞系統設計與實現

    電子發燒友網站提供《基于單片機的汽車碰撞系統設計與實現.rar》資料免費下載
    發表于 01-02 10:04 ?1次下載

    基于單片機的汽車碰撞系統設計與實現

    電子發燒友網站提供《基于單片機的汽車碰撞系統設計與實現.rar》資料免費下載
    發表于 01-12 10:48 ?24次下載
    主站蜘蛛池模板: 狠狠色噜噜综合社区 | 亚洲婷婷六月 | 午夜三级视频 | avtom影院永久转四虎入口 | 午夜三级视频 | 午夜国产精品久久影院 | 成人三级在线观看 | 欧美色人阁 | www 在线播放 | 天天爱夜夜爽 | 色综合中文字幕 | 性视频软件 | 久久777国产线看观看精品卜 | 狠狠干2019 | 日本在线一级 | 久久婷婷午色综合夜啪 | 婷婷亚洲综合一区二区 | 一丝不遮视频免费观看 | 夜夜爽爽爽 | 美女黄18以下禁止观看的网站 | 日韩电影天堂网 | 国产福利午夜自产拍视频在线 | 天堂网最新版www | 高颜值大长腿美女啪啪 | 天天爽夜夜爽8888视频精品 | 亚洲qingse中文久久网 | 人人射人人射 | 傲视影院午夜毛片 | 亚洲五月六月丁香激情 | 在线观看永久免费视频网站 | 午夜精品视频 | 又黄又湿又爽吸乳视频 | 日本一区二区高清免费不卡 | 欧美成人福利 | 午夜网站在线观看 | 亚洲成网 | 国产激情久久久久影院小草 | 六月色婷婷 | 国产 日韩 欧美 高清 | 天天色天天综合网 | 狠狠狠狠狠狠 |