大多数人感觉超声波测距proteus仿真是无法实现的,虽然proteus自带的库有GUR03和SRF04两种模型,但是却与实际传感器使用方法相差甚远,即使求助度娘也很难找到简单易懂的教程。
之前很多人想做超声波测距仿真但都没有找到很好的办法去实现,在软件里没有这样的元件,有人用一个按键开关去模拟仿真,这样仿真出来的效果,非常不好。还有人用555时基电路产生一个延时信号(555电路作为超声波仿真的内部元件),来模拟超声波头发送后遇到回波返射回来的这阶段时间,来对单片机超声波测距单片机系统进行模拟,能完成对超声波测距模块大致仿真,但需要繁杂的设计。
下面是一个超声波测距模块的proteus模型,能直接用于proteus仿真,且使用方法与实际传感器几乎一致,模型如下图。楼主千辛万苦终于完成了仿真,分享交流一下,请大家不啬赐教!
(library文件见附件)
下面是仿真效果:
单片机程序代码:
#include #include #include #define Delay4us(){_nop_();_nop_();_nop_();_nop_();} sbit LEDRed=P2^4; //测距指示灯,亮表示正在测距,灭表示测距完成 sbit Trig=P1^7; //HC-SR04触发信号输入 sbit Echo=P1^6; //HC-SR04回响信号输出 float DistanceValue=0.0; //测量的距离值 float SPEEDSOUND; //声速 //延时函数 20微秒 @12.000MHz void Delay20us() { uchar i; _nop_(); i = 7; while (--i); } //测量距离 float MeasuringDistance() { //最大定时时间约65ms TH0=0; TL0=0; //生成20us的脉冲宽度的触发信号 Trig=1; Delay20us(); Trig=0; //等待回响信号变高电平 while(!Echo); TR0=1; //启动定时器0 //等待回响信号变低电平 while(Echo); TR0=0; //关闭定时器0 //返回距离值(mm) return (SPEEDSOUND*(TH0*256.0+TL0))/2000; } //HCSR04初始化 void HCSR04_Initialize() { SPEEDSOUND=334.1+25*0.61; Trig=0; Echo=0; TMOD=0x01; } //测距的数值排序求平均 float DistanceStatistics() { uchar i; float disData; for(i=0;i<7;i++) //连续测距 { disData+=MeasuringDistance(); delay(1); } return disData/7.0; } void main() { LcdInitiate();//1602初始化 HCSR04_Initialize();//HC-SR04初始化 while(1) { DistanceValue= DistanceStatistics() ; display_val((int)DistanceValue,0x45);//显示距离值 delay(1000); LEDRed=~LEDRed; //测距系统工作指示灯 } }
上一篇:单片机波形发生器Proteus仿真程序
下一篇:51单片机中的ROM和RAM分别是什么?
推荐阅读最新更新时间:2024-11-06 22:17
设计资源 培训 开发板 精华推荐
- 自动点锡笔
- 最小的麦金塔-天气时钟
- ESP32开发板 ESP32-IOT-KIT全开源物联网开发板
- LTC2992IDE 双向 30V 至 300V 高侧功率监视器的典型应用
- NCV317MAB 电流调节器的典型应用
- 适当调整 PWM 控制器的 MOSFET 尺寸 - 适当调整同步降压控制器的 MOSFET 尺寸及其对效率的影响的基础知识
- 林紫䶮2018051402024第二次作业
- LT1172HVCQ、12V/1.25A 负至正降压-升压转换器的典型应用
- 使用 ON Semiconductor 的 NCP4302 的参考设计
- LTC3630MPMSE 12V 至 65V 输入至 12V 输出和 100mA 输入电流限制的典型应用电路