c# 实现串口编程-操作LED屏幕

串口编程主要用到SerialPort这个类,主要实现对串口发送字节数组然后点阵屏显示相关信息,其实这个功能很简单下面给大家把整体思路用流程图展现如下:、

其实整体思路就如流程图。下面是整个流程图的一个实现代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO.Ports;
using System.Threading;

namespace portchart
{
    class Serilaztion
    {
        SerialPort _serialPort;
        public Serilaztion(string com)
        {
            _serialPort = new SerialPort();
            _serialPort.PortName = com;
            _serialPort.BaudRate = 4800;
            _serialPort.Parity = Parity.None;
            _serialPort.DataBits = 8;
            _serialPort.StopBits = StopBits.One;
            _serialPort.ReadBufferSize = 4096;
            _serialPort.Handshake = Handshake.None;
            _serialPort.ReadTimeout = 500;
            _serialPort.WriteTimeout = 500;
            _serialPort.Open();
        }
        private static byte[] strToToHexByte(string hexString)
        {
            hexString = hexString.Replace(" ", "");
            if ((hexString.Length % 2) != 0)
                hexString += " ";
            byte[] returnBytes = new byte[hexString.Length / 2];
            for (int i = 0; i < returnBytes.Length; i++)
                returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
            return returnBytes;
        }
        public static string StringToHexString(string s, Encoding encode)
        {
            byte[] b = encode.GetBytes(s);//按照指定编码将string编程字节数组
            string result = string.Empty;
            for (int i = 0; i < b.Length; i++)//逐字节变为16进制字符,以%隔开
            {
                result += Convert.ToString(b[i], 16);

            }
            return result;
        }

        public void SendMessage(string message, string com,string type)
        {
            System.Text.Encoding GB2312 = System.Text.Encoding.GetEncoding("GB2312");
            message = message.Trim();
            string kzm = "1B0104"; //开始码
            string hh = StringToHexString(message, GB2312);
            string js = "0D00"; //结束码
            string zf = kzm + hh + js;
            string s = "1B010320202020C7EB20C9CF20CFDF202020200D00";

            byte[] by = strToToHexByte(zf);
            byte[] bt = strToToHexByte(s);

                _serialPort.Write(by, 0, by.Length);
                _serialPort.Write(bt, 0, bt.Length);

        }
        public void Close()
        {
            _serialPort.Close();
        }
        public static string SetPortName(string defaultPortName)
        {
            string portName;

            Console.WriteLine("验证端口:");
            foreach (string s in SerialPort.GetPortNames())
            {
                Console.WriteLine("   {0}", s);
            }

            Console.Write("请输入Com端口(默认: {0}): ", defaultPortName);
            portName = Console.ReadLine();

            if (portName == "" || !(portName.ToLower()).StartsWith("com"))
            {
                portName = defaultPortName;
            }
            return portName;
        }

        public static int SetPortBaudRate(int defaultPortBaudRate)
        {
            string baudRate;

            Console.Write("设置波特率(默认:{0}): ", defaultPortBaudRate);
            baudRate = Console.ReadLine();

            if (baudRate == "")
            {
                baudRate = defaultPortBaudRate.ToString();
            }

            return int.Parse(baudRate);
        }

        public static Parity SetPortParity(Parity defaultPortParity)
        {
            string parity;

            Console.WriteLine("验证奇偶校验位:");
            foreach (string s in Enum.GetNames(typeof(Parity)))
            {
                Console.WriteLine("   {0}", s);
            }

            Console.Write("进入校验位 (默认: {0}):", defaultPortParity.ToString(), true);
            parity = Console.ReadLine();

            if (parity == "")
            {
                parity = defaultPortParity.ToString();
            }

            return (Parity)Enum.Parse(typeof(Parity), parity, true);
        }

        public static int SetPortDataBits(int defaultPortDataBits)
        {
            string dataBits;
            Console.Write("设置每个字节的标准数据位长度 (默认: {0}): ", defaultPortDataBits);
            dataBits = Console.ReadLine();
            if (dataBits == "")
            {
                dataBits = defaultPortDataBits.ToString();
            }
            return int.Parse(dataBits.ToUpperInvariant());
        }

        public static StopBits SetPortStopBits(StopBits defaultPortStopBits)
        {
            string stopBits;
            Console.WriteLine("设置每个字节的标准停止位数:");
            foreach (string s in Enum.GetNames(typeof(StopBits)))
            {
                Console.WriteLine("   {0}", s);
            }

            stopBits = Console.ReadLine();
            if (stopBits == "")
            {
                stopBits = defaultPortStopBits.ToString();
            }
            return (StopBits)Enum.Parse(typeof(StopBits), stopBits, true);
        }
        public static Handshake SetPortHandshake(Handshake defaultPortHandshake)
        {
            string handshake;

            Console.WriteLine("设置串行端口数据传输的握手协议:");
            foreach (string s in Enum.GetNames(typeof(Handshake)))
            {
                Console.WriteLine("   {0}", s);
            }
            Console.Write("端口数据传输的握手协议(默认: {0}):", defaultPortHandshake.ToString());
            handshake = Console.ReadLine();
            if (handshake == "")
            {
                handshake = defaultPortHandshake.ToString();
            }
            return (Handshake)Enum.Parse(typeof(Handshake), handshake, true);
        }
    }

}

上面我把串口的参数固定了,可以根据自己的需求设置自己要传的参数。

时间: 2024-10-12 22:50:53

c# 实现串口编程-操作LED屏幕的相关文章

