標題: 遠程報警單片機程序 [打印本頁]

作者: 707548342    時間: 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溫度值正數(shù)部分
  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子函數(shù)定義*************************/
  40. void lcdinit(void);                   //lcd初始化
  41. void lcdsendc(uchar c);               //發(fā)送lcd指令
  42. void lcdsendd(uchar c);               //發(fā)送lcd數(shù)據(jù)
  43. void lcdbusy(void);                   //判斷忙狀態(tài)
  44. void delay1ms(uint time);             //延時子程序
  45. void display(uchar c1,uchar *str);
  46. void delay1ms(uint time);
  47. void display_yanwu();
  48. /*****************采集電壓,讀取AD轉(zhuǎn)換結(jié)果********************/
  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. //----------------發(fā)送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. //-----------------發(fā)送數(shù)據(jù)----------------------
  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. //------------------判斷忙狀態(tài)--------------------
  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級延時函數(shù)*****************/
  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. }
復制代碼



作者: admin    時間: 2019-5-18 03:41
本帖需要重新編輯補全電路原理圖,源碼,詳細說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1