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){
//数码管显示函数
}
1.检查电脑是否存在病毒,请使用百度卫士进行木马查杀。2.系统文件损坏或丢失,盗版系统或Ghost版本系统,很容易出现该问题。建议:使用完整版或正版系统。
3.安装的软件与系统或其它软件发生冲突,找到发生冲突的软件,卸载它。如果更新下载补丁不是该软件的错误补丁,也会引起软件异常,解决办法:卸载该软件,重新下载重新安装试试。顺便检查开机启动项,把没必要启动的启动项禁止开机启动。
4.如果检查上面的都没问题,可以试试下面的方法。
打开开始菜单→运行卖烂→输入cmd→回车,在命令提示符下输入下面命令 for %1 in (%windir%\system32\*.dll) do regsvr32.exe /s %1回车。
完成后,在输入下祥神面
for %i in (%windir%\system32\*.ocx) do regsvr32.exe /s %i 回车。
如果怕输入错误,可以复制这两条指令,然后在命令提示符后击鼠标右键,打“粘贴”,回车,谨配亏耐心等待,直到屏幕滚动停止为止。(重启电脑)。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)