搜档网
当前位置:搜档网 › 单片机串口通讯 数码管显示

单片机串口通讯 数码管显示

#include //包函8052 内部资源的定义
#define uchar unsigned char
#define uint unsigned int
unsigned char dat; //用于存储单片机接收发送缓冲寄存器SBUF里面的内容
unsigned char const dofly[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0xff,0xef};// 显示段码值01234567
unsigned char code seg[]={0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7};//{0,1,2,3,4,5,6,7};//分别对应相应的数码管点亮,即位码
sbit wela=P2^7;
uchar bai,shi,ge;
/********************延时子函数******************/
void delay(unsigned int xms) //xms表示延时的秒数
{
unsigned int i,j;
for(i=xms;i>0;i--)
for(j=113;j>0;j--);
}
/*********************显示函数******************/
void display(dat)
{

bai=dat/100;
shi=(dat%100)/10;
ge=dat%10;

wela=1;
P0=dofly[bai];
P2=seg[0];
delay(3); //短暂延时
wela=1;
P0=dofly[shi];
P2=seg[1];
delay(3); //短暂延时
wela=1;
P0=dofly[ge] ;
P2=seg[2];
delay(3); //短暂延时
}
/*******串口初始化 波特率9600 方式一*********/
void Init_Com(void)
{
TMOD = 0x20;//定时 自动重装 8为
PCON = 0x00;
SCON = 0x50;
TH1 = 0xFd;
TL1 = 0xFd;
TR1 = 1;
}
/********主程序********************/
void main()
{
Init_Com();//串口初始化
while(1)
{
if(RI) //RI=1时申请中断,要求CPU取走数据。在任何工作方式中,该位必须由软件清0
{
dat = SBUF; //接收数据SBUF赋与dat
RI=0; //RI 清零。
SBUF = dat; //在原样把数据发送回去(接收数据为发送数据的ASCII码,如发送q显示为113)
}
display(dat) ;
}

}

相关主题