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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

原創(chuàng) 網(wǎng)絡(luò)遠(yuǎn)程控制單片機(jī)四路繼電器開關(guān),查詢四路溫度傳感器 含上位機(jī)源碼

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
通過互聯(lián)網(wǎng)絡(luò)TCP(pc機(jī)),遠(yuǎn)程控制四路繼電器開關(guān),和查詢四路溫度DS18B20傳感器的溫度

下位機(jī)使用的是51單片機(jī)
淘寶上淘的TCP轉(zhuǎn)串口模塊,和四路繼電器模塊(底電平觸發(fā))
電路上有5個(gè)指示燈
分別為:電源指示(通電亮)  運(yùn)行指示燈(約1秒閃爍一次,表示單片機(jī)在工作)  聯(lián)網(wǎng)指示(收到心跳表示聯(lián)網(wǎng),燈亮) 數(shù)據(jù)收發(fā)指示(有數(shù)據(jù)接收發(fā)送,閃爍)
下位機(jī)可以有同樣的很多個(gè)(理論上65535個(gè)),為每個(gè)下位機(jī)編一個(gè)ID號來區(qū)分。

上位機(jī)使用C#語言編寫,附件提供源碼下載
下位機(jī)通電后自動使用TCP Socket連接上位機(jī),指示燈可以觀看狀態(tài)
上位機(jī)上可以看到所有連接的下位機(jī)
以下位機(jī)ID,選擇連接的下位機(jī),控制下位機(jī)
因?yàn)闆]有那么多的下位機(jī),所以又編了一個(gè)下位機(jī)的仿真,模仿很多下位機(jī)連接上位機(jī)

試驗(yàn)己成功!

代碼有不合理的地方,謝謝大家糾正

上圖










定義數(shù)據(jù)幀格式

      
        數(shù)據(jù)幀:一個(gè)幀由固定16個(gè)字節(jié)組成
    字節(jié):一個(gè)字節(jié)由8位二進(jìn)制組成,取值范圍0-255
    1、規(guī)定:幀頭1個(gè)字節(jié),定值,二進(jìn)制11111110,十進(jìn)制 254,十六進(jìn)制FE
    2、規(guī)定:幀尾1個(gè)字節(jié),定值,二進(jìn)制11111111,十進(jìn)制 255,十六進(jìn)制FF
    3、規(guī)定:設(shè)備ID_11個(gè)字節(jié),取值范圍0-255
    4、規(guī)定:設(shè)備ID_21個(gè)字節(jié),取值范圍0-255
    5、規(guī)定:控制位固定4個(gè)字節(jié)
    6、規(guī)定:數(shù)據(jù)位固定8個(gè)字節(jié)
   
   
   
服務(wù)端程序框圖 停止服務(wù)


一、定義設(shè)備ID
  
名稱
  
  
ID
  
  
密鑰
  
  
備注
  
  服務(wù)器端
  
  {  0,0 }
  
  
  
  服務(wù)器占用的ID
  
  1號終端
  
  {  0,1 }
  
  {255,255,255,255,255,1}
  
  
  
  2號終端
  
  {  0,2 }
  
  {255,255,255,255,255,2}
  
  
  
  3號終端
  
  {  0,3 }
  
  {255,255,255,255,255,3}
  
  
  
  4號終端
  
  {  0,4 }
  
  {255,255,255,255,255,4}
  
  
  
  5號終端
  
  {  0,5 }
  
  {255,255,255,255,255,5}
  
  
  
  6號終端
  
  {  0,6 }
  
  {255,255,255,255,255,6}
  
  
  

二、定義控制位
  
