一个简单的串口实验,通过串口往单片机发送一个字节的十六进制数,单片机以十进数通过数码管显示出来,本来想以十进制数形式发送,以十进制显示,但是不知道是串口调试程序的数值转换的原因还是程序的原因,总是不能显示正确的数,没有办法,暂且这么用了。
#include <at89x52.h>
#define uchar unsigned char
uchar displaycode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
uchar displaybit[3]={0xfe,0xfd,0xfb};
uchar displaybuf[3];
uchar dat;
void Com_Init()
{
TMOD=0x20;
TH1=0xFD;
TL1=0xFD;
TR1=1;
SCON=0x50;
ES=1;
EA=1;
PCON=0x00;
}
void Com_Int() interrupt 4
{
ES=0;
RI=0;
dat=SBUF;
ES=1;
}
void delay(uchar CNT)
{
uchar i;
while(CNT--)
{
for(i=124;i>0;i--);
}
}
void display(uchar dat)
{
uchar i;
displaybuf[0]=dat/100;
displaybuf[1]=dat%100/10;
displaybuf[2]=dat%10;
for(i=0;i<3;i++)
{
P1=displaybit;
P0=displaycode[displaybuf];
delay(2);
P1=0xff;
}
}
void main ()
{
Com_Init();
while(1)
{
display(dat);
}
}
文章评论(0条评论)
登录后参与讨论