我今天,做了这样一个实验,就是通过P1口的1,2,3,4的电平高低,来选择向串口输出的内容,但是在输出内容的最后总会有两个十六进制的00,不知道是什么原因,清大家帮忙看看
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
unsigned char flag,a,i;
uchar code table0[]={0x01,0x54,0x58,0x53,0x51,0x00,0x23,0x1f,0xf8};
uchar code table1[]={0x11,0x54,0x58,0x53,0x51,0x00,0x23,0x1f,0xf8};
uchar code table2[]={0x22,0x54,0x58,0x53,0x51,0x00,0x23,0x1f,0xf8};
uchar code table3[]={0x33,0x54,0x58,0x53,0x51,0x00,0x23,0x1f,0xf8};
sbit P10=P1^0;
sbit P11=P1^1;
sbit P12=P1^2;
sbit P13=P1^3;
void init()
{
P10=1;
P11=1;
P12=1;
P13=1;
TMOD=0X20;
TH1=0XFD;
TL1=0XFD;
TR1=1;
REN=1;
SM0=0;
SM1=1;
EA=1;
ES=1;
}
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void main()
{
init();
while(1)
{
if(P10==0&&P11==1&&P12==1&&P13==1)
{
ES=0;
for(i=0;i<9;i++)
{
SBUF=table0
;
while(!TI);
TI=0;
delayms(1000);
}
SBUF=a;
while(!TI);
TI=0;
ES=1;
}
else if(P10==1&&P11==0&&P12==1&&P13==1)
{
ES=0;
for(i=0;i<9;i++)
{
SBUF=table1;
while(!TI);
TI=0;
}
SBUF=a;
while(!TI);
TI=0;
ES=1;
}
else if(P10==1&&P11==1&&P12==0&&P13==1)
{
ES=0;
for(i=0;i<9;i++)
{
SBUF=table2;
while(!TI);
TI=0;
}
SBUF=a;
while(!TI);
TI=0;
ES=1;
}
else if(P10==1&&P11==1&&P12==1&&P13==0)
{
ES=0;
for(i=0;i<9;i++)
{
SBUF=table3;
while(!TI);
TI=0;
}
SBUF=a;
while(!TI);
TI=0;
ES=1;
}
}
}
当选择P10口为低电平时的输出结果,输出结果如下图所示,就是不知道输出数据结尾的两个00是怎么回事
选择P10口时的输出结果
此帖出自小平头技术问答
另外SBUF=table0;改为SBUF=table0;试试看,祝你成功!
[ 本帖最后由 shywjsh 于 2013-9-17 15:16 编辑 ]
一周热门 更多>