基于STC89C51/2的的超声波测距(1602A显示)「建议收藏」

基于STC89C51/2的的超声波测距(1602A显示)「建议收藏」基于STC89C51/2的的超声波测距(1602A显示) 楼主在做学校单片机设计的时候为了测试超声波模块的功能与精度,动手DIY一款能用的超声波测距仪器,用1602液晶显示屏动态显示,精度在0.5cm左右,粗略测距,可用于避障,检测距离等的实际用途中。 我的超声波模块使用的是HC-SR04,板子使用的是STC89C52RC学习版(理论上51和52均可使 用)。得到距离之后可用于扩展功能,之后有空可以把我的经验分享出来,欢迎讨论。我的引脚接口如下ECHO=P2^4;

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

基于STC89C51/2的的超声波测距(1602A显示)

    	楼主在做学校单片机设计的时候为了测试超声波模块的功能与精度,动手DIY一款能用的超声波
    测距仪器,用1602液晶显示屏动态显示,精度在0.5cm左右,粗略测距,可用于避障,检测距离
    等的实际用途中。
		我的超声波模块使用的是HC-SR04,板子使用的是STC89C52RC(理论上51和52均可使用。
	得到距离之后可用于扩展功能,之后有空可以把我的经验分享出来,欢迎讨论。

我的引脚接口如下

  1. ECHO=P2^4;
  2. TRIG=P2^5;
  3. LCD_EN=P2^2;
  4. LCD_RS=P2^0;
  5. LCD_RW=P2^1;
  6. A K管脚介绍如下
    A即led+,我按照下图给led通的正极电源而不是P26,K与之相反接地,具体接法如下图
  7. 1 2 3接入滑动变阻器如下图

在这里插入图片描述
在这里插入图片描述
8. D0 ~ D7我接入的是P 0 ^ 0~P 0 ^ 7(注意不要接到VCC管脚上去),还有接入P0口要接上拉电阻,否则会烧坏的。

我的实验效果如下:
图片: 在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
具体的视频实现效果可以移步去点这里

实现代码如下

// %% Made by A_Kang
#include<reg51.h>
#include<1602.h>
#define uchar unsigned char
#define uint unsigned int 
#define VELOCITY_23C	3453       //23摄氏度时的声速,声速V= 331.5 + 0.6*温度;
long int distance;
uchar count;
sbit dcf=P1^7;
sbit ECHO=P2^4;
sbit TRIG=P2^5;
uchar table[]="distance: ";
void Init_MCU()	//初始化定时器
{ 
   
	TMOD = 0x01;	  //定时器0初始化,设置为16位自动重装模式
 	TL0 = 0x66;
	TH0 = 0xfc;	      //1ms
    ET0 = 1;	      //开定时器0
	EA = 1;		      //总中断使能
}
void Init_Parameter(void)//初始化参数和IO口函数
{ 
   
	 ECHO =1;
	 TRIG = 1;
	 count = 0;
}
/* 函数描述 : 显示字符串函数 */
/* 输入参数 : point,address */
/* 参数描述 : 写入的字符串的地址指针 1602显示对应的地址 */
void display_char(uchar *point,uchar address)
{ 
   
	uchar i;
	LCD_w_com(0x80 + address);
	for(i = 0;i < 16; i++)
	{ 
   
		LCD_w_data(*point);
		point++;
	}
}
/* 函数描述 : 显示数字 */
/* 输入参数 : number,address */
/* 参数描述 : number写入的数据,address地址 */
void display(int number,uchar address)
{ 
   
	uchar b,c,d,e;
	b= (number / 100);
	c= (number / 10) % 10;
	d = number % 10;
	e = number % 10;

	LCD_w_com(0x80 + address);
    LCD_w_data(b + 48);
	LCD_w_data(c + 48);
	LCD_w_data(d + 48);
	LCD_w_data(46);           //小数点的ASCII
	LCD_w_data(e + 48);    
}
void Trig_SuperSonic(void)//出发声波
{ 
   
	 TRIG = 1;
	 delay_ms(1);
	 TRIG = 0;
}
void Measure_Distance(void)//距离函数计算
{ 
   
	uchar l;
	uint h,y;
	TR0 = 1;
	while(ECHO==1)
    { 
   
        ;
    }	
	TR0 = 0;
	l = TL0;
	h = TH0;
	y = (h << 8) + l;
	y = y - 0xfc66;//us部分
	distance = y + 1000 * count;//计算总时间
	TL0 = 0x66;
	TH0 = 0xfc;
	delay_ms(30);
	distance = VELOCITY_23C * distance / 20000;
	distance=distance/10;
}
void cm()
{ 
   
	LCD_w_data(99);           //"c"的ASCII
	LCD_w_data(109);          //"m"的ASCII
}
void main()
{ 
   
	LCD_init();
	Init_MCU();//初始化定时器
	Init_Parameter();//初始化超声波
	display(200,0x00);
			   							
	while(1)
	{ 
   
		LCD_disp_cher(0X00,1,table);
		Trig_SuperSonic();         //触发超声波发射
		while(ECHO == 0)          //等待回声
	    { 
   
	             ;
	    }
		Measure_Distance();        //计算脉宽并转换为距离,单位mm
		display(distance,0x40);    //显示位置
		cm();
		Init_Parameter();
		delay_ms(600);  
	}
}
void timer0 (void) interrupt 1//T0中断处理函数
{ 
   
	TF0 = 0;
	TL0 = 0x66;
	TH0 = 0xfc;
	count++;
	if(count == 18)//超声波回声脉宽最多18ms
	{ 
   
		TR0 =0;
		TL0 = 0x66;
		TH0 = 0xfc;
		count = 0;
	}
}

库函数 1602.h(点这里)
建议自己写适配,我已经写好了一个库文件,需要的话可以点开自取。

	**里面集成了1602写入命令函数,写入数据函数,1602显示屏初始化函数, 还有
一个自带的显示函数,可以不用自己再次编写函数,通过指定字符ASCII码,设
置显示行数和显示首地址即可显示到1602上,亲测可行, 但是推荐字符和数字
分开写显示函数。**

中间参考了其他大佬的一点过程,侵联删。
转载请注明链接
2020年8月5日
A_Kang

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

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

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

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

(0)


相关推荐

  • 敏感指标ppt_MMR基因

    敏感指标ppt_MMR基因本文是对上篇MGN论文阅读做一个详细的补充,主要补充其结构设计及技术实现细节。文章内容整合来自云从科技资深算法研究员袁余锋老师,通过以下四个方面来讲解本次课题:1、ReID的定义及技术难点;2、常用数据集与评价指标简介;3、多粒度网络(MGN)的结构设计与技术实现;4、ReID在行人跟踪中的应用分析与技术展望ReID是行人智能认知的其中一个研究方向,行人智能认知…

  • python画图函数

    python画图函数python画图函数

  • 字符串正则匹配leetcode_正则在线检验

    字符串正则匹配leetcode_正则在线检验原题链接给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。‘.’ 匹配任意单个字符‘*’ 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。示例 1:输入:s = “aa” p = “a”输出:false解释:”a” 无法匹配 “aa” 整个字符串。示例 2:输入:s = “aa” p = “a*”输出:true解释:因为 ‘*’ 代表可以匹配零个或多个前面的那一个元素, 在这里前面的元素就是

  • java输出数组的方法_java怎样输出数组中的所有元素

    java输出数组的方法_java怎样输出数组中的所有元素文章目录数组的输出的三种方式一维数组:1.传统的for循环方式2.foreach循环3.利用Array类中的toString方法二维数组:1.传统的for循环方式2.foreach循环3.利用Array类中的toString方法数组的输出的三种方式一维数组:定义一个数组int[]array={1,2,3,4,5};1.传统的for循环方式for(inti=0;i<array.length;i++){System.out.println(array

    2022年10月11日
  • 简单的udp攻击_udp flood攻击

    简单的udp攻击_udp flood攻击由于本人很菜,这个代码是改别人的.呵呵.可以在公司的局域网里搞搞坏,呵呵.我是在ubuntu8.04下的,需要gcc编译.这个也添加了广播,整个网段的人都能收到了#include#include#include#include//ip#include//tcp#include#includeunsignedshortip_su…

  • 微商分销功能不能用了

    微商分销功能不能用了“三级以上分销将会被停止支付功能和封停账号”,日前一则“不利”消息彻底引爆微商的主要阵地——微信朋友圈。一时间关于分销三级变二级、微商寒冬将至的说法再次疯传。自央视曝光部分微商涉嫌传销之后,微信今年接连对微商们“动刀”,强化管理意在行业正规化发展,失去多级分销之后,依靠内容深度揽客的方式成为微商转型的方向。微商连遭重创刚刚过去的一周,微商们再次体验到了人生的跌宕起伏。认证为腾讯微信

发表回复

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

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