单片机串口通信 在数码管上显示传输的数据
时间:10-02
整理:3721RD
点击:
#include<reg52.h>
#define uchar unsigned char
void delay(char x);
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
sbit duan=P2^6;//数码管段选
sbit wei=P2^7;//数码管位选
void show(uchar k);
unsigned int flag,a,b,flag2;
void init();
main()
{
init();
while(1)
{
if(flag==1)
{
//发送接受到的数据
ES=0;//关闭串口中断
flag=0;
SBUF=a;
while(!TI);
TI=0;
ES=1;
}
show(b);
}
}
void init()
{
TMOD=0x20;
TH1=0xfa;
TL1=0xfa;
TR1=1;
SM0=0;
SM1=1;
REN=1;
EA=1;
ES=1;
}
void serial() interrupt 4
{
//接收中断,接数据
RI=0;
a=SBUF;
b=a;
flag=1;
}
void show(uchar k)
{
duan=1;
P0=table[k/100];
duan=0;
P0=0xff;
wei=1;
P0=0xfb;
wei=0;
delay(200);
duan=1;
P0=table[k%100/10];
duan=0;
P0=0xff;
wei=1;
P0=0xfd;
wei=0;
delay(200);
duan=1;
P0=table[k%10];
duan=0;
P0=0xff;
wei=1;
P0=0xfe;
wei=0;
delay(200);
}
void delay(char x)
{
char i,j;
for(i=x;i<0;i--)
for(j=110;j<0;j--);
}
为什么这个程序数码管显示的数字与电脑输入的数字不一样。
#define uchar unsigned char
void delay(char x);
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
sbit duan=P2^6;//数码管段选
sbit wei=P2^7;//数码管位选
void show(uchar k);
unsigned int flag,a,b,flag2;
void init();
main()
{
init();
while(1)
{
if(flag==1)
{
//发送接受到的数据
ES=0;//关闭串口中断
flag=0;
SBUF=a;
while(!TI);
TI=0;
ES=1;
}
show(b);
}
}
void init()
{
TMOD=0x20;
TH1=0xfa;
TL1=0xfa;
TR1=1;
SM0=0;
SM1=1;
REN=1;
EA=1;
ES=1;
}
void serial() interrupt 4
{
//接收中断,接数据
RI=0;
a=SBUF;
b=a;
flag=1;
}
void show(uchar k)
{
duan=1;
P0=table[k/100];
duan=0;
P0=0xff;
wei=1;
P0=0xfb;
wei=0;
delay(200);
duan=1;
P0=table[k%100/10];
duan=0;
P0=0xff;
wei=1;
P0=0xfd;
wei=0;
delay(200);
duan=1;
P0=table[k%10];
duan=0;
P0=0xff;
wei=1;
P0=0xfe;
wei=0;
delay(200);
}
void delay(char x)
{
char i,j;
for(i=x;i<0;i--)
for(j=110;j<0;j--);
}
为什么这个程序数码管显示的数字与电脑输入的数字不一样。