51单片机串口输出程序,单片机运行后在串口调试助手上看到重复的一组16进制数
定义字符串后边应该怎么写。我要在串口助手上看这样一组16进制数1b72730006aa0000000000这句是字符串定义程序。unsignedcharcodezifuc...
定义字符串 后边应该怎么写。我要在串口助手上看这样一组16进制数1b 72 73 00 06 aa 00 00 00 00 00
这句是字符串定义程序。
unsigned char code zifuchuan[ ]=
源代码是:
#include<reg51.h> //包含单片机寄存器的头文件
unsigned char code zifuchuan[ ]=0x1b;
//流水灯控制码,该数组被定义为全局变量
/*****************************************************
函数功能:向PC发送一个字节数据
***************************************************/
void fasong(unsigned char dat)
{
SBUF=dat; //发送数据
while(TI==0); //检查发送完成中断标志如果未完成就等等否则复位发送标志位以便下个数据可以发送
TI=0;
}
/*****************************************************
函数功能:延时若干毫秒
入口参数:n
*******************************************************/
void yanshi(unsigned int n)
{
unsigned int i,j;
for(i=0; i<n; i++) //for语句先赋值即i=0,然后执行语句即后面的for语句,然后执行i++,然后判断为真是跳出循环
for(j = 249; j > 0; j--); //什么也不做等待一个机器周期
}
/*****************************************************
函数功能:主函数
***************************************************/
void main(void)
{
unsigned int i;
TMOD=0x20; //TMOD=0010 0000B,定时器T1工作于方式2
SCON=0x40; //SCON=0100 0000B,串口工作方式1 1起始位8数据位1停止位
PCON=0x00; //PCON=0000 0000B,波特率9600 晶振11.0592
TH1=0xfd; //根据规定给定时器T1赋初值
TL1=0xfd; //根据规定给定时器T1赋初值
TR1=1; //启动定时器T1
while(1)
{ i=0;
while(zifuchuan[i] != '\0') //循环发送字节数组中的数据
{
fasong(zifuchuan[i]); //调用发送函数发送数据
i++;//指向下个字符
yanshi(1); //150ms发送一次数据
}
yanshi(1000); //150ms发送一次数据
}
} 展开
这句是字符串定义程序。
unsigned char code zifuchuan[ ]=
源代码是:
#include<reg51.h> //包含单片机寄存器的头文件
unsigned char code zifuchuan[ ]=0x1b;
//流水灯控制码,该数组被定义为全局变量
/*****************************************************
函数功能:向PC发送一个字节数据
***************************************************/
void fasong(unsigned char dat)
{
SBUF=dat; //发送数据
while(TI==0); //检查发送完成中断标志如果未完成就等等否则复位发送标志位以便下个数据可以发送
TI=0;
}
/*****************************************************
函数功能:延时若干毫秒
入口参数:n
*******************************************************/
void yanshi(unsigned int n)
{
unsigned int i,j;
for(i=0; i<n; i++) //for语句先赋值即i=0,然后执行语句即后面的for语句,然后执行i++,然后判断为真是跳出循环
for(j = 249; j > 0; j--); //什么也不做等待一个机器周期
}
/*****************************************************
函数功能:主函数
***************************************************/
void main(void)
{
unsigned int i;
TMOD=0x20; //TMOD=0010 0000B,定时器T1工作于方式2
SCON=0x40; //SCON=0100 0000B,串口工作方式1 1起始位8数据位1停止位
PCON=0x00; //PCON=0000 0000B,波特率9600 晶振11.0592
TH1=0xfd; //根据规定给定时器T1赋初值
TL1=0xfd; //根据规定给定时器T1赋初值
TR1=1; //启动定时器T1
while(1)
{ i=0;
while(zifuchuan[i] != '\0') //循环发送字节数组中的数据
{
fasong(zifuchuan[i]); //调用发送函数发送数据
i++;//指向下个字符
yanshi(1); //150ms发送一次数据
}
yanshi(1000); //150ms发送一次数据
}
} 展开
1个回答
展开全部
首先看你的发送的是什么:unsigned char dat,字符型的变量,也就是说你发送过去的变量是char型的,
再看你要显示什么:“串口助手上看到一组16进制数”好吧,这就是问题,
你要看的是16进制的数,但是发过去的是char型,那么怎么办呢?
1:转换,char型变量你会转换成16进制的吗??不会的话去翻ASC||表,(0x1B是27(十进制),char是“27
33
1B
ESC
escape ” 一个叫escape的东东, )这些东西明显是不能弄到字符串里面去的,对吧,那就看第二步,
2:还是转换,不过这次不是把16转换成对应的char,‘0’的asc||知道是多少吗?对应是10进制是48,然后‘0’-21=?,,慢慢研究吧,
最后:你把zifuchuan这个变量弄成int型的不就好啦,,,可以直接用啊,只需要在串口终端显示的时候勾选以hex显示,就好了啊
再看你要显示什么:“串口助手上看到一组16进制数”好吧,这就是问题,
你要看的是16进制的数,但是发过去的是char型,那么怎么办呢?
1:转换,char型变量你会转换成16进制的吗??不会的话去翻ASC||表,(0x1B是27(十进制),char是“27
33
1B
ESC
escape ” 一个叫escape的东东, )这些东西明显是不能弄到字符串里面去的,对吧,那就看第二步,
2:还是转换,不过这次不是把16转换成对应的char,‘0’的asc||知道是多少吗?对应是10进制是48,然后‘0’-21=?,,慢慢研究吧,
最后:你把zifuchuan这个变量弄成int型的不就好啦,,,可以直接用啊,只需要在串口终端显示的时候勾选以hex显示,就好了啊
追问
嗯嗯嗯我再去试试。怎么把zifuchuan这个变量怎么弄成int啊?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询