#include<reg51.h> //包含单片机寄存器的头文件
#include<intrins.h> //包含_nop_()函数定义的头文件
#define uchar unsigned char
#define uint unsigned int
uchar falg,date_h,date_l,bb;
uint date;
unsigned char code table[]={0x3f,
0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,
0x71,0x80,0xc0};
sbit FM=P2^3;
void ranging();
void delay(uint z);
void display();
void main()
{
TMOD=0x20; //设置定时器1为方式2;
TH1=0xfd;
TL1=0xfd;
TR1=1;
SM0=0;
SM1=1; //设置串口为方式1;
REN=1; //接收使能;
EA=1;
ES=1; //打开串口中断;
P1=0x00;
P0=0x3f;
while(1)
{
ranging();
if(falg==1)
display();
}
}
void serial() interrupt 4 //串口中断子程序;
{
bb++;
if(bb==1)
{
date_h=SBUF; //
RI=0; //接收溢出位RI软件清零;
}
if(bb==2)
{
date_l=SBUF; //
date=(date_h<<8)+date_l;
bb=0;
falg=1;
RI=0; //接收溢出位RI软件清零;
}
else
falg=0;
}
void ranging() //测距子程序
{
ES=0; //关串口中断;
SBUF=0x55; //
while(!TI); //等待数据发完;
TI=0; //发送溢出位TI软件清零;
ES=1; //开串口中断;
}
void delay(uint z)
{
while(z--);
}
void display()
{
uchar wan,qian,bai,shi,ge;
wan=date0000/10000;
qian=date000/1000;
bai=date00/100;
shi=date0/10;
ge=date;
P0=table[wan];
P1=0xf7;
delay(20);
P1=0xff;
P0=table[qian];
P1=0xef;
delay(20);
P1=0xff;
P0=table[bai];
P1=0xdf;
delay(20);
P1=0xff;
P0=table[shi];
P1=0xbf;
delay(20);
P1=0xff;
P0=table[ge];
P1=0x7f;
delay(20);
P1=0xff;
}
|