请问学习C#,应如何开始,我是新手学习股票,谢谢

C# 串口操作系列(1)
C# 串口操作系列(1)
53558人阅读
我假设读者已经了解了c#的语法,本文是针对刚打算解除串口编程的朋友阅读的,作为串口编程的入门范例,也是我这个系列的基础。
我们的开发环境假定为vs2005(虽然我在用vs2010,但避免有些网友用2005,不支持lambda,避免不兼容,就用2005来做例子)
一个基本的串口程序,既然是个程序了。我们就先从功能说起,包含
波特率选择
接受数据显示
发送数据输入
数据量提示以及归零
好吧,有了这些功能,我们就先画出界面。例如:
这里,波特率就定死几种好了。直接界面上添加00,,
comboPortName这里,为了我们的软件能通用所有电脑避免每次查询的效率损失,我们使用微软提供的枚举方式,代码如下:
[c-sharp] string[]&ports&=&SerialPort.GetPortNames();&&Array.Sort(ports);&&comboPortName.Items.AddRange(ports);&&
显然,我们需要定义一个SerialPort对象。添加DataReceived事件响应收到数据,还有一个重点,我们需要记得设置NewLine属性哦。好想有的版本不设置的时候,WriteLine和Write效果一样。
所以,我们需要初始化SerialPort对象,例如:
[c-sharp] &&comm.NewLine&=&"/r/n";&&comm.RtsEnable&=&true;&&&&comm.DataReceived&+=&comm_DataR&&
&初始化好串口,简单的编写打开,关闭方法,编写界面响应的是否自动换行,如何复位计数器,发送方法。以及数据处理。因为我已经写了完整注视,我就直接贴代码了。
&[c-sharp] using&S&&using&System.Collections.G&&using&ponentM&&using&System.D&&using&System.D&&using&System.L&&using&System.T&&using&System.Windows.F&&using&System.IO.P&&using&System.Text.RegularE&&namespace&SerialportSample&&{&&&&&&public&partial&class&SerialportSampleForm&:&Form&&&&&&{&&&&&&&&&&private&SerialPort&comm&=&new&SerialPort();&&&&&&&&&&private&StringBuilder&builder&=&new&StringBuilder();&&&&&&&&&&private&long&received_count&=&0;&&&&&&&&&&private&long&send_count&=&0;&&&&&&&&&&public&SerialportSampleForm()&&&&&&&&&&{&&&&&&&&&&&&&&InitializeComponent();&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&private&void&Form1_Load(object&sender,&EventArgs&e)&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&string[]&ports&=&SerialPort.GetPortNames();&&&&&&&&&&&&&&Array.Sort(ports);&&&&&&&&&&&&&&comboPortName.Items.AddRange(ports);&&&&&&&&&&&&&&comboPortName.SelectedIndex&=&comboPortName.Items.Count&&&0&?&0&:&-1;&&&&&&&&&&&&&&comboBaudrate.SelectedIndex&=&comboBaudrate.Items.IndexOf("9600");&&&&&&&&&&&&&&&&&&&&&&&&&&&&comm.NewLine&=&"/r/n";&&&&&&&&&&&&&&comm.RtsEnable&=&true;&&&&&&&&&&&&&&&&&&&&&&&&&&&&comm.DataReceived&+=&comm_DataR&&&&&&&&&&}&&&&&&&&&&void&comm_DataReceived(object&sender,&SerialDataReceivedEventArgs&e)&&&&&&&&&&{&&&&&&&&&&&&&&int&n&=&comm.BytesToR&&&&&&&&&&&&&&byte[]&buf&=&new&byte[n];&&&&&&&&&&&&&&received_count&+=&n;&&&&&&&&&&&&&&comm.Read(buf,&0,&n);&&&&&&&&&&&&&&builder.Clear();&&&&&&&&&&&&&&&&&&&&&&&&&&&&this.Invoke((EventHandler)(delegate&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&if&(checkBoxHexView.Checked)&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&foreach&(byte&b&in&buf)&&&&&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&builder.Append(b.ToString("X2")&+&"&");&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&else&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&builder.Append(Encoding.ASCII.GetString(buf));&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&this.txGet.AppendText(builder.ToString());&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&labelGetCount.Text&=&"Get:"&+&received_count.ToString();&&&&&&&&&&&&&&}));&&&&&&&&&&}&&&&&&&&&&private&void&buttonOpenClose_Click(object&sender,&EventArgs&e)&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&if&(comm.IsOpen)&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&comm.Close();&&&&&&&&&&&&&&}&&&&&&&&&&&&&&else&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&comm.PortName&=&comboPortName.T&&&&&&&&&&&&&&&&&&comm.BaudRate&=&int.Parse(comboBaudrate.Text);&&&&&&&&&&&&&&&&&&try&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&comm.Open();&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&catch(Exception&ex)&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&comm&=&new&SerialPort();&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&MessageBox.Show(ex.Message);&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&buttonOpenClose.Text&=&comm.IsOpen&?&"Close"&:&"Open";&&&&&&&&&&&&&&buttonSend.Enabled&=&comm.IsO&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&private&void&checkBoxNewlineGet_CheckedChanged(object&sender,&EventArgs&e)&&&&&&&&&&{&&&&&&&&&&&&&&txGet.WordWrap&=&checkBoxNewlineGet.C&&&&&&&&&&}&&&&&&&&&&private&void&buttonSend_Click(object&sender,&EventArgs&e)&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&int&n&=&0;&&&&&&&&&&&&&&&&&&&&&&&&&&&&if&(checkBoxHexSend.Checked)&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&MatchCollection&mc&=&Regex.Matches(txSend.Text,&@"(?i)[/da-f]{2}");&&&&&&&&&&&&&&&&&&List&byte&&buf&=&new&List&byte&();&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&foreach&(Match&m&in&mc)&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&buf.Add(byte.Parse(m.Value));&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&comm.Write(buf.ToArray(),&0,&buf.Count);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&n&=&buf.C&&&&&&&&&&&&&&}&&&&&&&&&&&&&&else&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&if&(checkBoxNewlineSend.Checked)&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&comm.WriteLine(txSend.Text);&&&&&&&&&&&&&&&&&&&&&&n&=&txSend.Text.Length&+&2;&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&else&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&comm.Write(txSend.Text);&&&&&&&&&&&&&&&&&&&&&&n&=&txSend.Text.L&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&}&&&&&&&&&&&&&&send_count&+=&n;&&&&&&&&&&&&&&labelSendCount.Text&=&"Send:"&+&send_count.ToString();&&&&&&&&&&}&&&&&&&&&&private&void&buttonReset_Click(object&sender,&EventArgs&e)&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&send_count&=&received_count&=&0;&&&&&&&&&&&&&&labelGetCount.Text&=&"Get:0";&&&&&&&&&&&&&&labelSendCount.Text&=&"Send:0";&&&&&&&&&&}&&&&&&}&&}&&
至此,一个标准的串口调试助手就完成了。留下一个思考题,如果接收数据后,更新界面的时候,尚未操作完成,此时并发了关闭串口的操作。程序会如何呢?敬请阅读《C# 串口操作系列(2) -- 如何避免关闭串口偶尔软件死锁》。
//append by wuyazhe @
上面有一点疏漏,源自第一篇,结果到这里还是没修改,源码中有一行,需要修改一下。
//发送按钮中
buf.Add(byte.Parse(m.Value));
buf.Add(byte.Parse(m.Value,System.Globalization.NumberStyles.HexNumber));
if(checkSendHex.Checked)&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&MatchCollection&mc&=&Regex.Matches(textBoxSend.Text,&@"(?i)[\da-f]{2}");&&&&&&&&&&&&&&&&&List&byte&&buf&=&new&List&byte&();&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&foreach&(Match&m&in&mc)&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&buf.Add(byte.Parse(m.Value,System.Globalization.NumberStyles.HexNumber));&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&comm.Write(buf.ToArray(),&0,&buf.Count);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}&&楼主。字符转数据byte.Parse后面要加参数System.Globalization.NumberStyles.HexNumber才能发送16进制,不然输入a-f就会导致程序崩溃。
用 户 名:u评论内容:&&
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:176285次
积分:2041分
排名:第3574名
原创:37篇
评论:813条
(1)(1)(1)(1)(5)展开
发表评论:
TA的最新馆藏本人新手,请问JS应该怎么学习?求大神指点!!!-中国学网-中国IT综合门户网站-提供健康,养生,留学,移民,创业,汽车等信息
> 信息中心 >
本人新手,请问JS应该怎么学习?求大神指点!!!
来源:互联网 发表时间: 16:05:45 责任编辑:鲁晓倩字体:
为了帮助网友解决“本人新手,请问JS应该怎么学习?求大神指点!!!”相关的问题,中国学网通过互联网对“本人新手,请问JS应该怎么学习?求大神指点!!!”相关的解决方案进行了整理,用户详细问题包括:<,具体解决方案如下:解决方案1: 刊个人学习能力吧,先学JQ找点代码的感觉,然后差不多了就学JS,学JS的过程中可以一起学JQ,也要看个人悟性 查看更多答案&& 解决方案2: 那要看你玩什么样的了。说实在的不推荐这个英雄,不过个人有个人的喜好。&APJS的加点是主Q副W一级E有大点大,这里注意的是,玩APJS最忌讳的就是你的W乱用,W和大是APJS的2大保命绝招了,用好了还能反杀。&ADJS那没什么好说的了,基本都是主E副Q一级W,有大点大。不过也看情况,对线或者打野什么的如果你符文不是很好的话W尽量多点下,E先放着,Q绝对不能少加,怎么说呢。。。这也是我的一种个人经验吧,不要贪E加的几点攻击,你要知道,只要你发展好了不会缺那么几点攻击力。而且加满E只是时间的问题&解决方案3: 建议新手用半肉AD剑圣,AP的话要掌握好团战切入时机,以及对线技巧,对新手而言,半肉剑圣相对来说比较容易解决方案4: 我建议先从Jq入门,我本人就是这样的,因为一开始直接看JS的话,可能你看好久也不一定能写出一个绚丽的效果,这样会打击你的积极性,JQ上手要简单容易,你可能1,2行代码就能写个小效果,这样会增加你的兴趣和学习热情,慢慢的学习的深入了,自然就需要渗入JS的知识了! 查看更多答案&& 解决方案5: 好吧 光说不练假把式………… 做技术 尤其写代码的……只需要三个字“做中学”加一点点的程序 思维逻辑天赋 查看更多答案&& 解决方案6: 学习了。。。。。。。。。。 我也是来学习的 查看更多答案&&
1个回答1个回答1个回答1个回答1个回答1个回答1个回答1个回答1个回答1个回答
相关文章:
最新添加资讯
24小时热门资讯
Copyright &#169; 2004- All Rights Reserved. 中国学网 版权所有
京ICP备号-1 京公网安备02号如何学习C#,帮忙带新手入门,自学从哪里开始,看一些什么书?
[问题点数:20分,结帖人harvey0930]
如何学习C#,帮忙带新手入门,自学从哪里开始,看一些什么书?
[问题点数:20分,结帖人harvey0930]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2012年4月 Delphi大版内专家分月排行榜第三2011年8月 Delphi大版内专家分月排行榜第三
2012年4月 Delphi大版内专家分月排行榜第三2011年8月 Delphi大版内专家分月排行榜第三
2012年4月 Delphi大版内专家分月排行榜第三2011年8月 Delphi大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。请问学习C#,应如何开始,我是新手,谢谢_百度知道
请问学习C#,应如何开始,我是新手,谢谢
提问者采纳
然后再在上面不断扩展功能,先写helloworld,从最简单的开始写?语法而已,难度会大大降低!只要善于把想法变成代码;的计算器,比如做个只有+-*&#47,数据类型的研究和了解。然后就可以写个自己觉得简单的程序,看书能看懂什么啊最简单的方法就是写代码,那你编程就等于在想象了,借此发展为对输入输出。程序都是写出来的
提问者评价
来自团队:
其他类似问题
为您推荐:
其他3条回答
,,如果你以前,,,从来都没接触过的话,那就多在电脑上玩玩吧,
在电脑上怎么玩,请详细指导下,我是菜鸟中的菜鸟。之前没有接触过。
其实比较简单,你只需要掌握类型就行了.
c语言学过吗? 底子一定要打牢,看书先把语法搞定,多实践。
您可能关注的推广
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁}

我要回帖

更多关于 新手学习股票 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信