C#通过串口模拟交通灯程序

本文介绍了如何使用C#通过串口与单片机通讯,模拟交通灯控制系统。程序借助定时器发送信息到单片机,并实时更新界面显示交通灯状态。在实现过程中,使用了System.IO.Ports库处理串口通信,通过SerialPort类的成员函数发送ASCII码字符串。同时,利用定时器进行仿真模拟,但作者认为可能使用线程处理会更优化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     前阵子,一个同学让我帮他写个单片机控制交通灯的程序,我帮他写了程序之后,改进和完善了他的要求,使得我们可以通过PC端直接模拟这个系统。在完成的过程中,也遇到过不少问题,很多收获,这里写出来分享下。

     本文要实现的目标是与单片机通讯,将我们需要模拟的信息传递给单片机程序;界面上能实时显示交通灯的状况。

  因此,主要有两点,需要重点考虑:一是把界面的信息传递到单片机,一是可以不断更新界面的显示。这里我使用串口发送信息;使用定时器刷新界面内容。如图所示:

    

  程序中首先是串口的使用,在C#中需要包含using System.IO.Ports;

//定义串口
SerialPort sp = null;
//串口的状态
bool isOpen = false;

//全局变量,表示红绿黄灯亮时间
 int  totalTimeg = 40;
 int  totalTimer= 60;
 int  totalTimey= 20;
 int _timeg= 40;
 int _timer= 60;
 int _timey= 20;

//设置串口的属性
sp = new SerialPort();
//设置串口名
sp.PortName = "COM1";
//设置串口的波特率
sp.BaudRate = 9600;
//打开串口
sp.Open();
isOpen = true;

接下来就是发送数据了,使用SerialPort类的成员函数可以实现:

//向串口发送数据
       public void SendCommand(string CommandString)
       {
              byte[] WriteBuffer =Encoding.ASCII.GetBytes(CommandString);
              sp.Write(WriteBuffer, 0, WriteBuffer.Length);
       }

  这样就把信息发给单片机了,CommandString为发送的字符串,这里是以ASCII码发送的。

   然后就是定时器程序,可以进行仿真模拟:

private voidtimer1_Tick(object sender, EventArgs e)
   {
        int nSelect =comboBox7.SelectedIndex + 1;
        switch (nSelect)
        {
            case 1:
               textBox1.Text =_timeg.ToString();
               textBox3.Text =_timeg.ToString();
               pictureBox1.BackColor =Color.Green;
               pictureBox3.BackColor =Color.Green;
               _timeg--;
               textBox2.Text =_timer.ToString();
               pictureBox2.BackColor =Color.Red;
               _timer--;
               textBox4.Visible = false;
               pictureBox4.Visible =false;
        
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值