前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >蓝桥杯单片机必备知识—–(9)超声波测距

蓝桥杯单片机必备知识—–(9)超声波测距

作者头像
全栈程序员站长
发布于 2021-04-16 02:21:06
发布于 2021-04-16 02:21:06
811028
代码可运行
举报
运行总次数:28
代码可运行

蓝桥杯单片机必备知识—–(9)超声波测距

超声波测距原理:

超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。超声波在空气中的传播速度为340m/s,根据计时器记录的时间t,就可以计算出发射点距障碍物的距离(s),即:s=340t/2 。这就是所谓的时间差测距法。 超声波测距的原理是利用超声波在空气中的传播速度为已知,测量声波在发射后遇到障碍物反射回来的时间,根据发射和接收的时间差计算出发射点到障碍物的实际距离。由此可见,超声波测距原理与雷达原理是一样的。 测距的公式表示为:L=C×T 式中L为测量的距离长度;C为超声波在空气中的传播速度;T为测量距离传播的时间差(T为发射到接收时间数值的一半)。 超声波测距主要应用于倒车提醒、建筑工地、工业现场等的距离测量,虽然目前的测距量程上能达到百米,但测量的精度往往只能达到厘米数量级。 由于超声波易于定向发射、方向性好、强度易控制、与被测量物体不需要直接接触的优点,是作为液体高度测量的理想手段。在精密的液位测量中需要达到毫米级的测量精度,但是目前国内的超声波测距专用集成电路都是只有厘米级的测量精度。

核心代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//切记,计算距离不使用分频
sbit TX = P1^0;  //发射引脚
sbit RX = P1^1;  //接收引脚

void main(void)
{
   
  cls();
	AUXR = 0x80;
  TMOD = 0x10;  //配置定时器工作模式
  TH0 = 0xcd;
  TL0 = 0xd4;  
  TH1 = 0;
  TL1 = 0;  
  TR0 = 1;  //启动定时器
  EA = 1;
  ET0 = 1;  //打开定时器0中断
  while(1)
  {
   
        /** 100毫秒更新一次数据 */
		if(s_flag)
    {
   
      s_flag = 0;
      send_wave();  //发送方波信号
      TR1 = 1;  //启动计时
			while((RX == 1) && (TF1 == 0));  //等待收到脉冲,没有计满溢出
			TR1 = 0;  //关闭计时

			//发生溢出
			if(TF1 == 1)
			{
   
				TF1 = 0;
				distance = 9999;  //无返回
			}
			else
			{
   
				/** 计算时间 */
				time=TH1*256+TL1;
				distance = (unsigned int)(time*0.017);  //计算距离 
			}
			TH1 = 0;
			TL1 = 0;
    }
	}
}
//12us
void Delay12us()//@11.0592MHz
{
   
	unsigned char i;

	_nop_();
	_nop_();
	_nop_();
	i = 30;
	while (--i);
}

void send_wave()//发送八段脉冲波(40Khz)
{
   
	unsigned char i = 8;
	
	while(i --)
	{
   
		TX = 1;
		Delay12us();
		TX = 0;
		Delay12us();
	}
}

测试结果:

整个代码粘贴

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stc15f2k60s2.h>
#include "intrins.h"

#define uchar unsigned char
#define uint unsigned int
	
sbit TX = P1^0;  //发射引脚
sbit RX = P1^1;  //接收引脚
uchar tab[] = {
    0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0xff};
uchar dspbuf[] = {
   10,10,10,10,10,10,10,10};
uint distance,time = 0;
uchar s_flag = 0;

void display();
void load();
void Delay12us();
void send_wave();

void cls()
{
   
	P2 = (P2 & 0x1f) | 0x80;
	P0 = 0xff;
	P2 = 0x1f;
	
	P2 = (P2 & 0x1f) | 0xa0;
	P0 = 0x00;
	P2 = 0x1f;
}

void main(void)
{
   
  cls();
	AUXR = 0x80;
  TMOD = 0x10;  //配置定时器工作模式
  TH0 = 0xcd;
  TL0 = 0xd4;  
  TH1 = 0;
  TL1 = 0;  
  TR0 = 1;  //启动定时器
  EA = 1;
  ET0 = 1;  //打开定时器0中断
  while(1)
  {
   
        /** 200毫秒更新一次数据 */
		if(s_flag)
    {
   
      s_flag = 0;
            /** 关闭定时器0中断:计算超声波发送到返回的时间 */
// ET0 = 0;
      send_wave();  //发送方波信号
      TR1 = 1;  //启动计时
			while((RX == 1) && (TF1 == 0));  //等待收到脉冲,没有计满溢出
			TR1 = 0;  //关闭计时

			//发生溢出
			if(TF1 == 1)
			{
   
				TF1 = 0;
				distance = 9999;  //无返回
			}
			else
			{
   
				/** 计算时间 */
				time=TH1*256+TL1;
				distance = (unsigned int)(time*0.017);  //计算距离 
			}
			TH1 = 0;
			TL1 = 0;
    }
	}
}

