蓝桥杯单片机超声波模块代码编程

蓝桥杯单片机超声波模块代码编程

历年的省赛都没有考到超声波模块,但是超声波模块还是非常重要的一个模块,还有就是既然很久没有考过,那么突然考一波也是很有可能的喔。还不抓紧学起来。

其实呢超声波模块的编程并不难,其实非常的简单,下面直接来看代码吧。

# include "reg52.h"
# include "intrins.h"

#define somenop {_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}

typedef unsigned char u8;
typedef unsigned int u16;

u8 code shuma[10] = {
   0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

sbit TX = P1^0;       // 超声波发送端
sbit RX = P1^1;       // 超声波接受端


unsigned char distance_table[3];     // 超声波检测到的距离值

	// 选择开通的外设
void select(u8 local)
{
   
    switch(local)
	{
   
	    case(4): P2 = (P2 & 0x1f) | 0x80; break;
		case(5): P2 = (P2 & 0x1f) | 0xa0; break;
		case(6): P2 = (P2 & 0x1f) | 0xc0; break;
		case(7): P2 = (P2 & 0x1f) | 0xe0; break;
	}
}

    // 数码管的延时函数
void delay_shuma()
{
   
    u16 i = 200;
	while(i--);
}

    // 点亮单个数码管函数
void display(u8 local, u8 num)
{
   
    select(6);
	P0 = 0x80 >> (local - 1);
	P2 = P2 & 0x1f;

	select(7);
	P0 = shuma[num];
	P2 = P2 & 0x1f;

	// 延时一下先
	delay_shuma();

	// 消隐
	select(6);
	P0 = 0x00;
	P2 = P2 & 0x1f;
}


void send_wave()           // 超声波发送函数
{
   
    u8 i = 8;
	while(i--)           // 连续发送8个波形,方便检测接收
	{
   
	    TX = 1;
		somenop;somenop;somenop;somenop;somenop;
		TX = 0;
		somenop;somenop;somenop;somenop;somenop;

	}
}

   // 发送超声波的延时函数 不用发送太过于频繁
void delay()
{
   
    unsigned char i, j;

	_nop_();
	i = 40;
	j = 146;
	do
	{
   
		while (--j);
	} while (--i);
}

/* Timer0 interrupt routine */
void tm0_isr() interrupt 3
{
   
    TH1 = (65535 - 50000) / 256;
	TL1 = (65535 - 50000) % 256;
}

void main()
{
   
    u16 t,distance;
	TMOD = 0x10;
	TH1 = (65535 - 50000) / 256;
	TL1 = (65535 - 50000) % 256;

	ET1 = 1;
	EA = 1;

    while(1)
	    {
   
		    
		    send_wave();
			TR1 = 1;		    // 这里直接打开TR1就可以打开定时器1了
			
			while((RX == 1) && (TF1 == 0));    // 一直在等待 
			TR1 = 0;

			if (TF1 == 1)								 // 计时溢出的时候
			{
   
			    distance = 999;
				TF1 = 0;
			}											 // 接收到信号
			else
			{
   
			    t = TH1;
				t <<= 8;
				t |= TL1;
				distance = (u16)(t * 0.017); 
				   
			}
			TH1 = 0;
			TL1 = 0;
			display(1, distance%10);
			display(2, distance/10%10);
			display(3, distance/100);
			delay();   // 延时两毫秒,不用一直发送超声波
		    
		}
}

具体思路可以查看图片解析:
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
上一篇 2021年11月12日 下午8:00
下一篇 2021年11月12日 下午9:00


相关推荐

  • 最全的android图片加密

    最全的android图片加密在android开发过程中有些时候一些重要的图片,我们不希望用户通过文件管理直接能查看,我们该怎么办呢,当然你可以把图片放在android的内部存储中,data/data/下,但毕竟androidroot用户一大堆,还是解决不了问题。那么我们就需要对图片进行加密,当然加密的方法有很多种,下面给大家推荐我常用的2中方法,基本上可以解决大部分问题。   1、国际标准的AES加密,通过加密流存储

    2022年6月21日
    44
  • java findwindow_Windows 的FindWindow函数使用

    java findwindow_Windows 的FindWindow函数使用函数功能 该函数获得一个顶层窗口的句柄 该窗口的类名和窗口名与给定的字符串相匹配 这个函数不查找子窗口 在查找时不区分大小写 函数型 HWNDFindWind LPCTSTRIpCla LPCTSTRIpWin 参数 IpClassName 指向一个指定了类名的空结束字符串 或一个标识类名字符串的成员的指针 IpWindowName 指向一个指定了窗口名 窗

    2026年3月16日
    3
  • 批处理命令——set[通俗易懂]

    批处理命令——set[通俗易懂]【1】set命令简介  set,设置。【2】set命令使用  1.打印系统环境变量。set命令可以打印系统所有的环境变量信息。  应用示例:新建文本文件,命名为set_sys,修改文件类型为bat,用Notepad++打开编辑内容如下:1@echooff2::set显示所有系统环境变量3::set(暂时屏蔽掉,需要执行请去掉::)4pause>nul5::setc显示所有以C开头的环境变量(不区分大小写)6setc7pause

    2022年8月22日
    7
  • istio解决了什么问题(istio k8s)

    问题简述通过istio实现灰度发布,浏览器访问报404错误,但是通过curl传递一个Host请求头就能访问成功。问题复现RancherUI界面启动Istio,并开启ingress网关命名空间启动Istio自动注入部署nginx应用###deploy-nginx-v1.yamlapiVersion:apps/v1kind:Deploymentmetadata:labels:app:nginxversion:v1name:nginx-v1n

    2022年4月16日
    114
  • void及void指针含义的深刻解析

    void及void指针含义的深刻解析

    2021年12月2日
    48
  • Linux使用快捷键,who命令,rm命令,ps命令,cd,命令kill命令,find命令,grep命令,tar命令(gz、tar、bz2),用户管理,vim配置的一部分,相关命令

    Linux使用快捷键,who命令,rm命令,ps命令,cd,命令kill命令,find命令,grep命令,tar命令(gz、tar、bz2),用户管理,vim配置的一部分,相关命令

    2021年12月31日
    45

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号