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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2031|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

實現(xiàn)將車位實時數(shù)據(jù)上傳到云平臺(通過BC95,平臺是云透傳)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:373095 發(fā)表于 2020-4-8 17:05 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

  1. #include <reg52.h>                 //調(diào)用單片機頭文件
  2. #define uchar unsigned char  //無符號字符型 宏定義        變量范圍0~255
  3. #define uint  unsigned int         //無符號整型 宏定義        變量范圍0~65535
  4. sbit beep = P1^4; //蜂鳴器IO口定義
  5. sbit hw_jin = P2^1;   //紅外傳感器IO口定義
  6. sbit hw_chu = P2^0;   //紅外傳感器IO口定義
  7. uchar menu_1;              //設(shè)置參數(shù)用
  8. int i,b,p,j,x;
  9. char xdata jssjs1[10];
  10. char receive_ser;     //串口接收到的數(shù)據(jù)
  11. char code str1[]="AT\r\n";          // 聯(lián)機指令,返回"OK" ,4位
  12. char code str2[]="AT+NSOCR=DGRAM,17,10000,1\r\n";   // 創(chuàng)建UDP通信 Socket,27位         10000為本地端口號
  13. char code str3[]="AT+NSOST=0,115.29.240.46,6000,29,65703d3634344b57504c4d54345739453237352670773d313233343536\r\n";    //發(fā)送注冊碼,93位      
  14. char code str4[]="AT+NSORF=0,10\r\n";  // 將發(fā)送注冊碼之后云平臺返回的數(shù)值OK從NB101模塊中讀取出來,清空NB101模塊 ,15位  
  15. char code str5[]="AT+NSOST=0,115.29.240.46,6000,6,";    //發(fā)送數(shù)據(jù)到云平臺,32位
  16. char str6[15];
  17. void yzsj();
  18. void Init_Serialport1(); //初始化串口程序
  19. void lianjie();   //發(fā)送聯(lián)機指令
  20. void udp();  //發(fā)送創(chuàng)建udp通道
  21. void zcm();  //發(fā)送注冊碼
  22. void fadqzl();   //發(fā)送讀取云平臺返回數(shù)據(jù)指令(從NB101中)
  23. void Delay1ms(unsigned int y);        //延時程序,y為1000時延時1S
  24. void cwsj();
  25. uint num;  //計的數(shù)
  26. uint jin,chu;
  27. uchar set_num = 99; // 設(shè)置總的車位         
  28. sbit red   = P1^3;           //紅色發(fā)光二極管定義
  29. sbit green = P1^5;           //綠色發(fā)光二極管定義
  30. /***********************1ms延時函數(shù)*****************************/
  31. void delay_1ms(uint q)
  32. {
  33.         uint i,j;
  34.         for(i=0;i<q;i++)
  35.                 for(j=0;j<120;j++);
  36. }
  37. sbit rs=P1^0;         //寄存器選擇信號 H:數(shù)據(jù)寄存器          L:指令寄存器
  38. sbit rw=P1^1;         //寄存器選擇信號 H:數(shù)據(jù)寄存器          L:指令寄存器
  39. sbit e =P1^2;         //片選信號   下降沿觸發(fā)
  40. /********************************************************************
  41. * 名稱 : delay_uint()
  42. * 功能 : 小延時。
  43. * 輸入 : 無
  44. * 輸出 : 無
  45. ***********************************************************************/
  46. void delay_uint(uint q)
  47. {
  48.         while(q--);
  49. }
  50. /********************************************************************
  51. * 名稱 : write_com(uchar com)
  52. * 功能 : 1602命令函數(shù)
  53. * 輸入 : 輸入的命令值
  54. * 輸出 : 無
  55. ***********************************************************************/
  56. void write_com(uchar com)
  57. {
  58.         e=0;
  59.         rs=0;
  60.         rw=0;
  61.         P0=com;
  62.         delay_uint(25);
  63.         e=1;
  64.         delay_uint(100);
  65.         e=0;
  66. }
  67. /********************************************************************
  68. * 名稱 : write_data(uchar dat)
  69. * 功能 : 1602寫數(shù)據(jù)函數(shù)
  70. * 輸入 : 需要寫入1602的數(shù)據(jù)
  71. * 輸出 : 無
  72. ***********************************************************************/
  73. void write_data(uchar dat)
  74. {
  75.         e=0;
  76.         rs=1;
  77.         rw=0;
  78.         P0=dat;
  79.         delay_uint(25);
  80.         e=1;
  81.         delay_uint(100);
  82.         e=0;        
  83. }
  84. /***********************lcd1602上顯示兩位十進制數(shù)************************/
  85. void write_sfm4(uchar hang,uchar add,uint date)
  86. {
  87.         if(hang==1)   
  88.                 write_com(0x80+add);
  89.         else
  90.                 write_com(0x80+0x40+add);
  91.         write_data(0x30+date/1000%10);
  92.         write_data(0x30+date/100%10);
  93.         write_data(0x30+date/10%10);
  94.         write_data(0x30+date%10);        
  95. }
  96. /***********************lcd1602上顯示這字符函數(shù)************************/
  97. void write_string(uchar hang,uchar add,uchar *p)
  98. {
  99.         if(hang == 1)   
  100.                 write_com(0x80+add);
  101.         else
  102.                 write_com(0x80+0x40+add);
  103.         while(1)                                                                                                                 
  104.         {
  105.                 if(*p == '\0')  break;
  106.                 write_data(*p);
  107.                 p++;
  108.         }        
  109. }
  110. /***********************lcd1602初始化設(shè)置************************/
  111. void init_1602()        //lcd1602初始化
  112. {
  113.         write_com(0x38);        
  114.         write_com(0x0c);
  115.         write_com(0x06);
  116.         delay_uint(1000);
  117.         write_string(1,0,"   SY:0000       ");        
  118.         write_string(2,0," J:0000  C:0000   ");        
  119.         write_sfm4(2,2,jin);  //顯示進車數(shù)
  120.         write_sfm4(1,8,num);  //顯示剩余車位
  121.         write_sfm4(2,12,chu);  //顯示出車數(shù)
  122. }
  123. /********************獨立按鍵程序*****************/
  124. uchar key_can;         //按鍵值
  125. void key()             //獨立按鍵程序
  126. {
  127.         static uchar key_new;
  128.         key_can = 20;               //按鍵值還原
  129.         P3 |= 0xf0;
  130.         if((P3 & 0xf0) != 0xf0)                //按鍵按下
  131.         {
  132.                 delay_1ms(1);                     //按鍵消抖動
  133.                 if(((P3 & 0xf0) != 0xf0) && (key_new == 1))
  134.                 {                                                //確認是按鍵按下
  135.                         key_new = 0;
  136.                         switch(P3 & 0xf0)
  137.                         {
  138.                                 case 0xd0: key_can = 3; break;           //得到k1鍵值
  139.                                 case 0xb0: key_can = 2; break;           //得到K2鍵值
  140.                                 case 0x70: key_can = 1; break;           //得到k3鍵值
  141.                         }
  142.                 }                        
  143.         }
  144.         else
  145.                 key_new = 1;        
  146. }
  147. /****************按鍵處理數(shù)碼管顯示函數(shù)***************/
  148. void key_with()
  149. {
  150.         if(key_can == 1)        //設(shè)置鍵
  151.         {
  152.                 menu_1 ++;
  153.                 if(menu_1 >= 2)
  154.                 {
  155.                         menu_1 = 0;
  156.                         init_1602();  //lcd1602初始化        
  157.                 }
  158.                 if(menu_1 == 1)                                 //初始化顯示
  159.                 {
  160.                         write_string(1,0,"     SET Z       ");
  161.                         write_string(2,0,"                 ");
  162.                 }
  163.         }
  164.         if(menu_1 == 0)                           //倒計時器按鍵操作開始 暫停
  165.         {                 
  166.                 if(key_can == 2)  //清零
  167.                 {
  168.                         num = 0;
  169.                         jin = 0;
  170.                         chu = 0;
  171.                         num  = set_num - jin + chu;          //計算剩余車位
  172.                         write_sfm4(2,2,jin);  //顯示進車數(shù)
  173.                         write_sfm4(1,8,num);  //顯示剩余車數(shù)
  174.                         write_sfm4(2,12,chu);  //顯示出車數(shù)
  175.                 }
  176.         }
  177.         if(menu_1 == 1)                                //設(shè)置倒計時器開始數(shù)
  178.         {
  179.                 if(key_can == 2)
  180.                 {
  181.                         set_num ++ ;                // 設(shè)置數(shù)加
  182.                         if(set_num > 99)
  183.                                 set_num = 99;        //最大加到99        
  184.                 }
  185.                 if(key_can == 3)
  186.                 {
  187.                         set_num -- ;                // 設(shè)置數(shù)減
  188.                         if(set_num <= 1)
  189.                                 set_num = 1;        //最大減到1
  190.                 }
  191.                 write_sfm4(2,5,set_num);  //顯示設(shè)置車位數(shù)
  192.                 write_com(0x80+0x40+7);             //將光標移動到秒個位
  193.                 write_com(0x0f);                    //顯示光標并且閃爍        
  194.         }
  195.         beep = 0;          //打開蜂鳴器
  196.         delay_1ms(50);
  197.         beep = 1;          //關(guān)閉蜂鳴器
  198.         
  199. }  
  200. /******************紅外計數(shù)**********************/           
  201. void hw_jin_dis()        //紅外計數(shù)
  202. {
  203.         if(hw_jin == 0)                //計數(shù)
  204.         {
  205.                 delay_1ms(1);                     //消抖動
  206.                 if(hw_jin == 0)
  207.                 {                                                //確認
  208.                         jin ++;
  209.                         if(jin >= 9999)
  210.                                 jin = 9999;
  211.                         num  = set_num - jin + chu;          //計算剩余車位
  212.                         write_sfm4(2,3,jin);  //顯示進車數(shù)
  213.                         write_sfm4(1,7,num);  //顯示剩余車位
  214.                         if(num == 0)                  //為0時報警
  215.                         {
  216.                                 beep = 0;
  217.                                 delay_1ms(200);
  218.                                 beep = 1;                                                
  219.                                 delay_1ms(200);
  220.                                 beep = 0;
  221.                                 delay_1ms(200);
  222.                                 beep = 1;                                                
  223.                                 delay_1ms(200);
  224.                                 beep = 0;
  225.                                 delay_1ms(200);
  226.                                 beep = 1;                                                
  227.                         }
  228.                 }                        
  229.         }
  230. }
  231. /******************紅外計數(shù)**********************/           
  232. void hw_chu_dis()        //紅外計數(shù)
  233. {
  234.         if(hw_chu == 0)                //計數(shù)
  235.         {
  236.                 delay_1ms(1);                     //消抖動
  237.                 if(hw_chu == 0)
  238.                 {                                                //確認
  239.                         chu ++;
  240.                         if(chu >= 9999)
  241.                                 chu = 9999;
  242.                         num  = set_num - jin + chu;          //計算剩余車位
  243.                         if(num>=99)
  244.                                 num=99;
  245.                         write_sfm4(2,11,chu);  //顯示出車數(shù)
  246.                         write_sfm4(1,7,num);  //顯示剩余車位
  247.                 }
  248.         }
  249. }
  250. uchar nnum;
  251. /******************主程序**********************/           
  252. void main()
  253. {
  254.         init_1602();        //lcd1602初始化
  255.         Init_Serialport1();        //串口初始化
  256.          x=1;
  257.          if(x==1) lianjie();   //發(fā)送聯(lián)機指令
  258.          if(x==2) udp();  //發(fā)送創(chuàng)建udp通道
  259.          if(x==3) zcm();  //發(fā)送注冊碼
  260.         while(1)
  261.         {
  262.                 key();                           //按鍵掃描函數(shù)
  263.                 if(key_can < 10)        key_with();    //按鍵執(zhí)行函數(shù)
  264.             hw_jin_dis();        //紅外計數(shù)        
  265.                 hw_chu_dis();        //紅外計數(shù)        
  266.                 if(num == 0)
  267.                 {
  268.                         red  = 0;  green = 1; //車位為0 紅燈亮
  269.                 }else
  270.                 {
  271.                         red  = 1;  green = 0; //綠燈亮
  272.                 }
  273.                     str6[0]='5';
  274.                         str6[1]='3';        //存儲 S
  275.                         str6[2]='5';
  276.                         str6[3]='9';        //存儲 Y
  277.                         str6[4]='3';        
  278.                         str6[5]='a';        //存儲 :

  279.                         str6[6]='3';
  280.                         str6[7]='0'+num/100;
  281.                         str6[8]='3';
  282.                         str6[9]='0'+num/10;
  283.                         str6[10]='3';
  284.                         str6[11]='0'+num%10;                        
  285.                         str6[12]='\r';        //存儲\r
  286.                         str6[13]='\n';        //存儲\n
  287.                                  
  288.            b=0;
  289.            p=0;
  290.            if(x==5) yzsj();           //發(fā)送數(shù)據(jù)
  291.            if(x==6) cwsj();    //發(fā)送車位數(shù)據(jù)
  292.            Init_Serialport1();
  293.            while(p!=0);                                                               
  294.                 delay_1ms(100);

  295.         }
  296. }
  297. void Init_Serialport1()  //初始化串口1(Serial port)
  298. {
  299. TMOD=0x20;
  300. PCON=0X00;                        //波特率不加倍
  301. TH1=0xFD;
  302. TL1=0xFD;
  303. TR1=1;
  304. SCON=0x50;
  305. EA=1;
  306. ES=1;
  307. }

  308. void Serial_port1() interrupt 4           //串口中斷
  309. {           
  310.    if(RI==1)
  311.     {
  312.                 RI=0;
  313.                 receive_ser=SBUF;
  314.                                 jssjs1[b]=receive_ser;
  315.                                 b++;
  316.                                 if(b>=6)
  317.                                         {
  318.                                                 b=0;
  319.                                                  p=1;
  320.                                         }
  321.         }        
  322. }
  323. void lianjie()   //發(fā)送聯(lián)機指令
  324. {
  325.    for(j=0;j<=3;j++)
  326.         {
  327.           SBUF=str1[j];
  328.              while(!TI);                                 //等待發(fā)送數(shù)據(jù)完成
  329.           TI=0;
  330.         }
  331.         x=2;                                 
  332.         delay_1ms(2000);
  333. }
  334. void udp()  //發(fā)送創(chuàng)建udp通道
  335. {
  336.          for(j=0;j<=26;j++)
  337.         {
  338.         SBUF=str2[j];
  339.         while(!TI);                                 //等待發(fā)送數(shù)據(jù)完成
  340.         TI=0;                 
  341.         }
  342.         x=3;                 
  343.          delay_1ms(2000);
  344. }
  345. void zcm()  //發(fā)送注冊碼
  346. {
  347.    for(j=0;j<=92;j++)
  348.         {
  349.         SBUF=str3[j];
  350.         while(!TI);                                 //等待發(fā)送數(shù)據(jù)完成
  351.         TI=0;                                 
  352.         }
  353.         x=5;
  354.         delay_1ms(2000);
  355. }
  356. void yzsj()        //發(fā)送數(shù)據(jù)“hello”到云平臺
  357. {
  358.    for(j=0;j<=31;j++)
  359.         {
  360.         SBUF=str5[j];
  361.         while(!TI);                                 //等待發(fā)送數(shù)據(jù)完成
  362.         TI=0;
  363.         }
  364.         x=6;
  365. }
  366. void cwsj()   //發(fā)送車位數(shù)據(jù)
  367. {
  368.    for(j=0;j<=13;j++)
  369.         {
  370.         SBUF=str6[j];
  371.         while(!TI);                                 //等待發(fā)送數(shù)據(jù)完成
  372.         TI=0;
  373.         }
  374.         x=5;
  375. }
