本程序严谨程度不高,仅适合新手做成功程序使用,严谨程序后续会有更新.
这两个程序结合起来是可以用的.
单片机程序代码(用于在收到数据后做出反应)
//整合自STC官方文档
#include "reg52.h"
#include "intrins.h"
typedef unsigned char u8;
typedef unsigned int u16;
bit busy;//这个变量暂时没用
#define FOSC 12000000L //单片机的频率
#define BAUD 4800 //串口波特率
u8 i;
u8 flag;
void main()
{
SCON = 0xDA;
TL2 = RCAP2L = (65536-(FOSC/32/BAUD));
TH2 = RCAP2H = (65536-(FOSC/32/BAUD)) >> 8;
T2CON = 0x34;
ES = 1;
EA = 1;
while(1)
{
};
}
void Uart_Isr()interrupt 4
{
if (RI)
{
P0 = SBUF;
//上一句是程序最主要的部分
//写的是接收收到串口中断之后的动作,可以自主设置为某个灯亮
RI = 0; //Clear receive interrupt flag
}
if (TI)
{
TI = 0; //Clear transmit interrupt flag
// busy = 0; //Clear transmit busy flag
}
}
VB.net程序(用于简单发送一个数据)
'参考自微软官方VB.NET文档
'https://docs.microsoft.com/zh-cn/dotnet/api/system.io.ports.serialport?view=netframework-4.8
Imports System.IO.Ports
Public Class form1
Dim _serialPort = New SerialPort()
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
'将波特率添加到下拉列表2
ComboBox2.Items.Add(4800)
ComboBox2.Items.Add(9600)
ComboBox2.Text = ComboBox2.Items.Item(0)
'将数据位添加到下拉列表3
'ComboBox3.Items.Add()
Label5.Text = “搜索一下串口吧!”
'未搜索到串口时候禁止打开串口
打开串口.Enabled = False
关闭串口.Enabled = False
发送数据.Enabled = False
搜索串口.Enabled = True
End Sub
Private Sub 搜索串口_Click(sender As Object, e As EventArgs) Handles 搜索串口.Click
'将串口添加到下拉列表1
ComboBox1.Items.Clear()
For Each sp As String In My.Computer.Ports.SerialPortNames
ComboBox1.Items.Add(sp)
Next
ComboBox1.Items.Add(1)
'在此处添加一个项,因为如果count()为0会报错,不知道如何处
'理在搜索完成之后如果有count()=1,则说明没有找到串口,如果
'count()>1则说明找到了串口,无论是否找到都需要删除掉这个
'添加上的"1"
'Label5.Text = ComboBox1.Items.Count.ToString()
If ComboBox1.Items.Count() = 1 Then
Label5.Text = “未搜索到串口!”
ComboBox1.Items.Clear()
打开串口.Enabled = False
Else
Label5.Text = "串口搜索完成!"
ComboBox1.Text = ComboBox1.Items.Item(0)
ComboBox1.Items.Remove(1)
打开串口.Enabled = True
End If
End Sub
Private Sub 打开串口_Click(sender As Object, e As EventArgs) Handles 打开串口.Click
_serialPort.PortName = ComboBox1.Text()
_serialPort.BaudRate = ComboBox2.Text()
_serialPort.Open()
If _serialPort.IsOpen() Then
End If
打开串口.Enabled = False
关闭串口.Enabled = True
发送数据.Enabled = True
End Sub
Private Sub 关闭串口_Click(sender As Object, e As EventArgs) Handles 关闭串口.Click
打开串口.Enabled = True
关闭串口.Enabled = False
发送数据.Enabled = False
_serialPort.Close()
End Sub
Private Sub 发送数据_Click(sender As Object, e As EventArgs) Handles 发送数据.Click
_serialPort.Write(1)
End Sub
End Class
vb程序逻辑:
启动程序后
将可用波特率添加到对第二个下拉列表并设置label的文本
然后将下拉列表显示的项设置为4800
允许 搜索串口
并禁止 “关闭串口按钮”&“打开串口按钮”&"发送数据按钮"可用
程序启动后可用的只有"搜索串口"
搜索串口之后,如果搜到了,则允许 “打开串口按钮” 可用,并将串口列表添加到下拉列表1
如果没有搜到,则依然禁止,并且在搜索后设置label的文本
按钮之间互相有约束.
建议只连接一个开发板
博主是一个在校大学生(辣chicken大专)近期在开发一个类似机床的产品,类似于某宝的迷你cnc,有xyz轴,主轴电机。
与其他不同的是,本产品是用STC单片机开发的(相对于arduino),由于未找到免费的现成资料(英语不好,也没有梯子,GitHub用不熟),博主就一步一步慢慢的开发,在上半年学习之余粗略学习了C51,了解了基本的STC单片机控制程序的编写(不包括数模转换以及更高级的),已经具有开发三轴控制的基础,现在阶段是开发上位机,经过多天的探索,确定使用VB.net开发(本人以前从未学习过),代码都是跟着微软官网文档学的,很多初学者可能像我一样看到文档就不知所谓,经过我多天的研究,比葫芦画瓢做出了一个简单的串口程序,功能很简单,但是比微软官网上写的要明了,如果有需要可能帮到像我一样的新手.