HC-SR04超声波测距 程序怎么写啊!! 输出代码 和输入定时器计数高电平时间代码~ MSP430F149单片机

HC-SR04超声波测距 程序怎么写啊!! 输出代码 和输入定时器计数高电平时间代码~ MSP430F149单片机,第1张

给你个at89c51的程序,自己稍微改一下就可以了。这个是用数码管显示的。

#include <REG52.h>

#include<stdio.h>

#define uchar unsigned char

#define uint unsigned int

extern char *itoa(int i)

uint code SEG7[16]={0x28,0x7e,0xa2,0x62,0x74,0x61,0x21,0x7a,0x20,0x60,

0x30,0x25,0xa9,0x26,0xa1,0xb1}//0 1 2 3 4 5 6 7 8 9 A-E

uchar code ACT[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}//数码管显示位置

uchar dis[4]

sbit trig=P1^0

sbit echo=P1^1

void delay(uint k)

{

uint i,j

for(i=0i<ki++)

{

for(j=0j<121j++)

{}

}

}

void display(uint dis)

{

P0=SEG7[dis%10]

P2=ACT[3]

delay(1)

P0=SEG7[(dis/10)%10]

P2=ACT[2]

delay(1)

P0=SEG7[(dis/100)%10]

P2=ACT[1]

delay(1)

P0=SEG7[dis/1000]

P2=ACT[0]

delay(1)

}

void display2(uint Hi,uint Low)

{

P0=SEG7[Hi%10]

P2=ACT[3]

delay(1)

P0=SEG7[(Hi/10)%10]

P2=ACT[2]

delay(1)

P0=SEG7[(Hi/100)%10]

P2=ACT[1]

delay(1)

/* P0=SEG7[Hi/1000]

P2=ACT[0]

delay(1)

*/

//Low

P0=SEG7[Low%10]

P2=ACT[7]

delay(1)

P0=SEG7[(Low/10)%10]

P2=ACT[6]

delay(1)

P0=SEG7[(Low/100)%10]

P2=ACT[5]

delay(1)

/* P0=SEG7[Low/1000]

P2=ACT[4]

delay(1) */

}

void delay10us()

{

uchar i

for(i=11i>0i--)

}

void init()

{

TMOD=0x21//模式1

TH1=0xf3//4800bps fosc=12M

TL1=0xf3

TR0=0

trig=0

echo=0

TH0=0

TL0=0

TCON=0x00

SCON=0x50//SM0=0 SM1=1 SM2=0 REN=1 TB8=0 R8=0 TI=0 RI=0

PCON=0x80//SMOD=1

TR1=1

ES=1

EA=1

}

uint getDistance()

{

uint i=29412//5m来回需要的时间(us) (5*2/340)*1000000

TR0=0

TH0=0

TL0=0

//接收信号端置0

echo=0

//开始触发

trig=1

//延时10微秒

delay10us()

//停止触发

trig=0

//没有信号返回并且在5米障碍物信号返回需要的时间前则等待 (无信号即时返回,防止死循环,阻碍其它程序的执行)

while(!echo&&i>0)

{

i--

}

if(i>0)//小于5米,说明有信号返回

{

TR0=1//开始计时

while(echo)//持续高电平则计时,转为低电平则退出

TR0=0//停止计时

return (uint)((TH0*256+TL0)*0.170)//单位:mm //340000/1000000/2=0.17 mm/us

}

//display2(TH0,TL0)

return 0//大于5米则返回0

}

void SendChar(uchar ch)

{

SBUF=ch

while(!TI)

TI=0

}

void SendCmd(uchar *cmd,uchar sz)

{

uchar i=0

SendChar('$')

for(i=0i<szi++)

{

SendChar(*(cmd+i))

}

SendChar('@')

}

void main()

{

uint distance=0

init()

while(1)

{

//测距

distance=getDistance()

//sprintf(dis,"%4d",distance)

//SendCmd(dis,4)

display(distance)

/* if(TF0)

{

TF0=0

TH0=0

TL0=0

} */

}

}

void serial_serve(void) interrupt 4

{

}

1、HC-SR04使用方法:给触发端子trig一个10us以上的高电平即可触发,触发后echo端子将接受到高电平,高电平的持续时间就是测距的往返时间。

2、例程:

#include<reg52.h>

#define uchar unsigned char

#define uint unsigned int

/*位定义*/

sbit CHUFA=P0^1    //位定义超声波触发端(10us以上高电平触发)

sbit JIESHOU=P0^3    //接收端(接受高电平)

sbit BEEP=P2^0        //蜂鸣器

sbit OUT0=P3^2        //外部中断0

uchar JS_FLAG        //接收标志

uint CF_TIME,t0,t1,shu

/*函数声明*/

void timer0()        

void int0()

void display(uint)

main(){

    CHUFA=0        //初始化拉低触发端和接收端电平

    JIESHOU=0

    JS_FLAG=0        

    CF_TIME=15        //初始化触发时间(大于10us)

    TMOD=0x11        //定时器方式选择

    EA=1             //开总中断

    ET0=1            //开定时器0中断

    EX0=1             //开外部中断0

    IT0=0             //外部中断选择下降沿触发

    //JIESHOU=1

    while(1){

        OUT0=JIESHOU      //外部中断0被赋值为接收端信号,当出现下降沿是触发外部中断0

        if(JS_FLAG==0){        //如果没有接收到高电平则触发

            CHUFA=1

            while(CF_TIME--)    //10us以上高电平触发传感器

        }

        if(JIESHOU==1){        

            TR0=1            //如果接收端收到高电平则启动定时器

            JS_FLAG=1         //并且标志位置1

            BEEP=0            //蜂鸣器响    

        }

        display(t1)    //显示测量时间(秒)

    }

}

/*定时器0中断程序*/

void timer0() interrupt 1{    

    TH0=(65536-10000)/256    //装初值 10ms

    TL0=(65536-10000)%256

    t0++                    //每进入一次中断t0加1    

}

/*外部中断0中断程序*/

void int0() interrupt 0{

    TR0=0            //一旦进入外部中断0,说明接收端收到下降沿信号。关闭定时器0

    JS_FLAG=0        //接收标志位置0

    BEEP=1               //关闭蜂鸣器

    t1=t0*10/1000    //测量时间为 进入定时器中断次数t0乘以每次时间10ms,除以1000化为秒为单位

    t0=0            //t0清零

}

/*数码管显数函数*/

void display(uint shu){

    //数码管显示函数

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/11148239.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存