US-100超声波测距NOKIA5110显示距离小于20厘米报警
- 格式:doc
- 大小:2.88 MB
- 文档页数:10
1.概述US-100超声波测距模块可实现2cm~4.5m的非接触测距功能,拥有2.4~5.5V 的宽电压输入范围,静态功耗低于2mA,自带温度传感器对测距结果进行校正,同时具有GPIO(通用接口总线),串口等多种通信方式,内带看门狗,工作稳定可靠。
2.主要技术参数3.本模块实物图及尺寸本模块如图3.1和图3.2所示:图3.1:US-100正面图本模块的尺寸:45mm*20mm*1.6mm。
板上有两个半径为1mm的机械孔,如图3.3所示:图3.3:US-100尺寸图4.接口说明本模块共有两个接口,即模式选择跳线和5 Pin接口。
模式选择跳线接口如图4.1所示。
模式选择跳线的间距为2.54mm,当插上跳线帽时为UART(串口)模式,拔掉时为电平触发模式。
图4.1:模式选择跳线接口5 Pin接口为2.54mm间距的弯排针,如图4.2所示:图4.2:5 Pin接口从左到右依次编号1,2,3,4,5。
它们的定义如下:●1号Pin:接VCC电源(供电范围2.4V~5.5V)。
●2号Pin:当为UART模式时,接外部电路UART的TX端;当为电平触发模式时,接外部电路的Trig端。
●3号Pin:当为UART模式时,接外部电路UART的RX端;当为电平触发模式时,接外部电路的Echo端。
●4号Pin:接外部电路的地。
●5号Pin:接外部电路的地。
5.电平触发测距工作原理在模块上电前,首先去掉模式选择跳线上的跳线帽,使模块处于电平触发模式。
电平触发测距的时序如图5.1所示:图5.1:US-100测距时序图图5.1表明:只需要在Trig/TX管脚输入一个10US以上的高电平,系统便可发出8个40KHZ的超声波脉冲,然后检测回波信号。
当检测到回波信号后,模块还要进行温度值的测量,然后根据当前温度对测距结果进行校正,将校正后的结果通过Echo/RX管脚输出。
在此模式下,模块将距离值转化为340m/s时的时间值的2倍,通过Echo端输出一高电平,可根据此高电平的持续时间来计算距离值。
#include <hidef.h> /* common defines and macros */#include "derivative.h" /* derivative-specific definitions */#define uchar unsigned char#define uint unsigned int#define lcd12864_date PORTB //数据口#define lcd12864_rs PTT_PTT5// PTT_PTT5; //寄存器选择输入#define lcd12864_rw PTT_PTT3 //液晶读/写控制#define lcd12864_e PTT_PTT2 //液晶使能控制#define DQ PORTA_PA0 // 定义DQ引脚为P3.3 #define DQ_HIGH() DDRA=0 //设置数据口为输入#define DQ_LOW() DDRA=1;DQ=0; //设置数据口为输出//uint temp; //温度值variable of temperature uchar A1,A2,A3;void delay2(uint i);void Init_Ds18b20(void);uchar Read_One_Byte();void Write_One_Byte(uchar dat);uint Get_Tmp();void DisplayTemp(uint temp) ;void delay(unsigned int t){uint i,j;for(i=t;i>0;i--)for(j=1000;j>0;j--);}void lcd12864_write_cmd(unsigned char command) //写指令{lcd12864_rs=0;lcd12864_rw=0;lcd12864_e=0;lcd12864_date=command;delay(5);lcd12864_e=1;lcd12864_e=0;delay(5);}void lcd12864_write_data(unsigned char data) // 写数据写入一个字符{lcd12864_rs=1;lcd12864_rw=0;lcd12864_e=0;lcd12864_date=data;delay(5);lcd12864_e=1;lcd12864_e=0;delay(5);}void lcd12864_pos(unsigned char x,unsigned char y) //确定位置{unsigned char pos;if (x==1){x=0x80;}else if (x==2){x=0x90;}else if (x==3){x=0x88;}else{x=0x98;}pos=x+y-1;lcd12864_write_cmd(pos); //显示地址}void io_init(){lcd12864_write_cmd(0x30); //基本指令操作lcd12864_write_cmd(0x0C); //显示开,关光标lcd12864_write_cmd(0x01); //清除LCD的显示内容位置计数器调整为0x00 }void lcd12864_wrtie_string( char *str) //写字符串{while(*str!='\0') //未结束{lcd12864_write_data(*str++);}}void init_LCD(){delay(20);lcd12864_write_cmd(0x30);delay(20);lcd12864_write_cmd(0x30);delay(20);lcd12864_write_cmd(0x0c);//开显示,不显示光标,且不闪烁delay(20);lcd12864_write_cmd(0x01); //清屏delay(20);lcd12864_write_cmd(0x06); //每次写入数据后地址指针加1delay(20);}/**/void Display1(){lcd12864_pos(1,2);lcd12864_wrtie_string("温度调节系统");lcd12864_pos(2,1);lcd12864_wrtie_string("菜单1:当前温度");lcd12864_pos(3,1);lcd12864_wrtie_string("菜单2:目标温度");lcd12864_pos(4,1);lcd12864_wrtie_string("菜单3:温度曲线");}void Display2(){lcd12864_pos(1,2);lcd12864_wrtie_string("温度调节系统");lcd12864_pos(2,1);lcd12864_wrtie_string("当前温度:**度");lcd12864_pos(3,1);lcd12864_wrtie_string("目标温度:**度");lcd12864_pos(4,2);lcd12864_wrtie_string(" Welcome ! ");}void main(void){delay(5);DDRB=0xff;DDRT=0xff;// io_init();init_LCD();lcd12864_pos(2,2);lcd12864_wrtie_string(" Welcome To ! ");lcd12864_pos(3,2);lcd12864_wrtie_string("温度调节系统");delay(2000);lcd12864_write_cmd(0x01); //清屏delay(20);while(1){DisplayTemp(Get_Tmp());lcd12864_pos(2,3);lcd12864_write_data(0x30+A1);lcd12864_pos(2,4);lcd12864_write_data(0x30+A2);lcd12864_pos(2,5);lcd12864_write_data(0x2e);lcd12864_pos(2,6);lcd12864_write_data(0x30+A3);/*Display1() ; */}}/*************精确延时函数*****************/ void delay2(unsigned int i){i=10*i;while(--i);}/****************************************** 此延时函数针对的是12Mhz的晶振delay(0):延时518us 误差:518-2*256=6delay(1):延时7us (原帖写"5us"是错的)delay(10):延时25us 误差:25-20=5delay(20):延时45us 误差:45-40=5delay(100):延时205us 误差:205-200=5delay(200):延时405us 误差:405-400=5*******************************************//*****************DS18B20******************/void Init_Ds18b20(void) //DS18B20初始化send reset and initialization command{char presence=1;while(presence){//DQ = 1; //DQ复位,不要也可行。
比较简单的AVR单片机超声波测距的实例于调试检查及使用在不同场合。
测量范围10cm-250cm,测距小于100cm 时,误差是1~2cm.,大于100cm 时,误差是3~5cm。
SL-SRF-25 超声波传感器,还可以指定从单片机I/O 端口上输出分段距离检测信号,可以直接装在双龙SL 系列机器人上,作为寻物、避障探测等应用。
LED 发光二极管显示所测分段距离范围信号,可以用于机器人控制。
短路插针JD1-2/-3 脚功能接地;JD1-1 接PC5;短路块插于2,3 间,使用LED 数码管显示;短路块插于1,2 间,使用LED 发光二极管显示,或超声波传感器输出分段控制信号。
超声波传感器输出分段控制信号对应J1 引脚:1、J1-1PD0 避障距离范围5~9cm2:J1-2PD1 避障距离范围10~19cm3:J1-3PD2 避障距离范围20~29cm4:J1-4PD3 避障距离范围30~39cm5:J1-5PD4 避障距离范围40~49cm6:J1-6PD5 避障距离范围50~99cm7:J1-7PD6 避障距离范围100~179cm8:J1-8PD7 避障距离范围180~250cmSLSRF-25 电原理图SL-SRF-25 超声波测距源程序:/*********************************************************************Project:超声波测距Chiptype:ATMEGA8Clockfrequency:8.000000MHz*********************************************************************/#include#include#pragmainterrupt_handlerintt0:10//T0 溢出中断#pragmainterrupt_handlericp_timer1:6//T1 捕捉中断#pragmadata:code//设定数据区为程序存储器constunsignedchartab1[]={0X28,0XEE,0X32,0XA2,0XE4,0XA1,0X21,0XEA,0X20,0XA0};//七段译码字型表(lm,cm)constunsignedchartab2[]。
超声波距离显示ISD1820语音报警系统Ultrasonic Distance Display ISD1820 Voice Alarm System产品概述:ICStation team introduce you this Ultrasonic Distance Display ISD1820 Voice Alarm System based on ICStation UNO. This system works under 5V power supply, uses the Ultrasonic Module HC-SR04 Distance Transducer Sensor to detect the distance between the Module and the measured object. When the Ultrasonic Module detects the distance is larger than the maximum, the loudspeaker will not alarm. When the Ultrasonic Module detects the distance is smaller than the maximum, the loudspeaker will alarm. The distance data will be displayed on the LCD1602. This system can be made easily with low cost and it is suitable for automobile and Workshop and so on.超声波距离显示语音报警系统采用DC5V电压工作,通过超声波模块检测与被测物体之间的距离,当超声波模块检测到的距离大于设定的上限距离,扬声器不报警。
当超声波模块检测到的距离小于设定的上限距离,扬声器报警。
US-016超声波测距模块1.概述US-016超声波测距模块可实现2cm~3m的非接触测距功能,供电电压为5V,工作电流为3.8mA,支持模拟电压输出,工作稳定可靠。
本模块根据不同应用场景可设置成不同的量程(最大测量距离分别为1m和3m);当Range管脚悬空时,量程为3m。
US-016能将测量距离转化为模拟电压输出,输出电压值与测量距离成正比。
3.本模块尺寸图4.接口说明本模块有一个接口:4Pin供电及通信接口。
4Pin接口为2.54mm间距的弯排针,如图4.1所示:从左到右依次编号1,2,3,4。
它们的定义如下:●1号Pin:接VCC电源(直流5V)。
●2号Pin:量程设置引脚(Range),当模块上电时此引脚为高电平时,量程为3m;当模块上电时此引脚为低电平时,量程为1m。
此引脚内带上拉电阻,当Range引脚悬空时,量程为3m。
●3号Pin:模拟电压输出引脚(Out),模拟电压与测量距离成正比,输出范围为0~Vcc。
●4号Pin:接外部电路的地。
5.测距工作原理模块上电后,系统首先判断Range引脚的输入电平,根据输入电平状态来设置不同的量程。
当Range引脚为高电平时,量程为3m,当Range管脚为低电平时,量程为1m。
然后,系统开始连续测距,同时将测距结果通过模拟电压在Out管脚输出。
当距离变化时,模拟电压也会随之进行变化。
模拟电压与测量距离成正比,模拟电压的输出范围是0~Vcc。
当系统量程为1m时,测量距离为:L=1024*Vout/Vcc(mm)。
当输出电压为0V对应距离为0m,输出Vcc对应为1.024m。
当系统量程为3m时,测量距离为:L=3096*Vout/Vcc(mm)。
当输出电压为0V对应距离为0m,输出Vcc对应为3.072m。
测量距离与输出电压的关系如图5.1所示:6.量程为1m时编程建议注意:上电时,需要将Range管脚设置为低电平。
测量时,可采用ADC对Out管脚的输出电压进行采样,根据ADC值换算出测量距离,可用如下公式计算:L=(A*1024/2^n)*(Vref/Vcc),其中A为ADC的值,n 为ADC的位数,Vref为ADC的参考电压,Vcc为US-016的电源电压。
超声波报警模块US‐C110使用说明V1.01.概述US-C110报警模块能应用于停车排队等待的场景中,当前方车辆离去时本模块可发现此行为并启动报警器报警。
模块的有效探测范围为5cm-4.5m,自带温度传感器对测距结果进行校正。
模块具有串口(TTL电平)输出接口,可输出当前检测到的距离值和温度值。
模块内带看门狗,工作稳定可靠。
2.主要技术参数电气参数 US-C110超声波报警模块工作电压 DC 5V~24V工作电流(无报警时) 小于7mA工作电流(有报警时) 7mA+报警输出电流工作温度 -20~+70度输出方式 报警输出及串口输出感应角度 小于15度探测距离 5cm-450cm探测精度 0.3cm+1%UART模式下串口配置 波特率9600,起始位1位,停止位1位,数据位8位,无奇偶校验,无流控制。
帧格式 每帧数据包括5个字节:起始字节,距离高8位,距离低8位,温度值,校验和。
帧格式说明:(非报警状态下)模块每100ms通过串口(TTL 电平)输出一帧数据,每帧数据包含5字节:0XFF+HDATA+LDATA+ TDATA+SUM。
其中0XFF为起始字节,HDATA为距离值的高8位,LDATA为距离值的低8位,TDATA为温度值,SUM为校验和。
SUM = 0XFF+HDATA+LDATA+ TDATA(仅低8位)距离值L = (HDATA*256 +LDATA)mm。
温度值T = TDATA-45。
3.模块实物图及尺寸本模块如图3.1和3.2所示:图3.1:US-C110正面图图3.2:US-C110背面图本模块的尺寸70mm*50mm*1.6mm,具体如图3.3所示(单位mm):图3.3:US-C110模块尺寸图4.接口说明及连接本模块有一个编程口J101,串口(TTL电平)J102;以及工业接线端子,可输出当前状态信息及报警信号。
以下分别进行说明:串口如图4.1所示,三个管脚分别表示1,2,3。
超声波测距超声波测距模块NS-CS01是双探头超声波测量距离模块,一发一收,模块自带5位LED显示,能动态显示实时测量结果,模块具有串口通信接口,可以把用户测量结果通过串口实时发送出去。
此模块有以下特点:1、测量精度高:5mm;2、模块具有实时显示功能;3、模块具有串口,方便用户集成;4、用户可以通过串口远程控制;5、多种测量范围:3M,5M,10M,15M6、性能稳定。
一、超声波探头超声波换能器采用进口镀膜晶片,适用于空气介质中测距、物位检测的电声转换器件。
由于换能器的聚焦件采用了多层阻抗匹配、背衬、压电元件频率误差小,具有良好的时间稳定性和温度稳定性、无退极化现象,通带特性好,芯片与声传输器件统一计算基波谐振频率。
独创的背衬材料配方,具有良好的振动特性,使换能器有很大的频带宽度,发射和接收灵敏度高,以及较小的脉冲-回波持续时间,获得了最大的等效机电耦合系数。
二、探头主要技术参数◇量程:3m,5m,10m,15M◇中心谐振频率:40kHz±2kHz◇静态电容量:3300P±300P◇谐振阻抗:120Ω±20Ω◇频带宽度(-3dB):Δf-3dB ≥2kH z◇工作电压:300~500VP-P◇极限电压≤1000VP-P◇发射波束角:9O度◇工作温度:-40~+80℃◇盲区:0.3m◇防护等级:IP65三、串口通信协议指令格式:指令:02 模块从串口发出采样数据数据:间的距离,单位:CM厘米。
如:CF 06 02 00 00 FD 其中CF是包头,FD是包尾,06是数据包总长,02是指令号,00 00 是两个字节的数据。
四、超声模块说明1、外形尺寸:宽80mm,长120mm。
2、超声波探头置于模块前端,一发,一收。
3、通信接口:串口,波特率9600,通电后模块自动向外发送测量数据。
4、电源插座:模块以DC12~DC15V供电。
5、电源开关:串口与电源插座之间为电源开关。
超声波测距报警器实验报告一、实验目的本实验旨在设计并实现一个基于超声波的测距报警器,通过测量物体与传感器之间的距离,当距离小于设定的阈值时,触发报警装置,以实现对特定区域的距离监测和预警功能。
二、实验原理超声波测距是通过测量超声波在空气中的传播时间来计算距离的。
超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,碰到障碍物后反射回来,接收器收到反射波就立即停止计时。
已知超声波在空气中的传播速度为 340 米/秒,根据计时器记录的时间 t,就可以计算出发射点距障碍物的距离 s,计算公式为:s = 340t/2 。
三、实验设备与材料1、超声波传感器模块(包括发射器和接收器)2、微控制器(如 Arduino 开发板)3、蜂鸣器4、显示屏(用于显示测量距离)5、杜邦线若干6、电源(如电池盒或 USB 电源)四、实验步骤1、硬件连接将超声波传感器的 VCC 引脚连接到电源的正极端,GND 引脚连接到电源的负极端。
将超声波传感器的 Trig 引脚连接到微控制器的数字输出引脚,Echo 引脚连接到微控制器的数字输入引脚。
将蜂鸣器的正极连接到微控制器的数字输出引脚,负极连接到电源的负极端。
将显示屏连接到微控制器的相应引脚。
2、软件编程使用 Arduino 开发环境编写控制程序。
首先,设置微控制器的引脚模式,包括输入和输出引脚。
然后,在主循环中,通过向 Trig 引脚发送一个短脉冲来触发超声波传感器发送超声波。
等待 Echo 引脚变为高电平,开始计时;当 Echo 引脚变为低电平时,停止计时,并根据时间计算距离。
将计算得到的距离与设定的阈值进行比较,如果小于阈值,驱动蜂鸣器报警,并在显示屏上显示距离和报警信息。
3、调试与测试编译并上传程序到微控制器。
进行实物测试,逐步调整传感器的位置和方向,以及阈值的大小,观察报警效果和距离测量的准确性。
五、实验结果与分析1、距离测量结果在不同距离下进行多次测量,记录测量值。
随便玩玩,有点粗糙仅供参考#include <reg51.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intsbit beep=P1^5;sbit ce = P2^0; //片选sbit rst = P2^1; //复位,0复位sbit dc = P2^2; //1写数据,0写指令sbit din = P2^3; //数据sbit clk = P2^4; //时钟sbit RX = P0^1;sbit TX = P0^2;unsigned int time=0;unsigned int timer=0;unsigned char posit=0;unsigned long S=0;bit flag =0;unsigned char code hanzi[]={/*"温",*/ 0x10,0x22,0x64,0x0C,0x80,0x00,0xFE,0x92, 0x92,0x92,0x92,0x92,0xFF,0x02,0x00,0x00,0x04,0x04,0xFE,0x01,0x40,0x7E,0x42,0x42,/*"度",*/ 0x00,0x00,0xFC,0x24,0x24,0x24,0xFC,0xA5,0xA6,0xA4,0xFC,0x24,0x34,0x26,0x04,0x00,0x40,0x20,0x9F,0x80,0x42,0x42,0x26,0x2A,0x12,0x2A,0x26,0x42,0x40,0xC0,0x40,0x00,/*-- 文字: 时--*//*-- 宋体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0xFC,0x84,0x84,0x84,0xFE,0x14,0x10,0x90,0x10,0x10,0x10,0xFF,0x10,0x10,0x00,0x00,0x3F,0x10,0x10,0x10,0x3F,0x00,0x00,0x00,0x23,0x40,0x80,0x7F,0x00,0x00,0x00,/*-- 文字: 间--*//*-- 宋体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0xF8,0x01,0x02,0xF6,0x10,0x12,0x12,0x12,0x12,0xFA,0x12,0x02,0xFF,0x02,0x00,0x00,0xFF,0x00,0x00,0x3F,0x11,0x11,0x11,0x11,0x11,0x3F,0x40,0x80,0x7F,0x00,0x00,/*"距"*/0x00,0x3E,0x22,0xE2,0x22,0x3E,0x00,0xFE,0x22,0x22,0x22,0x22,0xF3,0x22,0x00,0x00,0x20,0x7F,0x20,0x3F,0x12,0x12,0x00,0x7F,0x42,0x42,0x42,0x42,0x47,0x60,0x40,0x00,//"离",0x04,0x04,0x04,0xF4,0x04,0x8C,0x55,0x26,0x54,0x8C,0x04,0xF4,0x04,0x06,0x04,0x00,0x00,0xFC,0x04,0x05,0x25,0x35,0x2D,0x27,0x25,0x35,0x25,0x45,0x84,0x7E,0x04,0x00,//":",0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x31,0x7B,0x7B,0x31,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//"一",0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};unsigned char code shuzi[] = {//00xF8,0x04,0x04,0x04,0xF8,0x00,0x01,0x02,0x02,0x02,0x01,0x00, //10x00,0x08,0xFC,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00, //20x18,0x84,0x44,0x44,0x38,0x00,0x03,0x02,0x02,0x02,0x02,0x00, //30x88,0x04,0x24,0x24,0xD8,0x00,0x01,0x02,0x02,0x02,0x01,0x00, //40xC0,0xB0,0x88,0xFC,0x80,0x00,0x00,0x00,0x00,0x03,0x00,0x00, //50x3C,0x14,0x14,0x14,0xE4,0x00,0x01,0x02,0x02,0x02,0x01,0x00, //60xF8,0x24,0x24,0x24,0xC8,0x00,0x01,0x02,0x02,0x02,0x01,0x00, //70x04,0x04,0x04,0xE4,0x1C,0x00,0x00,0x00,0x03,0x00,0x00,0x00, //80xD8,0x24,0x24,0x24,0xD8,0x00,0x01,0x02,0x02,0x02,0x01,0x00, //90x38,0x44,0x44,0x44,0xF8,0x00,0x01,0x02,0x02,0x02,0x01,0x00, //'//0x00,0x00,0x04,0x0A,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //C//0xF8,0x04,0x04,0x04,0x98,0x00,0x01,0x02,0x02,0x02,0x01,0x00, //.//0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00, //://0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00, //T//0x04,0x04,0xFC,0x04,0x04,0x00,0x00,0x00,0x03,0x00,0x00,0x00 };/////////////////////////////////////////////////////////////void delay_1us(void){unsigned int i;for(i=0;i<1000;i++);}void delayus(uint z) //微妙级延时{uint y;for(y=z;y>0;y--);}void delayms(uint z) //毫秒级延时{uint x,y;for(y=z;y>0;y--)for(x=1400;x>0;x--);}/*********************************************************** 函数名称:LCD_write_byte函数功能:模拟SPI接口时序写数据/命令LCD入口参数:data :写入的数据;command :写数据/命令选择;出口参数:无备注:***********************************************************/ void LCD_write_byte(unsigned char dat,unsigned char command){unsigned char i;ce=0; //5110片选有效,允许输入数据if(command==0) //写命令dc=0;else dc=1; //写数据for(i=0;i<8;i++){if(dat&0x80) //传送8bit数据din=1;elsedin=0;clk=0;dat=dat<<1;clk=1;}ce=1; //禁止5110}/*******************************函数名称:LCD_clear函数功能:清屏********************************/void LCD_clear(void){unsigned int i;LCD_write_byte(0x0c, 0);LCD_write_byte(0x80, 0);for (i=0; i<504; i++)LCD_write_byte(0, 1);}/*********************************************************** 函数名称:LCD_init函数功能:5110初始化入口参数:无出口参数:无备注:***********************************************************/ void LCD_init(void){rst=0; // 产生一个让LCD复位的低电平脉冲delay_1us();rst=1;ce=0; // 关闭LCDdelay_1us();ce=1; // 使能LCDdelay_1us();LCD_write_byte(0x21,0); // 使用扩展命令设置LCD模式LCD_write_byte(0xc8,0); // 设置液晶偏置电压LCD_write_byte(0x06,0); // 温度校正LCD_write_byte(0x13,0); // 1:48LCD_write_byte(0x20,0); // 使用基本命令,V=0,水平寻址LCD_clear(); // 清屏LCD_write_byte(0x0c,0); // 设定显示模式,正常显示ce=0; //关闭LCD}/***********************************************************函数名称:LCD_set_XY函数功能:设置LCD坐标函数入口参数:X :0-83Y :0-5出口参数:无备注:***********************************************************/void LCD_set_XY(unsigned char X,unsigned char Y){LCD_write_byte(0x40|Y,0); // columnLCD_write_byte(0x80|X,0); // row}/*---------------------------------------------LCD_write_shu: 显示6(宽)*12(高)点阵列数字字母符号等半角类输入参数:c:显示的字符;编写日期:20140918-----------------------------------------------*/void LCD_write_shu(unsigned char row, unsigned char page,unsigned char c) //row:列page:页dd:字符{unsigned char i;LCD_set_XY(row*6, page);// 列,页for(i=0; i<6;i++){LCD_write_byte(shuzi[c*12+i],1);}LCD_set_XY(row*6, page+1);// 列,页for(i=6; i<12;i++){LCD_write_byte(shuzi[c*12+i],1);}}/***********************************************************LCD_write_hanzi: 显示16(宽)*16(高)点阵列数字字母符号等半角类输入参数:c:显示的字符;编写日期:20140918************************************************************/ void LCD_write_hanzi(unsigned char row, unsigned char page,unsignedchar c) //row:列page:页dd:字符{unsigned char i;LCD_set_XY(row*8 , page);// 列,页for(i=0; i<16;i++){LCD_write_byte(hanzi[c*32+i],1);}LCD_set_XY(row*8, page+1);// 列,页for(i=16; i<32;i++){LCD_write_byte(hanzi[c*32+i],1);}}void Conut(void){time=TH0*256+TL0;TH0=0;TL0=0;S=(time*1.7)/100; //算出来是CMif((S>=700)||flag==1) //超出测量范围显示“-”{flag=0;LCD_write_hanzi(8,0,7); //>LCD_write_hanzi(10,0,7); //>LCD_write_hanzi(12,0,7); //>}else{LCD_write_shu(8,0,S/100); //>LCD_write_shu(10,0,S%100/10); //>LCD_write_shu(12,0,S%10); //>}}void zd0() interrupt 1 //T0中断用来计数器溢出,超过测距范围{flag=1; //中断溢出标志}/********************************************************/void zd3() interrupt 3 //T1中断用来扫描数码管和计800MS启动模块{TH1=0xf8;TL1=0x30;// Display();timer++;if(timer>=400){timer=0;TX=1; //800MS 启动一次模块_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();TX=0;}}main(){unsigned char n;TMOD=0x11; //设T0为方式1,GA TE=1;TH0=0;TL0=0;TH1=0xf8; //2MS定时TL1=0x30;ET0=1; //允许T0中断ET1=1; //允许T1中断TR1=1; //开启定时器EA=1; //开启总中断ce=0;rst=0;for(n=0;n<250;n++);rst=1;LCD_init(); //初始化LCD模块LCD_clear(); //清屏幕LCD_write_hanzi(0,0,4); //单LCD_write_hanzi(2,0,5); //片LCD_write_hanzi(4,0,6); //>// LCD_write_shu(8,0,3); //>// LCD_write_shu(10,0,5); //>while(1){ while(!RX); //当RX为零时等待TR0=1; //开启计数while(RX); //当RX为1计数并等待TR0=0; //关闭计数Conut(); //计算if(S<20)beep=0;elsebeep=1;delayms(5);}}。