为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

基于C#的串口通信上位机和下位机源程序

2017-09-30 29页 doc 67KB 324阅读

用户头像

is_014457

暂无简介

举报
基于C#的串口通信上位机和下位机源程序基于C#的串口通信上位机和下位机源程序 基于单片机串口通信的上位机和下位机实践 串口是计算机上一种非常通用设备通信的协议(不要与通用串行总线Universal Serial Bus或者USB混淆)。大多数计算机包含两个基于RS232的串口。串口同时也是仪器仪表设备通用的通信协议;很多GPIB兼容的设备也带有RS-232口。同时,串口通信协议也可以用于获取远程采集设备的数据。 串口通信的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接...
基于C#的串口通信上位机和下位机源程序
基于C#的串口通信上位机和下位机源程序 基于单片机串口通信的上位机和下位机实践 串口是计算机上一种非常通用设备通信的协议(不要与通用串行总线Universal Serial Bus或者USB混淆)。大多数计算机包含两个基于RS232的串口。串口同时也是仪器仪设备通用的通信协议;很多GPIB兼容的设备也带有RS-232口。同时,串口通信协议也可以用于获取远程采集设备的数据。 串口通信的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。比如IEEE488定义并行通行状态时,规定设备线总常不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。 首先亮出C#的源程序吧。 主要界面: 只是作为简单的运用,可以扩展的。 源代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO.Ports; using System.Timers; namespace 单片机功能控制 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } SerialPort sp = new SerialPort(); private void button1_Click(object sender, EventArgs e) { String str1 = comboBox1.Text;//串口号 String str2 = comboBox2.Text;//波特率 String str3 = comboBox3.Text;//校验位 String str4 = comboBox5.Text;//停止位 String str5 = comboBox4.Text;//数据位 Int32 int2 = Convert.ToInt32(str2);//将字符串转为整型 Int32 int5 = Convert.ToInt32(str5);//将字符串转为整型 groupBox3.Enabled = true;//LED控制界面变可选 try { if (button1.Text == "打开串口") { if (str1 == null) { MessageBox.Show("请先选择串口~", "Error"); return; } sp.Close(); sp = new SerialPort(); sp.PortName = comboBox1.Text;//串口编号 sp.BaudRate = int2;//波特率 switch (str4)//停止位 { case "1": sp.StopBits = StopBits.One; break; case "1.5": sp.StopBits = StopBits.OnePointFive; break; case "2": sp.StopBits = StopBits.Two; break; default: MessageBox.Show("Error:参数不正确", "Error"); break; } switch (str3) { case "NONE": sp.Parity = Parity.None; break; case "ODD": sp.Parity = Parity.Odd; break; case "EVEN": sp.Parity = Parity.Even; break; default: MessageBox.Show("Error:参数不正确", "Error"); break; } sp.DataBits = int5;//数据位 sp.Parity = Parity.Even;//设置串口属性 sp.Open();//打开串口 button1.Text = "关闭串口"; textBox1.Text = Convert.ToString(sp.PortName) + "已开启~"; } else { sp.Close(); button1.Text = "打开串口"; groupBox3.Enabled = false;//LED控制界面变灰色 textBox1.Text = Convert.ToString(sp.PortName) + "已关闭~"; } } catch (Exception er) { MessageBox.Show("Error:" + er.Message, "Error"); return; } } private void Form1_Load(object sender, EventArgs e) { //初始化 textBox1.Text = "欢迎使用简易的串口助手~"; groupBox3.Enabled = false;//LED控制界面变灰色 groupBox6.Enabled = false; groupBox7.Enabled = false; groupBox8.Enabled = false; button3.Enabled = false; button6.Enabled = false; timer1.Start(); try { foreach (string com in System.IO.Ports.SerialPort.GetPortNames()) //自动 获取串行口名称 this.comboBox1.Items.Add(com); //默认设置 comboBox1.SelectedIndex = 0;//选择第一个com口 comboBox2.SelectedIndex = 4;//波特率4800 comboBox3.SelectedIndex = 0;//校验位NONE comboBox4.SelectedIndex = 0;//停止位为1 comboBox5.SelectedIndex = 0;//数据位为8 } catch { MessageBox.Show("找不到通讯端口~", "串口调试助手"); } } private void timer1_Tick(object sender, EventArgs e) { label6.Text = DateTime.Now.ToString(); } private void button2_Click(object sender, EventArgs e) { try { if (button2.Text == "开启") { groupBox6.Enabled = true; radioButton1.Checked = false; radioButton2.Checked = false; radioButton3.Checked = false; radioButton4.Checked = false; checkBox1.Checked = false; checkBox2.Checked = false; checkBox3.Checked = false; checkBox4.Checked = false; checkBox5.Checked = false; checkBox6.Checked = false; checkBox7.Checked = false; checkBox8.Checked = false; button3.Enabled = true; textBox2.Text = String.Empty; button2.Text = "关闭"; } else { groupBox6.Enabled = false; button3.Enabled = false; button2.Text = "开启"; textBox2.Text = String.Empty; } } catch (Exception er) { MessageBox.Show("Error:" + er.Message, "Error"); return; } } private void button3_Click(object sender, EventArgs e) { groupBox6.Enabled = true; label7.Text = "已发送"; if (textBox2.Text == "") MessageBox.Show("发送失败,请选择发送的数据~"); else sp.WriteLine(textBox2.Text);//往串口写数据 } private void checkBox1_CheckedChanged(object sender, EventArgs e) { try { if (checkBox1.Checked) { checkBox1.Checked = true; checkBox2.Checked = false; checkBox3.Checked = false; checkBox4.Checked = false; checkBox5.Checked = false; checkBox6.Checked = false; checkBox7.Checked = false; checkBox8.Checked = false; label7.Text = "准备发送"; textBox2.Text = "1"; } } catch (Exception er) { MessageBox.Show("Error:" + er.Message, "Error"); return; } } private void checkBox2_CheckedChanged(object sender, EventArgs e) { try { if (checkBox2.Checked) { checkBox1.Checked = false; checkBox2.Checked = true; checkBox3.Checked = false; checkBox4.Checked = false; checkBox5.Checked = false; checkBox6.Checked = false; checkBox7.Checked = false; checkBox8.Checked = false; label7.Text = "准备发送"; textBox2.Text = "2"; radioButton1.Checked = false; radioButton2.Checked = false; radioButton3.Checked = false; radioButton4.Checked = false; } } catch (Exception er) { MessageBox.Show("Error:" + er.Message, "Error"); return; } } private void checkBox3_CheckedChanged(object sender, EventArgs e) { try { if (checkBox3.Checked) { checkBox1.Checked = false; checkBox2.Checked = false; checkBox3.Checked = true; checkBox4.Checked = false; checkBox5.Checked = false; checkBox6.Checked = false; checkBox7.Checked = false; checkBox8.Checked = false; radioButton1.Checked = false; radioButton2.Checked = false; radioButton3.Checked = false; radioButton4.Checked = false; label7.Text = "准备发送"; textBox2.Text = "3"; } } catch (Exception er) { MessageBox.Show("Error:" + er.Message, "Error"); return; } } private void checkBox4_CheckedChanged(object sender, EventArgs e) { try { if (checkBox4.Checked) { checkBox1.Checked = false; checkBox2.Checked = false; checkBox3.Checked = false; checkBox4.Checked = true; checkBox5.Checked = false; checkBox6.Checked = false; checkBox7.Checked = false; checkBox8.Checked = false; radioButton1.Checked = false; radioButton2.Checked = false; radioButton3.Checked = false; radioButton4.Checked = false; label7.Text = "准备发送"; textBox2.Text = "4"; } } catch (Exception er) { MessageBox.Show("Error:" + er.Message, "Error"); return; } } private void checkBox5_CheckedChanged(object sender, EventArgs e) { try { if (checkBox5.Checked) { checkBox1.Checked = false; checkBox2.Checked = false; checkBox3.Checked = false; checkBox4.Checked = false; checkBox5.Checked = true; checkBox6.Checked = false; checkBox7.Checked = false; checkBox8.Checked = false; radioButton1.Checked = false; radioButton2.Checked = false; radioButton3.Checked = false; radioButton4.Checked = false; label7.Text = "准备发送"; textBox2.Text = "5"; } } catch (Exception er) { MessageBox.Show("Error:" + er.Message, "Error"); return; } } private void checkBox6_CheckedChanged(object sender, EventArgs e) { try { if (checkBox6.Checked) { checkBox1.Checked = false; checkBox2.Checked = false; checkBox3.Checked = false; checkBox4.Checked = false; checkBox5.Checked = false; checkBox6.Checked = true; checkBox7.Checked = false; checkBox8.Checked = false; radioButton1.Checked = false; radioButton2.Checked = false; radioButton3.Checked = false; radioButton4.Checked = false; label7.Text = "准备发送"; textBox2.Text = "6"; } } catch (Exception er) { MessageBox.Show("Error:" + er.Message, "Error"); return; } } private void checkBox7_CheckedChanged(object sender, EventArgs e) { try { if (checkBox7.Checked) { checkBox1.Checked = false; checkBox2.Checked = false; checkBox3.Checked = false; checkBox4.Checked = false; checkBox5.Checked = false; checkBox6.Checked = false; checkBox7.Checked = true; checkBox8.Checked = false; radioButton1.Checked = false; radioButton2.Checked = false; radioButton3.Checked = false; radioButton4.Checked = false; label7.Text = "准备发送"; textBox2.Text = "7"; } } catch (Exception er) { MessageBox.Show("Error:" + er.Message, "Error"); return; } } private void checkBox8_CheckedChanged(object sender, EventArgs e) { try { if (checkBox8.Checked) { checkBox1.Checked = false; checkBox2.Checked = false; checkBox3.Checked = false; checkBox4.Checked = false; checkBox5.Checked = false; checkBox6.Checked = false; checkBox7.Checked = false; checkBox8.Checked = true; radioButton1.Checked = false; radioButton2.Checked = false; radioButton3.Checked = false; radioButton4.Checked = false; label7.Text = "准备发送"; textBox2.Text = "8"; } } catch (Exception er) { MessageBox.Show("Error:" + er.Message, "Error"); return; } } private void button5_Click(object sender, EventArgs e) { try { if (button5.Text == "开启") { radioButton1.Checked = false; radioButton2.Checked = false; radioButton3.Checked = false; radioButton4.Checked = false; checkBox1.Checked = false; checkBox2.Checked = false; checkBox3.Checked = false; checkBox4.Checked = false; checkBox5.Checked = false; checkBox6.Checked = false; checkBox7.Checked = false; checkBox8.Checked = false; groupBox7.Enabled = true; button6.Enabled = true; textBox2.Text = String.Empty; button5.Text = "关闭"; } else { groupBox7.Enabled = false; button6.Enabled = false; button5.Text = "开启"; textBox2.Text = String.Empty; } } catch (Exception er) { MessageBox.Show("Error:" + er.Message, "Error"); return; } } private void button6_Click(object sender, EventArgs e) { label7.Text = "已发送"; if (textBox2.Text == "") MessageBox.Show("发送失败。请选择发送的数据~"); else sp.WriteLine(textBox2.Text);//往串口写数据 } private void radioButton1_CheckedChanged(object sender, EventArgs e) { try { if (radioButton1.Checked) { label7.Text = "准备发送"; textBox2.Text = "9"; checkBox1.Checked = false; checkBox2.Checked = false; checkBox3.Checked = false; checkBox4.Checked = false; checkBox5.Checked = false; checkBox6.Checked = false; checkBox7.Checked = false; checkBox8.Checked = false; } } catch (Exception er) { MessageBox.Show("Error:" + er.Message, "Error"); return; } } private void radioButton2_CheckedChanged(object sender, EventArgs e) { try { if (radioButton2.Checked) { label7.Text = "准备发送"; textBox2.Text = "a"; checkBox1.Checked = false; checkBox2.Checked = false; checkBox3.Checked = false; checkBox4.Checked = false; checkBox5.Checked = false; checkBox6.Checked = false; checkBox7.Checked = false; checkBox8.Checked = false; } } catch (Exception er) { MessageBox.Show("Error:" + er.Message, "Error"); return; } } private void radioButton3_CheckedChanged(object sender, EventArgs e) { try { if (radioButton3.Checked) { label7.Text = "准备发送"; textBox2.Text = "b"; checkBox1.Checked = false; checkBox2.Checked = false; checkBox3.Checked = false; checkBox4.Checked = false; checkBox5.Checked = false; checkBox6.Checked = false; checkBox7.Checked = false; checkBox8.Checked = false; } } catch (Exception er) { MessageBox.Show("Error:" + er.Message, "Error"); return; } } private void radioButton4_CheckedChanged(object sender, EventArgs e) { try { if (radioButton4.Checked) { label7.Text = "准备发送"; textBox2.Text = "c"; checkBox1.Checked = false; checkBox2.Checked = false; checkBox3.Checked = false; checkBox4.Checked = false; checkBox5.Checked = false; checkBox6.Checked = false; checkBox7.Checked = false; checkBox8.Checked = false; } } catch (Exception er) { MessageBox.Show("Error:" + er.Message, "Error"); return; } } } } 下位机程序: #include #include #include #define uchar unsigned char //宏定义 #define uint unsigned int //宏定义 uchar b; //用来接收数据存储 uchar j=0; uint i=0; //用来判断相应的子程序 uchar LED1= 0xfe; //作为流水灯的开始 uchar LED2=0Xfe; //作为跑马灯的开始 uchar LED3 = 0xfE; //作为二进制加法灯的开始 uchar LED4=0XFF; //作为花样灯的开始 uchar code table[]= {0xff,//全灭 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,//依次逐个点亮 0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,//依次逐个叠加 0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff,//依次逐个递减 0x7e,0xbd,0xdb,0xe7,0xe7,0xdb,0xbd,0x7e,//两边靠拢后分开 0x7e,0x3c,0x18,0x00,0x00,0x18,0x3c,0x7e,//两边叠加后递减 0x00};//全亮 void delay(void); //延时函数的声明 void liushuideng(void); //流水灯的声明 void paomadeng(void); //跑马灯的声明 void huayangdeng(void); //花样灯的声明 void erjinzhideng(void); //二进制加法灯的声明 void xianshi(uint j); //显示程序 void init(void); //初始化函数 void main (void) { init(); //初始化 while(1) { xianshi(i); //显示 } } void init(void) //初始化函数的定义 { SCON = 0x50; //REN=1允许串行接受状态,串口工作模式1 TMOD|= 0x20; //定时器工作方式2 PCON|= 0x80; //TH1 = 0xFD; //baud*2 /* reload value 19200、数据位8、停止位1。效验位无 (11.0592) TH1 = 0xF3; //baud*2 /* 波特率4800、数据位8、停止位1。效验位无 (12M) TL1 = 0xF3; TR1 = 1; //开启定时器 PS=1; //把串口中断的优先级设为最高 ES = 1; //开串口中断 EA = 1; // 开总中断 // IE = 0x0; } void delay(void) //延时函数的定义 { uchar i; uchar ms=250; while(ms--) { for(i = 0; i < 120; i++); } } void liushuideng(void) //流水灯 { P2 = LED1; delay(); LED1 = LED1 << 1; //循环右移1位,点亮下一个LED "<<"为左移位 if(P2 ==0X00 ) { LED1 = 0xfe; } // 0xfe = 1111 1110 } void paomadeng(void) //跑马灯 { P2 = LED2; LED2 = _crol_(LED2,1); //循环右移1位,点亮下一个LED 此函数位库函数 delay(); } void huayangdeng(void) //花样灯 { P2=table[j++]; delay(); if(j==42) j=0; } void erjinzhideng(void) //二进制加法灯 { P2 = LED4; delay(); LED4--; } void xianshi(uint j) //调用相对应的程序 { if(j==1) P2=0xfe; //点亮第一个LED if(j==2) P2=0xfd; //点亮第二个LED if(j==3) P2=0xfb; //点亮第三个LED if(j==4) P2=0xf7; //点亮第四个LED if(j==5) P2=0xef; //点亮第五个LED if(j==6) P2=0xdf; //点亮第六个LED if(j==7) P2=0xbf; //点亮第七个LED if(j==8) P2=0x7f; //点亮第八个LED if(j==9) liushuideng(); //流水灯 if(j==10) paomadeng(); //跑马灯 if(j==11) huayangdeng(); //花样灯 if(j==12) erjinzhideng(); //二进制加法灯 } void com_isr(void) interrupt 4 //串口中断入口函数 { ES=0; //再中断进行处理程序的时候关闭串口中断 b=SBUF; //将接收的数据存于变量中 switch(b) //分支语句,进行判断 { case '1':i=1;break; //点亮第一个LED的赋值 case '2':i=2;break; //点亮第二个LED的赋值 case '3':i=3;break; //点亮第三个LED的赋值 case '4':i=4;break; //点亮第四个LED的赋值 case '5':i=5;break; //点亮第五个LED的赋值 case '6':i=6;break; //点亮第六个LED的赋值 case '7':i=7;break; //点亮第七个LED的赋值 case '8':i=8;break; //点亮第八个LED的赋值 case '9':i=9;break; //流水灯的赋值 case 'a':i=10;break; //跑马灯的赋值 case 'b':i=11;break; //花样灯的赋值 case 'c':i=12;break; //二进制加法灯的赋值 default: break; } RI=0; //清除中断标志位 ES=1; //处理完中断程序再开启串口中断 }
/
本文档为【基于C#的串口通信上位机和下位机源程序】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索