|
#include<reg52.h>
#include <intrins.h>
#include<stdio.h>
#define uint unsigned int
#define uchar unsigned char
sbit rs=P3^5; //1602Ö¸áîÑ¡×Å¿ØÖÆ
sbit rw=P3^6; //1602¶áD′¿ØÖÆ
sbit en=P3^4; //1602ê1Äü¿ØÖÆ
sbit trig1=P1^0; //3¬éù1·¢
sbit echo1=P3^2; //3¬éù1½ó
sbit led1=P1^7;
uchar ii,shuju;
bit flag1; //′¥·¢±êÖ¾
uchar count,count1;
long int distance,distance1;
unsigned char code table[ ]={"0123456789"}; //1206ÏÔê¾×Ö·û¶¨òå
void delay(uint n) //Ñóê±oˉêy1
{
uint x,y;
for(x=n;x>0;x--)
for(y=110;y>0;y--);
}
void delayt(uint x) //Ñóê±oˉ2
{
uchar j;
while(x-- > 0)
{
for(j = 0;j < 125;j++)
{
;
}
}
}
void lcd_wcom(uchar com) //1206D′Ãüáî
{
rs=0;
rw=0;
P0=com;
delay(5);
en=1;
en=0;
}
void lcd_wdat(uchar dat) //1206D′êy¾Y
{
rs=1;
rw=0;
P0=dat;
delay(5);
en=1;
en=0;
}
void lcd_init() //12063õê¼
{
lcd_wcom(0x38);
lcd_wcom(0x0c);
lcd_wcom(0x06);
lcd_wcom(0x01); //ÇåÆá
}
void lcd_xianshi() //LCDÏÔê¾
{
lcd_wcom(0x80+0x40);
lcd_wdat('J');
lcd_wdat('u');
lcd_wdat(' ');
lcd_wdat('L');
lcd_wdat('i');
lcd_wdat(' ');
lcd_wdat('L');
lcd_wdat(':');
lcd_wcom(0x80+0x4c);
lcd_wdat('.');
lcd_wcom(0x80+0x4e);
lcd_wdat('c');
lcd_wdat('m');
}
void init_t0() //¶¨ê±Æ÷3õê¼
{
TMOD=0x21;
TL0=0x66;
TH0=0xfc;
ET0=1;
//TMOD=0X20;
//SCON=0x50;
//TCON=0x40;
//PCON=0x80;
TH1=0xfD;
TL1=0xfD;
SM0=0;
SM1=1;
REN=1;
TR1=1;
ES=1;
EA=1;
TI=1;
}
void trigger() //3¬éù·¢
{
trig1=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
trig1=1;
}
void init_measuring()//3¬éù¶Ë¿ú3õê¼
{
trig1=1;
echo1=1;
count=0;
}
void measuring() //¾ààë2aêÔ
{
uchar l;
uint h,y;
TR0 = 1;
while(echo1==1)
{
;
}
TR0 = 0;
l = TL0;
h = TH0;
y = (h << 8) + l;
y = y - 0xfc66;
distance = y + 1000 * count;
TL0 = 0x66;
TH0 = 0xfc;
delayt(20);//Ô-30
distance = 3453* distance / 20000;
}
void display(uint x) //ÏÔê¾¼ÆËã
{
uchar qian,bai,shi,ge;
qian=x/1000;
bai=(x/100)%10;
shi=(x/10)%10;
ge=x%10;
lcd_wcom(0x80+0x49);
lcd_wdat(table[qian]);
lcd_wdat(table[bai]);
lcd_wdat(table[shi]);
lcd_wcom(0x80+0x4d);
lcd_wdat(table[ge]);
}
void main() //Ö÷oˉêy
{ lcd_init(); //òo¾§3õê¼
init_t0();//¶¨ê±Æ÷03õê¼
init_measuring(); //3¬éù¶Ë¿ú3õê¼
while(1)
{
lcd_xianshi(); //1206×Ô¶¨ÏÔê¾
trigger(); //3¬éù′¥·¢Æô¶ˉ
while(echo1==0)
{
;
}
measuring();
display(distance); //ÏÔê¾
init_measuring(); //3¬éù¶Ë¿ú3õê¼
//delayt(1); //¼ä¸ô600ms
SBUF= 60;
while(!TI);
TI=0;
SBUF= distance/1000%10+48;
while(!TI);
TI=0;
SBUF= distance/100%10+48;
while(!TI);
TI=0;
SBUF= distance/10%10+48;
while(!TI);
TI=0;
SBUF= distance%10+48;
while(!TI);
TI=0;
SBUF= 62;
while(!TI);
TI=0;
//SBUF=10;
// while(!TI);
// TI=0;
}
}
void T_0()interrupt 1
{
TF0 = 0;
TL0 = 0x66;
TH0 = 0xfc;
count++;
if(count==18)
{
TR0 =0;
TL0 = 0x66;
TH0 = 0xfc;
count = 0;
}
}
|
|