我是靠谱客的博主 机灵钥匙,最近开发中收集的这篇文章主要介绍C#之windows桌面软件第十二课:电脑ADC值显示(上位机),记忆上次串口号,并用TrackBar控件显示ADC值,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

C#之windows桌面软件第十二课:电脑ADC值显示(上位机),记忆上次串口号,并用TrackBar控件显示ADC值

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;
using System.Runtime.InteropServices;
namespace Adc_Display
{
    public partial class Form1 : Form
    {
        [DllImport("kernel32")]
        private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);//系统dll导入ini写函数
        [DllImport("kernel32")]
        private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);//系统dll导入ini读函数

        //System.AppDomain.CurrentDomain.BaseDirectory用来得到exe文件的路径
        string FileName = System.AppDomain.CurrentDomain.BaseDirectory + "data.ini";//ini文件名
        StringBuilder temp = new StringBuilder(255);//存储读出ini内容变量
        string CurrentPortName;//当前串口号名字

        public Form1()
        {
            InitializeComponent();
            serialPort1.DataReceived += new SerialDataReceivedEventHandler(PortDataReceivedEvent); //串口数据接收事件 
            System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;

            //注册一个窗口关闭的一个处理函数,在关闭窗口的时候记忆串口号
            this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(Form1_FormClosing);
        }

        /*
           窗口关闭执行此函数。
           窗口关闭时保存串口号,起到一个保存串口号的功能。
         */
        private void Form1_FormClosing(object sender,EventArgs e)
        {
            /*
             (1)在data.ini文件中保存的内容如下:
                  [PortData]
                  PorName=COM3   
                 
             (2)WritePrivateProfileString函数四个参数表示:
                 第一个:串口总类。比如PortData
                 第二个:自定义的串口名字。比如PortName
                 第三个:要保存的串口号。
                 第四个:data.ini文件的绝对路径。
             */
            WritePrivateProfileString("PortData", "PortName", CurrentPortName, FileName);
        }


        /*
             Form1_Load:窗口加载的时候会调用, 
             Form1_Paint:需要绘制窗口时,都会调用  
        */
        private void Form1_Load(object sender, EventArgs e)
        {
            this.Size = new Size(620, 107);//缩小

            /*
             GetPrivateProfileString读函数参数说明如下:
             第一个:在PortData串口总类下面读。
             第二个:在PortData串口总类下面读名为PortName的值。
             第三个:如果PortName变量中的值没有或读失败,就把COM1作为默认值。
             第四个:把从PortName变量中读出的值保存在temp变量中。
             第五个:读的字节数最大为256。
             第六个:在FileName变量保存的路径下读ini文件。
             */
            GetPrivateProfileString("PortData", "PortName", "COM1", temp, 256, FileName);//读取ini值,默认是COM1
            comboBox1.Text = temp.ToString();//temp是数组,把他变为字符串,显示在 comboBox1中
        }

        TrackBar[] GetTrackBar()
        {
            return new TrackBar[] { trackBar1, trackBar2, trackBar3, trackBar4, trackBar5, 
                                       trackBar6, trackBar7, trackBar8, trackBar9, trackBar10,
            };//返回一个对象数组
        }

        private void PortDataReceivedEvent(object sender, SerialDataReceivedEventArgs args) //串口数据接收
        {
            TrackBar[] MytrackBar = GetTrackBar();
            byte[] Data = new byte[serialPort1.BytesToRead];
            serialPort1.Read(Data, 0, Data.Length);//读
            foreach (byte MyData in Data)
            {
                for (int i = 1; i < 10; i++)
                {
                    MytrackBar[10 - i].Value = MytrackBar[10 - i - 1].Value;
                }
                trackBar1.Value = (int)MyData;
                string str = MyData.ToString("x");
                //textBox1.Text  = "0x" + (str.Length == 1 ? "0" + str : str); 
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (serialPort1.IsOpen)//判断
            {
                groupBox2.Visible = false; //第二个框框不可见
                this.Size = new Size(620, 107); //缩小
                serialPort1.Close();//此处可不加try,catch
                TrackBar[] MyProgeressBar = GetTrackBar();
                foreach (TrackBar theBar in MyProgeressBar)//遍历,每个trackBar归零
                {
                    theBar.Value = 0;
                }
                button1.Text = "打开串口";
            }
            else
            {
                try
                {
                    serialPort1.PortName = comboBox1.Text;//串口号
                    serialPort1.Open(); //打开
                    CurrentPortName = comboBox1.Text;
                    groupBox2.Visible = true; //第二个框框可见
                    this.Size = new Size(620, 436); //放大
                    button1.Text = "关闭串口";//按键标题
                }
                catch
                {
                    MessageBox.Show("串口打开错误", "错误");
                }
            }

        }
    }
}

www.DoYoung.net(部分代码来至杜洋工作室)

最后

以上就是机灵钥匙为你收集整理的C#之windows桌面软件第十二课:电脑ADC值显示(上位机),记忆上次串口号,并用TrackBar控件显示ADC值的全部内容,希望文章能够帮你解决C#之windows桌面软件第十二课:电脑ADC值显示(上位机),记忆上次串口号,并用TrackBar控件显示ADC值所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部