佚名通过本文主要向大家介绍了单片机串口发送数据,51单片机串口发送数据,51单片机串口发送程序,单片机串口发送字符串,单片机串口发送程序等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 关于通过串口向单片机发送数据
描述:
解决方案1:
描述:
最近在做一个自助柜的开锁程序,是把开锁码放在数组中,通过输入开锁码之后遍历数组对比,对比完了之后决定是否开锁,逻辑问题已经解决了,现在就是不知道怎样通过串口向单片机发送开锁码达到开锁的目的,求大神指点!
解决方案1:
通过普通的串口调试助手,选择HEX 发送,发送的就是16进制数字,然后通过单片机获取这些数字 使用switch选择你需要的数字功能去实现就好啦
解决方案2:串口通信么? 这个比较好搞的了http://blog.csdn.net/u011046042/article/details/43195507 参考这个吧
解决方案3: 这是我用的十六进制字符串转十六进制C#代码 的确和别人说的一样 都是要把字符串转化成byte[]数组再处理
byte[] sendBuffer = null;//发送数据缓冲区
try //尝试将发送的数据转为16进制Hex
{
char[] P_chr = sendData.ToCharArray();//得到字符数组
IEnumerator P_ienumerator_chr = P_chr.GetEnumerator();//得到枚举器
StringBuilder P_stringbuilder = new StringBuilder(); //创建stringbuilder对象
while (P_ienumerator_chr.MoveNext())//开始枚举
{
P_stringbuilder.Append((char)P_ienumerator_chr.Current != ' ' ? P_ienumerator_chr.Current.ToString() : string.Empty);//向stringbuilder对象中添加非空格字符
}
sendData = P_stringbuilder.ToString(); //得到没有空格的字符串
if (sendData.Length == 1)//数据长度为1的时候,在数据前补0
{
sendData = "0" + sendData;
}
else if (sendData.Length % 2 != 0)//数据长度为奇数位时,去除最后一位数据
{
sendData = sendData.Remove(sendData.Length - 1, 1);
}
List<string> sendData16 = new List<string>();//将发送的数据,2个合为1个,然后放在该缓存里 如:123456→12,34,56
for (int i = 0; i < sendData.Length; i += 2)
{
sendData16.Add(sendData.Substring(i, 2));
}
sendBuffer = new byte[sendData16.Count];//sendBuffer的长度设置为:发送的数据2合1后的字节数
for (int i = 0; i < sendData16.Count; i++)
{
sendBuffer[i] = (byte)(Convert.ToInt32(sendData16[i], 16));//发送数据改为16进制
}
}
catch //无法转为16进制时,出现异常
{
//timer1.Enabled = false;
checkBox2.CheckState = CheckState.Unchecked;
MessageBox.Show("请输入正确的16进制数据", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;//输入的16进制数据错误,无法发送,提示后返回
}