历史上的今天
今天是:2024年12月23日(星期一)
2020年12月23日 | 51单片机超声波测距报警系统
2020-12-23 来源:51hei
要想做超声波测距系统的仿真,核心是怎么解决这个问题:实物系统实际存在的超声波并利用它测距如何在仿真图中实现。我也下载过很多别人的仿真图,可是自己一运行就是没显示,全部都不能用,其实问题就是出在仿真图中超声波发射接收模块。经过修改的仿真图如下(亲测可用)

这个仿真图还包含按键设置模块和报警模块(前者用于设置报警值,后者在测得距离小于设置报警值时候蜂鸣器报警),由上图中标注的按键模块和报警模块实现,按键设置模块用法如下:
按下一次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(); //进入设置报警功能
}
}
}
史海拾趣
|
我有一颗芯片 ip210w由 8051内核和一个MAC组成 芯片手册有一句话:CPU starts up and runs instructions at address 0xFFFD of external Flash. 就是这句话把我郁闷了好久,怎么烧程序都不行。CPU都跑不起来。 请教高手如何让我的CPU跑起来,谢 ...… 查看全部问答> |
|
不能捕捉到CArchiveException 请各路英雄指教 大家好, 最近我遇到一个问题,在我的应用程序中(MFC工程), 里面有一句代码,是对文件读写的,如果这儿有一个空文件(里面什么内容也没有), 但我们又对它进行了读操作(调用CArchive >>进行读出),那么这儿一定会有个 CArchiveException异 ...… 查看全部问答> |
|
1.如题 ```` 2.还有就是如果一段时间没有数据传输 是不是就自动断开了? 3.断开后就可以继续发AT指令了么? 4.谢谢。。。。。… 查看全部问答> |
|
1、开始我使用的共享MFC库出错,后来我使用的静态MFC库,不出错了,,,但我在PB里已经向目标板加上了MFC组件,不知道为什么出错 2、我生成的EXE文件里如果有中文会显示乱码,不如应该如何解决 先谢谢了… 查看全部问答> |
|
今天调试板子,发现无法连接。第一个想到的是电源电压(焊DSP之前有测过电压都是对的)。 把所有的电容测了,发现RTS管脚处,用了一个RC 滤波电路。C上电压变成2.75V。去掉电容,DSP可连接。 将原本的4.7K,电阻换小后,电压上抬到3V左右。DSP工 ...… 查看全部问答> |
|
求助:建立了一个任务,就是不停进行打开、写、关闭、删除文件的操作,处于ready的状态,同时只有tShell处于ready状态,但spy后发现没有任何任务占用tick时间,中断也没有。该任务没执行。 出现这种情况是在建立任务后,在任务中输入i等指令后,就 ...… 查看全部问答> |
|
1.最基本的:系统开始运行OSStart()会引发一次调度 2.创建一个新任务时,如果此时系统在运行状态,则引发一次调度。3.某任务调用挂起函数挂起自己后引发一次调度。 4.调用恢复任务函数OSTaskResume()引发一次调度。 5.任务延时时,引发一次 ...… 查看全部问答> |




