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

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

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

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

# 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();   // 延时两毫秒,不用一直发送超声波
}
}

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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • bool型函数「建议收藏」

    bool型函数「建议收藏」bool介绍C++中bool函数如果值非零就为True,为零就是False。比如写数据结构的时候,有时候需要判断一下链表是不是为空,这时候需要用到bool函数,再者,你看到bool就知道这个函数返回值只是用于判断真假。bool函数返回的只有true和false。而int会返回各种数字,但是你关心的不是数字的多少,而是这个数字为不为0.所以这种情况用bool会更加简洁,规范,你看到bo…

  • Ubuntu安装nginx_服务器安装Ubuntu

    Ubuntu安装nginx_服务器安装Ubuntu版本ubunt16.04nginx-1.8.1gcc-4.8.4pcre-8.38zlib-1.2.11openssl-1.0.2n前置环境配置进入到/usr/local目录下执行下面1234,此处路劲与之后安装nginx对应,需要注意*1、gcc源码编译依赖环境apt-getinstallbuild-essentialapt-

  • textview可复制_android长按点击

    textview可复制_android长按点击有这么一个需求,用户在浏览文本信息时希望长按信息就能弹出复制的选项方便保存或者在别的页面使用这些信息.类似的,就像长按WebView或者EditText的内容就自动弹出复制选项.这里面主要是2个特点:1,用户只能浏览文本信息而不能编辑这些文本信息;2,用户对着文本信息长时间点按可以弹出”复制”选项实现复制;网上有好多种方法可实现,也比较零散,此处做个小结,希望有所帮助.1,通过继承EditT…

  • IJ实现侧边栏单独搜索

    IJ实现侧边栏单独搜索第一步任意点击一个第二步输入要搜索的单词

  • MySQL练习题~45道

    MySQL练习题~45道创建表并添加数据–经典SQL练习题CREATETABLESTUDENT8(SNOVARCHAR(3)NOTNULL,SNAMEVARCHAR(4)NOTNULL,SSEXVARCHAR(2)NOTNULL,SBIRTHDAYDATETIME,CLASSVARCHAR(5));CREATETABLECOURSE(CNOVARCHAR(5)NOTNULL,CNAMEVARCHAR(10)NOTNULL,TNOVARCHAR(10)NOT

  • python执行测试用例_执行测试用例的工作

    python执行测试用例_执行测试用例的工作前言通常我们认为每个测试用例都是相互独立的,因此需要保证测试结果不依赖于测试顺序,以不同的顺序运行测试用例,可以得到相同的结果。pytest默认运行用例的顺序是按模块和用例命名的ASCII编码

发表回复

您的电子邮箱地址不会被公开。

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