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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

求代碼 單片機溫室監控管理系統上位機C#程序(VS2008)仿真與源程序設計

[復制鏈接]
跳轉到指定樓層
樓主
基于51單片機的溫室控制與管理系統仿真設計(源程序+仿真文件)分享!


實物電路中MAX232與8051的連接方法:
(1) MAX232的11腳(TIN)接8051的P3.1(TXD)
(2) MAX232的12腳(R1OUT)接8051的P3.0(RXD)
通過上位機控制時,設COM3,COM4對連

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


上位機C#程序(VS2008)源程序如下:
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Text;
  7. using System.Windows.Forms;
  8. using Microsoft.Win32;

  9. namespace 溫室控制程序
  10. {
  11.     public partial class Form_Main : Form
  12.     {
  13.         public Form_Main()
  14.         {
  15.             InitializeComponent();
  16.         }

  17.         //--------------------------------------------------------------------
  18.         // 代理函數
  19.         //--------------------------------------------------------------------
  20.         delegate void SetTextCallBack(string s);
  21.         //--------------------------------------------------------------------
  22.         // 關閉窗體時提示確認
  23.         //--------------------------------------------------------------------
  24.         private void Form1_FormClosing(object sender, FormClosingEventArgs e)
  25.         {
  26.             if (MessageBox.Show("您確定要退出系統嗎?", "確認",
  27.                 MessageBoxButtons.YesNo, MessageBoxIcon.Question,
  28.                 MessageBoxDefaultButton.Button2) == DialogResult.No)
  29.             {
  30.                 e.Cancel = true;
  31.             }
  32.         }
  33.         //--------------------------------------------------------------------
  34.         // 獲取串口列表
  35.         //--------------------------------------------------------------------
  36.         public void GetComList()
  37.         {
  38.             RegistryKey keyCom = Registry.LocalMachine.OpenSubKey("Hardware\\DeviceMap\\SerialComm");
  39.             if (keyCom != null)
  40.             {
  41.                 string[] sSubKeys = keyCom.GetValueNames();
  42.                 comboBox1.Items.Clear();
  43.                 foreach (string sName in sSubKeys)
  44.                 {
  45.                     string sValue = (string)keyCom.GetValue(sName);
  46.                     comboBox1.Items.Add(sValue);
  47.                 }
  48.             }
  49.         }
  50.         //--------------------------------------------------------------------
  51.         // 退出系統
  52.         //--------------------------------------------------------------------
  53.         private void button_退出_Click(object sender, EventArgs e)
  54.         {        
  55.             this.Close();
  56.         }
  57.         //--------------------------------------------------------------------
  58.         //打開串口
  59.         //--------------------------------------------------------------------
  60.         private void button_打開串口_Click(object sender, EventArgs e)
  61.         {
  62.             if (button_打開串口.Text == "打開串口")
  63.             {
  64.                 if (serialPort1.IsOpen) serialPort1.Close();
  65.                 serialPort1.PortName = comboBox1.Text;
  66.                 try
  67.                 {
  68.                     serialPort1.Open();
  69.                     toolStripStatusLabel1.Text = comboBox1.Text + " 打開";
  70.                     button_打開串口.Text = "關閉串口";
  71.                 }
  72.                 catch { toolStripStatusLabel1.Text = "端口打開錯誤!!!"; }
  73.             }
  74.             else
  75.             {
  76.                 serialPort1.Close();
  77.                 toolStripStatusLabel1.Text = "端口關閉";
  78.                 button_打開串口.Text = "打開串口";
  79.             }
  80.         }
  81.         //--------------------------------------------------------------------
  82.         // 加載窗體時執行
  83.         //--------------------------------------------------------------------
  84.         private void Form_Main_Load(object sender, EventArgs e)
  85.         {
  86.             comboBox1.Items.Clear();
  87.             GetComList();
  88.             if (comboBox1.Items.Count != 0) comboBox1.SelectedIndex = 1;
  89.             RegistryKey reg = Registry.LocalMachine.OpenSubKey("SOFTWARE\\溫室監控系統2010",true);
  90.             if (reg == null)
  91.             {
  92.                 reg = Registry.LocalMachine.CreateSubKey("SOFTWARE\\溫室監控系統2010");
  93.             }
  94.             if (reg != null)
  95.             {
  96.                 comboBox1.Text = (string)reg.GetValue("端口");
  97.             }
  98.         }
  99.         //--------------------------------------------------------------------
  100.         // 關閉窗體時將當前串口選項寫入注冊表
  101.         //--------------------------------------------------------------------
  102.         private void Form_Main_FormClosed(object sender, FormClosedEventArgs e)
  103.         {
  104.             if (serialPort1.IsOpen) serialPort1.Close();
  105.             RegistryKey reg = Registry.LocalMachine.OpenSubKey("SOFTWARE\\溫室監控系統2010",true);
  106.             if (reg != null) reg.SetValue("端口", comboBox1.Text);   
  107.         }
  108.         //--------------------------------------------------------------------
  109.         // 噴灌按鈕操作
  110.         //--------------------------------------------------------------------
  111.         private void button_噴灌_Click(object sender, EventArgs e)
  112.         {
  113.             if (!serialPort1.IsOpen)
  114.             { MessageBox.Show("串口未打開,控制命令無法發送!", "提示"); return; }
  115.             if (button_噴灌.Text == "噴灌")
  116.             {
  117.                 //發送控制指令 開啟繼電器
  118.                 serialPort1.WriteLine("$PUMP_OPEN");
  119.                 button_噴灌.Text = "停止噴灌";
  120.             }
  121.             else
  122.             {
  123.                 //發送控制指令 關閉繼電器
  124.                 serialPort1.WriteLine("$PUMP_CLOSE");
  125.                 button_噴灌.Text = "噴灌";
  126.             }
  127.         }
  128.         //--------------------------------------------------------------------
  129.         // 通風按鈕操作
  130.         //--------------------------------------------------------------------
  131.         private void button_通風_Click(object sender, EventArgs e)
  132.         {
  133.             if (!serialPort1.IsOpen)
  134.             { MessageBox.Show("串口未打開,控制命令無法發送!", "提示"); return; }
  135.             if (button_通風.Text == "通風")
  136.             {
  137.                 //發送控制指令 開啟電機1
  138.                 serialPort1.WriteLine("$WIND_OPEN");
  139.                 button_通風.Text = "停止通風";
  140.             }
  141.             else
  142.             {
  143.                 //發送控制指令 關閉電機1
  144.                 serialPort1.WriteLine("$WIND_CLOSE");
  145.                 button_通風.Text = "通風";
  146.             }
  147.         }
  148.         //--------------------------------------------------------------------
  149.         // 采光按鈕操作
  150.         //--------------------------------------------------------------------
  151.         private void button_采光_Click(object sender, EventArgs e)
  152.         {
  153.             if (!serialPort1.IsOpen)
  154.             { MessageBox.Show("串口未打開,控制命令無法發送!", "提示"); return; }
  155.             if (button_采光.Text == "采光")
  156.             {
  157.                 //發送控制指令 開啟電機2
  158.                 serialPort1.WriteLine("$LIGHT_OPEN");
  159.                 button_采光.Text = "停止采光";
  160.             }
  161.             else
  162.             {
  163.                 //發送控制指令 關閉電機2
  164.                 serialPort1.WriteLine("$LIGHT_CLOSE");
  165.                 button_采光.Text = "采光";
  166.             }
  167.         }
  168.         //--------------------------------------------------------------------
  169.         // 顯示代理函數
  170.         //--------------------------------------------------------------------
  171.         private void SetText(string s)
  172.         {
  173.             if (label_溫度.InvokeRequired)
  174.             {
  175.                 SetTextCallBack d = new SetTextCallBack(SetText);
  176.                 Invoke(d, new object[] { s });
  177.             }
  178.             else
  179.             {
  180.                 label_溫度.Text = s.Trim() + " ℃";
  181.                 label_溫度.Refresh();
  182.             }
  183.         }
  184.         //--------------------------------------------------------------------
  185.         // 串口接收溫度數據并通過代理程序顯示
  186.         //--------------------------------------------------------------------
  187.         private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
  188.         {
  189.             try { SetText(serialPort1.ReadLine()); } catch { }
  190.         }
  191.     }
  192. }
