完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本人在编写上位机的时候花了很多时间,终于找到了正确的方法,在此分享一下,傻瓜式教学,希望能够对大家有所帮助!
上位机编写环境 我选择编写上位机的环境是Visual Studio 2019,编程语言是C#,环境的安装以及配置在此就不做过多阐述。 上位机窗体设计 打开Visual Studio 2019,选择创建新项目,搜索选择Windows窗体应用 给自己的项目起名 创建项目后即可看到form窗口,在窗口中添加组件,如图所示,“串口设置”的灰色框是GroupBox组件,下拉选框是ConboBox组件,按钮是Button组件,串口输入框是TextBox组件,其中还有Label组件。 设置好之后就可以开始对组件功能进行设计了。 上位机界面功能代码 form界面 在form界面写初始化串口以及波特率,填入下拉选框 private void Form1_Load(object sender, EventArgs e) { //添加波特率列表 string[] baud = { "9600", "115200" }; comboBox2.Items.AddRange(baud); //设置选项默认值 comboBox2.Text = "115200"; //获取电脑当前可用串口并添加到选项列表中 comboBox1.Items.AddRange(System.IO.Ports.SerialPort.GetPortNames()); } “打开串口”代码 代码实现打开代码功能 private void button1_Click(object sender, EventArgs e) { try { //将可能产生异常的代码放置在try块中 //根据当前串口属性来判断是否打开 if (serialPort1.IsOpen) { //串口已经处于打开状态 serialPort1.Close(); //关闭串口 button1.Text = "打开串口"; comboBox1.Enabled = true; comboBox2.Enabled = true; } else { //串口已经处于关闭状态,则设置好串口属性后打开 comboBox1.Enabled = false; comboBox2.Enabled = false; serialPort1.PortName = comboBox1.Text; serialPort1.BaudRate = Convert.ToInt32(comboBox2.Text); serialPort1.DataBits = 8; serialPort1.Parity = System.IO.Ports.Parity.None; serialPort1.StopBits = System.IO.Ports.StopBits.One; serialPort1.Open(); //打开串口 button1.Text = "关闭串口"; } } catch (Exception ex) { //捕获可能发生的异常并进行处理 //捕获到异常,创建一个新的对象,之前的不可以再用 serialPort1 = new System.IO.Ports.SerialPort(); //刷新COM口选项 comboBox1.Items.Clear(); comboBox1.Items.AddRange(System.IO.Ports.SerialPort.GetPortNames()); //响铃并显示异常给用户 System.Media.SystemSounds.Beep.Play(); button1.Text = "打开串口"; button1.BackColor = Color.ForestGreen; MessageBox.Show(ex.Message); comboBox1.Enabled = true; comboBox2.Enabled = true; } } “发送”按钮代码 将文本框中的内容发送到串口 private void button2_Click(object sender, EventArgs e) { try { serialPort1.Write(textBox2.Text); } catch (Exception exx) { MessageBox.Show("发送失败,原因:"+exx.Message); } } 上位机机全部代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace C51_serial_LED { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { try { //将可能产生异常的代码放置在try块中 //根据当前串口属性来判断是否打开 if (serialPort1.IsOpen) { //串口已经处于打开状态 serialPort1.Close(); //关闭串口 button1.Text = "打开串口"; comboBox1.Enabled = true; comboBox2.Enabled = true; } else { //串口已经处于关闭状态,则设置好串口属性后打开 comboBox1.Enabled = false; comboBox2.Enabled = false; serialPort1.PortName = comboBox1.Text; serialPort1.BaudRate = Convert.ToInt32(comboBox2.Text); serialPort1.DataBits = 8; serialPort1.Parity = System.IO.Ports.Parity.None; serialPort1.StopBits = System.IO.Ports.StopBits.One; serialPort1.Open(); //打开串口 button1.Text = "关闭串口"; } } catch (Exception ex) { //捕获可能发生的异常并进行处理 //捕获到异常,创建一个新的对象,之前的不可以再用 serialPort1 = new System.IO.Ports.SerialPort(); //刷新COM口选项 comboBox1.Items.Clear(); comboBox1.Items.AddRange(System.IO.Ports.SerialPort.GetPortNames()); //响铃并显示异常给用户 System.Media.SystemSounds.Beep.Play(); button1.Text = "打开串口"; button1.BackColor = Color.ForestGreen; MessageBox.Show(ex.Message); comboBox1.Enabled = true; comboBox2.Enabled = true; } } private void Form1_Load(object sender, EventArgs e) { //添加波特率列表 string[] baud = { "9600", "115200" }; comboBox2.Items.AddRange(baud); //设置选项默认值 comboBox2.Text = "115200"; //获取电脑当前可用串口并添加到选项列表中 comboBox1.Items.AddRange(System.IO.Ports.SerialPort.GetPortNames()); } private void button2_Click(object sender, EventArgs e) { try { serialPort1.Write(textBox2.Text); } catch (Exception exx) { MessageBox.Show("发送失败,原因:"+exx.Message); } } } } 单片机烧录代码 单片机需要编写自己想要实现的功能代码 并 烧录 #include #define duan P0 #define uint unsigned int #define uchar unsigned char uchar date; ***it wei1 = P2^4; ***it wei2 = P2^5; ***it wei3 = P2^6; ***it wei4 = P2^7; void UsartConfiguration(){ SCON = 0x50; TMOD = 0x20; PCON = 0x00; TH1 = 0Xfd; TL1 = 0Xfd; ES=1; EA=1; TR1=1; } void main(){ UsartConfiguration(); wei1=1; wei2=1; wei3=1; wei4=1; while(1); } void uart()interrupt 4{ //uchar receiveData; date=SBUF; switch(date){ case '0':duan = 0x3f;break;//0 case '1':duan = 0x06;break;//1 case '2':duan = 0x5b;break;//2 case '3':duan = 0x4f;break;//3 case '4':duan = 0x66;break;//4 case '5':duan = 0x6d;break;//5 case '6':duan = 0x7d;break;//6 case '7':duan = 0x07;break;//7 case '8':duan = 0x7f;break;//8 case '9':duan = 0x6f;break;//9 default:duan = 0x71;break;//F } //receiveData=SBUF; RI=0; SBUF=date; while(!TI) ; TI=0; } 功能说明:串口发送0~9的数字,数码管显示4个数字,如“0000”或者“1111”;如果输入其他非法字符,则显示“FFFF”。 效果图 |
|
|
|
只有小组成员才能发言,加入小组>>
3280 浏览 9 评论
2958 浏览 16 评论
3460 浏览 1 评论
9004 浏览 16 评论
4052 浏览 18 评论
1115浏览 3评论
573浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
571浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2303浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1860浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 17:41 , Processed in 1.244103 second(s), Total 80, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号