基于 51 最小系统的距离测量仪制作

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int

sbit BEEP=P1^2;
sbit lcdrs=P3^7;
sbit lcdrw=P3^6;
sbit lcden=P3^5;
sbit echo=P1^0;
sbit send=P1^1;
uchar t0,flag;
volatile uchar Count_TH,Count_TL;
uint time;
uchar code table1[]="distance     ";
uchar code table2[]="             ";
void delay(uint z)
{
 uint x,y;
 for(x=z;x>0;x--)
 for(y=1000;y>0;y--);
}
void delay_300us()
{
 uint x;
 for(x=75;x>0;x--);
}
void delay_100us()
{
 uint x;
 for(x=24;x>0;x--);
}

void write_com(uchar com)
{
 lcdrs=0;
 P2=com;
 delay(5);
 lcden=1;
 delay(5);
 lcden=0;
}
void write_data(uchar datb)
{
 lcdrs=1;
 P2=datb;
 delay(5);
 lcden=1;
 delay(5);
 lcden=0;
}
void display(uint datb)
{
 uchar bai,shi,ge;
 bai=datb/100;
 shi=datb%100/10;
 ge=datb%10;
 write_com(0x80+0x40+8);
 write_data(0x30+bai);
 write_data(0x30+shi);
 write_data(0x30+ge);
}

void init_T0()
{
 TMOD=0x12;
 TH0=0xe7;
 TL0=0xe7;
 EA=0;
 ET0=1;
 TR0=1;
}
void init_T1()
{
 TMOD=0x12;
 TH1=0;
 TL1=0;
 EA=0;
 ET1=1;
 TR1=1;
}
void init_inter0()
{
 IT0=0;
 EA=0;
 EX0=0;
}

void init_Total()
{
 init_T0();
 init_T1();
 init_inter0();
 EA=1;
}
void inter0() interrupt 0
{
 TR1=0;//T1Í£Ö¹¹¤×÷
 EX0=0;//¹ØÍⲿÖжÏ0
 flag=1;
}
void inter_T0() interrupt 1//¶¨Ê±Æ÷T0ÖжϺ¯Êý   ²úÉú40KHZµÄ·½²¨
{
 send=~send;
}
void inter_T1() interrupt 3
{
 TR1=0;
 EX0=0;//¹ØÍⲿÖжÏ0
 TH1=0;
 TL1=0;
 flag=2;
}

void send_T()//·¢10¸ö³¬Éù²¨Âö³å
{
 delay_100us();//·¢ËÍ100usµÄ·½²¨
 TR0=0;//T0Í£Ö¹¹¤×÷
}


void main()
{
 uint t,s;
 init_T0tal();//×ܳõʼ»¯
 while(1)
 {
  TR1=1;//Æô¶¯¶¨Ê±Æ÷1
  TR0=1;//Æô¶¯¶¨Ê±Æ÷0
  send_T();//·¢ËÍ100us³¬Éù²¨Âö³å
  delay_300us();//ÑÓʱ300usÌø¹ýäÇø
  EX1=0;//¿ªÍⲿÖжÏ1
  while(!flag);//µÈ´ý»Ø²¨»ò¶¨Ê±Æ÷T1Òç³ö
  if(flag==1)//»Ø²¨
  {
   Count_TH=TH1;//¶Á¼ÆÊýÆ÷T1µÄ¸ßλTH1
   Count_TL=TL1;//¶Á¼ÆÊýÆ÷T1µÄµÍλTL1
   t=Count_TH*256+Count_TL;
   s=(33140*t)/200000;
   display(s);
  }
   else//¶¨Ê±Æ÷T1Òç³ö
   {
    Count_TH=0xfe;
    Count_TL=0x7f;
   }
   delay(150);
   flag=0;//±ê־λÇå0
   TH1=0;//T1Çå0ÖØмÆʱ
   TL1=0;
  }
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值