单片机串口通信问题

if(UART_buff=='1')LED1=0;if(UART_buff=='2')LED2=0;if(UART_buff=="12")LED12=0;如上,在串口助手... if(UART_buff == '1')
LED1 = 0;
if(UART_buff == '2')
LED2= 0;
if(UART_buff == "12")
LED12= 0;

如上,在串口助手中发送12,会点亮LED2 ,而不是LED12,请问怎么解决
展开
 我来答
ATF144X
2013-03-26 · TA获得超过1.2万个赞
知道大有可为答主
回答量:5344
采纳率:77%
帮助的人:4674万
展开全部
因为这过程实际是先发送字符1所以LED1被点亮,然后发送2让LED2点亮。
还有,UART_buff == "12"这写法没有出错吗?
你可以吧LED12点亮的条件改为其他字符,比如‘A’,这样就没问题了。
追问
只能换成其他字符吗  如果有100个LED要怎么做?
追答
那就直接发送二进制数了,0x00就让第一个灯亮,0x01就让第二个灯亮,0xFF就让第255个灯亮。
魔靥一阵风
2013-03-26 · TA获得超过197个赞
知道小有建树答主
回答量:174
采纳率:100%
帮助的人:138万
展开全部
if(UART_buff == "12")
LED12= 0;
这个在串口的发送的时候,它会先发送字符‘1’ ;然后在发送字符‘2’;它发了两次,
所以你发12的时候,他最后显示的是LED2.这就是原因;
定义一个“12”,在存储的时候它会存:如char A[2]={'1' , '2' };
解决办法:可以判断:
if(UART_buff == "3")
LED12= 0;

或者使用十六进制发送模式;
if(UART_buff == 0x01)
LED1 = 0;
if(UART_buff ==0x02)
LED2= 0;
if(UART_buff == 0x12)
LED12= 0;
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
huzi2099
2013-03-26 · TA获得超过1172个赞
知道小有建树答主
回答量:1887
采纳率:82%
帮助的人:641万
展开全部
单引号表示一个字符的asc码八位
双引号表示一个字符串,实际就是字符数组,=="12"会把数组的16位地址和uart_buff比较,那肯定错了.
串口发送时可以选发送字符方式或16进数方式...
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
shifa2008
2013-03-26 · 超过34用户采纳过TA的回答
知道答主
回答量:135
采纳率:0%
帮助的人:71.8万
展开全部
单片机串口只有8位 你和表示了 “12”比较 你发12 当然只比较 最后一个2与 LED2相等了所以就亮了
if(UART_buff == "3") LED12= 0; 你发 3 LED12 就会亮的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lzc0302
2013-03-26 · TA获得超过106个赞
知道答主
回答量:61
采纳率:100%
帮助的人:41.8万
展开全部
if(UART_buff == "12")
LED2= 0;

这样不可以吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式