<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

      1. 專注電子技術學習與研究
        當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

        基于51的無線溫度報警系統-完整代碼

        作者:MCU   來源:不詳   點擊數:  更新時間:2014年08月03日   【字體:

            該方案從網上收集整理得到,采用了一些常用的外圍電路模塊,以51單片機為核心,實現了很酷的無線報警功能。這里提供完整的代碼,DIY愛好者可制作。

        系統功能描述:
            利用溫度傳感器采集環境溫度,當溫度達到設定的溫度時,產生報警信號,通過GSM模塊來實現短信報警。報警溫度和報警電話號碼均可設置。短信內容也可編輯。附加DS1302。

        硬件部分:
            AT89S52+TC35+DS18B20+12864液晶+紅外搖控+DS1302


         






         

        TC35模塊就是GSM模塊,可以實現手機短信發送的功能,在某寶有很多,只需要簡單的幾個接口傳送命令與數據,就能控制其給手機發短信。

        代碼鏈接:http://www.thefapper.com/f/GSM室溫監控系統.rar

         

        /***********************************************

          程序:單片機控制GSM模塊發送信息

        編譯器:Keil UV2

        更多免費資源,加MCU起航QQ:2246080671

        日期:2010/06/11

        ************************************************/

         

        #include "common.h"

        uchar Alarm_Temp=32; //報警溫度設置為32度

        void Key_Handle(void); //聲明按鍵處理程序

        void Show_Temperature(void); //顯示溫度

        void Show_Menu(void); //顯示菜單

        void Show_Time(void); //顯示時間

        //系統初始化

        void Sys_Init()

        {

        PhoneNum[14]='\0';

        USART_Init(); //串口初始化

        Red_Init(); //紅外初始化

        Read_18B20(); //先讀取兩次溫度,初次讀取會不準確

        //write_1302_time(times); //第一次編程時設定一個時間,以后就不用了

        LcmInit(); //液晶初始化

        LcmClearTXT(); //清除顯示

        LcmClearBMP();

        delay_ms(100);

        PutStr(0,0,"Initial OK !");

        delay_ms(1000);

        LcmClearTXT(); //清除顯示

        }

         

        //主函數

        void main()

        {

        Sys_Init(); //系統初始化

        while(1)

        {

        Key_Handle();

        Show_Time();

        Show_Temperature();

        delay_ms(150);

        }

        }

         

        //顯示時間函數

        void Show_Time(void)

        {

        read_1302_time(times);

        PutStr(2,0,"日期:");

        PutStr(3,0,"時間:");

        PutTime();

        }

        //顯示溫度函數

        void Show_Temperature(void)

        {

        PutStr(0,0,"GSM 溫度報警系統");

        PutStr(1,0,"環境溫度:");

        Read_18B20();

        PutTemp(1,5);

        PutStr(1,7,"℃");

        if(zhengshu>=Alarm_Temp)key=72; //溫度超過閥值,進入發短信模式,即報警

        }

         

        //顯示主菜單

        void Show_Menu(void)

        {

        LcmClearTXT(); //清除顯示

        PutStr(0,0,"1.設定手機號碼");

        PutStr(1,0,"2.設定報警溫度");

        PutStr(2,0,"3.編輯短信內容");

        PutStr(3,0,"4.修改日期時間");

        }

        //紅外按鍵處理程序

        void Key_Handle(void)

        {

        unsigned long temp=0;

          signed char i=0;

            uchar cnt=0;

        if(key!=255) //有鍵按下

        {

        switch(key) //在這里可以隨便添加你的按鍵處理程序

        {

        case 72: //發送短信

        {

        LcmClearTXT(); //清除顯示

        PutStr(0,0,"短信發送模式");

        PutStr(1,0,"請稍候...");

        delay_ms(1000);

        Send_Message(PhoneNum,MsContent);

        while(key==72); //等待有鍵按下并退出

        Read_18B20(); //再讀一次

        break;

        }

        case 14: //進入主菜單

        {

        Show_Menu();

        key=255;

                        while(key==255);     //等待有鍵按下  

        switch(key)

                        {

           case 1 :         //設置手機號碼

                                {

                                    key=255;

                                    LcmClearTXT();

                                    PutStr(0,0,"請輸入手機號碼");

                                    key=255;

                                    while(key==255); 

                                    WriteCommand(0x30);

                                    WriteCommand(AC_TABLE[8]); //在第二行開始顯示鍵入值            

                               while(key!=14)     //不是確認鍵

                               {

        if(key<10&&cnt<11) //11位手機號碼

        {

        PhoneNum[(cnt++)+3]=key+48;

                                        WriteData(key+48);

        }

        PhoneNum[14]='\0';

                                   key=255;

                                   while(key==255); //等待有鍵按下              

                               } 

                               key=255;

        PutStr(2,0,PhoneNum);

        PutStr(3,2,"修改成功!");

        delay_ms(1000);

                               break;

                                }

         

                            case 2 :         //設置報警溫度

                                {

                                    key=255;

                                    LcmClearTXT();

                                    PutStr(0,0,"請輸入報警溫度");

                                    key=255;

                                    while(key==255); 

                                    WriteCommand(0x30);

                                    WriteCommand(AC_TABLE[8]); //在第二行開始顯示鍵入值            

                               while(key!=14)     //不是確認鍵

                               {

                                   temp=(temp*10)+key;

                                        WriteData(key+48);

                                   key=255;

                                   while(key==255); //等待有鍵按下              

                               } 

                               key=255;

                               Alarm_Temp=(uchar)temp;   //更新報警溫度

        PutStr(3,2,"修改成功!");

        delay_ms(1000);

                               break;

                                }

         

                            case 4 :         //設置時間

                                {

                                    key=255;

        for(i=6;i>=0;i--)

        {

        if(i!=5) //星期不設置

        {

        LcmClearTXT();

        switch(i)

        {

        case 6:PutStr(0,0,"請輸入年:");break;

        case 4:PutStr(0,0,"請輸入月:");break;

        case 3:PutStr(0,0,"請輸入日:");break;

        case 2:PutStr(0,0,"請輸入時:");break;

        case 1:PutStr(0,0,"請輸入分:");break;

        case 0:PutStr(0,0,"請輸入秒:");break;

        default:break;

        }

        times[i]=0; //清0

                                    WriteCommand(0x30);

                                    WriteCommand(AC_TABLE[8]); //在第二行開始顯示鍵入值 

                                   while(cnt<2)     //輸入的是兩位數

                               {

          key=255;  

             while(key==255); //等待有鍵按下 

                                   times[i]=(times[i]*10)+key;

                                       WriteData(key+48);  

        cnt++;

                               } 

          key=255;  

             while(key==255); //等待有鍵按下 

        cnt=0;

        }

        else times[5]=1;

         

        }

                               write_1302_time(times); //使時間生效

        PutStr(3,2,"修改成功!");

        delay_ms(1000);

                               break;

                                }

        default:break;

                        }  

        break;

        }

        default: //其他

        break;

        }

        LcmClearTXT(); //清除顯示

        delay_ms(100);

        key=255; //取消鍵值

        }

        }

         

        關閉窗口

        相關文章

        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