|
#include<reg51.h> //包含單片機(jī)寄存器的頭文件
#include<intrins.h> //包含_nop_()函數(shù)定義的頭文件
#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; //設(shè)置定時(shí)器1為方式2;
TH1=0xfd;
TL1=0xfd;
TR1=1;
SM0=0;
SM1=1; //設(shè)置串口為方式1;
REN=1; //接收使能;
EA=1;
ES=1; //打開(kāi)串口中斷;
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() //測(cè)距子程序
{
ES=0; //關(guān)串口中斷;
SBUF=0x55; //
while(!TI); //等待數(shù)據(jù)發(fā)完;
TI=0; //發(fā)送溢出位TI軟件清零;
ES=1; //開(kāi)串口中斷;
}
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;
}
|
|