注册会员
- 积分
- 130
- 威望
- 76
- 贡献
- 34
- 兑换币
- 39
- 注册时间
- 2013-11-3
- 在线时间
- 10 小时
- 毕业学校
- 临河一中
|
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uint count=0;
uchar i=0;
uint distant=0;
uint x;
//******************************************
//超声波接口的初始化设定
sbit TRIG=P1^0;//触发控制信号输出端口
sbit ECHO=P3^2;//回响信号接收端口
//******************************************
//定时器0的初始化
void time0_int(void)
{
TMOD=0x00;//工作方式0
TH0=0xff;//高八位赋值,使之延时为1us
TL0=0x1f;//低八位赋值
ET0=1;//T0开中断
EA=1;//开总中断
TR0=1;//启动定时器
}
//******************************************
//外部中断初始化
void outside_int(void)
{
EA=1;//开总中断
EX0=1;//开外部中断0
IT0=0;//低电平触发方式
}
//******************************************
//定时器0中断程序
void time0() interrupt 1
{
TH0=0xff;//高八位赋值
TL0=0x1f;//低八位赋值
count++;
}
//******************************************
//延时函数
void delay(x)
{
time0_int();
if(count==x)
return;
}
//******************************************
//主函数
void main(void)
{
time0_int();
ECHO=0;
outside_int();//外部中断0初始化
while(1)
{
P2=0xfe;
while(ECHO)//计算高电平持续时间,以ms为单位
{
time0_int();//定时器0初始化
if(count==1000)//当定时器自加1000us时,给i增加1ms
{
count=0;
i++;
}
distant=340*i/1000;//距离的计算公式
P0=table[i%10];
}
}
}
//******************************************
//外部中断0程序
void outside_intrrupt() interrupt 0 using 1
{
TRIG=0;
TRIG=1;//触发信号置位,使模块内部发射8个40khz脉冲
delay(15);//根据时序图延时20us
TRIG=0;
//while(1);//等待回响电平为高电平
if(ECHO==1) return;
} |
|