智能车制作

 找回密码
 注册

扫一扫,访问微社区

楼主: 自己人
打印 上一主题 下一主题

51超声波测距

  [复制链接]

0

主题

7

帖子

0

精华

注册会员

Rank: 2

积分
130
威望
76
贡献
34
兑换币
39
注册时间
2013-11-3
在线时间
10 小时
毕业学校
临河一中
1#
发表于 2013-12-30 23:07:18 | 显示全部楼层
有点复杂哇!超声波测距用到这么多知识?!
回复 支持 反对

使用道具 举报

0

主题

7

帖子

0

精华

注册会员

Rank: 2

积分
130
威望
76
贡献
34
兑换币
39
注册时间
2013-11-3
在线时间
10 小时
毕业学校
临河一中
2#
发表于 2013-12-30 23:08:06 | 显示全部楼层
#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;
}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|亿加合和智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-5-4 19:02 , Processed in 0.058942 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表