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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

(原創)基于單片機的遠程實時溫度監控系統設計 上位機詳細教程(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)

評分

參與人數 3黑幣 +113 收起 理由
as252585425 + 8 資料很全面。非常好
shenlan121 + 5 贊一個!
admin + 100 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:192050 發表于 2017-4-25 18:53 | 只看該作者
該模塊的主芯片換成了51
回復

使用道具 舉報

板凳
ID:192050 發表于 2017-4-25 18:54 | 只看該作者
通訊過程的調試,連接成功視頻可以私發
回復

使用道具 舉報

地板
ID:209529 發表于 2017-6-19 12:55 | 只看該作者
學習了,簡潔明了。感謝樓主的分享。。。。
回復

使用道具 舉報

5#
ID:209659 發表于 2017-6-28 15:13 | 只看該作者
我做了1個基于51單片機的溫度檢測器,通過串口和A7模塊相連。但是有一個問題A7模塊要求串口波特率必須為115200,我用的是STC89c52芯片普中的板在串口調試時為什么只有4800才正常發送數據?這樣就和A7通信不了了
回復

使用道具 舉報

6#
ID:234120 發表于 2017-9-20 21:56 | 只看該作者
好東西,謝謝樓主,希望留個聯系方式,咱們一起學習
回復

使用道具 舉報

7#
ID:254981 發表于 2017-12-5 22:03 | 只看該作者
有做仿真嗎?程序在哪份文件?
回復

使用道具 舉報

8#
ID:161033 發表于 2018-1-14 23:22 | 只看該作者
感謝分享。
回復

使用道具 舉報

9#
ID:82765 發表于 2018-1-15 12:21 | 只看該作者

呼叫管理員,為什么下載后是亂碼呢

回復

使用道具 舉報

10#
ID:1 發表于 2018-3-1 02:27 | 只看該作者
剛下載看了,不是亂碼啊
回復

使用道具 舉報

11#
ID:295854 發表于 2018-3-23 10:59 | 只看該作者
樓主你好,我畢設正好做有關基于無線的環境檢測,能發我一些相關資料嗎
回復

使用道具 舉報

12#
ID:295854 發表于 2018-3-23 11:00 | 只看該作者
我的郵箱985082400@qq.com
回復

使用道具 舉報

13#
ID:296103 發表于 2018-3-23 20:24 | 只看該作者
樓主你好,我畢設正好做有關基于無線的環境檢測,能發我一些相關資料嗎
回復

使用道具 舉報

14#
ID:296276 發表于 2018-3-24 11:19 | 只看該作者
感謝樓主分享。
回復

使用道具 舉報

15#
ID:296923 發表于 2018-3-25 20:55 | 只看該作者
學習學習 支持一下
回復

使用道具 舉報

16#
ID:209367 發表于 2018-3-26 09:36 | 只看該作者
謝謝樓主分享
回復

使用道具 舉報

17#
ID:209367 發表于 2018-3-26 10:09 | 只看該作者
謝謝樓主分享
回復

使用道具 舉報

18#
ID:303042 發表于 2018-4-7 10:51 | 只看該作者
可以發一下鏈接嗎?
回復

使用道具 舉報

19#
ID:318352 發表于 2018-4-28 14:12 | 只看該作者
好資源
回復

使用道具 舉報

20#
ID:337022 發表于 2018-5-24 08:40 | 只看該作者
學習學習,感謝樓主分享!
回復

使用道具 舉報

21#
ID:79874 發表于 2018-6-22 11:36 | 只看該作者

我做了1個基于51單片機的溫度檢測器,通過串口和A7模塊相連。但是有一個問題A7模塊要求串口波特率必須為115200,我用的是STC89c52芯片普中的板在串口調試時為什么只有4800才正常發送數據?這樣就和A7通信不了了 ,能不傳一份51的我
回復

使用道具 舉報

22#
ID:336340 發表于 2018-7-9 14:58 | 只看該作者
沒有用
回復

使用道具 舉報

23#
ID:380389 發表于 2018-7-29 10:10 來自手機 | 只看該作者
這是好東西啊,趕緊收藏
回復

使用道具 舉報

24#
ID:335688 發表于 2018-12-22 22:15 | 只看該作者

感謝樓主分享。
回復

使用道具 舉報

25#
ID:640249 發表于 2019-11-12 10:37 | 只看該作者
資料很全面,程序很好用,感謝樓主
回復

使用道具 舉報

26#
ID:640249 發表于 2019-11-12 11:44 來自手機 | 只看該作者
樓主你好
回復

使用道具 舉報

27#
ID:640249 發表于 2019-11-12 11:53 來自手機 | 只看該作者
怎么看下載的
回復

使用道具 舉報

28#
ID:642152 發表于 2019-11-16 10:08 | 只看該作者
我的資料里面沒有GPRS網絡通訊。。。
回復

使用道具 舉報

29#
ID:632095 發表于 2019-11-29 17:24 來自手機 | 只看該作者
corey666 發表于 2017-4-25 18:54
通訊過程的調試,連接成功視頻可以私發

可以分享下嗎
回復

使用道具 舉報

30#
ID:350104 發表于 2019-11-29 21:45 | 只看該作者
資料很全 不錯 支持了
回復

使用道具 舉報

31#
ID:620993 發表于 2019-11-30 10:13 | 只看該作者
很好的學習資料,很全面,感謝樓主
回復

使用道具 舉報

32#
ID:7175 發表于 2020-5-17 18:17 | 只看該作者
我的資料里面沒有GPRS網絡通訊
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 午夜精品 | 免费观看日韩精品 | 精品久久久久久久久久久久 | 九九久久免费视频 | 一区二区三区不卡视频 | 九九九视频在线观看 | 国产在线高清 | 中文字幕av网 | 久久精品99 | a看片| 天啪 | 国产在线精品一区 | 夜夜爽99久久国产综合精品女不卡 | 国产精品免费播放 | 狠狠狠色丁香婷婷综合久久五月 | 日本一区高清 | 91国内在线观看 | 欧美日韩成人一区二区 | 亚洲精品欧美精品 | 亚洲精品视频观看 | 日韩高清成人 | 国产99久久精品一区二区永久免费 | 精品视频久久久久久 | 日韩综合网 | 亚洲精品久久久蜜桃网站 | 国产精品视频网 | 成人免费视频在线观看 | 国产成人99久久亚洲综合精品 | 国产一区 | 成人一区在线观看 | 91超碰在线 | 久久人操 | 亚洲成网 | 亚洲精品一区中文字幕乱码 | 国产成人精品高清久久 | 日本中文在线 | 四虎成人精品永久免费av九九 | 一区二区视频在线 | 国产成人精品久久 | 国产精品美女一区二区 | 国产精品99久久久久久www |