//定时器0中断服务函数
void time0()  interrupt 1  //默认中断优先级 1
{
   
  static unsigned int intr = 0;
	if(++intr == 100){
   s_flag = 1;intr = 0;}
	
	display();
}

void load()
{
   
	dspbuf[5] = distance/100;
	dspbuf[6] = distance%100/10;
	dspbuf[7] = distance%10; 
}

void Delay12us()//@11.0592MHz
{
   
	unsigned char i;

	_nop_();
	_nop_();
	_nop_();
	i = 30;
	while (--i);
}

void send_wave()//发送八段脉冲波(40Khz)
{
   
	unsigned char i = 8;
	
	while(i --)
	{
   
		TX = 1;
		Delay12us();
		TX = 0;
		Delay12us();
	}
}

void display()
{
   
	static unsigned char dspcom = 0;
	
	load();
	
	P2 = (P2 & 0x1f) | 0xe0;
	P0 = 0xff;
	P2 = 0x1f;
	
	P2 = (P2 & 0x1f) | 0xc0;
	P0 = 1 << dspcom;
	P2 = 0x1f;
	
	P2 = (P2 & 0x1f) | 0xe0;
	P0 = tab[dspbuf[dspcom]];
	P2 = 0x1f;
	
	if(++dspcom == 8) dspcom = 0;
}