名稱
  
  
控制位
  
  
名稱
  
  
控制位
  
  心跳
  
  {0,0,0,1}
  
  
  
  
  
  查詢設(shè)備ID和密鑰
  
  {0,0,0,2}
  
  返回設(shè)備ID和密鑰
  
  {1,0,0,2}
  
  登錄成功
  
  {0,0,0,3}
  
  登錄失敗
  
  {0,0,0,4}
  
  更新用戶信息時(shí)間
  
  {0,0,0,9}
  
  返回更新用戶信息時(shí)間
  
  {1,0,0,9}
  
  查詢溫度1
  
  {0,0,1,1}
  
  返回溫度 1
  
  {1,0,1,1}
  
  查詢溫度2
  
  {0,0,1,2}
  
  返回溫度 2
  
  {1,0,1,2}
  
  查詢溫度3
  
  {0,0,1,3}
  
  返回溫度 3
  
  {1,0,1,3}
  
  查詢溫度4
  
  {0,0,1,4}
  
  返回溫度  4
  
  {1,0,1,4}
  
  查詢開關(guān)1
  
  {0,0,2,1}
  
  返回開關(guān)1狀態(tài)
  
  {1,0,2,1}
  
  查詢開關(guān)2
  
  {0,0,2,2}
  
  返回開關(guān)2狀態(tài)
  
  {1,0,2,2}
  
  查詢開關(guān)3
  
  {0,0,2,3}
  
  返回開關(guān)3狀態(tài)
  
  {1,0,2,3}
  
  查詢開關(guān)4
  
  {0,0,2,4}
  
  返回開關(guān)4狀態(tài)
  
  {1,0,2,4}
  
  設(shè)置開關(guān)1
  
  {2,0,2,1}
  
  
  
  
  
  設(shè)置開關(guān)2
  
  {2,0,2,2}
  
  
  
  
  
  設(shè)置開關(guān)3
  
  {2,0,2,3}
  
  
  
  
  
  設(shè)置開關(guān)4
  
  {2,0,2,4}
  
  
  
  
  

三、定義數(shù)據(jù)位
  
名稱
  
  
數(shù)據(jù)位
  
  
說明
  
  設(shè)備ID和密鑰
  
  {0-2550-2550-2550-2550-2550-2550-2550-255}
  
  2位是設(shè)備ID,后6位是密鑰
  
  打開開關(guān)
  
  {10000000}
  
  1是打開
  
  關(guān)閉開關(guān)
  
  {20000000}
  
  2是關(guān)閉
  
  返回溫度
  
  {0-2550-255000000}
  
  前兩位分別是DS18B20溫度傳感器高位和底位
  


