找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2164|回复: 1
打印 上一主题 下一主题
收起左侧

基于gsm的温度报警系统

[复制链接]
跳转到指定楼层
楼主
  1. #include<iom16v.h>
  2. #include<macros.h>
  3. #include"DEFINE.H"
  4. #include"DELAY.H"
  5. #include"LCD_1602_DRIVE.H"
  6. #include"MATRIX_KEYBOARD_DRIVE.H"
  7. #include"DIGITAL-TEMPERATURE-PROBE_DS18B20_DRIVE.H"
  8. #include"UART_GPRS_DTU.H"
  9. extern unsigned char uart_receive_data_buffer[60];
  10. extern unsigned char phone_number[11];
  11. unsigned char uart_dtu_online_ok;
  12. uint setting_temperature_h=40;
  13. uint setting_temperature_l=20;
  14. uint current_temperature=0;
  15. uchar over_count=0;
  16. uchar send;

  17. uchar temp_number[11];

  18. void temperature_display()
  19. {
  20.     uint temp;
  21.     lcd_1602_show_character_string(1,1,"H ");            
  22.     lcd_1602_show_datas(1,3,2,setting_temperature_h);   
  23.     lcd_1602_show_character_string(1,5,".");
  24.     lcd_1602_show_datas(1,6,1,0);
  25.     lcd_1602_show_character_string(1,7,"C");        
  26.     lcd_1602_show_character_string(1,10,"L ");        
  27.     lcd_1602_show_datas(1,12,2,setting_temperature_l);   
  28.     lcd_1602_show_character_string(1,14,".");
  29.     lcd_1602_show_datas(1,15,1,0);
  30.     lcd_1602_show_character_string(1,16,"C");
  31.     lcd_1602_show_character_string(2,1,"Current:");   
  32.     lcd_1602_show_character_string(2,12,".");
  33.     lcd_1602_show_character_string(2,14,"C");   
  34.     temp=ds18b20_read_temperature();   
  35.     if(temp>0x0fff)
  36.     {     
  37.         lcd_1602_show_character_string(2,9,"-");
  38.         current_temperature=((~(temp>>4))&0x007f)+1;
  39.         lcd_1602_show_datas(2,10,2,current_temperature);  
  40.         lcd_1602_show_datas(2,13,1,(temp&0x000f)*(0.625));   
  41.     }
  42.     else
  43.     {
  44.         lcd_1602_show_character_string(2,9," ");
  45.         current_temperature=(((temp>>4))&0x007f);
  46.         lcd_1602_show_datas(2,10,2,current_temperature);           
  47.         lcd_1602_show_datas(2,13,1,(temp&0x000f)*(0.625));   
  48.     }
  49. }

  50. void key_setting()
  51. {
  52.      uchar key,i;
  53.     key=_4x3_matrix_keyboard_keys_read();
  54.     if(key==SET_ALARM)
  55.     {
  56.         lcd_1602_write_com(0x01);
  57.         lcd_1602_show_character_string(1,1,"AlarmTemperature");
  58.         lcd_1602_show_character_string(2,1,"H ");   
  59.         lcd_1602_show_character_string(2,5,".");
  60.         lcd_1602_show_character_string(2,7,"C");   
  61.         lcd_1602_show_character_string(2,10,"L ");   
  62.         lcd_1602_show_character_string(2,14,".");
  63.         lcd_1602_show_character_string(2,16,"C");   
  64.         while(1)
  65.         {
  66.             lcd_1602_show_datas(2,3,2,setting_temperature_h);   
  67.             lcd_1602_show_datas(2,6,1,0);   
  68.             lcd_1602_show_datas(2,12,2,setting_temperature_l);   
  69.             lcd_1602_show_datas(2,15,1,0);   
  70.             key=_4x3_matrix_keyboard_keys_read();
  71.             if(key==UP_H)
  72.             {
  73.                 if(setting_temperature_h<255)
  74.                 {
  75.                     setting_temperature_h++;     
  76.                 }
  77.             }
  78.             else if(key==DOWN_H)
  79.             {
  80.                    if(setting_temperature_h>0)
  81.                  {
  82.                      setting_temperature_h--;     
  83.                  }
  84.             }
  85.             else if(key==UP_L)
  86.             {
  87.                 if(setting_temperature_l<255)
  88.                 {
  89.                     setting_temperature_l++;     
  90.                 }     
  91.             }
  92.             else if(key==DOWN_L)
  93.             {
  94.                    if(setting_temperature_l>0)
  95.                  {
  96.                      setting_temperature_l--;     
  97.                  }   
  98.             }
  99.             else if(key==OK)
  100.             {
  101.                    lcd_1602_write_com(0x01);
  102.                  break;   
  103.             }
  104.         }
  105.     }     
  106.     else if(key==SET_NUM)
  107.     {
  108.         lcd_1602_write_com(0x01);
  109.         lcd_1602_show_character_string(1,1,"Cell phone number");
  110.         lcd_1602_show_character_string(2,1,"Num:");   
  111.         for(i=0;i<11;i++)
  112.         {
  113.             lcd_1602_show_datas(2,(5+i),1,phone_number[i]);        
  114.         }   
  115.         lcd_1602_show_character_string(2,4,":");   
  116.         i=0;   
  117.         lcd_1602_write_com(0x0F);   
  118.         while(1)
  119.         {
  120.             key=_4x3_matrix_keyboard_keys_read();
  121.             if(key==OK)
  122.             {
  123.                 for(i=0;i<11;i++)
  124.                 {
  125.                     phone_number[i]=temp_number[i];        
  126.                 }  
  127.                 lcd_1602_write_com(0x0c);
  128.                 lcd_1602_write_com(0x01);
  129.                 break;   
  130.             }
  131.             else if(key==CLE)
  132.             {
  133.                   lcd_1602_write_com(0x0c);
  134.                 lcd_1602_write_com(0x01);
  135.                 break;         
  136.             }
  137.             else if(key!=NOT)
  138.             {
  139.                
  140.                 if(i<11)
  141.                 {                     
  142.                     lcd_1602_show_datas(2,(5+i),1,key);   
  143.                     temp_number[i]=key;   
  144.                     i++;
  145.                     if(i>10)
  146.                     {
  147.                          lcd_1602_show_character_string(2,4,":");  
  148.                          i=0;
  149.                     }
  150.                 }      
  151.             }
  152.         }   
  153.     }
  154.     else if(key==CLE)      
  155.     {
  156.           ALARM_STOP;   
  157.     }
  158. }

  159. void overheat_alarm()
  160. {
  161.     if((current_temperature>setting_temperature_h)||(current_temperature<setting_temperature_l))
  162.     {
  163.         if(over_count>=10)
  164.         {
  165.             if(send==0)
  166.             {
  167.                 ALARM_START;
  168.                 DTU_ONLINE
  169.                 while(!uart_send_short_message(setting_temperature_h,setting_temperature_l,current_temperature));
  170.                 DTU_SHELVE
  171.                 send=1;
  172.             }
  173.         }
  174.         else
  175.         {
  176.              over_count++;   
  177.         }
  178.     }
  179.     else if((current_temperature<(setting_temperature_h-1))&&(current_temperature>(setting_temperature_l+1)))
  180.     {
  181.         ALARM_STOP;
  182.         send=0;
  183.         over_count=0;
  184.     }   
  185. }

  186. void main(void)
  187. {
  188.     lcd_1602_init();
  189.     lcd_1602_write_com(0x01);
  190.     while(1)
  191.     {         
  192.         key_setting();   
  193.         temperature_display();     
  194.         overheat_alarm();        
  195.     }
  196. }
复制代码


        
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:308386 发表于 2018-4-15 10:11 | 只看该作者
程序不全呀,为什么没有显示,延迟之类的其他子程序
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表