这时好多人会有疑惑,12us延时该如何做;

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/100124.html原文链接:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
LLM 效果不好?可能是 Prompt 写错了!Prompt Engineering 技术的最全综述
生成式人工智能(GenAI)系统,特别是基于Transformer架构的大型语言模型(LLM),正在迅速崛起并被广泛应用于各个行业和研究领域。这些模型能够通过文本、图像、音频或视频等多种形式的“提示”(prompt)进行交互,并根据提示生成相应的文本、图像、音频或视频输出。 LLM 从撰写营销邮件到解决数学问题,其应用范围不断拓展。 但是,想要有效地利用LLM需要掌握提示工程(prompt engineering)技术,即设计和优化提示以获得最佳结果。 这门新兴领域正快速发展,新的提示技术层出不穷,但同时也面临着术语混乱和缺乏系统性理解等挑战。
Lion 莱恩呀
2025/04/04
8240
LLM 效果不好?可能是 Prompt 写错了!Prompt Engineering 技术的最全综述
Prompt工程师指南从基础到进阶篇:用于开发和优化提示,以有效地使用语言模型(LMs)进行各种应用和研究主题
Prompt工程是一种相对较新的学科,用于开发和优化提示,以有效地使用语言模型(LMs)进行各种应用和研究主题。Prompt工程技能有助于更好地理解大型语言模型(LLMs)的能力和局限性。研究人员使用Prompt工程来改善LLMs在各种常见和复杂任务上的能力,
汀丶人工智能
2023/05/14
3.7K1
Prompt工程师指南从基础到进阶篇:用于开发和优化提示,以有效地使用语言模型(LMs)进行各种应用和研究主题
提升ChatGPT性能的实用指南:Prompt Engineering的艺术
提示工程是一门新兴学科,就像是为大语言模型(LLM)设计的"语言游戏"。通过这个"游戏",我们可以更有效地引导 LLM 来处理问题。只有熟悉了这个游戏的规则,我们才能更清楚地认识到 LLM 的能力和局限。
腾讯技术工程官方号
2023/08/11
1.7K0
提升ChatGPT性能的实用指南:Prompt Engineering的艺术
Prompt Engineering:提示词工程最佳实践与应用
随着人工智能技术的不断发展,特别是大型语言模型(LLM)的兴起,提示词工程(Prompt Engineering)逐渐成为提升AI模型性能、增强任务执行效率的关键技术。Prompt Engineering通过设计和优化提示词(Prompt),引导LLM生成特定类型的输出,广泛应用于文本生成、数据增强、代码生成、问答系统等领域。本文将深入探讨Prompt Engineering的背景知识、功能点、优点、缺点,以及与市场其他技术的对比,并结合具体业务场景和底层原理,通过Java示例展示其实际应用。
小马哥学JAVA
2024/12/26
9100
提示工程(prompt engineering):技术分类与提示词调优看这篇就够了
在人工智能盛起的当下,出现了一个新兴的行业——提示工程(prompt engineering)。提示词,简言之,就是我们和AI说的话。在人机交互模式下,一个好的提示词,往往能产生事半功倍的效果。文本领域,好的提示词往往能超越RAG/Agent所能发挥的能力;图片对应的视觉领域,好的提示词往往能产生更好地图片/视觉效果。
山行AI
2024/04/30
4.6K0
提示工程(prompt engineering):技术分类与提示词调优看这篇就够了
Agent 应用于提示工程
如果Agent模仿了人类在现实世界中的操作方式,那么,能否应用于提示工程即Prompt Engingeering 呢?
半吊子全栈工匠
2023/10/30
5230
Agent 应用于提示工程
提示工程Prompt Engineering
上一篇大型语言模型LLM中,介绍了什么是LLM、LLM的基础内容,并提到LLM将利用词汇的分布生成文档。这一篇是关于提示和提示工程的介绍,主要内容是我们如何影响词汇的分布。
MySQLSE
2024/06/14
1380
提示工程Prompt Engineering
Prompt learning 教学[进阶篇]:简介Prompt框架并给出自然语言处理技术:Few-Shot Prompting、Self-Consistenc
看完基础篇的各种场景介绍后,你应该对 Prompt 有较深的理解。之前的章节我们讲的都是所谓的「术」,更多地集中讲如何用,但讲「道」的部分不多。高级篇除了会讲更高级的运用外,还会讲更多「道」的部分。高级篇的开篇,我们来讲一下构成 prompt 的框架。
汀丶人工智能
2023/05/12
2.3K0
解锁LLMs的“思考”能力:Chain-of-Thought(CoT) 技术推动复杂推理的新发展
Chain-of-Thought(CoT)是一种改进的Prompt技术,目的在于提升大模型LLMs在复杂推理任务上的表现,如算术推理(arithmetic reasoning)、常识推理(commonsense reasoning)、符号推理(symbolic reasoning)。
汀丶人工智能
2024/06/15
9280
解锁LLMs的“思考”能力:Chain-of-Thought(CoT) 技术推动复杂推理的新发展
一个通用的自适应prompt方法,突破了零样本学习的瓶颈
今天要给大家介绍一篇Google的研究,解决了大语言模型(LLMs)在零样本学习方面的困境。相比于少样本学习,LLMs在零样本学习上常常表现得比较弱,这主要是因为缺乏指导。而且,目前的研究对零样本学习的改进也不多,因为在没有真实标签的任务中设计prompt方法还比较困难。
zenRRan
2023/08/22
7970
一个通用的自适应prompt方法,突破了零样本学习的瓶颈
来啦来啦!关于CoT提示策略综述
思维链(CoT)是一个循序渐进、连贯的推理链,通常被用作大型语言模型(LLM)的提示策略并体现出了巨大的优势。近年来,基于CoT提示的展示出的效果吸引了众多的研究。
zenRRan
2023/10/14
1.3K0
来啦来啦!关于CoT提示策略综述
大语言模型的预训练[6]:思维链(Chain-of-thought,CoT)定义原理详解、Zero-shot CoT、Few-shot CoT 以及在LLM上应
在 2017-2019 年之间,随着 Transformer 模型的提出,计算资源与大规模语料库不断出现,自然语言处理领域发生了翻天覆地的变化,传统的全监督学习的范式逐渐达到了瓶颈,很难在传统的训练方式上取得大幅度提升。这时大规模预训练模型的如 Bert、RoBERTa 等模型的出现使得研究方向转向了以预训练模型为基础 + 下游任务 Fine-tune 的范式。
汀丶人工智能
2023/07/20
3.1K0
大语言模型的预训练[6]:思维链(Chain-of-thought,CoT)定义原理详解、Zero-shot CoT、Few-shot CoT 以及在LLM上应
不写代码也能年薪百万?Prompt+低代码开发实战
近期 AIGC 狂潮席卷,“前端走向穷途”“低代码时代终结”的言论甚嚣尘上。事实上 GPT 不仅不会干掉低代码,反而会大幅度促进低代码相关系统的开发。本文会介绍 GPT Prompt Engineering 的基本原理,以及如何帮助低代码平台相关技术快速开发落地的技术方案。接着往下看吧~
腾讯云开发者
2023/06/13
1.3K0
不写代码也能年薪百万?Prompt+低代码开发实战
提示词(prompt)工程指南(一):提示介绍
提示工程是一种相对较新的学科,专门用于开发和优化提示,以高效地使用语言模型(LM)来处理各种应用和研究主题。提示工程技能有助于更好地理解大型语言模型(LLMs)的能力和局限性。研究人员使用提示工程来提高LLMs在各种常见和复杂任务上的容量,例如问题解答和算术推理。开发人员使用提示工程来设计与LLMs和其他工具接口的强大而有效的提示技术。
云微
2023/03/31
2.3K0
AI在线求鼓励?这些人一句话让GPT-3算术准确率提升61%
机器之心报道 编辑:张倩、小舟 GPT-3 对一些问题的回答令人大跌眼镜,但它可能只是想要一句「鼓励」。 「一个玩杂耍的人总共有 16 个球,其中一半是高尔夫球,高尔夫球中又有一半是蓝色的球,请问蓝球总共有多少个?」 对于一个小学生来说,这是一道再简单不过的数学题。但看似无所不能的 GPT-3 却被这道题难住了。 如果你输入这个问题之后,直接向 GPT-3 发问:「问题的答案(阿拉伯数字)是:__?」它会「不假思索」地给出一个错误答案:8。 GPT-3:你别说准不准,你就说快不快吧。 怎么能让 GPT-
机器之心
2022/05/27
8980
AI在线求鼓励?这些人一句话让GPT-3算术准确率提升61%
提示词(prompt)工程指南(三):高级提示
到此为止,已经很明显完善提示有助于在不同任务上获得更好的结果。这就是提示工程的整体理念。
云微
2023/03/31
1.7K0
大模型Prompt-Tuning技术进阶
近两年来,随之Prompt-Tuning技术的发展,有诸多工作发现,对于超过10亿参数量的模型来说,Prompt-Tuning所带来的增益远远高于标准的Fine-tuning,小样本甚至是零样本的性能也能够极大地被激发出来,得益于这些模型的 参数量足够大 ,训练过程中使用了 足够多的语料 ,同时设计的 预训练任务足够有效 。最为经典的大规模语言模型则是2020年提出的GPT-3,其拥有大约1750亿的参数,且发现只需要设计合适的模板或指令即可以 实现免参数训练的零样本学习 。
@小森
2024/06/06
3910
大模型Prompt-Tuning技术进阶
Google | 提出CoT解码新方法,无需Prompt,就能让大模型(LLM)进行CoT推理
在增强大语言模型(LLM)的推理能力方面,先前的研究主要集中在特定的Prompt技术上,例如少样本(Few-shot)或零样本(Zero-shot)思维链(CoT)提示。这些方法虽然有效,但通常涉及手工密集型Prompt工程。
ShuYini
2024/02/22
6800
Google | 提出CoT解码新方法,无需Prompt,就能让大模型(LLM)进行CoT推理
99%的普通人不会用的AI沟通术:揭秘我与AI对话的沟通技巧
Prompt Engineering(提示工程)作为与 LLM 交互的关键技术,正逐渐成为连接人类需求与模型能力的桥梁。
AIGC新知
2025/04/13
1710
99%的普通人不会用的AI沟通术:揭秘我与AI对话的沟通技巧
LLM最全「怪癖」首曝光!马里兰OpenAI等30+学者祭出75页提示报告
最近,来自马里兰大学、OpenAI、斯坦福、微软等12所机构的30多名研究者,首次对LLM的提示技术进行了大规模的系统研究,并发布了一份长达75页的详尽报告。
新智元
2024/06/17
1120
LLM最全「怪癖」首曝光!马里兰OpenAI等30+学者祭出75页提示报告
推荐阅读
LLM 效果不好?可能是 Prompt 写错了!Prompt Engineering 技术的最全综述
8240
Prompt工程师指南从基础到进阶篇:用于开发和优化提示,以有效地使用语言模型(LMs)进行各种应用和研究主题
3.7K1
提升ChatGPT性能的实用指南:Prompt Engineering的艺术
1.7K0
Prompt Engineering:提示词工程最佳实践与应用
9100
提示工程(prompt engineering):技术分类与提示词调优看这篇就够了
4.6K0
Agent 应用于提示工程
5230
提示工程Prompt Engineering
1380
Prompt learning 教学[进阶篇]:简介Prompt框架并给出自然语言处理技术:Few-Shot Prompting、Self-Consistenc
2.3K0
解锁LLMs的“思考”能力:Chain-of-Thought(CoT) 技术推动复杂推理的新发展
9280
一个通用的自适应prompt方法,突破了零样本学习的瓶颈
7970
来啦来啦!关于CoT提示策略综述
1.3K0
大语言模型的预训练[6]:思维链(Chain-of-thought,CoT)定义原理详解、Zero-shot CoT、Few-shot CoT 以及在LLM上应
3.1K0
不写代码也能年薪百万?Prompt+低代码开发实战
1.3K0
提示词(prompt)工程指南(一):提示介绍
2.3K0
AI在线求鼓励?这些人一句话让GPT-3算术准确率提升61%
8980
提示词(prompt)工程指南(三):高级提示
1.7K0
大模型Prompt-Tuning技术进阶
3910
Google | 提出CoT解码新方法,无需Prompt,就能让大模型(LLM)进行CoT推理
6800
99%的普通人不会用的AI沟通术:揭秘我与AI对话的沟通技巧
1710
LLM最全「怪癖」首曝光!马里兰OpenAI等30+学者祭出75页提示报告
1120
相关推荐
LLM 效果不好?可能是 Prompt 写错了!Prompt Engineering 技术的最全综述
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档