單片機(jī)源程序如下:
  1. #include        "config.h"
  2. #include<ds1.h>
  3. #include<ds2.h>
  4. #include<ds3.h>
  5. #include<ds4.h>

  6. void UART_init();
  7. void PutFrame(uchar *TXStr);
  8. void DataFrame_Put_init();
  9. void TEMP_init_var();

  10. uchar dataFrame[16];            //定義數(shù)據(jù)幀長度為16個(gè)字節(jié)
  11. uchar dataFrame_RI;             //數(shù)據(jù)幀是否己讀取標(biāo)記

  12. uchar dataFrame_temp[16];            //數(shù)據(jù)幀臨時(shí)緩沖區(qū)16個(gè)字節(jié)
  13. uchar dataFrame_temp_count;     //定義數(shù)據(jù)幀己接收的字節(jié)數(shù)

  14. //定義發(fā)送數(shù)據(jù)緩沖區(qū)
  15. uchar DataFrame_Put[16]={DATAFRAME_HEAD,DEVICEID_1,DEVICEID_2,0,0,0,0,0,0,0,0,0,0,0,0,DATAFRAME_TAIL};

  16. INT32U led1_count;         //運(yùn)行指示燈倒計(jì)時(shí)變量
  17. uchar led1_count2;         //運(yùn)行指示燈倒計(jì)時(shí)變量2
  18. INT32U led2_count;         //收到心跳倒計(jì)時(shí)變量
  19. INT32U led3_count;         //有數(shù)據(jù)接收倒計(jì)時(shí)變量
  20. INT32U led4_count;                   //有數(shù)據(jù)發(fā)送倒計(jì)時(shí)變量
  21. #define LED1_COUNT 15000
  22. #define LED2_COUNT 125000
  23. #define LED3_COUNT 100
  24. #define LED4_COUNT 100


  25. //存儲溫度的高8位和底8位
  26. uchar ds_M;
  27. uchar ds_L;
  28. //溫度變量
  29. uchar symbol;    //符號位
  30. uchar hundreds;  //百位
  31. uchar decade;    //十位
  32. uchar unit;      //個(gè)位
  33. uchar decimal;   //小數(shù)1位

  34. void main()
  35. {
  36.         //串口初始化
  37.         UART_init();

  38.         while(1)
  39.         {
  40.                 //調(diào)試使用
  41.                 //uchar dataFrame[16] = {DATAFRAME_HEAD,DEVICEID_1,DEVICEID_2,0,0,1,1,0,0,0,0,0,0,0,0,DATAFRAME_TAIL};
  42.                 //dataFrame_RI = 1;          //執(zhí)行時(shí)間2.17微妙

  43.                 //如果己接收到一幀數(shù)據(jù)
  44.                 if(dataFrame_RI == 1)        // 執(zhí)行時(shí)間5.42微秒
  45.                 {        
  46.                         //收到心跳
  47.                     if(dataFrame[3] == 0 && dataFrame[4] == 0 && dataFrame[5] == 0 && dataFrame[6] == 1){
  48.                            //收到心跳
  49.                            DataFrame_Put[3] = 0;
  50.                            DataFrame_Put[4] = 0;
  51.                            DataFrame_Put[5] = 0;
  52.                            DataFrame_Put[6] = 1;
  53.                            PutFrame(&DataFrame_Put);
  54.                            led2_count = LED2_COUNT;
  55.                         }else if(dataFrame[3] == 0 && dataFrame[4] == 0 && dataFrame[5] == 0 && dataFrame[6] == 2){
  56.                           //收到查詢設(shè)備id
  57.                            DataFrame_Put[3] = 1;
  58.                            DataFrame_Put[4] = 0;
  59.                            DataFrame_Put[5] = 0;
  60.                            DataFrame_Put[6] = 2;
  61.                            DataFrame_Put[7] = DEVICEID_1;
  62.                            DataFrame_Put[8] = DEVICEID_2;
  63.                            DataFrame_Put[9] = 255;
  64.                            DataFrame_Put[10] = 255;
  65.                            DataFrame_Put[11] = 255;
  66.                            DataFrame_Put[12] = 255;
  67.                            DataFrame_Put[13] = 002;
  68.                            DataFrame_Put[14] = 001;
  69.                            PutFrame(&DataFrame_Put);
  70.                            led3_count = LED3_COUNT;
  71.                            led4_count = LED4_COUNT;
  72.                         }else if(dataFrame[3] == 0 && dataFrame[4] == 0 && dataFrame[5] == 0 && dataFrame[6] == 9){
  73.                            //收到更新用戶信息時(shí)間,返回
  74.                            DataFrame_Put[3] = 1;
  75.                            DataFrame_Put[4] = 0;
  76.                            DataFrame_Put[5] = 0;
  77.                            DataFrame_Put[6] = 9;
  78.                            PutFrame(&DataFrame_Put);
  79.                            led3_count = LED3_COUNT;
  80.                            led4_count = LED4_COUNT;
  81.                     }else if(dataFrame[3] == 0 && dataFrame[4] == 0 && dataFrame[5] == 1 && dataFrame[6] == 1){         // 執(zhí)行時(shí)間15.19 微秒
  82.                            //查詢溫度1:0 0 1 1
  83.                            TEMP_init_var();
  84.                            DS1_ReadWeather(&ds_M,&ds_L);
  85.                            Convert_DS_weather(ds_M, ds_L, &symbol, &hundreds, &decade, &unit, &decimal);
  86.                            DataFrame_Put[3] = 1;
  87.                            DataFrame_Put[4] = 0;
  88.                            DataFrame_Put[5] = 1;
  89.                            DataFrame_Put[6] = 1;
  90.                            DataFrame_Put[7] = symbol;
  91.                            DataFrame_Put[8] = hundreds;
  92.                            DataFrame_Put[9] = decade;
  93.                            DataFrame_Put[10] = unit;
  94.                            DataFrame_Put[11] = decimal;
  95.                            PutFrame(&DataFrame_Put);
  96.                            led3_count = LED3_COUNT;
  97.                            led4_count = LED4_COUNT;
  98.                         }else if(dataFrame[3] == 0 && dataFrame[4] == 0 && dataFrame[5] == 1 && dataFrame[6] == 2){
  99.                            //查詢溫度2:0 0 1 2
  100.                            TEMP_init_var();
  101.                            DS2_ReadWeather(&ds_M,&ds_L);
  102.                            Convert_DS_weather(ds_M, ds_L, &symbol, &hundreds, &decade, &unit, &decimal);
  103.                            DataFrame_Put[3] = 1;
  104.                            DataFrame_Put[4] = 0;
  105.                            DataFrame_Put[5] = 1;
  106.                            DataFrame_Put[6] = 2;
  107.                            DataFrame_Put[7] = symbol;
  108.                            DataFrame_Put[8] = hundreds;
  109.                            DataFrame_Put[9] = decade;
  110.                            DataFrame_Put[10] = unit;
  111.                            DataFrame_Put[11] = decimal;
  112.                            PutFrame(&DataFrame_Put);
  113.                            led3_count = LED3_COUNT;
  114.                            led4_count = LED4_COUNT;
  115.                     }else if(dataFrame[3] == 0 && dataFrame[4] == 0 && dataFrame[5] == 1 && dataFrame[6] == 3){         // 執(zhí)行時(shí)間15.19 微秒
  116.                            //查詢溫度3:0 0 1 3
  117.                            TEMP_init_var();
  118.                            DS3_ReadWeather(&ds_M,&ds_L);
  119.                            Convert_DS_weather(ds_M, ds_L, &symbol, &hundreds, &decade, &unit, &decimal);
  120.                            DataFrame_Put[3] = 1;
  121.                            DataFrame_Put[4] = 0;
  122.                            DataFrame_Put[5] = 1;
  123.                            DataFrame_Put[6] = 3;
  124.                            DataFrame_Put[7] = symbol;
  125.                            DataFrame_Put[8] = hundreds;
  126.                            DataFrame_Put[9] = decade;
  127.                            DataFrame_Put[10] = unit;
  128.                            DataFrame_Put[11] = decimal;
  129.                            PutFrame(&DataFrame_Put);
  130.                            led3_count = LED3_COUNT;
  131.                            led4_count = LED4_COUNT;
  132.                     }else if(dataFrame[3] == 0 && dataFrame[4] == 0 && dataFrame[5] == 1 && dataFrame[6] == 4){
  133.                            //查詢溫度4:0 0 1 4
  134.                            TEMP_init_var();
  135.                            DS4_ReadWeather(&ds_M,&ds_L);
  136.                            Convert_DS_weather(ds_M, ds_L, &symbol, &hundreds, &decade, &unit, &decimal);
  137.                            DataFrame_Put[3] = 1;
  138.                            DataFrame_Put[4] = 0;
  139.                            DataFrame_Put[5] = 1;
  140.                            DataFrame_Put[6] = 4;
  141.                            DataFrame_Put[7] = symbol;
  142.                            DataFrame_Put[8] = hundreds;
  143.                            DataFrame_Put[9] = decade;
  144.                            DataFrame_Put[10] = unit;
  145.                            DataFrame_Put[11] = decimal;
  146.                            PutFrame(&DataFrame_Put);
  147.                            led3_count = LED3_COUNT;
  148.                            led4_count = LED4_COUNT;
  149.                     }else if(dataFrame[3] == 0 && dataFrame[4] == 0 && dataFrame[5] == 2 && dataFrame[6] == 1){
  150.                            //查詢開關(guān)1
  151.                            DataFrame_Put[3] = 1;
  152.                            DataFrame_Put[4] = 0;
  153.                            DataFrame_Put[5] = 2;
  154.                            DataFrame_Put[6] = 1;
  155.                           if(SW1 == 0){
  156.                            DataFrame_Put[7] = 1;         
  157.                           }else{
  158.                            DataFrame_Put[7] = 2;
  159.                           }
  160.                           PutFrame(&DataFrame_Put);
  161.                           led3_count = LED3_COUNT;
  162.                           led4_count = LED4_COUNT;
  163.                    }else if(dataFrame[3] == 0 && dataFrame[4] == 0 && dataFrame[5] == 2 && dataFrame[6] == 2){
  164.                            //查詢開關(guān)2
  165.                            DataFrame_Put[3] = 1;
  166.                            DataFrame_Put[4] = 0;
  167.                            DataFrame_Put[5] = 2;
  168.                            DataFrame_Put[6] = 2;
  169.                           if(SW2 == 0){
  170.                            DataFrame_Put[7] = 1;         
  171.                           }else{
  172.                            DataFrame_Put[7] = 2;
  173.                           }
  174.                           PutFrame(&DataFrame_Put);
  175.                           led3_count = LED3_COUNT;
  176.                           led4_count = LED4_COUNT;
  177.                     }else if(dataFrame[3] == 0 && dataFrame[4] == 0 && dataFrame[5] == 2 && dataFrame[6] == 3){
  178.                            //查詢開關(guān)3
  179.                            DataFrame_Put[3] = 1;
  180.                            DataFrame_Put[4] = 0;
  181.                            DataFrame_Put[5] = 2;
  182.                            DataFrame_Put[6] = 3;
  183.                            if(SW3 == 0){
  184.                              DataFrame_Put[7] = 1;         
  185.                            }else{
  186.                              DataFrame_Put[7] = 2;
  187.                            }
  188.                            PutFrame(&DataFrame_Put);
  189.                            led3_count = LED3_COUNT;
  190.                            led4_count = LED4_COUNT;
  191.                         }else if(dataFrame[3] == 0 && dataFrame[4] == 0 && dataFrame[5] == 2 && dataFrame[6] == 4){
  192.                            //查詢開關(guān)3
  193.                            DataFrame_Put[3] = 1;
  194.                            DataFrame_Put[4] = 0;
  195.                            DataFrame_Put[5] = 2;
  196.                            DataFrame_Put[6] = 4;
  197.                            if(SW4 == 0){
  198.                              DataFrame_Put[7] = 1;         
  199.                            }else{
  200.                              DataFrame_Put[7] = 2;
  201.                            }
  202.                            PutFrame(&DataFrame_Put);
  203.                            led3_count = LED3_COUNT;
  204.                            led4_count = LED4_COUNT;
  205.                         }else if(dataFrame[3] == 2 && dataFrame[4] == 0 && dataFrame[5] == 2 && dataFrame[6] == 1){
  206.                            //設(shè)置開關(guān)1
  207.                            if(dataFrame[7] == 1 && dataFrame[8] == 0 && dataFrame[9] == 0 && dataFrame[10] == 0 && dataFrame[11] == 0 && dataFrame[12] == 0 && dataFrame[13] == 0 && dataFrame[14] == 0){
  208.                                  SW1 = 0;
  209.                            }
  210.                            else if(dataFrame[7] == 2 && dataFrame[8] == 0 && dataFrame[9] == 0 && dataFrame[10] == 0 && dataFrame[11] == 0 && dataFrame[12] == 0 && dataFrame[13] == 0 && dataFrame[14] == 0){
  211.                                    SW1 = 1;
  212.                            }
  213.                            led3_count = LED3_COUNT;
  214.                 }else if(dataFrame[3] == 2 && dataFrame[4] == 0 && dataFrame[5] == 2 && dataFrame[6] == 2){
  215.                            //設(shè)置開關(guān)2
  216.                            if(dataFrame[7] == 1 && dataFrame[8] == 0 && dataFrame[9] == 0 && dataFrame[10] == 0 && dataFrame[11] == 0 && dataFrame[12] == 0 && dataFrame[13] == 0 && dataFrame[14] == 0){
  217.                                  SW2 = 0;
  218.                            }
  219.                            else if(dataFrame[7] == 2 && dataFrame[8] == 0 && dataFrame[9] == 0 && dataFrame[10] == 0 && dataFrame[11] == 0 && dataFrame[12] == 0 && dataFrame[13] == 0 && dataFrame[14] == 0){
  220.                                    SW2 = 1;
  221.                            }
  222.                            led3_count = LED3_COUNT;
  223.                     }else if(dataFrame[3] == 2 && dataFrame[4] == 0 && dataFrame[5] == 2 && dataFrame[6] == 3){
  224.                            //設(shè)置開關(guān)3
  225.                            if(dataFrame[7] == 1 && dataFrame[8] == 0 && dataFrame[9] == 0 && dataFrame[10] == 0 && dataFrame[11] == 0 && dataFrame[12] == 0 && dataFrame[13] == 0 && dataFrame[14] == 0){
  226.                                  SW3 = 0;
  227.                            }
  228.                            else if(dataFrame[7] == 2 && dataFrame[8] == 0 && dataFrame[9] == 0 && dataFrame[10] == 0 && dataFrame[11] == 0 && dataFrame[12] == 0 && dataFrame[13] == 0 && dataFrame[14] == 0){
  229.                                    SW3 = 1;
  230.                            }
  231.                            led3_count = LED3_COUNT;
  232.                     }else if(dataFrame[3] == 2 && dataFrame[4] == 0 && dataFrame[5] == 2 && dataFrame[6] == 4){
  233.                            //設(shè)置開關(guān)4
  234.                            if(dataFrame[7] == 1 && dataFrame[8] == 0 && dataFrame[9] == 0 && dataFrame[10] == 0 && dataFrame[11] == 0 && dataFrame[12] == 0 && dataFrame[13] == 0 && dataFrame[14] == 0){
  235.                                  SW4 = 0;
  236.                            }
  237.                            else if(dataFrame[7] == 2 && dataFrame[8] == 0 && dataFrame[9] == 0 && dataFrame[10] == 0 && dataFrame[11] == 0 && dataFrame[12] == 0 && dataFrame[13] == 0 && dataFrame[14] == 0){
  238.                                    SW4 = 1;
  239.                            }
  240.                            led3_count = LED3_COUNT;
  241.                         }
  242.                         dataFrame_RI = 0;     //置數(shù)據(jù)幀己讀取
  243.                         DataFrame_Put_init(); //初始化發(fā)送幀,為下一次發(fā)送數(shù)據(jù)做準(zhǔn)備
  244.                 }

  245.                  //LED1運(yùn)行指示燈閃爍,整個(gè)循環(huán)在沒有接收數(shù)據(jù)時(shí),執(zhí)行一次約40us
  246.                 if(led1_count > 0){
  247.                   led1_count--;
  248.                 }else{
  249.                   if(led1_count2 == 0){
  250.                     led1_count2 = 1;
  251.                   }else{
  252.                     led1_count2 = 0;
  253.                   }
  254.                   led1_count = LED1_COUNT;
  255.                 }
  256.                 if(led1_count > 0){
  257.                   if(led1_count2 == 0){
  258.                           LED1 = 0;
  259.                   }else{
  260.                     LED1 = 1;
  261.                   }
  262.                   led1_count--;                                    
  263.                 }

  264.                 //收到心跳燈亮20秒
  265.                 if(led2_count > 0){
  266.                   LED2 = 0;
  267.                   led2_count--;
  268.                 }else{
  269.                   LED2 = 1;
  270.                 }

  271.                 //有數(shù)據(jù)接收閃一下
  272.                 if(led3_count > 0){
  273.                   LED3 = 0;
  274.                   led3_count--;
  275.                 }else{
  276.                   LED3 = 1;
  277.                 }

  278.                 //有數(shù)據(jù)發(fā)送閃一下
  279.                 if(led4_count > 0){
  280.                   LED4 = 0;
  281.                   led4_count--;
  282.                 }else{
  283.                   LED4 = 1;
  284.                 }

  285.         }

  286.         while(1);
  287. }

  288. //初始化輸出幀
  289. void DataFrame_Put_init(){
  290.    DataFrame_Put[3] = 0;
  291.    DataFrame_Put[4] = 0;
  292.    DataFrame_Put[5] = 0;
  293.    DataFrame_Put[6] = 0;
  294.    DataFrame_Put[7] = 0;
  295.    DataFrame_Put[8] = 0;
  296.    DataFrame_Put[9] = 0;
  297.    DataFrame_Put[10] = 0;
  298.    DataFrame_Put[11] = 0;
  299.    DataFrame_Put[12] = 0;
  300.    DataFrame_Put[13] = 0;
  301.    DataFrame_Put[14] = 0;
  302. }

  303. //初始化溫度值
  304. void TEMP_init_var(){
  305.     ds_M = 0;
  306.     ds_L = 0;
  307.         symbol = 0;     //符號位
  308.         hundreds = 0;   //百位
  309.         decade = 0;     //十位
  310.         unit = 0;       //個(gè)位
  311.         decimal = 0;    //小數(shù)1位
  312. }

  313. //初始化
  314. void UART_init()
  315. {
  316.         TMOD = 0x20;          //T1工作模式2  8位自動重裝
  317.         TH1 = 0xfd;
  318.         TL1 = 0xfd;         //比特率9600
  319.         TR1 = 1;                //啟動T1定時(shí)器
  320.         SM0 = 0;
  321.         SM1 = 1;                 //串口工作方式1 10位異步
  322.         REN = 1;                //串口允許接收
  323.         EA  = 1;                //開總中斷
  324.         ES  = 1;                //串口中斷打開
  325. }

  326. //串口發(fā)送一幀數(shù)據(jù)函數(shù),一幀16個(gè)字節(jié)
  327. void PutFrame(uchar *TXStr)  
  328. {   
  329.          uchar i = 0;
  330.          while(1){
  331.            SBUF=*TXStr;
  332.            while(TI == 0);  //對方接收后TI置1,停止等待
  333.            TI = 0;
  334.            i++;
  335.            if(i > 15){break;}
  336.            TXStr++;
  337.      }
  338. }

  339. void UART() interrupt 4
  340. {
  341.    if(RI)   //檢測是否接收完成
  342.    {
  343.      uchar temp = SBUF;
  344.          RI = 0;
  345.          // 如果接收的一幀,第一個(gè)字節(jié)不是包頭標(biāo)志,則拋棄這個(gè)字節(jié)
  346.          if(dataFrame_temp_count == 0)
  347.          {
  348.             if(temp != DATAFRAME_HEAD)
  349.                         return;
  350. ……………………

  351. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
C#上位機(jī)源碼資料包:


所有資料51hei提供下載:
溫度檢查.rar (851 KB, 下載次數(shù): 142)



評分

參與人數(shù) 2黑幣 +115 收起 理由
perfect123 + 15 贊一個(gè)!
admin + 100 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評分

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

使用道具 舉報(bào)

沙發(fā)
ID:3802 發(fā)表于 2018-10-26 17:21 | 只看該作者

這個(gè)真是極好的,資料很寶貴,謝謝無私的分享!
回復(fù)

使用道具 舉報(bào)

板凳
ID:473486 發(fā)表于 2019-1-28 14:02 來自手機(jī) | 只看該作者
互聯(lián)網(wǎng)那個(gè)模塊有購買鏈接嗎?想研究個(gè)基于它的繼電器控制器
回復(fù)

使用道具 舉報(bào)

地板
ID:63317 發(fā)表于 2019-2-12 19:31 | 只看該作者
謝謝分享資料
回復(fù)

使用道具 舉報(bào)

5#
ID:284106 發(fā)表于 2019-3-31 14:19 | 只看該作者
perfect123 發(fā)表于 2018-12-27 00:09
網(wǎng)絡(luò)的最大問題是ip地址的不確定,咱沒有固定的網(wǎng)址,你這樣搞,能實(shí)現(xiàn)千里之外的有網(wǎng)就能控制嗎?依舊是要 ...

下位機(jī)主動連接上位機(jī),用域名來連接,就可以了。
回復(fù)

使用道具 舉報(bào)

6#
ID:284106 發(fā)表于 2019-3-31 14:20 | 只看該作者
xxiaoshujjun 發(fā)表于 2019-1-28 14:02
互聯(lián)網(wǎng)那個(gè)模塊有購買鏈接嗎?想研究個(gè)基于它的繼電器控制器

到淘寶上找到了,我用的這個(gè)牌子是 友人 的。好象是六七十塊錢一個(gè)。也有便宜點(diǎn)的,因?yàn)槭窃囼?yàn),所以買個(gè)好點(diǎn)的。
回復(fù)

使用道具 舉報(bào)

7#
ID:542851 發(fā)表于 2019-5-20 15:01 | 只看該作者
請問這個(gè)TCP和串口連接好后,打開程序就可以自動識別么?還是需要對串口進(jìn)行設(shè)置呢?
回復(fù)

使用道具 舉報(bào)

8#
ID:542851 發(fā)表于 2019-5-20 15:04 | 只看該作者
電路連接好,TCP與串口連接的部分要進(jìn)行設(shè)置嗎?還是直接和電腦連接后,打開服務(wù)器端的程序就能直接識別呢?求問
回復(fù)

使用道具 舉報(bào)

9#
ID:82527 發(fā)表于 2019-9-2 20:41 | 只看該作者
不錯(cuò)的資料,正是我所需要的,謝謝分享
回復(fù)

使用道具 舉報(bào)

10#
ID:71883 發(fā)表于 2019-9-3 15:05 | 只看該作者
謝謝樓主,思路清晰值得研究。
回復(fù)

使用道具 舉報(bào)

11#
ID:544352 發(fā)表于 2019-10-29 08:46 | 只看該作者
duwen009 發(fā)表于 2019-3-31 14:19
下位機(jī)主動連接上位機(jī),用域名來連接,就可以了。

lz您好
看了一下好像只能實(shí)現(xiàn)本地訪問和控制,如果在另一個(gè)城市遠(yuǎn)程監(jiān)控訪問如何實(shí)現(xiàn)?
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 91在线视频免费观看 | h在线| 亚洲啊v在线 | 亚洲小视频在线观看 | 日韩一区二区三区视频在线播放 | 久久爱综合 | 亚洲毛片在线 | 久在线 | 欧美视频二区 | 中文字幕综合 | 香蕉视频一区二区 | 国产精品久久久久一区二区三区 | 久久精品亚洲欧美日韩久久 | 久久国产精品一区二区三区 | 成人免费在线 | 91久久久久 | 成人国产精品久久久 | 欧美日韩一二三区 | 一级毛片网 | 欧美久久一区二区 | www.日韩av.com | 亚州综合在线 | 色先锋影音| 中文字幕一区二区三区日韩精品 | 中文字幕一区二区三区不卡 | 欧美中文字幕 | 黄色91在线 | 成人午夜影院 | 中文字幕1区2区3区 日韩在线视频免费观看 | 久久综合888| 黄色一级视频免费 | 中文字幕一区二区三区不卡 | 亚洲国产欧美国产综合一区 | 久久久久久久国产 | 国产午夜久久 | 成人高潮片免费视频欧美 | 国产精品久久久久久二区 | 午夜在线电影网 | 国产在线观看网站 | 免费看片国产 | 亚洲精品粉嫩美女一区 |