Visual Studio 2019实现c51上位机控制数码管显示数字

初学者编写上位机程序

本人在编写上位机的时候花了很多时间,终于找到了正确的方法,在此分享一下,傻瓜式教学,希望能够对大家有所帮助!

上位机编写环境

我选择编写上位机的环境是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<reg52.h>
#define duan P0
#define uint unsigned int
#define uchar unsigned char

uchar date;
sbit wei1 = P2^4;
sbit wei2 = P2^5;
sbit wei3 = P2^6;
sbit 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”。

效果图

在这里插入图片描述
在这里插入图片描述

注意正确选择波特率
分享不易,感觉不错可以点个赞~

  • 11
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值