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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機短信遠程報警器程序設計(噪聲,煙霧等模擬量或者數字量傳感器模塊可通用)

[復制鏈接]
跳轉到指定樓層
樓主
      使用了GSM短信收發模塊,用戶只需要在代碼中更改報警對象手機號碼,報警器超過一定閾值可發送短信至手機,播報相關參數,并且本地蜂鳴器報警。
      短信模塊收發指令回復判斷改成延時判斷,可適當更改延時值。上電等待初始化也為延時,可更改為接收到回復指令后初始化完成(代碼還需要優化額,上傳主要為一起學習)
      代碼PCB以及相關模塊資料已上傳。
制作出來的實物圖如下:


仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
煙霧傳感器仿真中沒有,其實就是傳感器檢測時相應的電阻值會變化,用滑動電位器代替就ok


Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)




單片機源程序如下:
  1. #include <reg52.h> //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義
  2. #include "intrins.h"                                                                                          
  3. #include "uart.h"
  4. #define     u8                          unsigned char
  5. #define     u16                   unsigned int
  6. #define     uchar                          unsigned char
  7. #define     uint                   unsigned int


  8. //常量
  9. #define Success 1U
  10. #define Failure 0U

  11. //定義變量
  12. unsigned long  Time_Cont = 0;       //定時器計數器

  13. char phoneNumber[] = "158888";                //替換成jls的電話號碼
  14. //char phoneNumber[] = "158888";                //替換成lyg的電話號碼
  15. //char phoneNumber[] = "1738888";                //替換成wc的電話號碼
  16. char msg[] = "HELP!t:  .  n:    ";                //短信內容        
  17. //char text_send[] = "AT+CMGS=\"17347070063\"\r\n";                //替換成需要被撥打電話的號碼
  18. //函數或者變量聲明
  19. extern void delay_ms(unsigned int n);
  20. extern unsigned int sendCommand(char *Command, char *Response, unsigned long Timeout, unsigned char Retry);
  21. extern void errorLog();
  22. extern void soft_reset(void);
  23. extern void phone(char *number);
  24. extern void sendMessage(char *number,char *msg);
  25. void sendCommand_AT(char *Command,unsigned char times);

  26. uchar yushe_wendu=50;                                //溫度預設值
  27. uchar yushe_yanwu=140;                                //煙霧預設值
  28. uint wendu;                                                                 //溫度值全局變量
  29. uchar yanwu;                                                                 //用于讀取ADC數據
  30. u16 xianshiyanwu_flag=0;
  31. //運行模式  
  32. uchar Mode=0;                                                                 //=1是設置溫度閥值  =2是設置煙霧閥值        =0是正常監控模式
  33. //管腳聲明
  34. sbit Led_Reg                 =P2^2;                                 //紅燈
  35. sbit Led_Yellow  =P2^4;                                 //黃燈
  36. sbit Buzzer             =P2^0;                                 //蜂鳴器
  37. sbit Fan                      =P3^3;                                 //


  38. /********************************************************************
  39. * 名稱 : delay_1ms()
  40. * 功能 : 延時1ms函數
  41. * 輸入 : q
  42. * 輸出 : 無
  43. ***********************************************************************/
  44. void delay_ms(uint q)
  45. {
  46.         uint i,j;
  47.         for(i=0;i<q;i++)
  48.                 for(j=0;j<110;j++);
  49. }
  50. /***********************************************************************************************************
  51. LCD1602相關函數
  52. ***********************************************************************************************************/

  53. //LCD管腳聲明 (RW引腳實物直接接地,因為本設計只用到液晶的寫操作,RW引腳一直是低電平)
  54. sbit LCDRS = P2^7;
  55. sbit LCDEN = P2^6;
  56. sbit D0                 = P0^0;
  57. sbit D1                 = P0^1;
  58. sbit D2                 = P0^2;
  59. sbit D3                 = P0^3;
  60. sbit D4                 = P0^4;
  61. sbit D5                 = P0^5;
  62. sbit D6                 = P0^6;
  63. sbit D7                 = P0^7;



  64. //LCD延時
  65. void LCDdelay(uint z)                  //該延時大約100us(不精確,液晶操作的延時不要求很精確)
  66. {
  67.   uint x,y;
  68.   for(x=z;x>0;x--)
  69.     for(y=10;y>0;y--);
  70. }
  71. void LCD_WriteData(u8 dat)         
  72. {
  73.         if(dat&0x01)D0=1;else D0=0;
  74.         if(dat&0x02)D1=1;else D1=0;
  75.         if(dat&0x04)D2=1;else D2=0;
  76.         if(dat&0x08)D3=1;else D3=0;
  77.         if(dat&0x10)D4=1;else D4=0;
  78.         if(dat&0x20)D5=1;else D5=0;
  79.         if(dat&0x40)D6=1;else D6=0;
  80.         if(dat&0x80)D7=1;else D7=0;
  81. }
  82. //寫命令
  83. void write_com(uchar com)
  84. {
  85.   LCDRS=0;                                 
  86.         LCD_WriteData(com);
  87. //  DAT=com;
  88.   LCDdelay(5);
  89.   LCDEN=1;
  90.   LCDdelay(5);
  91.   LCDEN=0;
  92. }
  93. //寫數據
  94. void write_data(uchar date)
  95. {
  96.   LCDRS=1;
  97.         LCD_WriteData(date);
  98. //  DAT=date;
  99.   LCDdelay(5);
  100.   LCDEN=1;
  101.   LCDdelay(5);
  102.   LCDEN=0;
  103. }

  104. /*------------------------------------------------
  105.               選擇寫入位置
  106. ------------------------------------------------*/
  107. void SelectPosition(unsigned char x,unsigned char y)
  108. {     
  109.         if (x == 0)
  110.         {     
  111.                 write_com(0x80 + y);     //表示第一行
  112.         }
  113.         else
  114.         {      
  115.                 write_com(0xC0 + y);      //表示第二行
  116.         }        
  117. }
  118. /*------------------------------------------------
  119.               寫入字符串函數
  120. ------------------------------------------------*/
  121. void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)
  122. {     
  123.         SelectPosition(x,y) ;
  124.         while (*s)
  125.         {     
  126.                 write_data( *s);     
  127.                 s ++;     
  128.         }
  129. }
  130. //========================================================================
  131. // 函數: void LCD_Write_Char(u8 x,u8 y,u16 s,u8 l)
  132. // 應用: LCD_Write_Char(0,1,366,4) ;
  133. // 描述: 在第0行第一個字節位置顯示366的后4位,顯示結果為 0366
  134. // 參數: x:行,y:列,s:要顯示的字,l:顯示的位數
  135. // 返回: none.
  136. // 版本: VER1.0
  137. // 日期: 2013-4-1
  138. // 備注: 最大顯示65535
  139. //========================================================================
  140. void LCD_Write_Char(u8 x,u8 y,u16 s,u8 l)
  141. {     
  142.         SelectPosition(x,y) ;

  143.         if(l>=5)
  144.                 write_data(0x30+s/10000%10);        //萬位
  145.         if(l>=4)
  146.                 write_data(0x30+s/1000%10);                //千位
  147.         if(l>=3)
  148.                 write_data(0x30+s/100%10);                //百位
  149.         if(l>=2)
  150.                 write_data(0x30+s/10%10);                        //十位
  151.         if(l>=1)
  152.                 write_data(0x30+s%10);                //個位

  153. }
  154. /*1602指令簡介
  155.   write_com(0x38);//屏幕初始化
  156.   write_com(0x0c);//打開顯示 無光標 無光標閃爍
  157.   write_com(0x0d);//打開顯示 陰影閃爍
  158.   write_com(0x0d);//打開顯示 陰影閃爍
  159. */
  160. //1602初始化
  161. void Init1602()
  162. {
  163.   uchar i=0;
  164.   write_com(0x38);//屏幕初始化
  165.   write_com(0x0c);//打開顯示 無光標 無光標閃爍
  166.   write_com(0x06);//當讀或寫一個字符是指針后一一位
  167.   write_com(0x01);//清屏
  168.         
  169. }

  170. void Display_1602(yushe_wendu,yushe_yanwu,c,temp)
  171. {
  172.         //顯示預設溫度
  173.         LCD_Write_Char(0,6,yushe_wendu,2) ;
  174.         
  175.         //顯示預設煙霧
  176.         LCD_Write_Char(0,13,yushe_yanwu,3) ;
  177.         
  178.         //時時溫度
  179.         LCD_Write_Char(1,6,c/10,2) ;
  180.         write_data('.');
  181.         LCD_Write_Char(1,9,c%10,1) ;
  182.         
  183.         //時時煙霧
  184.         LCD_Write_Char(1,13,temp,3) ;
  185. }



  186. /***********************************************************************************************************
  187. ADC0832相關函數
  188. ***********************************************************************************************************/
  189. sbit ADCS         =P1^5; //ADC0832 片選
  190. sbit ADCLK  =P1^2; //ADC0832 時鐘
  191. sbit ADDI         =P1^3; //ADC0832 數據輸入                /*因為單片機的管腳是雙向的,且ADC0832的數據輸入輸出不同時進行,
  192. sbit ADDO         =P1^3; //ADC0832 數據輸出                /*為節省單片機引腳,簡化電路所以輸入輸出連接在同一個引腳上



  193. //========================================================================
  194. // 函數: unsigned int Adc0832(unsigned char channel)
  195. // 應用:                 temp=Adc0832(0);
  196. // 描述: 讀取0通道的AD值
  197. // 參數: channel:通道0和通道1選擇
  198. // 返回: 選取通道的AD值
  199. // 版本: VER1.0
  200. // 日期: 2015-05-29
  201. // 備注:
  202. //========================================================================
  203. unsigned int Adc0832(unsigned char channel)
  204. {
  205.         uchar i=0;
  206.         uchar j;
  207.         uint dat=0;
  208.         uchar ndat=0;
  209.         uchar  Vot=0;

  210.         if(channel==0)channel=2;
  211.         if(channel==1)channel=3;
  212.         ADDI=1;
  213.         _nop_();
  214.         _nop_();
  215.         ADCS=0;//拉低CS端
  216.         _nop_();
  217.         _nop_();
  218.         ADCLK=1;//拉高CLK端
  219.         _nop_();
  220.         _nop_();
  221.         ADCLK=0;//拉低CLK端,形成下降沿1
  222.         _nop_();
  223.         _nop_();
  224.         ADCLK=1;//拉高CLK端
  225.         ADDI=channel&0x1;
  226.         _nop_();
  227.         _nop_();
  228.         ADCLK=0;//拉低CLK端,形成下降沿2
  229.         _nop_();
  230.         _nop_();
  231.         ADCLK=1;//拉高CLK端
  232.         ADDI=(channel>>1)&0x1;
  233.         _nop_();
  234.         _nop_();
  235.         ADCLK=0;//拉低CLK端,形成下降沿3
  236.         ADDI=1;//控制命令結束
  237.         _nop_();
  238.         _nop_();
  239.         dat=0;
  240.         for(i=0;i<8;i++)
  241.         {
  242.                 dat|=ADDO;//收數據
  243.                 ADCLK=1;
  244.                 _nop_();
  245.                 _nop_();
  246.                 ADCLK=0;//形成一次時鐘脈沖
  247.                 _nop_();
  248.                 _nop_();
  249.                 dat<<=1;
  250.                 if(i==7)dat|=ADDO;
  251.         }
  252.         for(i=0;i<8;i++)
  253.         {
  254.                 j=0;
  255.                 j=j|ADDO;//收數據
  256.                 ADCLK=1;
  257.                 _nop_();
  258.                 _nop_();
  259.                 ADCLK=0;//形成一次時鐘脈沖
  260.                 _nop_();
  261.                 _nop_();
  262.                 j=j<<7;
  263.                 ndat=ndat|j;
  264.                 if(i<7)ndat>>=1;
  265.         }
  266.         ADCS=1;//拉低CS端
  267.         ADCLK=0;//拉低CLK端
  268.         ADDO=1;//拉高數據端,回到初始狀態
  269.         dat<<=8;
  270.         dat|=ndat;

  271.         return(dat);            //return ad data
  272. }

  273. /***********************************************************************************************************
  274. DS18B20相關函數
  275. ***********************************************************************************************************/

  276. sbit DQ = P1^0;                                 //ds18b20的數據引腳



  277. /*****延時子程序:該延時主要用于ds18b20延時*****/
  278. void Delay_DS18B20(int num)
  279. {
  280.   while(num--) ;
  281. }
  282. /*****初始化DS18B20*****/
  283. void Init_DS18B20(void)
  284. {
  285.   unsigned char x=0;
  286.   DQ = 1;         //DQ復位
  287.   Delay_DS18B20(8);    //稍做延時
  288.   DQ = 0;         //單片機將DQ拉低
  289.   Delay_DS18B20(80);   //精確延時,大于480us
  290.   DQ = 1;         //拉高總線
  291.   Delay_DS18B20(14);
  292.   x = DQ;           //稍做延時后,如果x=0則初始化成功,x=1則初始化失敗
  293.   Delay_DS18B20(20);
  294. }
  295. /*****讀一個字節*****/
  296. unsigned char ReadOneChar(void)
  297. {
  298.   unsigned char i=0;
  299.   unsigned char dat = 0;
  300.   for (i=8;i>0;i--)
  301.   {
  302.     DQ = 0;     // 給脈沖信號
  303.     dat>>=1;
  304.     DQ = 1;     // 給脈沖信號
  305.     if(DQ)
  306.     dat|=0x80;
  307.     Delay_DS18B20(4);
  308.   }
  309.   return(dat);
  310. }
  311. /*****寫一個字節*****/
  312. void WriteOneChar(unsigned char dat)
  313. {
  314.   unsigned char i=0;
  315.   for (i=8; i>0; i--)
  316.   {
  317.     DQ = 0;
  318.     DQ = dat&0x01;
  319.     Delay_DS18B20(5);
  320.     DQ = 1;
  321.     dat>>=1;
  322.   }
  323. }
  324. /*****讀取溫度*****/
  325. unsigned int ReadTemperature(void)
  326. {
  327.   unsigned char a=0;
  328.   unsigned char b=0;
  329.   unsigned int t=0;
  330.   float tt=0;
  331.   Init_DS18B20();
  332.   WriteOneChar(0xCC);  //跳過讀序號列號的操作
  333.   WriteOneChar(0x44);  //啟動溫度轉換
  334.   Init_DS18B20();
  335.   WriteOneChar(0xCC);  //跳過讀序號列號的操作
  336.   WriteOneChar(0xBE);  //讀取溫度寄存器
  337.   a=ReadOneChar();     //讀低8位
  338.   b=ReadOneChar();    //讀高8位
  339.   t=b;
  340.   t<<=8;
  341.   t=t|a;
  342.   tt=t*0.0625;
  343.   t= tt*10+0.5;     //放大10倍輸出并四舍五入
  344.   return(t);
  345. }
  346. //=====================================================================================
  347. //=====================================================================================
  348. //=====================================================================================


  349. /*****校準溫度*****/
  350. u16 check_wendu(void)
  351. {
  352.         u16 c;
  353.         c=ReadTemperature()-5;                          //獲取溫度值并減去DS18B20的溫漂誤差
  354.         if(c<1) c=0;
  355.         if(c>=999) c=999;
  356.         return c;
  357. }


  358. /***********************************************************************************************************
  359. 按鍵檢測相關函數
  360. ***********************************************************************************************************/
  361. //按鍵
  362. sbit Key1=P1^6;                                 //設置鍵
  363. sbit Key2=P1^7;                                 //加按鍵
  364. sbit Key3=P3^2;                                 //減按鍵



  365. #define KEY_SET                 1                //設置
  366. #define KEY_ADD                        2                //加
  367. #define KEY_MINUS                3                //減


  368. //========================================================================
  369. // 函數: u8 Key_Scan()
  370. // 應用: temp=u8 Key_Scan();
  371. // 描述: 按鍵掃描并返回按下的鍵值
  372. // 參數: NONE
  373. // 返回: 按下的鍵值
  374. // 版本: VER1.0
  375. // 日期: 2015-05-29
  376. // 備注: 該函數帶松手檢測,按下鍵返回一次鍵值后返回0,直至第二次按鍵按下
  377. //========================================================================
  378. u8 Key_Scan()
  379. {         
  380.         static u8 key_up=1;//按鍵按松開標志
  381.         if(key_up&&(Key1==0||Key2==0||Key3==0))
  382.         {
  383.                 delay_ms(10);//去抖動
  384.                 key_up=0;
  385.                 if(Key1==0)                        return 1;
  386.                 else if(Key2==0)return 2;
  387.                 else if(Key3==0)return 3;
  388.         }
  389.         else if(Key1==1&&Key2==1&&Key3==1)
  390.                 key_up=1;            
  391.          return 0;// 無按鍵按下
  392. }



  393. void main (void)
  394. {
  395.         u8 key,text_flag=0,next_sendtext=0;

  396.         Init1602();                          //調用初始化顯示函數
  397.         LCD_Write_String(0,0,"JIANG LIANG SEN ");  //開機界面
  398.         LCD_Write_String(1,0,"   WAITING    ");  
  399.         delay_ms(1000);
  400.         wendu=check_wendu();                  //初始化時調用溫度讀取函數 防止開機85°C
  401.         yanwu=Adc0832(0);                                //讀取煙霧值
  402.         //
  403. //        wendu=check_wendu();                  //初始化時調用溫度讀取函數 防止開機85°C
  404.          //Display_1602(yushe_wendu,yushe_yanwu,wendu,yanwu);  //顯示預設溫度,預設煙霧,溫度值,煙霧值

  405. //
  406.         delay_ms(1000);
  407.         Uart_Init();                                                  
  408.         delay_ms(1000);
  409.         delay_ms(1000);
  410.         delay_ms(1000);
  411. //        delay_ms(1000);
  412. //        if (sendCommand("AT\r\n", "OK\r\n", 3000, 10) == Success);
  413. //        else errorLog();
  414. //        delay_ms(10);

  415. //        if (sendCommand("AT+CPIN?\r\n", "READY", 1000, 10) == Success);
  416. //        else errorLog();
  417. //        delay_ms(10);
  418.         delay_ms(1000);
  419.         delay_ms(1000);
  420. //        sendCommand("AT+CMGF=1\r\n", "OK\r\n", 3000, 10);
  421.         sendCommand_AT("AT+CMGF=1\r\n",1);
  422.         LCD_Write_String(1,0,"   WAITING.   ");
  423.         //else errorLog();
  424. //        delay_ms(1000);
  425.         delay_ms(1000);
  426. //        sendCommand("AT+CSMP=17,167,0,8\r\n", "OK\r\n", 3000, 10);
  427.         sendCommand_AT("AT+CSMP=17,167,0,8\r\n",1);
  428.         //else errorLog();
  429.            delay_ms(10);
  430.         delay_ms(1000);
  431.         //sendCommand("AT+CSCS=\"GSM\"\r\n", "OK\r\n", 3000, 10) ;
  432.           sendCommand_AT("AT+CSCS=\"GSM\"\r\n",1);
  433.         //else errorLog();
  434.         delay_ms(10);
  435.         delay_ms(1000);
  436.         LCD_Write_String(1,0,"   WAITING..  ");
  437.         sendMessage(phoneNumber,"Ready");                //發送短信
  438.         
  439.         LCD_Write_String(0,0,"SET T:00   N:000");  //開機界面
  440.         LCD_Write_String(1,0,"NOW T:00.0 N:000");
  441.         Display_1602(yushe_wendu,yushe_yanwu,wendu,yanwu);  //顯示預設溫度,預設煙霧,溫度值,煙霧值
  442.         while (1)                                                //主循環
  443.         {
  444.                 key=Key_Scan();                                        //按鍵掃描
  445.                 yanwu=Adc0832(0);                                //讀取煙霧值
  446.                 wendu=check_wendu();          //讀取溫度值
  447.                
  448.                 if(key==KEY_SET)
  449.                 {
  450.                         Mode++;
  451.                 }
  452.                
  453.                 switch(Mode)                                                //判斷模式的值
  454.                 {
  455.                         case 0:                                                                //監控模式
  456.                         {        xianshiyanwu_flag++;
  457.                                 if(xianshiyanwu_flag>=10)
  458.                                 {
  459.                                 Display_1602(yushe_wendu,yushe_yanwu,wendu,yanwu);  //顯示預設溫度,預設煙霧,溫度值,煙霧值
  460.                                 xianshiyanwu_flag=0;
  461.                                 }
  462.                                 if(yanwu>=yushe_yanwu)          //煙霧值大于等于預設值時
  463.                                 { delay_ms(10);
  464.                                         yanwu=Adc0832(0);                                //讀取煙霧值
  465.                                         if(yanwu>=yushe_yanwu)
  466.                                         {
  467.                                         Led_Reg=0;                                          //煙霧指示燈亮
  468.                                         Fan=0;
  469.                                         Buzzer=0;                                                  //蜂鳴器報警
  470.                                         text_flag=1;
  471.                                         Display_1602(yushe_wendu,yushe_yanwu,wendu,yanwu);  //顯示預設溫度,預設煙霧,溫度值,煙霧值
  472.                                         }
  473.                                 //        sendMessage(phoneNumber,msg);                //發送短信
  474.                                 }
  475.                                 else                                                                                  //煙霧值小于預設值時
  476.                                 {
  477.                                         Led_Reg=1;                                          //關掉報警燈
  478.                                         Fan=1;
  479.                                 }
  480.                                 if(wendu>=(yushe_wendu*10))          //溫度大于等于預設溫度值時(為什么是大于預設值*10:因為我們要顯示的溫度是有小數點后一位,是一個3位數,25.9°C時實際讀的數是259,所以判斷預設值時將預設值*10)
  481.                                 {        delay_ms(10);
  482.                                         wendu=check_wendu();          //讀取溫度值
  483.                                         if(wendu>=(yushe_wendu*10))
  484.                                         {
  485.                                         Buzzer=0;                                                  //打開蜂鳴器報警
  486.                                         Led_Yellow=0;                                          //打開溫度報警燈
  487.                                         text_flag=1;
  488.                                         Display_1602(yushe_wendu,yushe_yanwu,wendu,yanwu);  //顯示預設溫度,預設煙霧,溫度值,煙霧值
  489.                                         }
  490.                                 //        sendMessage(phoneNumber,"temp Help!");                //發送短信
  491.                                 }
  492.                                 else                                                                                  //溫度值小于預設值時
  493.                                 {
  494.                                         Led_Yellow=1;                                          //關閉報警燈
  495.                                 }
  496.                                 if((yanwu<yushe_yanwu)&&(wendu<(yushe_wendu*10)))          //當煙霧小于預設值并且溫度也小于預設值時 (&&:邏輯與,左右兩邊的表達式都成立(都為真,也就是1)時,該if語句才成立)
  497.                                 {
  498.                                         Buzzer=1;                                                  //停止報警
  499.                                 }
  500.                                 break;
  501.                         }
  502.                         case 1://預設溫度模式
  503.                         {
  504.                                 SelectPosition(0,5) ;                                        //指定位置
  505.                            write_com(0x0d);                                                        //陰影閃爍
  506.                                 if(key==KEY_ADD)                                                        //加鍵按下
  507.                                 {
  508.                                         yushe_wendu++;                                            //預設溫度值(閥值)加1
  509.                                         if(yushe_wendu>=99)                                         //當閥值加到大于等于99時
  510.                                         yushe_wendu=99;                                                         //閥值固定為99
  511.                                         LCD_Write_Char(0,6,yushe_wendu,2) ;//顯示預設溫度
  512.                                 }
  513.                                 if(key==KEY_MINUS)                                                 //減鍵按下
  514.                                 {
  515.                                         if(yushe_wendu<=1)                                        //當溫度上限值減小到1時
  516.                                         yushe_wendu=1;                          //固定為1
  517.                                         yushe_wendu--;                                                        //預設溫度值減一,最小為0
  518.                                         LCD_Write_Char(0,6,yushe_wendu,2) ;//顯示預設溫度
  519.                                 }
  520.                                 break;                                                                                          //執行后跳出switch
  521.                         }
  522.                         case 2:                                //預設煙霧模式
  523.                         {
  524.                                 SelectPosition(0,12) ;                                //指定位置        
  525.                            write_com(0x0d);                                                        //打開顯示 無光標 光標閃爍
  526.                                 if(key==KEY_ADD)                                                        //加鍵按下
  527.                                 {
  528.                                         if(yushe_yanwu>=255)        //當閥值加到大于等于255時
  529.                                         yushe_yanwu=254;            //閥值固定為254
  530.                                         yushe_yanwu++;                                            //預設煙霧值(閥值)加1,最大為255
  531.                                         LCD_Write_Char(0,13,yushe_yanwu,3) ;//顯示預設煙霧
  532.                                 }
  533.                                 if(key==KEY_MINUS)                                                //減鍵按下
  534.                                 {
  535.                                         if(yushe_yanwu<=1)                                        //當煙霧上限值減小到1時
  536.                                                 yushe_yanwu=1;                  //固定為1
  537.                                         yushe_yanwu--;                                                        //預設溫度值減一,最小為0         
  538.                                         LCD_Write_Char(0,13,yushe_yanwu,3) ;//顯示預設煙霧
  539.                                 }
  540.                                 break;
  541.                         }
  542.                         default        :        
  543.                         {
  544.                                 write_com(0x38);//屏幕初始化
  545.                                 write_com(0x0c);//打開顯示 無光標 無光標閃爍
  546.                                 Mode=0;                        //恢復正常模式
  547.                                 break;
  548.                         }
  549.                 }
  550.                 if(text_flag==1&&(next_sendtext>200))
  551.                 {
  552.                 //發送此時報警溫度噪聲值
  553.                 msg[7]=wendu/100%10+0x30;
  554.                   msg[8]=wendu/10%10+0x30;
  555.                   msg[10]=wendu%10+0x30;
  556.                  msg[14]=yanwu/100%10+0x30;
  557.                   msg[15]=yanwu/10%10+0x30;
  558.                   msg[16]=yanwu%10+0x30;
  559.                
  560.                 sendMessage(phoneNumber,msg);                //發送短信
  561.                 text_flag=0;
  562.                 next_sendtext=0;
  563.                 }
  564.                 if(next_sendtext<250)
  565.                 {
  566.                 next_sendtext++;
  567.                 }
  568.                
  569.         }

  570. }





  571. //
  572. void sendMessage(char *number,char *msg)
  573. {
  574.         xdata char send_buf[20] = {0};
  575.         memset(send_buf, 0, 20);    //清空
  576.         strcpy(send_buf, "AT+CMGS=\"");
  577.         strcat(send_buf, number);
  578.         strcat(send_buf, "\"\r\n");
  579.         if (sendCommand(send_buf, ">", 3000, 2) == Success);
  580.         else errorLog();
  581.          delay_ms(1000);
  582.         if (sendCommand(msg, msg, 3000, 2) == Success);
  583.         else errorLog();
  584.          delay_ms(1000);
  585. ……………………

  586. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
wcs_zaosheng.7z (4.48 MB, 下載次數: 53)

評分

參與人數 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏4 分享淘帖 頂 踩
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 综合久久av | 深夜福利影院 | 中文字幕国产一区 | 亚洲一区在线日韩在线深爱 | 成人高清在线 | 亚洲 欧美 另类 综合 偷拍 | 国产在线一区二区三区 | 99reav| 国产91亚洲精品 | 久久一及片 | 亚洲国产精品一区二区www | 国产乱码精品一区二区三区忘忧草 | 天天综合永久入口 | 老牛影视av一区二区在线观看 | 欧美国产日韩精品 | 久久精品在线 | 国产不卡在线观看 | 欧美一区二区三区视频在线播放 | 天天干天天操天天爽 | 韩日av在线 | 国产精品一区二区三区四区 | 亚洲交性 | 激情欧美一区二区三区中文字幕 | 午夜免费福利电影 | 欧美成人a∨高清免费观看 色999日韩 | 国产农村妇女毛片精品久久麻豆 | 91成人免费电影 | 懂色av一区二区三区在线播放 | 97精品视频在线观看 | 久久午夜视频 | 成人在线视频网站 | 色婷婷一区二区三区四区 | 18av在线播放 | 久久精品小视频 | 色资源在线视频 | 免费v片在线观看 | 亚洲一区二区三区四区五区中文 | av免费成人 | 国产激情一区二区三区 | 精品久久久久久久久久 | 国产精品久久久久久久久久久免费看 |