復制代碼


單片機源程序如下:
  1. //-----------------------------------------------------------------
  2. //  名稱: 溫室控制系統仿真設計
  3. //-----------------------------------------------------------------
  4. //  說明: K1~K3按鍵分別控制通風、采光及水泵電機開關,LCD顯示當前溫度值.
  5. //        上位機按鈕可分別實現K1~K3的控制功能,系統運行時,下位機溫度值
  6. //        將刷新顯示在上位機C#窗體中.
  7. //
  8. //-----------------------------------------------------------------
  9. #include <reg51.h>
  10. #include <intrins.h>
  11. #include <string.h>
  12. #include <stdio.h>
  13. #define INT8U        unsigned char
  14. #define INT16U        unsigned int
  15. #define MAX_CHAR 11                                                //允許接收并保存的最大字符個數
  16. volatile INT8U recv_buff[MAX_CHAR+1];        //串口接收緩沖
  17. volatile INT8U Buf_Index = 0;                        //緩沖索引
  18. extern INT8U Read_Temperature();                //讀傳感器溫度函數
  19. extern void LCD_Initialize();                        //LCD初始化函數
  20. extern void LCD_ShowString(INT8U , INT8U,INT8U *);//在指定行/列顯示字符串函數
  21. extern INT8U Temp_Value[];                                //從DS18B20讀取的數據
  22. extern void delay_ms(INT16U x);                        //延時函數
  23. char Disp_Buffer[17];                                        //LCD顯示緩沖
  24. volatile INT8U recv_OK = 0;                                //上位機命令串接收成功標識
  25. //相關按鍵、控制引腳等定義
  26. sbit K1 = P1^5;                                                        //通風電機開關控制按鍵
  27. sbit K2 = P1^6;                                                        //采光電機開關控制按鍵
  28. sbit K3 = P1^7;                                                        //水泵開關控制按鍵
  29. sbit F_IN1 = P1^0;                                                //通風電機控制端
  30. sbit F_IN2 = P1^1;
  31. sbit F_IN3 = P1^2;                                                //采光電機控制端
  32. sbit F_IN4 = P1^3;
  33. sbit RELAY = P2^4;                                                //水泵控制繼電器
  34. sbit LED_1 = P2^5;                                                //通風電機開關指示燈
  35. sbit LED_2 = P2^6;                                                //采光電機開關指示燈
  36. sbit LED_3 = P2^7;                                                //水泵指示燈
  37. //-----------------------------------------------------------------
  38. // 串口輸出字符串
  39. //-----------------------------------------------------------------
  40. void PutStr(char *s)
  41. {


  42. }

  43. //-----------------------------------------------------------------
  44. // 主函數
  45. //-----------------------------------------------------------------
  46. void main()
  47. {


  48. }

  49. //-----------------------------------------------------------------
  50. // INT0中斷函數
  51. //-----------------------------------------------------------------
  52. void INT0_ISR() interrupt 0
  53. {


  54. ……………………

  55. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
溫室監控系統仿真設計.zip (533.84 KB, 下載次數: 102)


評分

參與人數 2黑幣 +80 收起 理由
1112cyq + 30 絕世好帖!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:98880 發表于 2019-3-20 16:59 | 只看該作者
KEILC里的代碼不知道為什么不全?是作者故意的嗎?
回復

使用道具 舉報

板凳
ID:308951 發表于 2019-3-21 08:32 | 只看該作者
代碼很好,內容十分詳細,已經借鑒
回復

使用道具 舉報

地板
ID:1060471 發表于 2023-1-7 12:39 | 只看該作者
內容非常好,但是有一些不全
回復

使用道具 舉報

5#
ID:1085531 發表于 2023-6-23 14:16 | 只看該作者
請問樓主:注冊表如何去引用
回復

使用道具 舉報

6#
ID:1085897 發表于 2023-6-26 20:27 | 只看該作者
代碼不全啊!!!!
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产特级毛片aaaaaa喷潮 | 欧美一级片中文字幕 | 久久精品国产99国产精品亚洲 | www.日本三级| 国产一级片网站 | 亚洲天堂色 | 久久久久精 | 伊人超碰在线 | 青青草一区二区 | 777zyz色资源站在线观看 | 久久国产精品网站 | 日本a视频 | 日本中出视频 | 国产美女一区二区 | 黄色毛片在线看 | 日韩国产免费 | a在线观看| 国产欧美日韩一区二区三区在线 | 久久乐国产精品 | 日韩精品一区二区三区中文在线 | 一级欧美黄色片 | 亚洲福利在线观看 | 欧美日韩高清在线一区 | 2022精品国偷自产免费观看 | 亚洲精品高清视频 | 成人午夜视频在线观看 | 在线一区 | 91精品国产91久久久久久密臀 | 国产精品毛片久久久久久 | 久久精彩视频 | 久久se精品一区精品二区 | 国产 日韩 欧美 在线 | 白浆在线 | 777zyz色资源站在线观看 | 国产免费一区 | 一区二区三区免费看 | 久久中文字幕一区 | 看真人视频一级毛片 | 草逼网站 | 日韩一区二区三区在线视频 | 在线观看视频一区 |