Linux 程序设计学习笔记----终端及串口编程基础之概念详解

转载请注明出处,谢谢! linux下的终端及串口的相关概念有: tty,控制台,虚拟终端,串口,console(控制台终端)详解 部分内容整理于网络. 终端/控制台 终端和控制台都不是个人电脑的概念,而是多人共用的小型中型大型计算机上的概念. 1.终端 一台主机,连很多终端,终端为主机提供了人机接口,每个人都通过终端使用主机的资源. 终端有字符哑终端和图形终端两种. 控制台是另一种人机接口, 不通过终端与主机相连, 而是通过显示卡-显示器和键盘接口分别与主机相连, 这是人控制主机的第一人机接口.

storysnail的Linux串口编程笔记

storysnail的Linux串口编程笔记 作者 He YiJun – storysnail<at>gmail.com 团队 ls 版权 转载请保留本声明! 本文档包含的原创代码根据General Public License,v3 发布 GPLv3 许可证的副本可以在这里获得:http://www.gnu.org/licenses/gpl.html 本文档根据GNU Free Documentation License 1.3发布 GFDL1.3许可证的副本可以在这里获得:http://w

Linux下串口编程【转】

本文转载自:http://blog.csdn.net/w282529350/article/details/7378388 /************声明:本人只是见到这篇文章对我帮助很大才转载的,但是这个完整的程序里面本来有语法错误的,现在让我改过来了************/ --------------------------------------------------------- Author             :tiger-johnWebSite            :b

开发LED屏幕页面遇到的问题

上上个礼拜公司的展销会活动需要一个展示在LED大屏幕的页面,顶部显示平台交易总金额,左右两边分别是厂家和买家实时交易记录,具体页面长下面这个样子 需求评审的时候产品说顶部的总金额要有一个数字滚动或者翻牌子的效果,我想着我有封装好的运动框架,加个效果应该不是问题,然后自告奋勇的跟我们技术老大说想做这个页面,结果就是没称好自己几斤几两掉进了自己挖的大坑!!! 第一个坑是分辨率问题,当时设计把页面给我的时候说的LED屏幕是9*5米,所以他设计图的比例也是9:5,我就照着设计图开发了,之前PC端的布局都

11、串口编程

1.串口的介绍     串口的介绍, 串口发送的顺序: 1.空闲位:这里是连续的 1 2.起始位:低电平 3.数据位:对于传输的数据位这里是自己去设定传输位数,可以5.6.7.8位,但是我们一般设置为  8位 串口的数据是从低位开始发送 4.奇偶校验位:保证传输数据位中的 1 的个数是奇数还是偶数.奇校验:保证数据位中的'1'是奇数个,当数据位中的'1'是奇数个的时候,那么校验位填零:当数据位中的'1'是偶数个的时候,则校验位填为'1'. 5.停止位:低电平.持续时间为一个或者 1.5 个字符的

基于树莓派的Linux串口编程_实现自发自收

串口是计算机上一种非常通用设备通信的协议,常用PC机上包含的是RS232规格的串口,具有连接线少,通讯简单,得到广泛的使用. Linux对所有设备的访问是通过设备文件来进行的,串口也是这样,为了访问串口,只需打开其设备文件即可操作串口设备.在linux系统下面,每一个串口设备都有设备文件与其关联,设备文件位于系统的/dev目录下面.如linux下的/ttyS0,/ttyS1分别表示的是串口1和串口2. 树莓派UART端口的位置:见下图的GPIO14(TXD).GPIO 15(RXD) 本文是基于

QT开发(五十)——QT串口编程基础

QT开发(五十)--QT串口编程基础 一.QtSerialPort简介 1.串口通信基础 目前使用最广泛的串口为DB9接口,适用于较近距离的通信.一般小于10米.DB9接口有9个针脚. 串口通信的主要参数如下: A.波特率:衡量通信速度的参数,表示每秒钟传送的bit的个数.例如9600波特表示每秒钟发送9600个bit. B.数据位:衡量通信中实际数据位的参数,当计算机发送一个信息包,实际包含的有效数据位个数. C.停止位:用于表示单个包的最后一位.典型的值为1和2位. D.奇偶校验位:串口通信

使用C#数组与串口编程的应用实例

我们从两个方面向你介绍C#串口编程具体的步骤,那么我们第一要注意使用串口编程 的软件是什么?并且要注意到它的安装及环境的配置,只有这些做得到位了,我们才可以做好之后的事情,那么接下来就是我们的编程实际动手,那么如何做好每一 步呢?下面就和大家一起分享下具体内容具体可以观看.NET/C#课程[1]:初学者应掌握的C#基础教程了解: C#串口编程1.虚拟串口软件 由于手上没有串口硬件,所以在网上找了一个 VSPM 虚拟串口软件 ,据说是免费的. 刚开始也不知道怎么用,摸索了一下,终于成功. 安装以后

Java串口编程

最近由于项目的需要,需要用到java串口和windows端java程序的通讯,笔者也是刚刚接触串口这一模块,在网上搜索了很多的串口编程实例之类的,几乎前篇一律吧,但是串口通讯之前的配置是非常重要的,如果配置没有成功,编程也显得没有意义.串口编程主要有两种接口,第一种是利用sun提供的comm.jar包,这种方式比较古老了,这个包也没有更新.第二种就是RXTX模式,这种模式其实和comm.jar包的模式几乎是一样的.下面就记下我学习和使用此模块的记录.RXTX资源包,网上有很多,但要注意的是看你的