基于52单片机的超声波测距模块(hc |
您所在的位置:网站首页 › 单片机超声波测距实验报告怎么写 › 基于52单片机的超声波测距模块(hc |
二年级课设做了超声波测障仪,用的是hc-sr04超声波测距模块+1602液晶显示器和52单片机。 由于自己之前的学习很是不牢固,在课设的时候没少走弯路,最后在第二个周的星期五做了出来,浪费了很多的时间,所以就想着把这个东西写出来,一则加强自己的理解,二则或许能帮助帮助别人。 HC-SR04超声波模块工作原理 (1).采用IO口触发测距,给至少10us高电平脉冲; (2).模块自动发送八个40khz方波,并自主检测是否有电波返回; (3)当有信号返回时,通过IO口输出一个高电平,高电平的持续时间就是超声波从发送到返回的时间; (4)测距公式:距离=(高电平时间*声速)/2; (5)超声波模块时序图如图6所示: 图6:超声波模块时序图 (模块的原理很重要,只有把原理弄懂了才能很好地做出来你想要的东西) 程序的核心在于中断,即单片机内部的计数器中断。 具体的程序分为两个部分:1602显示部分和主程序(见下) 1602程序,基本上都是一些简单的时序问题。 首先对1602进行初始化,定义1602对应接口的接线方式。然后进行写命令,写数据操作,最后将得到的距离数(3位数,以cm为单位)按照个十百分为三个单独的数字输出到液晶显示器上,最后输出单位cm。 #include "lcd.h" /******************************************************************************* * 函 数 名 : Lcd1602_Delay1ms * 函数功能 : 延时函数,延时1ms * 输 入 : c * 输 出 : 无 * 说 名 : 该函数是在12MHZ晶振下,12分频单片机的延时。 *******************************************************************************/ void Lcd1602_Delay1ms(uint c) //误差 0ms { uchar a,b; for (; c>0; c--) { for (b=199;b>0;b--) { for(a=1;a>0;a--); } } } /******************************************************************************* * 函 数 名 : LcdWriteCom * 函数功能 : 向LCD写入一个字节的命令 * 输 入 : com * 输 出 : 无 *******************************************************************************/ #ifndef LCD1602_4PINS //当没有定义这个LCD1602_4PINS时 void LcdWriteCom(uchar com) //写入命令 { LCD1602_E = 0; //使能 LCD1602_RS = 0; //选择发送命令 LCD1602_RW = 0; //选择写入 LCD1602_DATAPINS = com; //放入命令 Lcd1602_Delay1ms(1); //等待数据稳定 LCD1602_E = 1; //写入时序 Lcd1602_Delay1ms(5); //保持时间 LCD1602_E = 0; } #else void LcdWriteCom(uchar com) //写入命令 { LCD1602_E = 0; //使能清零 LCD1602_RS = 0; //选择写入命令 LCD1602_RW = 0; //选择写入 LCD1602_DATAPINS = com; //由于4位的接线是接到P0口的高四位,所以传送高四位不用改 Lcd1602_Delay1ms(1); LCD1602_E = 1; //写入时序 Lcd1602_Delay1ms(5); LCD1602_E = 0; LCD1602_DATAPINS = com |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |