菜鸟一枚,为了科创自学C#,困难重重啊
我们做的是一个红外线人流量勘测系统,我负责的是将单片机检测到的数据更新到数据库中,我之前也没有接触过单片机,然后就有一点迷茫,上网查了一下资料,好像是单片机作为下位机,然后用c#写上位机程序,但我不知道具体的是什么意思。写上机位程序是用SerialPort类吗?我想先弄懂怎么接收到单片机的数据,望高人指一条明路,最好是有实例借给我看看,或者给我推荐相关的资料,谢谢了!!!
我们做的是一个红外线人流量勘测系统,我负责的是将单片机检测到的数据更新到数据库中,我之前也没有接触过单片机,然后就有一点迷茫,上网查了一下资料,好像是单片机作为下位机,然后用c#写上位机程序,但我不知道具体的是什么意思。写上机位程序是用SerialPort类吗?我想先弄懂怎么接收到单片机的数据,望高人指一条明路,最好是有实例借给我看看,或者给我推荐相关的资料,谢谢了!!!
这种得有开发说明文档的还会有demo
{
/// <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;
}
}
{
//依据协议读取数据缓冲区并处理
}
http://download.csdn.net/detail/yeqi3000/4853494
1。单片机处理红外感应计数,即是累计 +1。存在单片机变量里。(下位机)
2。电脑程序一般通过串口(COM,RS232)访问单片机,让单片机将累计值发给程序。(上位机)
3。上位机通过C#的 SerialPort类可以访问串口联接的单片机,收发都可以。
http://bbs.csdn.net/topics/350038794
good luck!!!!
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);//从串口读取数据
以上是最简单的了,根据需要自己添加吧