微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > PCB设计问答 > PCB设计学习讨论 > 小白求助,蓝牙小车控制程序有个想不明白的地方,求大神解释下,谢谢

小白求助,蓝牙小车控制程序有个想不明白的地方,求大神解释下,谢谢

时间:10-02 整理:3721RD 点击:
程序中if(SBUF==68){ Buffer[0] = 4 ; // D }是回事? Buffer[0]为什么是4? 为什么要减去48?
D 的ASCII码是 0100 0100(就是68) 提示中说 Buffer[0] = SBUF - 48 ; 如果串口接收到的发过来的是D的话,那SBUF就等于68 ,那样子Buffer[0] 应该是68 - 48 = 20;怎么得出Buffer[0] = 4 的?还有A、S、W、E?
部分 程序如下(省略了延时函数和控制方向的函数):
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar Buffer[4] = {0}; //从串口接收的数据
uint i,j;
sbit Left_Positive=P1^4;
sbit Left_Negative=P1^5;
sbit Right_Positive=P1^6;
sbit Right_Negative=P1^7;
sbit LeftLight=P2^1;       
sbit RightLight=P2^2;       
………………
void Com_Int(void) interrupt 4       
{       
EA = 0;       
if(RI == 1) //当硬件接收到一个数据时,RI会置位       
{       
if(SBUF==65) //这里减去48是因为从电脑中发送过来的数据是ASCII码。 Buffer[0] = SBUF - 48;       
{
Buffer[0] = 3;        //        A       
}
if(SBUF==68)
{
Buffer[0] = 4;        // D
}
if(SBUF==83)
{
Buffer[0] = 2;        //        S
}
if(SBUF==87)
{
Buffer[0] = 1;        //        W
}
if(SBUF==69)
{
Buffer[0] = 0;        //        E
}
RI = 0;       
}
EA = 1;       
}
………………
void Com_Init(void)       
{       
TMOD = 0x20;
PCON = 0x00;
SCON = 0x50;
TH1 = 0xFd; //设置波特率 9600
TL1 = 0xFd;
TR1 = 1; //启动定时器1
ES = 1; //开串口中断
EA = 1; //开总中断
}
void main()
{
Delay_1ms(100);
Com_Init();//串口初始化
while(1)//循环结构,选择函数控制小车的状态
{
switch(Buffer[0])
{
case 0: tingche(); break;
case 1: qianjin(); break;
case 2: houtui(); break;
case 3: zuozhuan(); break;
case 4: youzhuan(); break;
default:break;
}
}
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top