找回密码
 立即注册

QQ登录

只需一步,快速开始

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

远程报警单片机程序

[复制链接]
跳转到指定楼层
楼主
ID:540699 发表于 2019-5-17 15:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include <reg51.h>
  2. #include <stdio.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. sbit P0_0=P0^0;
  6. uchar code dt[]="abc";
  7. uchar code at[] = "AT";
  8. uchar code cmgf[]="AT+CMGF=1";
  9. uchar code csca[]="AT+CSCA=+8613800595500";
  10. uchar code cmgs[]="AT+CMGS=15159753072";
  11. uchar code cnmi[]="AT+CNMI=1,1,2;";   //短信提醒
  12. uchar code cmgr[]="AT+CMGR=1";        //短消息读取命令
  13. uchar code cmgd[]="AT+CMGD=1";       //删除短信
  14. uchar code cn[6]="+CMTI";
  15. uchar code cm[4]="GSM";
  16. /*******************TC35变量定义**************/
  17. uchar i_TC35_RECE=0;
  18. uchar i_receive, TC35_MAX, flag, flag0,flag1=0;
  19. xdata uchar  TC35_RE[90];
  20. uchar flag4;
  21. uchar tltemp;         //临时暂存变量
  22. uchar  temp_value,temp1_value;      //temp_value温度值正数部分
  23. xdata uchar  TempBuffer[6];
  24. /************************变量定义************************/
  25. uint num,T2=0,TMPL,TMPH,tem;
  26. uchar tab[5]=0,tab1[4],flag3,h,flag2,flag5,count;
  27. uchar code str[20]={"bi ye she ji"};
  28. uchar code str2[10]={"wen  du"};
  29. uchar code str3[10]={"nong du:"};
  30. /************************引脚定义*************************/
  31. sbit lcdrs=P3^7;     //4脚
  32. sbit lcdrw=P3^6;     //5脚
  33. sbit lcde=P3^5;      //6脚
  34. sbit clk=P3^2;
  35. sbit dataout=P3^3;
  36. sbit cs=P3^4;
  37. sbit DQ=P2^0;
  38. sbit la_ba=P0^0 ;
  39. /*********************LCD子函数定义*************************/
  40. void lcdinit(void);                   //lcd初始化
  41. void lcdsendc(uchar c);               //发送lcd指令
  42. void lcdsendd(uchar c);               //发送lcd数据
  43. void lcdbusy(void);                   //判断忙状态
  44. void delay1ms(uint time);             //延时子程序
  45. void display(uchar c1,uchar *str);
  46. void delay1ms(uint time);
  47. void display_yanwu();
  48. /*****************采集电压,读取AD转换结果********************/
  49. unsigned char get_val(void)
  50. {
  51. unsigned  i;
  52. unsigned char T;
  53.   cs=1;
  54.   clk=0;
  55.   cs=0;
  56. for(i=0;i<8;i++)
  57. {
  58.   clk=1;
  59.   T=T<<1;
  60.   if(dataout==1)
  61.   T=T+1;
  62.   clk=0;}
  63.   cs=1;
  64.   return T;
  65. }
  66. /***********************烟雾浓度显示*************************/
  67. void   display_yanwu()
  68. {     uchar shidu_qian,shidu_bai,shidu_shi,shidu_ge;
  69.         T2=get_val();
  70.          num=((float)T2/255)*5000;
  71.           if(num>4000){flag5=1;}
  72.          shidu_qian=0x30+num/1000;
  73.           shidu_bai=0x30+num/100%10;
  74.           shidu_shi=0x30+num/10%10;
  75.           shidu_ge=0x30+num%10;
  76.          tab[0]=shidu_qian;  tab[1]=shidu_bai; tab[2]=shidu_shi; tab[3]=shidu_ge;
  77.          display(0x88,tab);
  78. }
  79. //--------------lcd初始化程序-------------------
  80. void lcdinit()
  81. {
  82.    lcdsendc(0x01);                  //清屏
  83.    delay1ms(100);
  84.    lcdsendc(0x3c);                  //8位 2行   5X10字符
  85.    delay1ms(3);
  86.    lcdsendc(0x0e);                  //开启显示,光标显示,字符闪烁关闭
  87.    lcdsendc(0x02);                  //光标归位
  88.    delay1ms(2);
  89.    }
  90. //----------------发送lcd命令---------------------
  91. void lcdsendc(uchar c)
  92. {
  93.    P1=c;
  94.    lcdrs=0;
  95.    lcdrw=0;
  96.    lcde=0;
  97.    lcdbusy();
  98.    lcde=1;
  99.    if(c==1)
  100.      delay1ms(2);
  101.    }
  102. //-----------------发送数据----------------------
  103. void lcdsendd(uchar c)
  104. {
  105.    P1=c;
  106.    lcdrs=1;
  107.    lcdrw=0;
  108.    lcde=0;
  109.    lcdbusy();
  110.    lcde=1;
  111.    }
  112. //------------------判断忙状态--------------------
  113. void lcdbusy()
  114. {
  115.    P1=0xff;
  116.    lcdrs=0;
  117.    lcdrw=1;
  118.    lcde=0;
  119.    lcde=0;
  120.    lcde=1;
  121.    //delay1ms(1);
  122.    while((P1&0x80)==1);
  123.    }
  124. //------------------延时子程序----------------------
  125. void delay1ms(uint time)
  126. {
  127.    uint i,j;
  128.    for(i=0;i<time;i++)
  129.    for(j=0;j<100;j++);
  130.    }
  131. //-----------------显示子程序---------------------------
  132. void display(uchar c1,uchar *str)
  133. { uchar a;
  134.   a=c1 ;
  135.   lcdsendc(a);
  136.    while((*str)!= '\0')
  137.     {
  138.          lcdsendd(*str);
  139.          delay1ms(3);
  140.          str++;
  141.      }
  142. }
  143. /***************us级延时函数*****************/
  144. void delay2(unsigned int num)
  145. {
  146.   while( --num ) ;
  147. }
  148. /***************ds18b20模块********************/
  149. Reset_DS18B20(void)          //复位ds1820
  150. {    DQ = 1 ;                //DQ复位
  151.      delay2(8) ;             //稍做延时
  152.      DQ = 0 ;                 //单片机将DQ拉低
  153.      delay2(90) ;             //精确延时 大于 480us
  154.      DQ = 1 ;                 //拉高总线
  155.      delay2(8) ;
  156.      flag3 = DQ ;             //如果=0则初始化成功 =1则初始化失败
  157.      delay2(50) ;
  158.      DQ = 1 ;
  159.      return(flag3) ;          //返回信号,0=presence,1= no presence
  160. }
复制代码


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

使用道具 举报

沙发
ID:1 发表于 2019-5-18 03:41 | 只看该作者
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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