用AT89C2051设计超声波测距仪
施。限于篇幅,下面仅给出部分程序,感兴趣者可与作者联系。
# pragma DB OE CD OT(5,SPEED) ROM(LARGE)IV
/*连接所需要的库*/
#includereg52.h>
#includeabsacc.h>
#includestdio.h>
/*定义数据类型*/
typedef unsingned char byte;
typedef unsigned int word
#define uchar unsigned char
#define unint unsigned int
#define ulong unsigned long
/*定义系统常数*/
#define TRUE 1
#define FALSE 0
#define C=340 /*声速*/
/*定义功能位*/
sbit bflag=ACC7;
sbit VOLCK=P1^5;
sbit MING=P3^5;
sbit QUIET=P1^3;
sbit BACK=P1^2;
/*定义显示缓冲区*/
uchar idata ON[16]={’,’L’,’E’,’N’,’G’,’T’,’H’,’=’,’8’,’.’,’8’8’,’m’,’’,’’,’’};
/*主程序用延时子程序*/
woid main-delay(void)
{
register i;
TRO=1;
for(i=0;i15;i++)
{
TH0=0;
TL0=0;
Do{}while(!TF0);
TF0=0;
}
TR0=0;
}
*/通用延时子程序*/
void delay(void)
{
unint i;
for(i=0;i200;i++){;}
}
/*键盘延时子程序*/
void key-delay(void)
{
unint i;
for(i=0;i200;i++){;}
}
/*初始化程序*/
void start_main()
{
tegister i;
uchar a[16]={’’,’L’,’E’,’N’,’G’,’T’,’H’,’=,’8’,’.’,’8’,’8’,’m’,’’,’’,’’};
for(i=0;16;i++)
{ON[i]=a[i];}
nitlcd();/*初始化液晶*/
display(ON);/*更新显示*/
}
/*主程序*/
void main()
{
register s,keycode;
long idata t;
start-main();/*初始化*/
main-delay();/*延时*/;
if(keycoed= =true)
{
keycode=key-scan-wait();
/*判断是否有测量键按下*/
t=measure();*/测量*/
S=0.5*t*C;*/换算*/
Decode-bcd(s.0x09);
/*把测量结果置换入显示缓冲区*/
init-lcd();/*初始化液晶*/
display(ON);/*更新显示*/
}
}
5 结束语
虽然用一个单独计时器电路也可以测量超声波的传输时间,但利用AT89C2051单片机可以简化设计,便于操作和直观读数。该系统经实际测试证明,可以满足大多数场合的测距要求。
- USB数据通信接口模块的元器件选型(12-21)
- RS-485接口元器件选型(11-30)
- USB数据通信接□模块的元器件选型(10-17)
- PIC单片机人机接口模块独立式按键的元器件选型(03-14)
- 采用零件平均测试法检测汽车半导体元器件品质的方法(09-25)
- PIC单片机人机接口模块元器件选择分析(09-13)