以STM32单片机为基础,完成微控制器应用系统开发,要求完
成如下功能:
1、能够完成环境温度的获取,精度为0.1摄氏度,(如果做
不出可用固定代替,也有分);
2、能够将获取的环境温度通过串口上发到PC机显示;
3、可以通过两个按键增加或者降低获取温度并上发的频率;
拿着正点原子的开发板电路,照着画就可以了啊!要什么功能加什么器件~
开发工具为VS,语言为C#。
首先先新建项目,选择visual C#语言下面的windows窗体应用程序。
然后设置窗体的组件,在工具箱中有各种各样的组件,使用的话可以拖需要的组件进入到form中即可,按照预期的功能设置窗体,最终窗体界面如下:
在该窗体中,预设两个下拉框用来设置端口与波特率,一个开关用来连接和断开上位机和单片机间的通信,一个文本框用来显示当前的状态,一个文本框用来显示历史接收数据,一个下拉框用来选择用户想要单片机呈现的状态,一个按钮用来将用户选择的状态信息传输到单片机一端,从而上位机控制的效果。
private void Form1_Load(object sender, EventArgs e)
{
for (int i = 0; i < 20; i++)
{
try
{
string str = "COM" + i;
serialPort1.PortName = str;
serialPort1.Open();
comboBox1.Items.Add(str);
serialPort1.Close();
comboBox1.Text = str;
}
catch { }
}
comboBox1.Text = "COM3";
comboBox2.Text = "115200";
}
上述代码用来自动设置上位机的端口号,从而实现上位机与单片机的连接,若已知端口和波特率的话,也可直接设置comboBox1.Text为已知端口号,设置comboBox2.Text为已知波特率。
private void button1_Click(object sender, EventArgs e)
{
if(Button_State)
{
try
{
serialPort1.PortName = comboBox1.Text;
serialPort1.BaudRate = Convert.ToInt32(comboBox2.Text, 10);
serialPort1.Open();
button1.Text = "断开";
Button_State = false;
}
catch (Exception)
{
if (serialPort1.IsOpen)
serialPort1.Close();
MessageBox.Show("端口打开失败,请检查端口", "错误");
}
}
else
{
serialPort1.Close();
button1.Text = "连接";
Button_State = true;
}
}
上述代码是点击“断开/连接”按钮后触发的函数代码,用变量Button_State表示当前上位机与单片机间是否连接,根据连接情况与否,通过if 语句执行对应的代码,通过函数serialPort1.Close()来断开连接,通过serialPort1.PortName来设置端口号,通过serialPort1.BaudRate来设置波特率,通过serialPort1.Open()来开启连接。
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
textBox2.Text=serialPort1.ReadExisting();
if (textBox2.Text.Contains("LCD"))
textBox2.Text = " ";
textBox1.AppendText(textBox2.Text);
if (textBox2.Text.Contains("流"))
textBox3.Text = "流水灯";
else if (textBox2.Text.Contains("闪"))
textBox3.Text = "闪烁";
else if (textBox2.Text.Contains("第"))
textBox3.Text = "第一个";
else if (textBox2.Text.Contains("灭"))
textBox3.Text = "全灭";
else if (textBox2.Text.Contains("亮"))
textBox3.Text = "全亮";
}
上述代码用来显示当前单片机的状态,通过中断的方式,当单片机向上位机传输数据时,就执行以上代码。在单片机的程序中,向上位机传输数据的代码是printf(),而在上位机的程序中,用textBox2.Text即可拿到传输的数据,Contain()函数表示是否包含某个字符,通过设置textBox3.Text从而在窗体中显示当前的状态。