1、库文件使用:请将库文件解压后以文件夹格式拖至Arduino文件夹下的Libraries文件夹里。
例:C:\Program Files (x86)\Arduino\libraries
注:无库文件的,为Arduino IDE自带库,无需添加。
2、原理图与技术手册为厂家提供,仅供参考使用,不提供技术支持。
所有资料51hei提供下载:
超声波模块.rar
(5.46 MB, 下载次数: 23)
单片机源程序如下:
- /**********************HL-1实验开发板例程************************
- * 文件名称:led.c
- * 功能描述:本例程为超声波测距的学习。使用前先根据超声波模块的IO修改本程序的端口定义。
- * 本例程为网络资料搜集整理 。
- * 使用环境:TS-51A开发板 + STC89C52 + 11.0592M晶振 + Keil C51 V9.0
- * QQ : 10903659
- * QQ群 :336397723 336398729 336398900
- ******************************************************************/
- /**********************************包含头文件**********************************/
- #include <reg52.h>
- #include "1602.h"
- /************************************宏定义************************************/
- #define VELOCITY_30C 3495 //30摄氏度时的声速,声速V= 331.5 + 0.6*温度;
- #define VELOCITY_23C 3453 //23摄氏度时的声速,声速V= 331.5 + 0.6*温度;
- /************************************位定义************************************/
- sbit INPUT = P3^2; //回声接收端口
- sbit OUTPUT = P1^4; //超声触发端口
- sbit Beep = P2^2; // 蜂鸣器
- /********************************定义变量和数组********************************/
- long int distance=0; //距离变量
- uchar table[] = " ";
- uchar table0[] = " TS-51A ";
- uchar table1[] = "There's no echo.";
- uchar table2[] = " TS-51A ";
- uchar table3[] = "Distance:";
- uchar count;
- /***********************************函数声明***********************************/
- extern void initLCD();
- extern void write_date(uchar date);
- extern void write_com(uchar com);
- extern void delay(uint x);
- /******************************************************************************/
- /* 函数名称 : Delay_xMs */
- /* 函数描述 : 延时函数 */
- /* 输入参数 : x */
- /* 参数描述 : 延时时间 */
- /* 返回值 : 无 */
- /******************************************************************************/
- void Delay_xMs(unsigned int x)
- {
- unsigned int i,j;
- for(i = 0;i < x;i++ )
- {
- for(j = 0;j < 3;j++ )
- {
- ;
- }
- }
- }
- /******************************************************************************/
- /* 函数名称 : Alarm */
- /* 函数描述 : 蜂鸣器发声函数 */
- /* 输入参数 : t */
- /* 参数描述 : 发声的次数 */
- /* 返回值 : 无 */
- /******************************************************************************/
- void Alarm(uchar t)
- {
- uchar i;
- for(i = 0;i < t;i++)
- {
- Beep = 0;
- Delay_xMs(1000);
- Beep = 1;
- Delay_xMs(1000);
- }
- }
- /******************************************************************************/
- /* 函数名称 : delayt */
- /* 函数描述 : 延时函数 */
- /* 输入参数 : x */
- /* 参数描述 : 延时时间数据 */
- /* 返回值 : 无 */
- /******************************************************************************/
- void delayt(uint x)
- {
- uchar j;
- while(x-- > 0)
- {
- for(j = 0;j < 125;j++)
- {
- ;
- }
- }
- }
- /******************************************************************************/
- /* 函数名称 : Init_MCU */
- /* 函数描述 : 初始化单片机函数 */
- /* 输入参数 : 无 */
- /* 参数描述 : 无 */
- /* 返回值 : 无 */
- /******************************************************************************/
- void Init_MCU(void)
- {
- TMOD = 0x01; //定时器2初始化,设置为16位自动重装模式
- TL0 = 0x66;
- TH0 = 0xfc; //1ms
- ET0 = 1; //开定时器2
- EA = 1; //总中断使能
- }
- /******************************************************************************/
- /* 函数名称 : Init_Parameter */
- /* 函数描述 : 初始化参数和IO口函数 */
- /* 输入参数 : 无 */
- /* 参数描述 : 无 */
- /* 返回值 : 无 */
- /******************************************************************************/
- void Init_Parameter(void)
- {
- OUTPUT =1;
- INPUT = 1;
- count = 0;
- distance = 0;
- }
- /******************************************************************************/
- /* 函数名称 : display_char */
- /* 函数描述 : 显示字符串函数 */
- /* 输入参数 : point,address */
- /* 参数描述 : 写入的字符串的地址指针 1602显示对应的地址 */
- /* 返回值 : 无 */
- /******************************************************************************/
- void display_char(uchar *point,uchar address)
- {
- uchar i;
- write_com(0x80 + address);
- for(i = 0;i < 16; i++)
- {
- write_date(*point);
- point++;
- }
- }
- /******************************************************************************/
- /* 函数名称 : display */
- /* 函数描述 : 显示数字 */
- /* 输入参数 : number,address */
- /* 参数描述 : number写入的数据,address地址 */
- /* 返回值 : 无 */
- /******************************************************************************/
- void display(int number,uchar address)
- {
- uchar b,c,d,e;
- b= (number / 1000);
- c= (number / 100) % 10;
- d = (number / 10) % 10;
- e = number % 10;
- write_com(0x80 + address);
- write_date(b + 48);
- write_date(c + 48);
- write_date(d + 48);
- write_date(46); //小数点的ASCII
- write_date(e + 48);
- write_date(99); //"c"的ASCII
- write_date(109); //"m"的ASCII
- }
- /******************************************************************************/
- /* 函数名称 : Trig_SuperSonic */
- /* 函数描述 : 发出声波函数 */
- /* 输入参数 : 无 */
- /* 参数描述 : 无 */
- /* 返回值 : 无 */
- /******************************************************************************/
- void Trig_SuperSonic(void)//出发声波
- {
- OUTPUT = 1;
- delayt(1);
- OUTPUT = 0;
- }
- /******************************************************************************/
- /* 函数名称 : Measure_Distance */
- /* 函数描述 : 计算距离函数 */
- /* 输入参数 : 无 */
- /* 参数描述 : 无 */
- /* 返回值 : 无 */
- /******************************************************************************/
- void Measure_Distance(void)
- {
- uchar l;
- uint h,y;
- TR0 = 1;
- while(INPUT)
- {
- ;
- }
- TR0 = 0;
- l = TL0;
- h = TH0;
- y = (h << 8) + l;
- y = y - 0xfc66;//us部分
- distance = y + 1000 * count;//计算总时间
- TL0 = 0x66;
- TH0 = 0xfc;
- delayt(30);
- distance = VELOCITY_30C * distance / 20000;
- }
- /******************************************************************************/
- /* 函数名称 : main */
- /* 函数描述 : 主函数 */
- /* 输入参数 : 无 */
- /* 参数描述 : 无 */
- /* 返回值 : 无 */
- /******************************************************************************/
- void main(void)
- {
- rw = 0;
- initLCD();
- Init_MCU();
- Init_Parameter();
- Alarm(2);
- display_char(table,0x00);
- display_char(table0,0x40);
- Delay_xMs(30000);
- display_char(table2,0x00);
- display_char(table1,0x40);
- while(1)
- {
- Trig_SuperSonic(); //触发超声波发射
- while(INPUT == 0) //等待回声
- {
- ;
- }
- Measure_Distance(); //计算脉宽并转换为距离
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
|