欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: (原創)基于單片機的遠程實時溫度監控系統設計 上位機詳細教程(gprs通訊) 源碼 [打印本頁]

作者: corey666    時間: 2017-4-21 16:29
標題: (原創)基于單片機的遠程實時溫度監控系統設計 上位機詳細教程(gprs通訊) 源碼
采用51單片機主控的整個遠程溫度監控系統設計出來的實物圖如下:

  左上角是gprs模塊,需要插入手機卡才能遠程通訊。具有串口接口,顯示部分采用的是lcd12864液晶.




原理圖,pcb文件(是用ad畫的附件中可下載工程文件):


詳盡資料在附件中,因網站上傳限制,需要其他相關資料可留言。這個設計花了大概三個星期時間,gprs實時通訊方面難度相對大。望多多指教!

部分源程序預覽:
  1. /*******************************************************************************
  2. * 實驗名                           :溫度顯示實驗
  3. * 使用的IO             :
  4. * 實驗效果       :1602顯示溫度
  5. *        注意                                         :
  6. *******************************************************************************/

  7. #include<reg51.h>
  8. #include"LCD12864_SPI.h"
  9. #include"temp.h"
  10. #include<math.h>
  11. #include<string.h>

  12. #include <all.h>

  13. sbit K1 = P1^3;
  14. sbit K2 = P1^4;
  15. sbit K3 = P1^5;
  16. sbit K4 = P1^6;
  17. sbit K5 = P1^7;

  18. sbit Buzzer1 = P0^2;
  19. sbit LED1    = P0^0;

  20. sbit Buzzer2 = P0^5;
  21. sbit LED2    = P0^6;

  22. int Temperature = 0;     //用于存儲溫度值
  23. int Deviation = 0;       //1存儲偏差  
  24. int Report = 5000;       //1高溫報警值

  25. int Temperature1 = 0;     //用于存儲溫度值
  26. int Deviation1 = 0;       //2存儲偏差  
  27. int Report1 = 5000;       //2高溫報警值

  28. char Set = 0;

  29. unsigned char xdata TCP[] = {"AT+CIPSTART=TCP,103.44.145.245,33601\x0D\x0A"};  //映射的域名對應IP及端口在這里修改

  30. unsigned char dat[8] = {0, 0, 0, 0, 0, 0, 0, 0}; //定義數組

  31. unsigned int count=0;
  32. unsigned char Flag=0;
  33. unsigned char Num=0;

  34. #define LenRxBuf 50

  35. char  AT_SK[]="\x0D\x0A> ";       // 0D 0A 3E 20         \x0D\x0A
  36. char  AT_Code[]="\x0D\x0AOK";    // 0D 0A 4F 4B 0D 0A
  37. char  CONNECT_OK[]="\x0D\x0ACONNECT OK";  //CONNECT OK // 0D 0A 43 4F 4E 4E 45 43 54 20 4F 4B 0D 0A 0D 0A 4F 4B 0D 0A


  38. char  RsPoint=0;  //發送  數組指針

  39. char xdata RsBuf[LenRxBuf];     //接收緩存



  40. void REPORT(int temperature, int report, uchar es);
  41. void UsartConfiguration();
  42. void TX_Char(unsigned char TXData);
  43. void Send_Str(unsigned char *str);
  44. void SendnStr(char *str, char n);//發送字符串
  45. void Int_Char(int temp);
  46. void ClrRsBuf(char *p, int len);
  47. char WaitOK(char *th, char time);
  48. char Connect_GPRS();
  49. void KeyScan();
  50. int  TempDeal(int temp);
  51. void LcdDisplay(int temp);
  52. void LcdDisplay1(int temp);          //lcd顯示

  53. /*******************************************************************************
  54. * 函數名         : main
  55. * 函數功能                   : 主函數
  56. * 輸入           : 無
  57. * 輸出                  : 無
  58. *******************************************************************************/

  59. void main()
  60. {
  61.         unsigned char i;
  62.         P0=0XFF;
  63.         Buzzer1 = 1;  //熄滅LED及關閉蜂鳴器
  64.         LED1    = 1;
  65.         Buzzer2 = 1;
  66.         LED2    = 1;
  67.        
  68.         Lcd_Init();                         //初始化LCD12864
  69.         UsartConfiguration(); //初始化串口,波特率9600

  70.         while(1)
  71.         {
  72.                                
  73.                 KeyScan();
  74.                
  75.                 if(Set==0)
  76.                 {                       
  77.                         LcdWriteStr(0x80, "Temp1:", 6);       
  78.                         LcdWriteStr(0x90, "Temp2:", 6);       
  79.                                                                        
  80.                         Temperature = TempDeal(Ds18b20ReadTemp()) + Deviation;
  81.                         Temperature1 = TempDeal(Ds18b20ReadTemp1()) + Deviation1;
  82.                        
  83.                         LcdDisplay(Temperature);  //顯示溫度
  84.                         LcdDisplay1(Temperature1);  //顯示溫度               
  85.                        
  86.                         REPORT(Temperature, Report, 1);  //報警
  87.                         REPORT(Temperature1, Report1, 2);  //報警
  88.                                                        
  89.                 }
  90. //                delay_1ms(1000);//1s鐘刷一次
  91.                
  92.                
  93.                 if((count>=200) && (Flag==1))    //10s  
  94.                 {
  95.                         count=0;
  96.                        
  97. //                        ClrRsBuf(RsBuf,50); //清空接收緩沖區
  98. //                        RsPoint=0;
  99. //                       
  100. //                        ES=0;                                                //關閉接收中斷
  101. //                        Send_Str("AT+CIPSTATUS\x0D\x0A");    //查詢tcp連接狀態 0D 0A 0D 0A 2B 43 49 50 53 54 41 54 55 53 3A 30 2C 43 4F 4E 4E 45 43 54 20 4F 4B 20 20 0D 0A
  102. //                        ES=1;                                                //打開接收中斷
  103. //                        if(WaitOK(AT_Code, 10)==1)
  104. //                        {                                            
  105. //                                LcdWriteCom(0x98);  //清空lcd后1行
  106. //                                for(i=0;i<16;i++)
  107. //                                        LcdWriteData(' ');
  108. //                                Flag=1;
  109. //                                LcdWriteStr(0x98, "CONNECT OK", 10);       
  110. //                               
  111.                                
  112.                                 ClrRsBuf(RsBuf,50); //清空接收緩沖區
  113.                                 RsPoint=0;       
  114.                                
  115.                                 ES=0;                                                //關閉接收中斷
  116.                                 Send_Str("AT+CIPSEND\x0D\x0A");    //tcp發送
  117.                                 ES=1;                                                ////打開接收中斷
  118.                                 if(WaitOK(AT_SK, 2)==1)            // '>'  0D 0A 3E 20
  119.                                 {                                                               
  120.                                         ES=0;                                                //關閉接收中斷
  121.                                         Int_Char(Temperature);
  122.                                         Send_Str("節點1溫度值為:");
  123.                                         SendnStr(dat,8);
  124.                                         Send_Str(";\x0A");       
  125.                                        
  126.                                         Int_Char(Temperature1);
  127.                                         Send_Str("節點2溫度值為:");               
  128.                                         SendnStr(dat,8);
  129.                                         Send_Str(";\x0A\x1A");               
  130.                                         ES=1;                                                ////打開接收中斷
  131.                                        
  132.                                         switch(WaitOK(AT_Code, 3))
  133.                                         {
  134.                                                 case 0:       
  135.                                                                         {
  136.                                                                                 LcdWriteCom(0x98);  //清空lcd后1行
  137.                                                                                 for(i=0;i<16;i++)
  138.                                                                                         LcdWriteData(' ');
  139.                                                                                 LcdWriteStr(0x98, "SEND FAIL", 9);
  140.                                                                                 Num++;
  141.                                                                                 if(Num==10)
  142.                                                                                 {
  143.                                                                                         Num=0;
  144.                                                                                         Flag=0;
  145.                                                                                         LcdWriteCom(0x88);  //清空lcd后2行
  146.                                                                                         for(i=0;i<16;i++)
  147.                                                                                                 LcdWriteData(' ');
  148.                                                                                         LcdWriteCom(0x98);
  149.                                                                                         for(i=0;i<16;i++)
  150.                                                                                                 LcdWriteData(' ');
  151.                                                                                 }
  152.                                                                         }
  153.                                                                         break;
  154.                                                                        
  155.                                                 case 1:       
  156.                                                                         {
  157.                                                                                 LcdWriteCom(0x98);  //清空lcd后1行
  158.                                                                                 for(i=0;i<16;i++)
  159.                                                                                         LcdWriteData(' ');
  160.                                                                                 LcdWriteStr(0x98, "SEND SUCCESS", 12);
  161.                                                                                 Flag=1;
  162.                                                                         }
  163.                                                                         break;
  164.                                                                        
  165.                                                 default:
  166.                                                                         break;
  167.                                         }
  168.                                 }
  169.                                
  170.                 }
  171.                                        
  172.         }
  173.        
  174. }
  175. /*******************************************************************************
  176. * 函數名         : Int_Char
  177. * 函數功能                   : 整形數據轉換為字符型
  178. * 輸入           : temp
  179. * 輸出                  : 無
  180. *******************************************************************************/
  181. void Int_Char(int temp)
  182. {
  183.        
  184.         dat[0] = (temp % 10000 / 1000)+0x30;
  185.         dat[1] = (temp % 1000 / 100)+0x30;
  186.         dat[2] = '.';
  187.         dat[3] = (temp % 100 / 10)+0x30;
  188.         dat[4] = (temp % 10)+0x30;
  189.         dat[5] = '\xA1';
  190.         dat[6] = '\xE3';
  191.         dat[7] = 'C';
  192. }
  193. /*******************************************************************************
  194. * 函數名         : REPORT(int temperature, int report, uchar es)
  195. * 函數功能                   : 報警處理,
  196. * 輸入           : 采集的溫度:temperature;報警溫度:report; 節點選擇:es
  197. * 輸出                  : 無
  198. *******************************************************************************/
  199. void REPORT(int temperature, int report, uchar es)
  200. {
  201.         switch(es)
  202.         {       
  203.                 case 1:       
  204.                                         {
  205.                                                 if(temperature>=report)   //報警temperature
  206.                                                 {
  207.                                                         Buzzer1 = 0;
  208.                                                         LED1    = 0;
  209.                                                                                                                                                                        
  210.                                                 }
  211.                                                 else
  212.                                                 {
  213.                                                         Buzzer1 = 1;
  214.                                                         LED1    = 1;
  215.                                                 }                                               
  216.                                         }
  217.                                         break;
  218.                                        
  219.                 case 2:       
  220.                                         {
  221.                                                 if(temperature>=report)   //報警
  222.                                                 {
  223.                                                         Buzzer2 = 0;
  224.                                                         LED2    = 0;                       
  225.                                                 }
  226.                                                 else
  227.                                                 {
  228.                                                         Buzzer2 = 1;
  229.                                                         LED2    = 1;
  230.                                                 }                                               
  231.                                         }
  232.                                         break;
  233.                                        
  234.                 default:               
  235.                                         break;
  236.         }
  237. }
  238. /*******************************************************************************
  239. * 函數名         :UsartConfiguration()
  240. * 函數功能                   :設置串口
  241. * 輸入           : 無
  242. * 輸出                  : 無
  243. *******************************************************************************/

  244. void UsartConfiguration()
  245. {
  246.         SCON=0X50;                        //設置為工作方式1
  247.         TMOD=0X21;                        //設置計數器1工作方式2;定時器 0工作方式1
  248.         PCON=0X80;                        //波特率加倍
  249.         TH1=0XFA;                                //計數器初始值設置,注意波特率是9600;4800的f3
  250.         TL1=0XFA;
  251.        
  252.         TH0=0X3C;                                //定時50ms
  253.         TL0=0XB0;
  254.        
  255.         ES=0;                                                //bu打開接收中斷
  256.         ET0=1;                                                //打開定時器0中斷
  257.         EA=1;                                                //打開總中斷
  258.        
  259.         TR1=1;                                        //打開計數器1
  260.         TR0=0;                                        //關閉定時器0
  261. }
  262. /*******************************************************************************
  263. * 函數名         : TX_Char(unsigned char TXData)
  264. * 函數功能                   : 串口發送字符
  265. * 輸入           : TXData
  266. * 輸出                  : 無
  267. *******************************************************************************/
  268. void TX_Char(unsigned char TXData)
  269. {
  270.         SBUF=TXData;     //發送數據
  271.         while(!TI);                         //等待發送數據完成
  272.         TI=0;                                                 //清除發送完成標志位
  273. }
  274. /*******************************************************************************
  275. * 函數名         : TX_Char(unsigned char TXData)
  276. * 函數功能                   : 串口發送字符串
  277. * 輸入           : TXData
  278. * 輸出                  : 無
  279. *******************************************************************************/
  280. void Send_Str(unsigned char *str)//發送字符串
  281. {

  282.         while(*str!='\0')
  283.         {
  284.                 TX_Char(*str);
  285.                 str++;
  286.         }
  287. }            

  288. /*******************************************************************************
  289. * 函數名         : SendnStr(char *str, char n)
  290. * 函數功能                   : 串口發送n字節字符串
  291. * 輸入           : TXData
  292. * 輸出                  : 無
  293. *******************************************************************************/
  294. void SendnStr(char *str, char n)//發送字符串
  295. {

  296.         while((n--) && (*str!='\0'))
  297.         {
  298.                 TX_Char(*str);
  299.                 str++;
  300.         }
  301. }            
  302. /*******************************************************************************
  303. * 函數名         : ClrRsBuf(char *p,int len)
  304. * 函數功能                   : 清空p指針里len字節長度的內存
  305. * 輸入           : 指針:p  ; 清空長度:len
  306. * 輸出                  : 無
  307. *******************************************************************************/
  308. void  ClrRsBuf(char *p,int len) //清空
  309. {          
  310.           while(len--)
  311.           {
  312.                         *p='\0';
  313.                          p++;
  314.           }
  315. }

  316. /*******************************************************************************
  317. * 函數名         : strncmp ( char * s1, char * s2, size_t n)
  318. * 函數功能                   :比較str1與str2的前n個字符,相同返回0;不同返回( *s1 - *s2 )
  319. * 輸入           : 指針:str1  ; 指針:str2 ;長度:n
  320. * 輸出                  : 比較結果相同返回0;不同返回( *s1 - *s2 )
  321. *******************************************************************************/
  322. char strncmp ( char * s1, char * s2, size_t n)
  323. {
  324.   if ( !n )    //n為0,則返回0
  325.    return(0);
  326.   //在接下來的while循環中
  327.   //第一個循環條件:--n,如果比較到前n個字符,則退出循環
  328.   //第二個循環條件:*s1,如果s1指向字符串末尾,則退出循環
  329.   //第三個循環條件:*s1 == *s2,如果兩字符不等,則退出循環
  330.   while (--n && *s1 && *s1 == *s2)
  331.   {
  332.      s1++;
  333.      s2++;
  334.   }
  335.   return( *s1 - *s2 );
  336. }
  337. /*******************************************************************************
  338. * 函數名         : strlen(const char *str)
  339. * 函數功能                   : 求指針的長度
  340. * 輸入           : 指針:str  
  341. * 輸出                  : 指針的長度
  342. *******************************************************************************/
  343. size_t strlen(const char *str)
  344. {  
  345.     size_t length = 0;  
  346.     while (*str++)  
  347.         ++length;  
  348.     return length;  
  349. }  
  350. /*******************************************************************************
  351. * 函數名         : *strstr( const char *s1, const char *s2 )
  352. * 函數功能                   : 找出s2字符串在s1字符串中第一次出現的位置
  353. * 輸入           : 指針:s1  ; 指針:s2
  354. * 輸出                  : 返回該位置的指針,如找不到則返回NULL
  355. *******************************************************************************/
  356. char *strstr( const char *s1, const char *s2 )
  357. {
  358.   int len2;
  359.   if ( !(len2 = strlen(s2)) )
  360.   return (char *)s1;
  361.   for ( ; *s1; ++s1 )
  362. {
  363.   if ( *s1 == *s2 && strncmp( s1, s2, len2 )==0 )
  364.   return (char *)s1;
  365. }
  366.   return NULL;
  367. }
  368. /*******************************************************************************
  369. * 函數名         : WaitOK(uchar *th, uchar time)
  370. * 函數功能                   : 等待time s的時間,判斷6A模組返回信息是否OK
  371. * 輸入           : 指針:th  ; 等待時間:time
  372. * 輸出                  : OK返回1,否則返回0
  373. *******************************************************************************/
  374. char WaitOK(char *th, char time)
  375. {
  376.         while(time--)
  377.         {
  378.                 if(strstr(RsBuf,th) != NULL)            //strncmp
  379.                 {
  380.                         return 1;
  381.                 }
  382.                        
  383.                 else
  384.                 {
  385.                         if(time!=0)                               
  386.                                 delay_1ms(1000);
  387.                 }
  388.         }
  389.         return 0;
  390. }

  391. /*******************************************************************************
  392. * 函數名         : Connect_GPRS()
  393. * 函數功能                   : 連接GPRS
  394. * 輸入           : 無
  395. * 輸出                  : 無
  396. *******************************************************************************/
  397. char Connect_GPRS()
  398. {
  399.         char i;       
  400.        
  401.         ClrRsBuf(RsBuf,50); //清空接收緩沖區 AT_Code
  402.         RsPoint=0;        
  403.         ES=0;                                                //關閉接收中斷
  404.         Send_Str("ATE0\x0D\x0A");    //ATE0:關閉回顯;  ATE1:打開回顯
  405.         ES=1;                                                //打開接收中斷
  406.         if(WaitOK(AT_Code, 10)!=1)     
  407.                 return 0;
  408.        
  409.         ClrRsBuf(RsBuf,50); //清空接收緩沖區 AT_Code
  410.         RsPoint=0;        
  411.         ES=0;                                                //關閉接收中斷
  412.         Send_Str("AT+CGATT=1\x0D\x0A");    //GPRS 附著;     AT+CGATT=0 GPRS分離
  413.         ES=1;                                                //打開接收中斷
  414.         if(WaitOK(AT_Code, 10)!=1)     
  415.                 return 0;
  416.        
  417.         ClrRsBuf(RsBuf,50); //清空接收緩沖區 AT_Code
  418.         RsPoint=0;
  419.         ES=0;                                                //關閉接收中斷
  420.         Send_Str("AT+CGACT=1,1\x0D\x0A");  //PDP上下文激活   去激活:AT+CGACT=0,1
  421.         ES=1;                                                //打開接收中斷
  422.         if(WaitOK(AT_Code, 10)!=1)     
  423.                 return 0;
  424.        
  425.         ClrRsBuf(RsBuf,50); //清空接收緩沖區 AT_Code
  426.         RsPoint=0;
  427.         ES=0;                                                //關閉接收中斷
  428.         Send_Str("AT+CIFSR\x0D\x0A");      //查詢 IP 地址
  429.         ES=1;                                                //打開接收中斷
  430.         if(WaitOK(AT_Code,10)==1)
  431.         {
  432.                 LcdWriteCom(0x88); //清空第3行
  433.                 for(i=0;i<16;i++)
  434.                         LcdWriteData(' ');
  435.                 LcdWriteCom(0x88);
  436.                
  437.                 for(i=2;i<17;i++)
  438.                 {
  439.                         if((RsBuf[i]!='\x0D')&&(RsBuf[i]!='\x0A')&&(RsBuf[i]!=' '))                               
  440.                                 LcdWriteData(RsBuf[i]);               
  441.                 }
  442.         }       
  443.        
  444.         ClrRsBuf(RsBuf,50); //清空接收緩沖區 AT_Code
  445.         RsPoint=0;
  446.         ES=0;                                                //關閉接收中斷
  447.         Send_Str(TCP);                 //GPRS TCP 連接
  448.         ES=1;                                                //打開接收中斷
  449.         if(WaitOK(AT_Code,10)==1)                  //strncmp(RsBuf+17,CONNECT_OK, 10)==0   WaitOK(CONNECT_OK, 10)==1
  450.         {
  451.                 LcdWriteCom(0x98);  //清空lcd后1行
  452.                 for(i=0;i<16;i++)
  453.                         LcdWriteData(' ');

  454.                 LcdWriteStr(0x98, "CONNECT OK", 10);
  455.                 Flag=1;  //置GPRS連接標志               
  456.                
  457.                 return 1;                               
  458.         }       
  459.        

  460.                 LcdWriteCom(0x88);  //清空lcd后1行
  461.                 for(i=0;i<16;i++)
  462.                         LcdWriteData(' ');
  463.                 LcdWriteCom(0x98);  //清空lcd后1行
  464.                 for(i=0;i<16;i++)
  465.                         LcdWriteData(' ');

  466.                 LcdWriteStr(0x98, "CONNECT ERROR", 13);
  467.                 Flag=0;   //清GPRS連接標志
  468.                                
  469.                 return 0;       
  470.                
  471. }

  472. /*******************************************************************************
  473. * 函數名         : void Usart()
  474. * 函數功能                   : 串口中斷函數
  475. * 輸入           : 無
  476. * 輸出                  : 無
  477. *******************************************************************************/
  478. void Usart() interrupt 4 using 3
  479. {
  480.         if(RI==1)
  481.   {
  482.     RI=0;
  483.     RsBuf[RsPoint++]=SBUF;
  484.     if (RsPoint>=50)
  485.     {
  486.                         ES=0;                                                //關閉接收中斷
  487.       RsPoint=50;
  488.     }  
  489.   }
  490. }

  491. /*******************************************************************************
  492. * 函數名         : Timer0
  493. * 函數功能                   : 定時器0中斷函數
  494. * 輸入           : 無
  495. * 輸出                  : 無
  496. *******************************************************************************/
  497. void Timer0() interrupt 1 using 3
  498. {
  499.         TH0=0X3C;                                //重裝定時值50ms
  500.         TL0=0XB0;
  501.         count++;
  502.        
  503. }
  504. /*******************************************************************************
  505. * 函數名         : KeyScan
  506. * 函數功能                   : 按鍵檢測函數
  507. * 輸入           : 無
  508. * 輸出                  : 無
  509. *******************************************************************************/
  510. void KeyScan()
  511. {
  512.         unsigned char i=0;
  513.         int Dev;
  514.        
  515.         K1=1;
  516.         if(K1==0)                //檢測按鍵K1是否按下
  517.                 {
  518.                         delay_1ms(10);        //消除抖動
  519.                         if(K1==0)               //按鍵1按下時執行該動作
  520.                         {
  521.                                
  522.                                 Set += 1;         
  523.                                 if(Set==5)
  524.                                         Set=0;
  525.                                
  526.                                 LcdWriteCom(0x01);           //寫入空格清屏幕
  527.                        
  528.                                 LcdWriteCom(0x80);           //設定首行顯示位置
  529.                                
  530.                                 if(Set==1)
  531.                                 {
  532.                                                 LcdWriteStr(0x80, "Correct Temp1:", 14);       
  533.                                                
  534.                                                 LcdWriteCom(0x91);           //設定顯示位置
  535.                                                
  536.                                                 if(Deviation == 0)
  537.                                                         LcdWriteData(' ');                  //顯示
  538.                                                 if(Deviation > 0)
  539.                                                         LcdWriteData('+');                  //顯示正
  540.                                                 if(Deviation < 0)
  541.                                                         LcdWriteData('-');                  //顯示負
  542.                                                
  543.                                                 Dev = abs(Deviation);
  544.                                                
  545.                                                 dat[0] = Dev % 1000 / 100;
  546.                                                 dat[1] = Dev % 100 / 10;
  547.                                                 dat[2] = Dev % 10;
  548.                                                
  549.                                                 LcdWriteData('0'+dat[0]); //個位
  550.                                                 LcdWriteData('.');                     //顯示 ‘.’
  551.                                                 LcdWriteData('0'+dat[1]); //十分位
  552.                                                 LcdWriteData('0'+dat[2]); //百分位
  553.                                                 LcdWriteData(' ');
  554.                                                 LcdWriteData('C');
  555.                                 }
  556.                                
  557.                                 if(Set==2)
  558.                                 {
  559.                                                 LcdWriteStr(0x80, "Correct Temp2:", 14);       
  560.                                                
  561.                                                 LcdWriteCom(0x91);           //設定顯示位置
  562.                                                
  563.                                                 if(Deviation1 == 0)
  564.                                                         LcdWriteData(' ');                  //顯示
  565.                                                 if(Deviation1 > 0)
  566.                                                         LcdWriteData('+');                  //顯示正
  567.                                                 if(Deviation1 < 0)
  568.                                                         LcdWriteData('-');                  //顯示負
  569.                                                
  570.                                                 Dev = abs(Deviation1);
  571.                                                
  572.                                                 dat[0] = Dev % 1000 / 100;
  573.                                                 dat[1] = Dev % 100 / 10;
  574.                                                 dat[2] = Dev % 10;
  575.                                                
  576.                                                 LcdWriteData('0'+dat[0]); //個位
  577.                                                 LcdWriteData('.');                     //顯示 ‘.’
  578.                                                 LcdWriteData('0'+dat[1]); //十分位
  579.                                                 LcdWriteData('0'+dat[2]); //百分位
  580.                                                 LcdWriteData(' ');
  581.                                                 LcdWriteData('C');
  582.                                 }
  583.                                
  584.                                 if(Set==3)
  585.                                 {
  586.                                                 LcdWriteStr(0x80, "High Ring1:", 10);       
  587.                                                
  588.                                                 LcdWriteCom(0x91);           //設定顯示位置
  589.                                                
  590.                                                 if(Report == 0)
  591.                                                         LcdWriteData(' ');                  //顯示
  592.                                                 if(Report > 0)
  593.                                                         LcdWriteData('+');                  //顯示正
  594.                                                 if(Report < 0)
  595.                                                         LcdWriteData('-');                  //顯示負
  596.                                                
  597.                                                 Dev = abs(Report);
  598.                                                
  599.                                                 dat[0] = Dev % 10000 / 1000;
  600.                                                 dat[1] = Dev % 1000 / 100;
  601.                                                 dat[2] = Dev % 100 / 10;
  602.                                                 dat[3] = Dev % 10;
  603.                                                
  604.                                                 LcdWriteData('0'+dat[0]); //十位
  605.                                                 LcdWriteData('0'+dat[1]); //個位
  606.                                                 LcdWriteData('.');                     //顯示 ‘.’
  607.                                                 LcdWriteData('0'+dat[2]); //十分位
  608.                                                 LcdWriteData('0'+dat[3]); //百分位
  609.                                                 LcdWriteData(' ');
  610.                                                 LcdWriteData('C');
  611.                                 }
  612.                                
  613.                                 if(Set==4)
  614.                                 {
  615.                                                 LcdWriteStr(0x80, "High Ring2:", 10);       
  616.                                                
  617.                                                 LcdWriteCom(0x91);           //設定顯示位置
  618.                                                
  619.                                                 if(Report1 == 0)
  620.                                                         LcdWriteData(' ');                  //顯示
  621.                                                 if(Report1 > 0)
  622.                                                         LcdWriteData('+');                  //顯示正
  623.                                                 if(Report1 < 0)
  624.                                                         LcdWriteData('-');                  //顯示負
  625.                                                
  626.                                                 Dev = abs(Report1);
  627.                                                
  628.                                                 dat[0] = Dev % 10000 / 1000;
  629.                                                 dat[1] = Dev % 1000 / 100;
  630.                                                 dat[2] = Dev % 100 / 10;
  631.                                                 dat[3] = Dev % 10;
  632.                                                
  633.                                                 LcdWriteData('0'+dat[0]); //十位
  634.                                                 LcdWriteData('0'+dat[1]); //個位
  635.                                                 LcdWriteData('.');                     //顯示 ‘.’
  636.                                                 LcdWriteData('0'+dat[2]); //十分位
  637.                                                 LcdWriteData('0'+dat[3]); //百分位
  638.                                                 LcdWriteData(' ');
  639.                                                 LcdWriteData('C');
  640.                                 }
  641.                                
  642.                                 while((i<50)&&(K1==0))         //檢測按鍵是否松開
  643.                                 {
  644.                                         delay_1ms(10);
  645.                                         i++;
  646.                                 }
  647.                                 i=0;
  648.                         }
  649.                 }       
  650.        
  651.         K2=1;
  652.         if(K2==0)                //檢測按鍵K1是否按下
  653.                 {
  654.                         delay_1ms(10);        //消除抖動
  655.                         if(K2==0)
  656.                         {
  657.        
  658.                                 if(Set==1)
  659.                                 {
  660.                                                 Deviation += 10;        //按鍵2按下時執行該動作,按一下溫度值正向糾正 0.1°C,最多糾正5°C
  661.                                                 if(Deviation >= 500)
  662.                                                 {       
  663.                                                         Deviation = 500;
  664.                                                 }
  665.                                                 LcdWriteCom(0x91);           //設定顯示位置
  666.                                                
  667.                                                 if(Deviation == 0)
  668.                                                         LcdWriteData(' ');                  //顯示
  669.                                                 if(Deviation > 0)
  670.                                                         LcdWriteData('+');                  //顯示正
  671.                                                 if(Deviation < 0)
  672.                                                         LcdWriteData('-');                  //顯示負
  673.                                                
  674.                                                 Dev = abs(Deviation);
  675.                                                
  676.                                                 dat[0] = Dev % 1000 / 100;
  677.                                                 dat[1] = Dev % 100 / 10;
  678.                                                 dat[2] = Dev % 10;
  679.                                                
  680.                                                 LcdWriteData('0'+dat[0]); //個位
  681.                                                 LcdWriteData('.');                     //顯示 ‘.’
  682.                                                 LcdWriteData('0'+dat[1]); //十分位
  683.                                                 LcdWriteData('0'+dat[2]); //百分位
  684.                                                 LcdWriteData(' ');
  685.                                                 LcdWriteData('C');
  686.                           }
  687.                                
  688.                                 if(Set==2)
  689.                                 {
  690.                                                 Deviation1 += 10;        //按鍵2按下時執行該動作,按一下溫度值正向糾正 0.1°C,最多糾正5°C
  691.                                                 if(Deviation1 >= 500)
  692.                                                 {       
  693.                                                         Deviation1 = 500;
  694.                                                 }
  695.                                                 LcdWriteCom(0x91);           //設定顯示位置
  696.                                                
  697.                                                 if(Deviation1 == 0)
  698.                                                         LcdWriteData(' ');                  //顯示
  699.                                                 if(Deviation1 > 0)
  700.                                                         LcdWriteData('+');                  //顯示正
  701.                                                 if(Deviation1 < 0)
  702.                                                         LcdWriteData('-');                  //顯示負
  703.                                                
  704.                                                 Dev = abs(Deviation1);
  705.                                                
  706.                                                 dat[0] = Dev % 1000 / 100;
  707.                                                 dat[1] = Dev % 100 / 10;
  708.                                                 dat[2] = Dev % 10;
  709.                                                
  710.                                                 LcdWriteData('0'+dat[0]); //個位
  711.                                                 LcdWriteData('.');                     //顯示 ‘.’
  712.                                                 LcdWriteData('0'+dat[1]); //十分位
  713.                                                 LcdWriteData('0'+dat[2]); //百分位
  714.                                                 LcdWriteData(' ');
  715.                                                 LcdWriteData('C');
  716.                           }
  717.                                
  718.                                 if(Set==3)
  719.                                 {
  720.                                                 Report += 10;        //按鍵2按下時執行該動作,按一下溫度報警值正向增加0.1°C
  721.                                                 if(Report >= 9000)
  722.                                                 {       
  723.                                                         Report = 9000;
  724.                                                 }
  725.                                                
  726. …………限于本文篇幅 余下代碼請從51黑下載附件…………

復制代碼



資料下載:
程序 原理圖 用到的包括串口助手,服務器等資料.zip (4 MB, 下載次數: 405)


作者: corey666    時間: 2017-4-25 18:53
該模塊的主芯片換成了51
作者: corey666    時間: 2017-4-25 18:54
通訊過程的調試,連接成功視頻可以私發

作者: awind_cn    時間: 2017-6-19 12:55
學習了,簡潔明了。感謝樓主的分享。。。。
作者: 666到家    時間: 2017-6-28 15:13
我做了1個基于51單片機的溫度檢測器,通過串口和A7模塊相連。但是有一個問題A7模塊要求串口波特率必須為115200,我用的是STC89c52芯片普中的板在串口調試時為什么只有4800才正常發送數據?這樣就和A7通信不了了
作者: feibao0015    時間: 2017-9-20 21:56
好東西,謝謝樓主,希望留個聯系方式,咱們一起學習
作者: 13725929040    時間: 2017-12-5 22:03
有做仿真嗎?程序在哪份文件?

作者: xmch    時間: 2018-1-14 23:22
感謝分享。
作者: cjjcjj1    時間: 2018-1-15 12:21
提示: 作者被禁止或刪除 內容自動屏蔽
作者: admin    時間: 2018-3-1 02:27
剛下載看了,不是亂碼啊
作者: haibuhao    時間: 2018-3-23 10:59
樓主你好,我畢設正好做有關基于無線的環境檢測,能發我一些相關資料嗎
作者: haibuhao    時間: 2018-3-23 11:00
我的郵箱985082400@qq.com
作者: heruihung1    時間: 2018-3-23 20:24
樓主你好,我畢設正好做有關基于無線的環境檢測,能發我一些相關資料嗎
作者: ghostintheshell    時間: 2018-3-24 11:19
感謝樓主分享。
作者: ftmovie    時間: 2018-3-25 20:55
學習學習 支持一下
作者: dashabi123    時間: 2018-3-26 09:36
謝謝樓主分享

作者: dashabi123    時間: 2018-3-26 10:09
謝謝樓主分享
作者: 每一個人    時間: 2018-4-7 10:51
可以發一下鏈接嗎?
作者: 15897660437    時間: 2018-4-28 14:12
好資源
作者: elephone11    時間: 2018-5-24 08:40
學習學習,感謝樓主分享!
作者: pengyongnet    時間: 2018-6-22 11:36

我做了1個基于51單片機的溫度檢測器,通過串口和A7模塊相連。但是有一個問題A7模塊要求串口波特率必須為115200,我用的是STC89c52芯片普中的板在串口調試時為什么只有4800才正常發送數據?這樣就和A7通信不了了 ,能不傳一份51的我
作者: Ray_liu    時間: 2018-7-9 14:58
沒有用
作者: xsj1877578806    時間: 2018-7-29 10:10
這是好東西啊,趕緊收藏
作者: zaqwsx1122    時間: 2018-12-22 22:15

感謝樓主分享。
作者: 抬頭看星星    時間: 2019-11-12 10:37
資料很全面,程序很好用,感謝樓主
作者: 抬頭看星星    時間: 2019-11-12 11:44
樓主你好
作者: 抬頭看星星    時間: 2019-11-12 11:53
怎么看下載的
作者: sansansan.3    時間: 2019-11-16 10:08
我的資料里面沒有GPRS網絡通訊。。。
作者: WNI    時間: 2019-11-29 17:24
corey666 發表于 2017-4-25 18:54
通訊過程的調試,連接成功視頻可以私發

可以分享下嗎
作者: zhouwei0815    時間: 2019-11-29 21:45
資料很全 不錯 支持了
作者: jvsoft    時間: 2019-11-30 10:13
很好的學習資料,很全面,感謝樓主
作者: 江畔望月    時間: 2020-5-17 18:17
我的資料里面沒有GPRS網絡通訊




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