標(biāo)題: 超聲波測(cè)距(串口通迅?jìng)渫?[打印本頁]

作者: liumei    時(shí)間: 2014-5-2 20:35
標(biāo)題: 超聲波測(cè)距(串口通迅?jìng)渫?br />#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;  //打開串口中斷;
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;      //開串口中斷;
}

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;
}






歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1