復(fù)制代碼


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

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产成人高清成人av片在线看 | 亚洲综合一区二区三区 | 毛片一级片 | 国产成人精品一区二区三区在线观看 | 91久久国产综合久久 | 国产美女在线观看 | 免费在线观看一区二区 | 成人av播放| 91精品久久久久久久久中文字幕 | 久热爱 | 成人亚洲性情网站www在线观看 | 欧美一区二区三区免费在线观看 | 久久久免费观看视频 | 精品在线观看一区 | 99热这里 | 奇米影视首页 | 一区二区三区视频在线观看 | 91九色视频 | 91视频免费观看 | aa级毛片毛片免费观看久 | 一级毛片视频 | 免费三级av | 一区二区亚洲 | 亚洲欧美日韩电影 | 免费在线色 | 精品欧美一区二区中文字幕视频 | 国产有码 | 中文字幕一区二区三区四区五区 | 国产激情视频 | 亚洲一区二区三区在线视频 | 亚洲欧美日韩电影 | 亚洲经典一区 | 欧美亚洲一区二区三区 | 在线看片网站 | 国产欧美精品一区二区 | 中文在线а√在线8 | 亚洲一二三区在线观看 | 色综合久久伊人 | 4hu最新网址 | 奇米av| 一区二区三区视频 |