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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2542|回復(fù): 3
收起左側(cè)

關(guān)于51單片機(jī)中main如何調(diào)用子程序問(wèn)題

[復(fù)制鏈接]
ID:279295 發(fā)表于 2020-5-13 21:43 | 顯示全部樓層 |閱讀模式
自己寫的一個(gè)利用GSM模塊上傳數(shù)據(jù)到服務(wù)器,發(fā)送短信的程序
上傳數(shù)據(jù)到服務(wù)器部分不會(huì)寫主函數(shù)了,就是如何在main中調(diào)用void GPRSInit();void  send_GPRSdata();這兩部分
  1. #include "reg52.h"
  2. #include "type.h"
  3. #include <string.h>
  4. #include <stdio.h>
  5. #define DEVID        "" //設(shè)備id
  6. #define APIKEY        "" //設(shè)備apikey


  7. bit flag;
  8. uchar model=0;  //模式

  9. uchar temp1H=35; //上限值
  10. uchar temp2H=35; //上限值
  11. uchar temp3H=35; //上限值
  12. uchar hum1H=70; //上限值
  13. uchar hum2H=70; //上限值
  14. uchar hum3H=70; //上限值
  15. uchar temp_L=10;
  16. uchar  date[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
  17. unsigned char temp1=0,temp2=0,temp3=0,hum1=0,hum2=0,hum3=0;
  18. #define SEND_MESSA_TO_YOUR "at+cmgs=\"1840**2397\"\r\n"    //填入你手上的手機(jī)號(hào)碼 不是板子的

  19. #include "LCD1602.H"
  20. sbit set=P1^6;
  21. sbit add=P3^5;
  22. sbit min=P3^4;
  23. sbit beep=P3^6;
  24. sbit led1=P1^2;
  25. sbit led2=P1^1;

  26. /***********模擬開(kāi)關(guān)*********************/
  27. sbit CS_4052=P1^0;
  28. sbit B_4052=P1^1;
  29. sbit A_4052=P1^2;
  30. uchar fen=0; //定時(shí)發(fā)送短信計(jì)時(shí)
  31. bit sendFlag=0; //發(fā)送短信標(biāo)志
  32. void delay1ms(unsigned int ms)//延時(shí)1毫秒(不夠精確的)
  33. {unsigned int i,j;
  34.    for(i=0;i<ms;i++)
  35.     for(j=0;j<100;j++);
  36. }
  37. void Uart_Send(uchar dat)         //發(fā)送一字節(jié)   
  38. {
  39.   SBUF=dat;
  40.   while(!TI);
  41.   TI=0;
  42. }
  43. //發(fā)送一串字符到串口
  44. void Uart_Sends(char* data_at)  
  45. {
  46.         unsigned char cnt=0;
  47.         while(*(data_at+cnt))        //判斷一串?dāng)?shù)據(jù)是否結(jié)束
  48.         {
  49.                 Uart_Send(*(data_at+cnt));
  50.                 cnt++;
  51.         }
  52.                
  53. }


  54. void select(uchar num)               
  55. {
  56.   if(num==1)         //上位機(jī)串口使能
  57.     {
  58.          CS_4052=0;
  59.          B_4052=0;
  60.          A_4052=0;
  61.         }
  62. else  if(num==2)         //CC2530串口使能
  63.     {
  64.          CS_4052=0;
  65.          B_4052=0;
  66.          A_4052=1;
  67.         }

  68. }
  69. //發(fā)送短信函數(shù)
  70. void Send_SMS(void)
  71. {
  72.         uchar yy=1;
  73.         
  74.   select(1);        //GSM模塊串口使能
  75.         delay1ms(100);
  76.         Uart_Sends("AT+CMGF=1\r");//設(shè)置中文方式發(fā)送
  77.         delay1ms(800);
  78.         delay1ms(1000);
  79.         Uart_Sends(SEND_MESSA_TO_YOUR);                                                                                                                                                                  
  80.         delay1ms(1000);        
  81. switch (yy)                                                                                         
  82. {                                                                                            
  83.    
  84.   case 1 : Uart_Sends("wendu1=");                                                               
  85.                    Uart_Send(temp1/10+0x30);
  86.                    Uart_Send(temp1%10+0x30);
  87.                    Uart_Sends(",wendu2=");
  88.                    Uart_Send(temp2/10+0x30);
  89.                    Uart_Send(temp2%10+0x30);
  90.                    Uart_Sends(",wendu3=");
  91.                    Uart_Send(temp3/10+0x30);
  92.                    Uart_Send(temp3%10+0x30);
  93.                    Uart_Sends("\r\nshidu1=");     
  94.                    Uart_Send(hum1/10+0x30);
  95.                    Uart_Send(hum1%10+0x30);
  96.        Uart_Sends(",shidu2=");
  97.                    Uart_Send(hum2/10+0x30);
  98.                    Uart_Send(hum2%10+0x30);
  99.        Uart_Sends(",shidu3=");
  100.                    Uart_Send(hum3/10+0x30);
  101.                    Uart_Send(hum3%10+0x30);
  102.                    Uart_Sends("\r\n");
  103.                          if(temp1>temp1H)
  104.                          {
  105.                           Uart_Sends("wendu1 Warning!!!\r\n");
  106.                          }
  107.                          if(temp2>temp2H)
  108.                          {
  109.                           Uart_Sends("wendu2 Warning!!!\r\n");
  110.                          }
  111.                          if(temp3>temp3H)
  112.                          {
  113.                           Uart_Sends("wendu3 Warning!!!\r\n");
  114.                          }
  115.                          if(hum1>hum1H)
  116.                          {
  117.                           Uart_Sends("hum1 Warning!!!\r\n");
  118.                          }
  119.                          if(hum2>hum2H)
  120.                          {
  121.                           Uart_Sends("hum2 Warning!!!\r\n");
  122.                          }
  123.                          if(hum3>hum3H)
  124.                          {
  125.                           Uart_Sends("hum3 Warning!!!\r\n");
  126.                          }                        
  127.                         
  128.                  
  129.                     break;        //煙霧報(bào)警
  130.   
  131. }                                                               
  132.                                                          
  133.    Uart_Send(0x1a);//以0x1a來(lái)結(jié)束,表示內(nèi)容結(jié)束,發(fā)送短信                        
  134.                                                                                                               
  135. }


  136.   void GPRSInit()
  137.    {
  138.        select(1); //打開(kāi)GSM串口
  139.               Uart_Sends("AT+CIPCLOSE=1\r\n");
  140.              delay1ms(1000);        
  141.              Uart_Sends("AT+CGCLASS=\"B\"\r\n");        
  142.              delay1ms(1000);
  143.              Uart_Sends("AT+CGDCONT=1,\"IP\",\"CMNET\"\r\n");        
  144.              delay1ms(1000);               
  145.              Uart_Sends("AT+CGATT=1\r\n");
  146.              delay1ms(1000);
  147.              Uart_Sends("AT+CIPCSGP=1,\"CMNET\"\r\n");        
  148.              delay1ms(1000);
  149.              Uart_Sends("AT+CLPORT=\"TCP\",\"2000\"\r\n");        //發(fā)送指令指定本地端口
  150.              delay1ms(1000);
  151.              Uart_Sends("AT+CIPSTART=\"TCP\",\"183.230.40.33\",\"80\"\r\n");
  152.              delay1ms(3000);
  153.          
  154.    
  155.    }
  156. void send_GPRSdata()
  157.    {
  158.                  char xdata text[28];
  159.      char xdata buf1[60];
  160.                  select(1); //打開(kāi)GPRS串口
  161.                  //ES=0; //關(guān)閉串口接收中斷
  162.                  Uart_Sends("AT+CIPSEND\r\n");
  163.           delay1ms(1000);
  164.                 memset(buf1, 0, sizeof(buf1));
  165.                 sprintf(buf1,"POST /devices/%s/datapoints?type=3 HTTP/1.1\r\n",DEVID);
  166.                 Uart_Sends(buf1);//向服務(wù)器發(fā)送數(shù)據(jù)
  167.                 delay1ms(1000);
  168.                 memset(buf1, 0, sizeof(buf1));//初始化
  169.                 sprintf(buf1,"api-key:%s\r\n",APIKEY);
  170.                 Uart_Sends(buf1);//向服務(wù)器發(fā)送數(shù)據(jù)
  171.                 delay1ms(1000);
  172.                 Uart_Sends("Host:api.heclouds點(diǎn)com\r\n");
  173.           delay1ms(1000);

  174.                 memset(text, 0, sizeof(text));
  175.           memset(buf1, 0, sizeof(buf1));
  176.           strcpy(buf1, "{");
  177.           memset(text, 0, sizeof(text));
  178.                 sprintf(text, "\"Temperature1\":%d,",temp1);
  179.           strcat(buf1, text);
  180.     memset(text, 0, sizeof(text));
  181.           sprintf(text, "\"Humidity1\":%d,",hum1);
  182.                 strcat(buf1, text);
  183.                 memset(text, 0, sizeof(text));
  184.                 sprintf(text, "\"Temperature2\":%d,",temp2);
  185.           strcat(buf1, text);
  186.     memset(text, 0, sizeof(text));
  187.           sprintf(text, "\"Humidity2\":%d,",hum2);
  188.                 strcat(buf1, text);
  189.                 memset(text, 0, sizeof(text));
  190.                 sprintf(text, "\"Temperature3\":%d,",temp3);
  191.           strcat(buf1, text);
  192.     memset(text, 0, sizeof(text));
  193.           sprintf(text, "\"Humidity3\":%d",hum3);
  194.           strcat(buf1, text);//字符串buf1尾加text的內(nèi)容
  195.           strcat(buf1, "}");
  196.                 memset(text, 0, sizeof(text));
  197.                 sprintf(text,"Content-Length:%d\r\n",strlen(buf1));
  198.                 Uart_Sends(text);
  199.                 delay1ms(1000);
  200.                 Uart_Sends("\r\n");
  201.           delay1ms(1000);
  202.                 Uart_Sends(buf1);
  203.           delay1ms(100);
  204.                 Uart_Send(0x1a);
  205.           delay1ms(1000);
  206.         }
  207.                  
  208.                  
  209.                  

  210. void key()
  211.   {
  212.                 uchar i=0;
  213.                
  214.    if(!set) //檢測(cè)設(shè)置按鍵
  215.      {
  216.           while(!set);
  217.           model++;
  218.          if(model==7)
  219.           {
  220.              model=0;   
  221.           }
  222.          if(model==1)//設(shè)置模式顯示
  223.          {
  224.                   WRITE_LCD1602_COM(0x80);
  225.             for(i=0;i<16;i++)
  226.                         WRITE_LCD1602_DAT(DIS_TAB3[i]);
  227.                         WRITE_LCD1602_COM(0x80+0x40);
  228.                         for(i=0;i<16;i++)
  229.                         WRITE_LCD1602_DAT(DIS_TAB4[i]);
  230.                         WRITE_LCD1602_COM(0x80+0x40+9);
  231.          }
  232. else if(model==0)//正常模式顯示
  233.   {   
  234.                   WRITE_LCD1602_COM(0x80);
  235.       for(i=0;i<16;i++)
  236.                         WRITE_LCD1602_DAT(DIS_TAB1[i]);
  237.                         WRITE_LCD1602_COM(0x80+0x40);
  238.                         for(i=0;i<16;i++)
  239.                         WRITE_LCD1602_DAT(DIS_TAB2[i]);
  240.                         WRITE_LCD1602_COM(0x80+0x40+9);        
  241.         }
  242.          
  243.         
  244.            
  245.          }
  246. else  if(!add)
  247.     {
  248.          while(!add);
  249.          switch(model)
  250.            {
  251.      case 1: if(temp1H<90) temp1H++;        break;
  252.            case 2: if(temp2H<90) temp2H++;        break;
  253.            case 3: if(temp3H<90) temp3H++;       break;
  254.                  case 4: if(hum1H<90)  hum1H++;        break;
  255.                  case 5: if(hum2H<90)  hum2H++;        break;
  256.                  case 6: if(hum3H<90)  hum3H++;        break;
  257.                  default:break;
  258.            }

  259.         
  260.         }
  261. else   if(!min)
  262.     {
  263.          while(!min);
  264.          switch(model)
  265.            {
  266.            case 1: if(temp1H>0) temp1H--;        break;
  267.            case 2: if(temp2H>0) temp2H--;        break;
  268.            case 3: if(temp3H>0) temp3H--;        break;
  269.                  case 4: if(hum1H>0)  hum1H--;        break;
  270.                  case 5: if(hum2H>0)  hum2H--;        break;
  271.                  case 6: if(hum3H>0)  hum3H--;        break;
  272.                  default:break;
  273.            }

  274.         
  275.         }
  276.   
  277.   }
  278.      void beeps()
  279.           {
  280.           static uchar count;
  281.           count++;
  282.           if(count<20)
  283.           beep=0;
  284. else if(count<40)           
  285.           beep=1;
  286.           else
  287.           count=0;
  288.          
  289.           }

  290.          void control()//報(bào)警檢測(cè)控制
  291.           {
  292.      static uchar flagsend=0;
  293.                         
  294.                   if((temp1>temp1H)||(temp2>temp2H)||(temp3>temp3H)||
  295.                                 (hum1>hum1H)||(hum2>hum2H)||(hum3>hum3H))         //溫度控制
  296.                    {
  297.                      beeps();          // 蜂鳴器報(bào)警
  298.                           if(flagsend==0)        
  299.                                 {        
  300.                        flagsend=1;                        
  301.                            Send_SMS();
  302.                                 }
  303.                    }
  304.             else  
  305.                    {
  306.                                 flagsend=0;         
  307.                     beep=1;// 關(guān)閉蜂鳴器報(bào)警
  308.                    }

  309.           }


  310.                
  311.    void rec_cc2530data()
  312.    {
  313.             select(2);          //選通 cc2530 串口
  314.          ES=1; //串口接收中斷
  315.         if(date[0]==0x55)
  316.         {        
  317.              date[0]=0;
  318.                  if((date[1]==1)&&(date[2]+date[3]==date[4]))          //第一路        數(shù)據(jù)
  319.                  {
  320.                   date[1]=0;
  321.                   temp1=date[2];
  322.                   hum1=date[3];
  323.                  }
  324.                   if((date[1]==2)&&(date[2]+date[3]==date[4]))  //第二路
  325.                  {
  326.                  date[1]=0;
  327.                   temp2=date[2];
  328.                   hum2=date[3];
  329.                  }
  330.                   if((date[1]==3)&&(date[2]+date[3]==date[4]))   //第三路
  331.                  {
  332.                   date[1]=0;
  333.                   temp3=date[2];
  334.                   hum3=date[3];
  335.                  }
  336.          
  337.         }
  338.    
  339.    }

  340.                   


  341.          void Timer0Init(void)                //50毫秒@11.0592MHz
  342. {
  343.          
  344.         TMOD &= 0xF0;                //設(shè)置定時(shí)器模式
  345.         TMOD |= 0x01;                //設(shè)置定時(shí)器模式
  346.         TL0 = 0x00;                //設(shè)置定時(shí)初值
  347.         TH0 = 0x4C;                //設(shè)置定時(shí)初值
  348.         TF0 = 0;                //清除TF0標(biāo)志
  349.         TR0 = 1;                //定時(shí)器0開(kāi)始計(jì)時(shí)
  350.         ET0=1;
  351. }

  352. void main()
  353. {

  354.   
  355.         init_1602();
  356.         TMOD=0x20;         // T1定時(shí)方式2
  357.         SCON=0x40;//串行工作 方式1
  358.         PCON=0x00; //不加倍
  359.         TH1=TL1=0xfd; //定時(shí)器1賦初值  保證波特率9600
  360.         TR1=1;                  //開(kāi)定時(shí)器1
  361.         REN=1;                  //允許串口接收
  362.         ES=1;                  //打開(kāi)串口中斷
  363.         EA=1;                  //開(kāi)總中斷

  364.         Timer0Init();
  365.         //GPRSInit();
  366.         while(1)
  367.         {
  368.          
  369.                      
  370.              control(); //控制
  371.              key();   //按鍵功能

  372.             
  373.          GPRSInit();
  374.          send_GPRSdata();
  375.                  
  376.          
  377.                   
  378.                   
  379.                
  380.                   if(sendFlag==0)
  381.                         {
  382.                         sendFlag=1; //代表已經(jīng)發(fā)過(guò)一次,不在發(fā)了
  383.                         Send_SMS(); //發(fā)送短信

  384.                         }
  385.                   
  386.                           rec_cc2530data();
  387.                           delay1ms(50);
  388.                     display();
  389.                           delay1ms(50);

  390.         }

  391. }



  392.    void serial()interrupt 4                //串口中斷服務(wù)函數(shù)
  393.   {
  394.    static uchar j;
  395.    
  396.    if(!RI);
  397.    RI=0;                    //清楚接收完畢標(biāo)志
  398.    date[j]=SBUF;
  399.    if(date[0]==0x55)  //判斷接收到的第一位為傳感器所發(fā)數(shù)據(jù)
  400.       j++;
  401.   else
  402.       j=0;


  403.    if(j==5)                   //接收傳感器所發(fā)數(shù)據(jù)字節(jié)
  404.      j=0;
  405.   
  406.    
  407.   }
  408. void timer0() interrupt  1 //50ms
  409. {
  410. static uchar count=0,miao=0;
  411.         
  412.   TL0 = 0x00;                //設(shè)置定時(shí)初值
  413.         TH0 = 0x4C;                //設(shè)置定時(shí)初值
  414.   count++;
  415.         if(count>20)
  416.         {
  417.                 count=0;
  418.            miao++;
  419.                 if(miao>60)
  420.                 {
  421.                         
  422.                         miao=0;
  423.                   fen++;
  424.                         if(fen>=1)
  425.                         {
  426.                           fen=0;
  427.                                 sendFlag=0;
  428.                         }
  429.                 }
  430.                
  431.         }

  432. }
復(fù)制代碼





回復(fù)

使用道具 舉報(bào)

ID:584814 發(fā)表于 2020-5-14 13:48 | 顯示全部樓層
目測(cè)都已經(jīng)寫在主函數(shù)main中了
回復(fù)

使用道具 舉報(bào)

ID:279295 發(fā)表于 2020-5-18 23:01 | 顯示全部樓層
man1234567 發(fā)表于 2020-5-14 13:48
目測(cè)都已經(jīng)寫在主函數(shù)main中了

但是GPRSInit();send_GPRSdata();這兩個(gè)沒(méi)反應(yīng)
回復(fù)

使用道具 舉報(bào)

ID:754594 發(fā)表于 2020-5-19 13:03 | 顯示全部樓層
我和問(wèn)題不一樣,但看看類似的程序,看看范例就可以了,看懂了,可以自己改
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美中文字幕一区二区三区亚洲 | 国产在线看片 | 国产精品一区二区视频 | 99久久夜色精品国产亚洲96 | 韩国精品在线 | 中文字幕第九页 | 一级黄色夫妻生活 | 久久久久久久国产精品 | 久久国产精品无码网站 | 国产日韩欧美在线 | 欧美视频在线观看 | 黄色网址av | 国产精品不卡一区 | 欧美午夜一区 | 超碰导航| 视频一区二区在线观看 | 在线视频 中文字幕 | 久草热8精品视频在线观看 午夜伦4480yy私人影院 | 国产精品美女久久久久久久久久久 | 国产电影一区二区 | 国产一区二区免费在线 | 精品国产精品三级精品av网址 | www.成人在线视频 | 成人av在线播放 | www.四虎.com | 国产精品久久久久久久久久免费看 | 久久不卡区 | 91福利网 | 亚洲精品综合 | 精品粉嫩aⅴ一区二区三区四区 | 成人在线一区二区三区 | 视频一二区 | 亚洲国产成人精品女人久久久 | 中文字幕av高清 | 精品亚洲一区二区 | 久色网 | 懂色中文一区二区在线播放 | 久久这里只有精品首页 | 久久久久久久久久久成人 | 荷兰欧美一级毛片 | 久久亚洲一区二区三区四区 |