菜鸟一枚,为了科创自学C#,困难重重啊
我们做的是一个红外线人流量勘测系统,我负责的是将单片机检测到的数据更新到数据库中,我之前也没有接触过单片机,然后就有一点迷茫,上网查了一下资料,好像是单片机作为下位机,然后用c#写上位机程序,但我不知道具体的是什么意思。写上机位程序是用SerialPort类吗?我想先弄懂怎么接收到单片机的数据,望高人指一条明路,最好是有实例借给我看看,或者给我推荐相关的资料,谢谢了!!!

解决方案 »

  1.   

    单片机和上位机如果用串口通讯,就用SerialPort类,但是也有用USB口,或者Lan口通讯的。这东西看资料没用,先问硬件开发商了解清楚具体硬件的规格、接口、编程方式再说!
      

  2.   

    知道是51单片机 想用SerialPort类写程序 请问有相关的例子或资料推荐吗?
      

  3.   


    这种得有开发说明文档的还会有demo
      

  4.   

    public class MyPort
        {        
            /// <summary>
            /// 设置串口参数
            /// </summary>
            /// <returns></returns>
            public static void SetPortParameter(SerialPort port)
            {            
                try
                {
                    port.PortName = Common.ReadXml(Names.COM, true);
                    port.BaudRate = Convert.ToInt32(Common.ReadXml(Names.BAUDRATE,true));
                    port.DataBits = Convert.ToInt32(Common.ReadXml(Names.DATABITS, true));
                    port.Parity = ConvertParity(Common.ReadXml(Names.PARITY, true));
                    port.StopBits = ConvertStopBits(Common.ReadXml(Names.STOPBITS, true));
                    port.ReadBufferSize = 1024;
                    port.WriteBufferSize = 512;
                    port.ReceivedBytesThreshold = 1;
                }
                catch
                {
                    Common.WriteLog("串口初始化出现异常,配置有问题");
                }           
            }
            /// <summary>
            /// 打开串口
            /// </summary>
            /// <returns></returns>
            public static bool OpenPort(SerialPort port)
            {
                try
                {
                    if (!port.IsOpen)
                    {
                        port.Open();
                    }
                    return true;
                }
                catch
                {
                    return false;
                }
            }
            /// <summary>
            /// 转换为奇偶校验
            /// </summary>
            /// <param name="parity"></param>
            /// <returns></returns>
            public static Parity ConvertParity(string parity)
            {
                switch (parity)
                {
                    case "None":
                        return Parity.None;
                    case "Odd":
                        return Parity.Odd;
                    case "Even":
                        return Parity.Even;
                    case "Mark":
                        return Parity.Mark;
                    case "Space":
                        return Parity.Space;
                    default:
                        return Parity.None;
                }
            }
            /// <summary>
            /// 停止位
            /// </summary>
            /// <param name="stopbits"></param>
            /// <returns></returns>
            public static StopBits ConvertStopBits(string stopbits)
            {
                switch (stopbits)
                {
                    case "1":
                        return StopBits.One;
                    case "1.5":
                        return StopBits.OnePointFive;
                    case "2":
                        return StopBits.Two;
                    default:
                        return StopBits.One;
                }
            }      
            /// <summary>
            /// 计算机仪表发送信息
            /// </summary>
            /// <param name="sendByteDate">信息内容</param>
            /// <param name="port">串口对象</param>
            /// <returns></returns>
            public static bool SendCommand(byte[] sendByteDate,SerialPort port)
            {
                try
                {
                    port.Write(sendByteDate, 0, sendByteDate.Length);
                    Thread.Sleep(20);
                    return true;
                }
                catch
                {
                    Common.WriteLog("向仪表发送信息时发生错误");
                    return false;
                }
            }
      

  5.   

    接受数据(根据你下位机协议处理):private void port_DataReceived(object sender,System.IO.Ports.SerialDataReceivedEventArgs e)
            {   
                      //依据协议读取数据缓冲区并处理
             }
      

  6.   

    给你个C#串口调试工具,带源码。
    http://download.csdn.net/detail/yeqi3000/4853494
      

  7.   

    思路:
    1。单片机处理红外感应计数,即是累计 +1。存在单片机变量里。(下位机)
    2。电脑程序一般通过串口(COM,RS232)访问单片机,让单片机将累计值发给程序。(上位机)
    3。上位机通过C#的 SerialPort类可以访问串口联接的单片机,收发都可以。
      

  8.   

    看看这个帖子,照猫画虎学会串口通信,我就是这样开始的:
    http://bbs.csdn.net/topics/350038794
    good luck!!!!
      

  9.   

    如果要通过串口进行通信的话
    LZ去找下SerialPort的相关资料,找几个例子看下,这个一搜就有的,照葫芦画瓢,画多了就会了
    简单得设置下,先能通信再说
    先放置个SerialPort控件,名称为sp1.简单的写几条代码,自己根据需要添加东西。sp1.PortName="COM1";
    sp1.BaudRate=9600;
    sp1.Open();
    byte[]send={01,02,03};
    sp1.Write(send,0,3);//发送的话就这样发送给sp1绑定DataReceived事件,然后就可以在事件里写接收代码了
    int len=sp1.BytesToRead;
    byte[] received=new byte[len];
    sp1.Read(received,0,len);//从串口读取数据
    以上是最简单的了,根据需要自己添加吧