(Proteus仿真图及程序文件由附件下载)
要想做超声波测距系统的仿真,核心是怎么解决这个问题:实物系统实际存在的超声波并利用它测距如何在仿真图中实现。我也下载过很多别人的仿真图,可是自己一运行就是没显示,全部都不能用,其实问题就是出在仿真图中超声波发射接收模块。经过修改的仿真图如下(亲测可用)
这个仿真图还包含按键设置模块和报警模块(前者用于设置报警值,后者在测得距离小于设置报警值时候蜂鸣器报警),由上图中标注的按键模块和报警模块实现,按键设置模块用法如下:
按下一次KEY1,显示屏显示当前设置的报警值,按下KEY2最小值加1CM,按下KEY2减1CM,设置完成后按下KEY1保存,显示屏返回显示距离,如此往复循环。
KEIL程序框架图
单片机源程序如下:
- #include "task.h"
- extern unsigned int S; //声明距离缓存变量,在文件"task.c"中定义
- extern unsigned int dis_buf[4]; //声明显示缓存数组,在文件"task.c"中定义
- extern unsigned int code duan_ma[16];
- extern unsigned int S_H, S_L; //S_H:报警上限值,默认400cm,S_L:报警下限值,默认10cm
- /* 主函数 */
- void main(void)
- {
- digDuan = 0x40; //显示"----"
- digWei1 = 0;
- digWei2 = 0;
- digWei3 = 0;
- digWei4 = 0;
- delayms(1000); //延时大约1s
- InitTimer0(); //定时器0初始化
- while(1)
- {
- count(); //计算距离
- if(S>=S_H || S<=S_L) //如果超出设定的范围,则显示"---"
- {
- dis_buf[3] = 0x00;
- dis_buf[2] = 0x40; //显示"---"
- dis_buf[1] = 0x40;
- dis_buf[0] = 0x40;
- BEEP = 0; //蜂鸣器鸣叫
- delayms(1000);
- }
- else
- {
- BEEP = 1; //关闭蜂鸣器
- dis_distance(); //显示距离
- }
- if(key_scan() == 1) //如果按下设置键,则进入设置报警功能
- {
- BEEP = 0; //按键提示音
- delayms(50);
- BEEP = 1;
- delayms(100);
- key_fuction(); //进入设置报警功能
- }
- }
- }
复制代码
所有资料51hei提供下载:
雷达测距.rar
(120.28 KB, 下载次数: 506)
|