基于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;          //1msET0 = 1;          //开定时器0EA = 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);           //小数点的ASCIILCD_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"的ASCIILCD_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();        //计算脉宽并转换为距离,单位mmdisplay(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

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

  1. 超声波测距1602显示程序

    超声波测距1602显示程序 1.intrins.c 2.1602led.c 3.boardinit.c 4.delay.c #include <reg52.H> //机器器件配置文件 #i ...

  2. 【在线仿真】Arduino 超声波测距+LCD1602显示

    [在线仿真]Arduino 超声波测距+LCD1602显示 程序代码 /*LiquidCrystal Library - Hello WorldThis sketch prints "Hel ...

  3. 超声波测距+OLED显示

    文章目录 超声波测距+OLED显示 超声波 STM32引脚配置 代码 启动超声波模块 接收超声波数据回传 超声波测距+OLED显示 超声波模块使用的是HC-SR04模块,单片机使用的是STM32F40 ...

  4. 超声波测距LCD1602显示

    超声波测距模块: 1.采用IO口TRIG触发测距,给至少10us的高电平信号: 2.模块自动发送8个40khz的方波,自动检测是否有信号返回: 3.有信号返回,通过IO口ECHO输出一个高电平,高电平 ...

  5. 超声波测距OLED显示

    文章目录 一.前言 二.超声波模块介绍 1.超声波模块 2.HC-SR04模块 三.硬件连接 四.软件代码 五.效果展示 六.代码链接 一.前言 超声波模块是通过声音的传播进行测距,声音传播的速度与所 ...

  6. 51单片机 普中V2 超声波测距 报警 显示 基于MCS51单片机的超声波测距模块的开发

    基于MCS51单片机的超声波测距模块的开发 采用C51程序设计语言,完成下列功能要求. l 必选功能: (1) 超声波模块和单片机的接口设计,画出完整的电路原理图.(15分) (2) 开发板上电时,显 ...

  7. STM32单片机基于HAL库开发HC-SR04 超声波测距模块(终极版)

    参考: 某宝HC-SR04 超声波测距模块商品详情页 STM32L051C8T6 HAL库 输入捕获进行超声波测距 案例 STM32CubeMX学习笔记3--TIM2输入捕获(SR-04测距) cub ...

  8. STM32基础——超声波测距+OLED显示+蜂鸣器报警

    此代码的格式可以直接烧录到STMF03C8T6最小系统中,烧录在其它芯片需要自己进行代码移植,功能是使用超声波模块进行测距,距离会显示在OLED屏幕上,并且当测量到的数据小于设定的范围是,蜂鸣器报警, ...

  9. 基于51最小系统的超声波测距

    原理: 超声波方面: 超声波指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波可用于距离的测量. 超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍物 ...

最新文章

  1. windows游戏编程_少儿编程该怎么学?看看帕拉卡3D动画编程创始人李西峙分享七个核心...
  2. android从放弃到精通第11天 勿忘初心
  3. 谈谈我对服务熔断、服务降级的理解 专题
  4. 2020-11-16(补码转换为无符号数)
  5. 10.Windows线程切换_FS段寄存器
  6. 邯郸学院计算机专业是本科还是专科,邯郸学院是大学吗 是本科还是专科
  7. 测试版降级后软件还在么,如果你后悔安装iOS12想降到iOS11?几招教你删除iOS12测试版...
  8. c语言 傲娇的十六进制,语言拟人向:来自Python、JAVA、C语言的“傲娇”自我介绍...
  9. Selenium +Java自动化环境安装
  10. 4.企业安全建设入门(基于开源软件打造企业网络安全) --- 威胁情报
  11. 爬虫进阶 -- 爬虫相关定义、反爬机制及其破解
  12. PCL计算点到直线距离
  13. 微信小程序图片在不同设备显示保持图片比例并且居中
  14. Android 在应用图标上设置未读消息数量
  15. 为什么安卓手机退出大型游戏时没有过渡动画?
  16. 创建一个非循环单链表并对其进行操作
  17. 模拟信号或数字(4-20MA或485)转PWM频率可选、可达5A
  18. ChatGPT解开了我一直以来对自动化测试的疑惑
  19. Python黑帽子编程—使用scapy构造数据包
  20. PostGIS 3.1.2软件安装详细教程(地图工具篇.8)

热门文章

  1. python的dropna subset_Python Pandas在对特定子集的dropna调用期间出现键错误
  2. mDNS 原理的简单理解
  3. 手腕上的战争打响,“智能手表+健康”是实现弯道超车关键?
  4. python 使用全局变量_Python教程之全局变量用法
  5. 使用flash插件上传文件的方法--83.0火狐浏览器flash插件
  6. java获取当前年月日历_java获取当前年份、月份和日期字符串等
  7. vue-vuetify-admin案例讲解
  8. 【C语言】扫雷小游戏(扫雷的递归判断展开)
  9. SAP EPIC 银企直连 农业银行 Socket 接口项目实践
  10. 去除ul li 前面的小黑点