基于51单片机的超声波测距1

合集下载

51单片机超声波测距离(带温度补偿)

51单片机超声波测距离(带温度补偿)

超声波模块原理图:发射接收原理图PCB:51单片机原理图:软件部分C语言程序:/*=========================================================== =========调试要求:1.MCU:A T89S52芯片或AT89C522.晶振:12MHz调试注意:本程序带温度补偿,采用DS18B20测量温度1.LCD1602液晶屏有显示后,才接入超声波模块。

2.注意超声波模块电源的极性。

不清楚请参好淘宝的电路图3.没有选用频率为12MHz晶振,用了别的频率晶振,单片机定时器的测量值与发出的40KHz频率脉冲不对。

4.使用者经常误发出20KHZ脉冲当40KHZ脉冲。

(40KHz频率脉冲,周期25us,占空比为50% = 12.5us)5.如果是用开发板调超声波模块,请检查开发板上的电路是否与超声波模块的控制脚复用了, 若复用了,请通过跳线分开发板上的电路。

6如果使用的是万用板,请确定单片机的复位电路和晶振电路是否正常,同时单片机的31脚(EA)记得接高电平。

============================================================= =======*/#include<reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int//===============================LCD1602接口定义=====================/*-----------------------------------------------------|DB0-----P2.0 | DB4-----P2.4 | RW-------P0.1 ||DB1-----P2.1 | DB5-----P2.5 | RS-------P0.2 ||DB2-----P2.2 | DB6-----P2.6 | E--------P0.0 ||DB3-----P2.3 | DB7-----P2.7 | 注意,P0.0到P0.2需要接上拉电阻---------------------------------------------------============================================================= */#define LCM_Data P2 //数据接口#define Busy 0x80 //用于检测LCM状态字中的Busy标识sbit LCM_RW = P0^1; //读写控制输入端,LCD1602的第五脚sbit LCM_RS = P0^2; //寄存器选择输入端,LCD1602的第四脚sbit LCM_E = P0^0; //使能信号输入端,LCD1602的第6脚//===============================超声波模块定义========================sbit RemPin =P3^2;// 接收端(这个不能修改,因为是外部中断(INT0)的引脚) sbit TxPin =P3^1;// 发射端//******************************************************************** ***//ds18b20数字温度传感器控制引脚定义sbit dq_ds18b20=P3^3;//定义控制DS18B20//******************************************************************** ***//LCD显示模块的函数声明void WriteDataLCM (uchar WDLCM);//LCD模块写数据void WriteCommandLCM (uchar WCLCM,BuysC); //LCD模块写指令uchar ReadDataLCM (void);//LCD模块读数据uchar ReadStatusLCM (void);//读LCD模块的忙标void DisplayOneChar (uchar X,uchar Y,uchar ASCII);//在第X+1行的第Y+1位置显示一个字符void DisplayListChar (uchar X,uchar Y,uchar delayms,uchar code *DData); void DisplayCursorPos (uchar X, uchar Y);void LCMInit (void);void DisplayIntData (uchar X, uchar Y,int ZhengShu,uchar Digit,uchar XiaoShu);void DisplayCharData (uchar X, uchar Y,uchar ZiFu);//******************************************************************** **//延时函数声明void delay25us_40KHz(unsigned char us);void DelayUs(uint us);void DelayMs(uint Ms);void delay_3us();//3US的延时程序void delay_8us(unsigned int t);//8US延时基准程序void delay_50us(unsigned int t);//延时50*T微妙函数的声明//******************************************************************** ***//DS18B20测温函数定义void w_1byte_ds18b20(uchar value);//向DS18B20写一个字节uchar r_1byte_ds18b20(void);//从DS18B20读取一个字节的数据void rest_ds18b20(void);//DS18B20复位程序void readtemp_ds18b20(void);//读取温度void display_temp(void);//温度显示程序//******************************************************************** ***//参数定义uint length = 0; // 测距的长度0.00Muchar flag = 0; // 测距的标志有信号接收=1uchar templ,temph;uint speed;//根据温度计算出来的声音速度uchar t_b,t_s,t_g,t_x;//从左到右分别存储温度百位,十位,个位,小数位uchar flag1;//温度正负性暂存,1为正数,0为负数const unsigned char tabl3[]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x0 8,0x09,0x09};/*=========================================================== ================主程序============================================================= ================*/void main(void){uchar i;LCMInit(); //1602初始化EX0 = 1; //允许总中断中断,使能INT0 外部中断ET0 = 1;TMOD=0x11; //设定T0为16位时器,设定T1为16位时器DisplayOneChar( 0,14,'m');DisplayListChar(0,0,0, "Distanc: "); //显示字符串while(1){readtemp_ds18b20();display_temp();//显示温度for(i=0;i<20;i++){DisplayIntData(0, 13,length,5,3);//显示测量距离TH0=0x00;TL0=0x00;TR0=1; //启动定时器0EA = 1; //允许所有中断delay25us_40KHz(15); //发出脉冲信号DelayMs(200);}}}//******************************************************************** ***********//温度显示函数void display_temp(){if(flag1==1)//温度为正数时的显示程序{DisplayOneChar( 1,2,'+');}else{DisplayOneChar( 1,2,'-');}//显示温度信息DisplayOneChar( 1,0,'T');DisplayOneChar( 1,1,':');DisplayOneChar( 1,3,t_s+0x30);DisplayOneChar( 1,4,t_g+0x30);DisplayOneChar( 1,5,'.');DisplayOneChar( 1,6,t_x+0x30);//显示速度信息DisplayOneChar( 1,8,'S');DisplayOneChar( 1,9,':');DisplayOneChar( 1,10,speed/100%10+0x30);DisplayOneChar( 1,11,speed/10%10+0x30);DisplayOneChar( 1,12,speed%10+0x30);DisplayOneChar( 1,13,'M');DisplayOneChar( 1,14,'/');DisplayOneChar( 1,15,'S');}//****************************************************//读取温度void readtemp_ds18b20(void){uchar temp32;rest_ds18b20();w_1byte_ds18b20(0xcc); //跳过读序列号的操作w_1byte_ds18b20(0x44); //启动温度转换delay_8us(2);rest_ds18b20();w_1byte_ds18b20(0xcc); //跳过读序列号的操作w_1byte_ds18b20(0xbe); //读取温度寄存器等(共可读9个寄存器)前两个就是温度templ=r_1byte_ds18b20();temph=r_1byte_ds18b20();if((temph&0xf0))//判断温度的正负性{flag1=0;temph=-temph;templ=-templ;t_x=tabl3[templ & 0x0f];//计算温度的小数temp32=temph & 0x0f;temp32<<=4;templ>>=4;temp32=temp32 | templ;t_b=temp32/100%10;//计算温度的百位数据t_s=temp32/10%10;//计算温度的十位数据t_g=temp32%10;//计算温度的个位数据speed=331.4-0.607*(temp32 | templ);}else//为正数{t_x=tabl3[templ & 0x0f];//计算温度的小数temp32=temph & 0x0f;temp32<<=4;templ>>=4;temp32=temp32 | templ;t_b=temp32/100%10;//计算温度的百位数据t_s=temp32/10%10;//计算温度的十位数据t_g=temp32%10;//计算温度的个位数据flag1=1;speed=311.4+0.607*(temp32 | templ);}}/*=========================================================== =========功能:在1602显示一个整数数据说明:显示一个整数数据-9999->32625. 从右至左显示数据5位:============================================================= =========*/void DisplayIntData(uchar X, uchar Y,int ZhengShu,uchar Digit,uchar XiaoShu) {uchar i=0,k=0, BCD[5]={0};if(Digit>5) Digit=5;if(ZhengShu<0){k=1;//负数示志位ZhengShu=-ZhengShu;}BCD[4] =ZhengShu / 10000; //求出万位数据ZhengShu = ZhengShu % 10000;BCD[3] =ZhengShu / 1000; //求出千位数据ZhengShu = ZhengShu % 1000;BCD[2] =ZhengShu / 100; //求出百位数据ZhengShu = ZhengShu % 100;BCD[1] =ZhengShu / 10; //求出十位数据BCD[0] =ZhengShu % 10; //求出个位数据for(i=0;i<Digit;i++)//输出显示的数值{if((i==XiaoShu)&&(0!=XiaoShu)){DisplayOneChar(X,Y-i,'.');//输出小数点Y= Y-1;}DisplayOneChar(X,Y-i,BCD[i]+0x30); //显示一个字符}if(k==1)DisplayOneChar(X,Y-1,'-');//输出负符}//****************************************************************//读一个字节uchar r_1byte_ds18b20(void){uchar i=0;uchar value= 0;for (i=0;i<8;i++){value>>=1;dq_ds18b20=0;// DQ_L;delay_3us();dq_ds18b20=1; //DQ_H;delay_8us(2);if(dq_ds18b20==1) value|=0x80;delay_8us(6); //延时40us}dq_ds18b20=1;return value;}//******************************************************************** ***********//子程序功能:向DS18B20写一字节的数据void w_1byte_ds18b20(uchar value){uchar i=0;for(i=0;i<8;i++){dq_ds18b20=1;delay_3us();dq_ds18b20=0;delay_8us(2);if (value& 0x01) dq_ds18b20=1; //DQ = 1delay_50us(1); //延时50us 以上delay_8us(2);value>>=1;}dq_ds18b20=1; //DQ = 1}//;**************************************************//ds18b20复位子程序void rest_ds18b20(void){rest:delay_3us(); //稍做延时delay_3us();dq_ds18b20=1;delay_3us();dq_ds18b20=0;// DQ_L;delay_50us(11);//480us<T<960usdq_ds18b20=1;//拉高总线delay_8us(5);if(dq_ds18b20==1){return;}delay_50us(2); //延时90usif(dq_ds18b20==1){return;}else{goto rest;}}//==============================超声波模块测试子程序================================================/*=========================================================== =========注意:是用12MHz晶振设定延时时间:x*25us 与产生40KHZ的脉冲============================================================= =======*/void delay25us_40KHz(unsigned char us){while(us--){TxPin = 0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();TxPin = 1;_nop_();_nop_();_nop_();_nop_();}TxPin = 1;}/*=========================================================== ==================中断程序的入口(注意:接收与发射的电平是相反的)============================================================= ==================*/void init0int() interrupt 0{uint timer_us = 0;TR0=0; //关闭定时器0timer_us =TH0*256+TL0;if(timer_us>190)timer_us=timer_us-180; //修正测距的距离if(timer_us<=735){timer_us=timer_us-96;//二次修正}if(timer_us>5059){timer_us+=29;}if(timer_us>5470){timer_us+=29;}if(timer_us>6410){timer_us+=29;}if(timer_us>7410){timer_us+=29;}if(timer_us>8410){timer_us+=29;}if(timer_us>9410){timer_us+=29;}if(timer_us>10410){timer_us+=29;}length = ((unsigned long)(speed)*timer_us)/2000;//计算长度,是扩大100倍flag = 0;EA = 0; //禁止所有中断}/*=========================================================== =========功能:在1602显示一个字符数据说明:显示一个字符数据0~256. 从左至右显示数据3位============================================================= =========*/void DisplayCharData(uchar X, uchar Y,uchar ZiFu){uchar i=0;uchar V alueBCD[3];V alueBCD[0] = ZiFu / 100; //求出百位数据ZiFu = ZiFu % 100;V alueBCD[1] = ZiFu / 10; //求出十位数据V alueBCD[2] = ZiFu % 10; //求出个位数据for(i=0;i<3;i++)//输出显示的数值{DisplayOneChar(X,Y+i,V alueBCD[i]+0x30); //显示一个字符}}/*=========================================================== ================超出测量时间============================================================= ================*/void timer0int (void) interrupt 1{TR0=0; //关闭定时器0length = 0; //超出测量时间显示示0flag = 1; //EA = 0; //禁止所有中断}/*=========================================================== ===========LCM初始化============================================================= =========*/void LCMInit(void){LCM_Data = 0;WriteCommandLCM(0x38,0); //三次显示模式设置,不检测忙信号DelayMs(5);WriteCommandLCM(0x38,0);DelayMs(5);WriteCommandLCM(0x38,0);DelayMs(5);WriteCommandLCM(0x38,1); //显示模式设置,开始要求每次检测忙信号WriteCommandLCM(0x08,1); //关闭显示WriteCommandLCM(0x01,1); //显示清屏WriteCommandLCM(0x06,1); // 显示光标移动设置WriteCommandLCM(0x0C,1); // 显示开及光标设置DelayMs(100);}/*=========================================================== =========显示光标的位置============================================================= =======*/void DisplayCursorPos( unsigned char X, unsigned char Y){X &= 0x1;Y &= 0xF; //限制Y不能大于15,X不能大于1if (X) Y |= 0x40; //当要显示第二行时地址码+0x40;Y |= 0x80; // 算出指令码WriteCommandLCM(Y, 1); //这里不检测忙信号,发送地址码}/*=========================================================== =========按指定位置显示一串字符:第X 行,第y列注意:字符串不能长于16个字符============================================================= =========*/void DisplayListChar(uchar X,uchar Y,uchar delayms, uchar code *DData){unsigned char ListLength;ListLength = 0;X &= 0x1;Y &= 0xF; //限制X不能大于15,Y不能大于1while (DData[ListLength]!='\0') //若到达字串尾则退出{if (Y <= 0xF) //X坐标应小于0xF{DisplayOneChar(X, Y, DData[ListLength]); //显示单个字符ListLength++;Y++;DelayMs(delayms);//延时显示字符串}elsebreak;//跳出循环体}}/*=========================================================== =========设定延时时间:x*1us============================================================= =======*/void DelayUs(uint us){while(us--);}/*=========================================================== =========设定延时时间:x*1ms============================================================= =======*/void DelayMs(uint Ms){uint i,TempCyc;for(i=0;i<Ms;i++){TempCyc = 250;while(TempCyc--);}}//==============================LCD1602显示子程序================================================/*=========================================================== ==========写数据函数: E =高脉冲RS=1 RW=0============================================================= =========*/void WriteDataLCM(unsigned char WDLCM){ReadStatusLCM(); //检测忙LCM_Data = WDLCM;LCM_RS = 1;LCM_RW = 0;LCM_E = 0; //若晶振速度太高可以在这后加小的延时LCM_E = 0; //延时LCM_E = 1;}/*=========================================================== =========写指令函数: E=高脉冲RS=0 RW=0============================================================= =========*/void WriteCommandLCM(unsigned char WCLCM,BuysC) //BuysC为0时忽略忙检测{if (BuysC) ReadStatusLCM(); //根据需要检测忙LCM_Data = WCLCM;LCM_RS = 0;LCM_RW = 0;LCM_E = 0;LCM_E = 0;LCM_E = 1;}/*=========================================================== =========//读数据============================================================= =========*/unsigned char ReadDataLCM(void){LCM_RS = 1;LCM_RW = 1;LCM_E = 0;LCM_E = 0;LCM_E = 1;return(LCM_Data);}/*=========================================================== =========正常读写操作之前必须检测LCD控制器状态:E=1 RS=0 RW=1;DB7: 0 LCD控制器空闲,1 LCD控制器忙。

(完整版)基于51单片机的超声波测距系统设计

(完整版)基于51单片机的超声波测距系统设计

完满 WORD 格式整理1设计任务本文采纳超声波传感器 ,IAP15 单片机以及 LCD显示模块设计了一种超声波测距显示器,能够实现丈量物体到仪器距离以及显示等功能。

是一种构造简单、性能稳固、使用方便、价钱便宜的超声波距离丈量器,拥有必定的适用价值。

2设计思路超声波测距超声波超声波是指频次在 20kHz 以上的声波,它属于机械波的范围。

最近几年来,跟着电子丈量技术的发展,运用超声波作出精准丈量已成可能。

跟着经济发展,电子丈量技术应用愈来愈宽泛,而超声波丈量精准高,成本低,性能稳固则备受喜爱。

超声波也按照一般机械波在弹性介质中的流传规律,如在介质的分界面处发生反射和折射现象,在进入介质后被介质汲取而发生衰减等。

正是因为拥有这些性质,使得超声波能够用于距离的丈量中。

跟着科技水平的不停提升,超声波测距技术被宽泛应用于人们平时工作和生活之中。

一般的超声波测距仪可用于固定物位或液位的丈量,合用于建筑物内部、液位高度的丈量等。

超声在空气中测距在特别环境下有较宽泛的应用。

利用超声波检测常常比较快速、方便、计算简单、易于实现及时控制,并且在丈量精度方面能达到工业适用的指标要求,所以为了使挪动机器人能够自动闪避阻碍物行走,就一定装备测距系统,以使其及时获得距阻碍物的地点信息(距离和方向)。

所以超声波测距在挪动机器人的研究上获得了宽泛的应用。

同时因为超声波测距系统拥有以上的这些长处,所以在汽车倒车雷达的研制方面也获得了宽泛的应用。

超声波测距原理最常用的超声测距的方法是回声探测法,超声波发射器向某一方向发射超声波,在发射时辰的同时计数器开始计时,超声波在空气中流传,途中遇到阻碍物面阻拦就立刻反射回来,超声波接收器收到反射回的超声波就立刻停止计时。

超声波在空气中的流传速度为340m/s,依据计时器记录的时间 t ,就能够计算出发射点距阻碍物面的距离s,即:s=340t/2 。

因为超声波也是一种声波,其声速 V 与温度有关。

基于51单片机的超声波测距

基于51单片机的超声波测距

本系统由51单片机及相关外围电路构成,系统由单片机系统、发射电路与接收放大电路和显示电路几部分组成。

测距范围:25CM到250CM之间。

误差:1%。

距离显示:用三位LED 数码管进行显示(单位是CM)。

该接收电路结构简单,性能较好。

硬件电路的设计主要包括单片机系统及显示电路、超声波发射电路和超声波接收电路三部分。

单片机采用AT89C2051。

采用12MHz高精度的晶振,以获得较稳定时钟频率,减小测量误差。

单片机用P3.5端口输出超声波换能器所需的40kHz的方波信号,P3.6端口监测超声波接收电路输出的返回信号。

显示电路采用简单实用的3位共阳LED数码管,段码输出端口为单片机的P1口,位码输出端口分别为单片机的P3.2、P3.1、P3.0口,数码管位驱运用PNP三极管S9012三极管驱动。

超声波发射、接收电路如图。

超声波发射部份由电阻R2及超声波发送头T40板成;接收电路由BG1、BG2X组成的两组三级管放大电路组成;检波电路、比较整形电路由C7、D1、D2及BG3组成。

40kHz的方波由A T 8 9 C 2 0 5 1单片机的P 3 .5驱动超声波发射头发射超声波,经反射后由超声波接收头接收到40kHz的正弦波,由于声波在空气中传播时衰减,所以接收到的波形幅值较低,经接收电路放大,整形,最后输出一负跳变,输入单片机的P3脚。

该测距电路的40kHz方波信号由单片机A T 8 9 C 2 0 5 1 的P 3 .5发出。

方波的周期为1/40ms,即25µs,半周期为12.5µs。

每隔半周期时间,让方波输出脚的电平取反,便可产生40kHz 方波。

由于单片机系统的晶振为12M晶振,因而单片机的时间分辨率是1µs,所以只能产生半周期为12µs或13µs的方波信号,频率分别为41.67kHz和38.46kHz。

本系统在编程时选用了后者,让单片机产生约38.46kHz的方波。

基于51单片机超声波测距仪

基于51单片机超声波测距仪

基于51单片机超声波测距仪基于51单片机的超声波测距仪设计摘要利用超声波进行测距有许多优点比如不受光强度、色彩和电磁场等外界因素的影响,而且超声波传感器的价位较低、结构也较为简单,超声波以声速传播,方便收发与计算。

在汽车倒车雷达、移动机器人的避障、特别是测量距离等许多方面都已有了非常普遍的应用。

本次毕业设计的超声波测距仪是在STC89C51单片机的基础上设计的,在分析和了解了超声波的一些优点和特性后,又查看了利用超声波测距的基本原理。

最后决定使用51单片机系统和超声波传感器共同组成。

设计的超声波测距仪的硬件部分主要包括电源及复位模块、单片机与超声波模块组成的超声波发射模块、超声波接收模块、LED数码显示模块和扩展报警模块。

软件部分主要包括单片机主程序、根据超声波发射与接收计算距离程序、LED距离显示程序、按键控制程序和蜂鸣器报警程序,这样安排使得系统具有模块化的特点。

系统容易进行控制,具有可靠地的性能,具有较高的测量精度,最重要的是能对距离进行实时测量。

关键词:单片机,测距仪,超声波,实时测量Design of Ultrasonic Distance Meter Based on 51 MCMABSTRACTUsing ultrasonic ranging has many advantages for example, from the effects of light intensity, color and electromagnetic field and other external factors and price lower ultrasonic sensors, the structure is simple, ultrasonic sounds velocity, convenient transceiver and calculation. In the car reverse radar, mobile robot obstacle avoidance, especially measuring distance and many other aspects have been very common application.The graduation design of ultrasonic range finder based on STC89C51 MCU design, analysis and understanding of the some advantages and characteristics of ultrasonic and looked at the use of the basic principle of ultrasonic distance measurement. Finally, the composition of the 51 single-chip microcomputer system and ultrasonic sensor is decided.. The design of ultrasonic rangefinder hardware part consists of the power and reset module, SCM and ultrasonic module consists of ultrasonic emission module, ultrasonic receiving module, LED digital display expansion module and alarm module. Software part mainly includes MCU program, according to the ultrasonic transmitting and receiving computing program distance, the distance of LED display program, key control procedures and buzzer alarm procedures, this arrangement enables the system to have the characteristics of modular. The system is easy to control and has the reliable performance, and has the higher accuracy, and the most important is the real-time measurement of the distance.KEY WORDS: Single chip microcomputer,Range finder,Ultrasonic,Real-time measurement目录摘要 (I)目录 (III)第1章绪论 (1)1.1 研究背景 (1)1.2 研究的主要意义 (1)第2章系统电路设计 (3)2.1 系统结构设计 (3)2.2 电路总体设计方案 (3)2.2.1 发射与接收电路设计方案 (3)2.2.2 显示电路设计方案 (5)2.2.3 报警电路设计方案 (6)2.2.4 系统复位电路设计 (6)第3章系统硬件设计 (8)3.1 单片机概述 (8)3.1.1 STC89C51主要性能 (8)3.1.2 STC89C51外部结构及特性 (8)3.1.3 STC89C51内部组成 (11)3.2 超声波测距模块 (12)3.2.1 超声波传感器介绍 (12)3.2.2HC-SR04超声波测距芯片的性能特点 (12)3.2.3 超声波时序图 (15)3.3 驱动显示电路及报警电路 (15)3.3.1LED数码管显示电路 (16)3.3.2 蜂鸣器报警电路 (17)3.4HC-RS04超声波测距原理 (17)3.5 按键设置电路 (18)第4章系统软件设计 (21)4.1 系统主程序 (21)4.2 显示距离子程序 (22)4.3 报警子程序 (22)4.4 按键子程序 (23)第5章系统仿真 (25)5.1 系统仿真环境——Proteus (25)5.2 仿真 (25)5.3 误差及特性分析 (26)结论 (28)谢辞 (29)参考文献 (30)第1章绪论1.1 研究背景超声波测距法是通过超声波测量从已知位置到被测物体表面的距离的利用超声波的方法。

基于51单片机超声波测距仪设计

基于51单片机超声波测距仪设计

个性化实验基于51 单片机超声波测距器设计摘要传统地测距方法存在不可克服地缺陷.例如,液面测量就是一种距离测量,传统地电极法是采用差位分布电极,通过给电或脉冲来检测液面,电极由于长期浸泡于水中或其他液体中,利用超声波测量距离就可以解决这些问题,因此超声波测量距离技术在工业控制、勘探测量、机器人定位和安全防范等领域得到了广泛地应用.本设计以STC89C52单片机为核心控制定时器产生超声波脉冲并计时,计算超声波自发射至接收地往返时间,从而得到实测距离.并且在数据处理中采用了温度补偿对声速进行调整,用1602 液晶显示速度和测量距离.整个硬件电路有超声波电路、电源电路、显示电路等组成.个探头地信号经单片机综合分析处理,实现超声波测距器地功能.在此基础上设计了系统地总体方案,最后通过硬件和软件实现了测距功能.此系统具有易控制、工作可靠、测距准确度高、可读性强和流程清晰等优点,即过系统扩展和升级,可以有效地解决汽车倒车,建筑施工工地以及一些工业现场地位置监控关键词:STC89C52超声波;温度补偿;测距目录绪论 (3)设计目地和意义 (3)设计任务和要求 (3)系统方案设计 (4)设计原理 (4)设计框图 (5)主要元器件介绍 (5)STC89C52 (5)LCD1602液晶显示器 (6)HC-SR04超声波模块 (8)DS18B20温度传感器 (9)系统硬件结构设计 (10)单片机电路 (10)LCD显示电路 (11)温度补偿电路 (11)电源电路 (12)系统软件设计 (12)主程序流程 (12)测距流程图 (13)测试 (14)测试结果 (14)误差分析 (15)总结 (15)附录 (17)整体电路图 (17)PCB布线图 (18)实物图...................................................... 错误!未定义书签。

部分程序 (18)主程序 (18)测量距离 (19)读取温度数值 (20)绪论设计目地和意义在现实生活中,一些传统地距离测量方式在某些特殊场合存在不可克服地缺陷,例如,液面测量就是一个距离测量,传统地电极法是采用差位分布电极,通过给电或脉冲检测液面,电极长期浸泡在水中或其它液体中,极易被腐蚀、电解,从而失去灵敏性.而利用超声波测量距离可以很好地解决这一问题.目前市面上常见地超声波测距系统不仅价格昂贵,体积过大而且精度也不高等种种因素,使得在一些中小规模地应用领域中难以得到广泛地应用.为解决这一系列难题,本文设计了一款基于STC89C52 单片机地低成本、高精度、微型化地超声波测距器.设计任务和要求设计一个超声波测距器,可以应用于汽车倒车、建筑施工工地以及工业现场地位置监控,也可以用于液位、井深、管道长度地测量等场合•要求测量范围在0.1~3.00m,测量精度1cm,测量时与被测物体无直接接触,能够清晰稳定地显示测量结果系统方案设计设计原理发射端发出地超声波以速度v在空气中传播,在到达被测物体时被反射返回,由接收端接收,往返时间为t,由s=vt/2即可算出被测物体地距离.由于超声波也是一种声波,其声速v与温度有关,下表列出了几种不同温度下地声速•在使用时,如果温度变化不大,则可认为声速是基本不变地,如果测距精度要求很高,则应通过温度补偿地方法加以校正•本设计中使用公式v=331.4+T*0.61对声速进行校正.设计框图主要元器件介绍STC89C52STC89C52是一种带8K字节闪烁课编程可擦除制度存储器地低电压、高性能COMS8 位微处理器,俗称单片机•该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准地MCS-51指令集和输出管脚相兼容•由于将多功能8位CPU和闪烁存储器组合在单个芯片中,STC地STC89C52是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且廉价地方案,STC89C52芯片引脚图如图所示•图二STC89C52芯片引脚图LCD1602液晶显示器LCD 液晶显示器具有体积小、功耗低、界面美观大方等优点.1602显示模块用点阵图形显示字符,显示模式分为 2行16个字符•它具有16个引脚,其正面左起为第一脚,如下 图所示:第一脚GND:接地.第二脚VCC: +5V 电源.第三脚VO:对比度调整端.使用时通过接一个10K 地电阻来调节 第四脚RS 寄存器选择信号线.第五脚RW:读写信号线.T2/P1.0T2EX/PL 1Pl. 2 P 】・3Pl. 1PL 5IM. 6忆1RST RXD/P ;kO TW/P3. 1T\T 5/P3.2 1XT1/P3,3TO/卩 3* 1 P/P3. 5FR/P3,6 RD/P3. 7XTAL2 XTAL1 vss=vccFO O/ADO PO.1/AP1 P0. 2/AD2Hh 3/AD3 PO. 4/MM PO, 5/AD5 PO.5/AD6 PO,7/AD7 ALE PROG psTV P2. 7/A15 P2.6/A1t P2, 5/AL3 P2.1/A12 P2,3/A1t P2. 2/A10 P2.I/A9]P2.0/A8图三LCD 引脚示意图第六脚E:使能端,当E由高电平跳变为低电平时执行命令第7~14脚:8位数据线D0~D7.第十五脚BLA:背光电源正极输入端.第十六脚BLK背光电源负极输入端.表二LCD1602操作指令1602液晶模块内部地字符发生存储器(C G R O M)已经存储了160个不同地点阵字符图形,这些字符有:阿拉伯数字、英文字母地大小写、常用地符号、和日文假名等,每一个字符都有一个固定地代码,比如大写地英文字母“A”代码是01000001B(41H),显示时模块把地址41H中地点阵字符图形显示出来,我们就能看到字母“A”.因为1602识别地是ASCII码,实验可以用ASCII码直接赋值,在单片机编程中还可以用字符型常量或变量赋值,如A' .160通过D0~D7地8位数据端传输数据和指令•HC-SR04超声波模块HC-SR04超声波传感器模块性能稳定,测度距离精确,模块高精度,盲区小•可提供2cm至400cm地非接触式距离感测功能,测距精度可达3mm.模块自身包括超声波发射器、接收器与控制电路.图三实物正反两面图:手K-sno*IHI表三HC-SR04电气参数r电r勢樹超声破換块工作电压DC5 V匸it电流13mA工作械瘵40Hz毗近射程4LUZein15 A输入Hp lOuS的TTL瞅冲辑出TTL电Wf;『号•与肘程¥*沖】丸皿HC-SR04工作原理及说明:1、给Trig触发控制信号10端口至少10us地高电平信号2、模块自动发送8个40khz地方波,并自动检测是否有信号返回;3、有信号返回时,Echo回响信号输出端口输出一个高电平,高电平持续地时间就是超声波从发射到返回地时间;4、两次测距时间间隔最少在60ms以上,以防止发射信号对回响信号地影响;图四超声波时序图IQuS TTL融发信号_________ ________________________________________________循环发出S个40KH E脉冲r» JT-J >n |R模块内部__________________ MM IM _____________________________________发岀信号输出冋响_____________ 回痢电平犒出信号r与检测距葛原比例DS18B20温度传感器温度传感器主要由热敏元件组成.热敏元件品种教多,市场上销售地有双金属片、铜热电阻、铂热电阻、热电偶及半导体热敏电阻等.以半导体热敏电阻为探测元件地温度传感器应用广泛,这是因为在元件允许工作条件范围内,半导体热敏电阻器具有体积小、灵敏度高、精度高地特点,而且制造工艺简单、价格低廉•半导体热敏电阻按温度特性热敏电阻可分为正温度系数热敏电阻(电阻随温度上升而增加)和负温度系数热敏电阻(电阻随温度上升而下降).本设计采用地是美国Dallas半导体公司地不锈钢封装地DS18B20数字温度传感器.DS18B20是采用专门设计地不锈钢外壳,仅有0.2mm地壁厚,具有很小地蓄热量,采用导热性高地密封胶,保证了温度传感器地高灵敏性,极小地温度延迟.DS18B20支持一线总线”接口(1-Wire ),测量温度范围为-55 °〜+125°C,在-10〜+85°C范围内,精度为土0.5C. 现场温度直接以一线总线”地数字方式传输,大大提高了系统地抗干扰性.DS18B20数字化温度传感器地主要性能如下:1)适用电压为3V〜5V;2)9〜12位分辨率可调,对应地可编程温度分别为0.5 C、0.25C、0.125C、0.0625 C;3)TO-92、SOIC及CSP封装可选;4)测温范围:-55C〜125C;5)精度:-10C〜85 C范围内土0.C ;6)无需外部元件,独特地一线接口,电源和信号复合在一起;7)每个芯片唯一编码,支持联网寻址,零功耗等待.系统硬件结构设计单片机电路以STC89C52单片机为主控芯片,CPU电路十分简单,加上晶振和复位电路即可构成最小系统.图五单片机最小系统电路图LCD显示电路本设计采用LCD1602液晶显示屏进行显示,清晰稳定地显示当前温度下地声速以及测量结果•图六LCD显示电路温度补偿电路温度补偿使用温度传感器DS18B20对当前温度进行采集,电路结构简单图七温度补偿电路电源电路整个系统采用12伏直流供电,而系统工作电压为5伏,因此需要对12伏电压进行稳压滤图八电源电路系统软件设计主程序流程图九主程序流程图开始测距流程图4测试测试结果本次设计地超声波测距器测距范围为3cm~400cm,超出测量范围时LCD会有提示,同时蜂鸣器报警;按下测距按键后,测距显示等亮,测量结束时,显示灯灭,液晶显示测量结果F表是我们测试时地测量结果误差分析由表四地测量数据可以看出,误差在误差允许范围1cm以内,因此本设计是满足要求地.测距时,被测物体必须垂直于超声波测距仪,被测物体表面平坦,且测距仪周围必须没有其他可以反射超声波地物体•本次设计地超声波测距仪也存在一些问题,由于上电一段时间后,一些元器件会发热,使得电路板温度升高,导致测得地温度比实际温度偏高,从而产生误差;由于51单片机本身地一些原因,会使得系统有时会不稳定,蜂鸣器蜂鸣声很小总结总地来说,通过这次个性化实验,我们都收获颇多•接收这个工程之前,我么都不懂什么是单片机,什么是AD接了这个工程后,我们自学了单片机,学习使用了AD等各种软件,了解了温度补偿、LED显示屏、声光显示,以及学会怎样在一个团队中担任自己地角色•在整个过程中,我们大家一起学习,分工合作•在技术上,基础好地带动基础差地,基础好地也不断提升自己地能力,大家集思广益,让作品更加完美;在团队中,我们每个人都有自己地任务,大家都很好地完成自己地责任,最终地作品实现了预期地功能.当然,过程中也有不完美地地方,由于知识不到位,最开始我们地进度不快,但随着了解地越来越多,我们地进度也就慢慢地上来了.非常感谢这次地经历,让我们学习到了这么多,有了这次经历,相信我们会在这条路上走得越来越远.整体电路图边:7附录vecD ATAGKCD幻ax =GKEPL1POP1JPWP1Jpr-sPLTm史」P3 4F3 J貪 5=;~XTAL 二XTAL3SiV2CATfICJ]c.sj:・:4匕曲:A-・一[X■乙:专二*J;gmKK畧加KIKE.<L=iE_叱plKKKLplKF;戊ILK■sggsggss—IK*&GNDLET.kr.2inPCB布线图部分程序主程序void mai n(){TMOD=0x01。

基于51单片机的超声波倒车雷达测距

基于51单片机的超声波倒车雷达测距

毕业设计题目:基于51单片机的超声波倒车雷达测距学院:电气与信息工程学院专业:电气工程与其自动化摘要超声波是频率高于20KHZ的声波,具有指向性强,能量消耗缓慢,在介质中传播的距离较远的特点,因而超声波经常用于距离的测量,如测距仪和物位测量仪等都可以通过超声波来实现。

利用超声波检测往往比较迅速、方便、计算简单、易于做到实时控制,并且在测量精度方面能达到工业实用的要求,因此在液位、井深、管道长度的测量、移动机器人定位和避障等领域得到了广泛的应用。

基于此,本次设计尝试使用AT89S52与HY-SRF05模块来实现超声波的测量,结合外围电路模块实现距离显示与语音播报构成超声波测距系统。

本次超声波测距系统由单片机计时与控制电路、超声波发射接收模块、测量距离显示电路、语音电路等部分组成。

详细介绍了超声波测距模块与AT89S52单片机的测距原理。

以HY-SRF05超声波测距模块为核心实现超声波的发射与接收。

整体电路结构简单,成本低廉,工作稳定,测量精度也达到实际应用要求。

关键词:AT89S52;超声波;HY-SRF05;测距AbstractUltrasound is sound waves with frequency higher than 20KHz, it has strong directivity and consumes energy slowly, at the same time it spreads farther in the same medium. Therefore ultrasound is often used for distance measurement, such as the range finder and level measurement and so on can be achieved by it. Use of ultrasonic detection tends to be quickly, convenient and simple calculation, easy to do real-time control. In the measurement precision it can reach industry practical requirement. So in liquid level, well depth, pipe length measurement, mobile robot localization and obstacle avoidance, etc a wide range of applications.This ultrasonic distance measurement system by single-chip timing and display circuit of the control circuits, ultrasound modules, measuring distances, voice circuits and other components. Details the ultrasonic range finder and AT89S52 microcontroller module location. Core realization of ultrasonic HY-SRF05 ultrasonic distance measurement modules for transmit and receive. A whole circuit of simple structure, low cost, stable, measurement precision to reach the actual application requirements.Keywords:AT89S52;Ultrasonic wave;HY-SRF05;Measure distance目录摘要IAbstractII第1章绪论11.1 课题研究的背景11.2 国外研究现状11.3 课题研究的意义2第2章超声波测距原理42.1 超声波简介42.2 超声波测距原理4第3章方案论证63.1 设计思路63.2 系统结构设计7第4章硬件电路设计84.1 单片机AT89S5284.2 超声波测距模块HY-SRF05104.2.1 基本工作原理104.2.2 HY-SRF05电气参数114.2.3 超声波时序图124.2.4 超声波应用电路图124.3 温度传感器DS18B20124.4 LCD1602液晶134.4.1 LCD1602主要技术参数134.4.2 LCD1602引脚功能144.4.3 LCD1602应用电路图144.5 ISD1420语音芯片154.5.1 特点154.5.2 电特性154.5.3 ISD1420引脚功能154.5.4 ISD1420语音电路16第5章系统软件设计185.1 主程序185.2 超声波测距子程序185.3 测温子程序20第6章系统调试分析226.1 硬件电路测试226.2 软件调试226.3 误差分析23结论25参考文献26致27附录28附录A:实物作品28附录B: 原理图29附录C: PCB图30附录D: 程序30第1章绪论1.1 课题研究的背景随着我国经济的飞速发展,交通运输车辆的不断增多,由此产生的交通问题越来越成为人们关注的问题。

基于51单片机超声波测距报警系统课程设计

基于51单片机超声波测距报警系统课程设计

基于51单片机超声波测距报警系统课程设计一、引言超声波测距技术是一种常见的非接触式测距技术,具有测距范围广、精度高等优点。

在日常生活中,超声波测距技术被广泛应用于车辆倒车雷达、智能家居中的人体感应等领域。

本文将介绍基于51单片机的超声波测距报警系统的课程设计。

二、设计思路本课程设计主要分为硬件设计和软件设计两部分。

硬件部分主要包括超声波模块、LCD显示屏、蜂鸣器等模块的连接和电路设计;软件部分主要包括51单片机程序设计及LCD显示程序编写。

三、硬件设计1. 超声波模块连接超声波模块是实现测距功能的核心部件。

在本课程设计中,我们采用HC-SR04型号的超声波模块。

该模块需要连接到51单片机上,具体连接方式如下:- 将VCC引脚连接到51单片机上的5V电源;- 将GND引脚连接到51单片机上的GND;- 将Trig引脚连接到P2.0口;- 将Echo引脚连接到P2.1口。

2. LCD显示屏连接LCD显示屏用于显示测距结果和报警信息。

在本课程设计中,我们采用1602型号的LCD显示屏。

该模块需要连接到51单片机上,具体连接方式如下:- 将VSS引脚连接到51单片机上的GND;- 将VDD引脚连接到51单片机上的5V电源;- 将VO引脚连接到一个10K电位器,再将电位器两端分别接到GND 和5V电源;- 将RS引脚连接到P1.0口;- 将RW引脚连接到P1.1口;- 将EN引脚连接到P1.2口;- 将D4-D7引脚分别连接到P0口的高四位。

3. 蜂鸣器连接蜂鸣器用于报警。

在本课程设计中,我们采用被动式蜂鸣器。

该模块需要连接到51单片机上,具体连接方式如下:- 将正极引脚(一般为长针)连接到51单片机上的P3.7口;- 将负极引脚(一般为短针)连接到51单片机上的GND。

四、软件设计1. 51单片机程序设计在本课程设计中,我们采用Keil C51作为编程工具,使用C语言编写程序。

主要程序流程如下:- 定义超声波模块的Trig和Echo引脚;- 定义LCD显示屏的RS、RW、EN和D4-D7引脚;- 定义蜂鸣器的引脚;- 定义变量存储测距结果和报警状态;- 初始化LCD显示屏、超声波模块等模块;- 循环执行以下操作:- 发送超声波信号并计算回波时间,从而得到距离值;- 根据距离值判断是否需要报警,并控制蜂鸣器发出报警声音;- 将测距结果和报警状态显示在LCD显示屏上。

基于51单片机的超声波测距仪设计.

基于51单片机的超声波测距仪设计.

江苏经贸职业技术学院毕业设计(论文)单片机的超声波测距仪设计基于题目:MCS51) 信息技术学院系 (院12应用电子专业班级1227031128 号学学生姓名万小伟董李江职校内导师称老师职夏国平企业导师称工程师职企业导师潘仕美称研究生5年2015月日12基于MCS51单片机的超声波测距仪设计摘要:伴随着社会的发展,人们的生活质量不断地提高,各个的城市不断地在发展,当然城市的排水系统得到了很大的发展和改进,由于很多的原因和很多的因素,每个城市的排水系统,现在的城市的发展和建设往往忽略一些重要的项目那就是排水系统。

所以好多的城市经常出现开挖已经建设好的建筑和工程设施来改进排水系统因此他们忽视到这个问题的严重性。

因此,我的论文设计是采用以AT89C51单片机为核心的高精度、微型化数字显示超声波测距仪的硬件电路和软件设计方法它还有一个重要的指标那就是低成本一种的设计方法。

通过一系列的实验反馈,这个软件设计的非常的合理、低成本、实时性良好,经过开发和研究,因此在许多的方面得到很多的发展和有效的解决一些重要的问题比如在汽车的倒车,建筑的工地上,还有一些重要的工业现场的重要的位置等等。

关键词:超声波测距仪AT89C51The design of ultrasonic range finder based onMCS51Abstract:With the development of science and technology, the improvement of people'sstandard of living, speeding up the development and construction of the city. urban drainagesystem have greatly developed their situation is constantly improving. control system Freesewage culvert clear guarantee robot, the robot is designed to clear the culvert sewage to thecore.At the core of the design using AT89C51 low-cost, high accuracy, Micro figures show that theultrasonic range finder hardware and software design methods. signal processing, and theultrasonic range finder function. On the basis of the overall system design, hardware andsoftware by the end of each module.Keywords: Silent Wave Measure Distance AT89S52目录第一章绪论 ................................................ - 1 -1.1课题设计的目的和意义 (1)1.2超声波测距仪设计思路 (1)1.2.1超声波测距原理及方案论证 (1)1.2.2超声波测距仪原理框图 (2)第二章课程的方案设计 ...................................... - 3 -2.1系统整体方案的设计 (3)第三章 51系列单片机的功能特点及测距原理 ................... - 3 -3.1基于51系列单片机的功能特点 (3)3.2单片机实现测距原理 (4)3.3超声波测距原理和结构 (5)3.4超声波检测发射电路 (5)3.5超声波检测接受电路 (5)第四章系统的软硬件的调试和程序图 .......................... - 6 -总结 ..................................................... - 10 -致谢 ..................................................... - 10 -参考文献 .................................................. - 11 -第一章绪论1.1课题设计的目的和意义论文设计目的;随着社会的不断地发展,电子测量技术得到了长远的展,超声波的精准测量得到了科技人员的重视和研究。

推荐-51单片机的超声波测距 非常详细已处理 精品

推荐-51单片机的超声波测距 非常详细已处理  精品

基于51单片机的超声波测距毕业非常详细目录目录1摘要 2第1章超声波测距系统设计 31.1 超声波测距的原理 31.2超声波测距系统电路的设计 31.2.1 总体设计方案 31.2.2发射电路的设计 41.2.3接收电路的设计 51.2.4显示模块的设计 61.3超声波测距系统的软件设计71.4本章小结9第2章绪论102.1 课题背景,目的和意义 102.2两种常用的超声波测距方案102.2.1基于单片机的超声波测距系统102.2.2基于CPLD的超声波测距系统112.3课题主要内容12第3章超声波传感器133.1超声波传感器的原理与特性13 3.1.1原理133.1.2特性143.2超声波传感器的检测方式153.3超声波传感器系统的构成163.4本章小结17第4章 AT89C51单片机简介184.1单片机基础知识184.1.1单片机的内部结构184.1.2单片机的基本工作原理204.2单片机的分类及发展214.3单片机AT89C51的特性224.4本章小结25第5章电路调试及误差分析265.1电路的调试265.2系统的误差分析265.2.1声速引起的误差 265.2.2单片机时间分辨率的影响27 5.4本章小结28结论29致谢30参考文献31附录1 31附录2 36附录3 38摘要超声波具有指向性强,能量消耗缓慢,传播距离较远等优点,所以,在利用传感器技术和自动控制技术相结合的测距方案中,超声波测距是目前应用最普遍的一种,它广泛应用于防盗、倒车雷达、水位测量、建筑施工工地以及一些工业现场。

本报告详细的介绍了超声波传感器的原理和特性,以及Atmel公司的AT89C51单片机的性能和特点,并在分析了超声波测距的原理的基础上,指出了设计测距系统的思路和所需考虑的问题,给出了以AT89C51单片机为核心的低成本、高精度、微型化数字显示超声波测距仪的硬件电路和软件设计方法。

该系统电路设计合理、工作稳定、性能良好、检测速度快、计算简单、易于做到实时控制,并且在测量精度方面能达到工业实用的要求。

基于51单片机的超声波测距仪

基于51单片机的超声波测距仪

机电信息工程学院单片机系统课程设计报告系别:电子工程系专业:通信工程班级:051班设计题目:超声波测距学生:王权于建坤指导教师:董玉华厚杰亚宁婷完成日期:2008年03月19日目录一、设计任务和性能指标1二、设计方案1三、系统硬件设计3四、系统软件设计5五、调试与性能分析8六、心得体会10参考文献11附录1系统硬件电路图12附录2程序清单13一、设计任务和性能指标1.1 设计任务设计一个超声波测距器,可应用在汽车倒车、建筑施工工地以与一些工业现场的位置测控,也可用于如液位、井深、管道长度的测量等场合。

要求用Altium Designer 6画出系统的电路原理图(要求以最少组件,实现系统设计所要求的功能),印刷电路板(要求布局合理,线路清晰),绘出程序流程图,并给出程序清单(要求思路清晰,尽量简洁,主程序和子程序分开,使程序有较强的可读性)。

1.2 性能指标1、测量围10—80 cm;2、测量精度1cm;3、测量时与被测物体无直接接触,能够清晰稳定地显示测量结果;4、测量围扩展为10 cm—4m,提高测量精度。

二、设计方案超声波测距仪是利用超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。

超声波在空气中的传播速度为340m/s,根据计时器记录的时间t,就可以计算出发射点距障碍物的距离(s),即:s=340t/2 。

超声波测距主要应用于倒车雷达、建筑施工工地以与一些工业现场,例如:液位、井深、管道长度等场合。

目前国一般使用专用集成电路设计超声波测距仪,但是专用集成电路的成本很高,并且没有显示,操作使用很不方便。

超声波指向性强,穿透能力强,能量消耗缓慢,在介质中传播的距离较远,因而超声波经常用于距离的测量。

如测距仪和物位测量仪等都可以通过超声波来实现。

但由于超声波传感器的成本较高,所以一般运用于专业领域,民用产品中运用较少。

基于51单片机的超声波测距系统

基于51单片机的超声波测距系统

基于51单片机的超声波测距系统完成日期:2011年2月22日一、设计任务和性能指标31.1设计任务 (3)].2性能指标 (3)二、超声波测距原理概述 (4)2.1超声波传感器 (5)2.1.1超声波发生器 (5)2.1.2压电式超声波发生器原理 (5)2.1. 3单片机超声波测距系统构成 (5)三、设计方案63.1 AT89C2051 单片机 (7)3.2超声波测距系统构成 (8)3.2.1超声波测距单片机系统 (9)图3-1:超声波测距单片机系统 (9)3.2.2超声波发射、接收电路 (9)图3-1:超声波测距发送接收单元 (10)3.2. 3显示电路 (10)四.系统软件设计 (11)4.1主程序设计 (11)4.2超声波测距子程序 (12)4.3超声波测距程.序流程图 (13)4.4超声波测距程子序流程图 (14)五.调试及性能分析 (14)5.1调试步骤 (14)5.2性能分析 (15)六.心得体会 (15)参考文献 (16)附录一超声波测系统原理图 (18)附录二超声波测系统原理图安装图 (19)附录三超声波测系统原理图PCB图 (20)附录四超声波测系统原理图C语肓原程序 (21)参考文献 (26)一、设计任务和性能指标1.1设计任务利用单片机及外圉接口电路(键盘接口和显示接口电路)设计制作一个超声波测距仪器,用LED数码管把测距仪距测出的距离显示出来。

要求用Protel画出系统的电路原理图,印刷电路板,绘出程序流程图,并给出程序清单。

1.2性能指标距离显示:用三位LED数码管进行显示(单位是CM)。

测距范围:25CM到250CM之间。

误差:1%。

二、超声波测距原理概述超声波是山机械振动产生的,可在不同介质中以不同的速度传播。

山于超声波指向 性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波经常用于距离的测量,如 测距仪和物位测量仪等都可以通过超声波来实现。

超声测距是一种非接触式的检测方 式。

基于51单片机的超声波测距

基于51单片机的超声波测距

基于51单片机的超声波测距超声波:超声波是由机械振动产生的, 可在不同介质中以不同的速度传播, 具有定向性好、能量集中、传输过程中衰减较小、反射能力较强等优点。

超声波传感器可广泛应用于非接触式检测方法,它不受光线、被测物颜色等影响, 对恶劣的工作环境具有一定的适应能力, 因此在水文液位测量、车辆自动导航、物体识别等领域有着广泛的应用。

超声波测距原理:超声波测距是通过不断检测超声波发射后遇到障碍物所反射的回波, 从而测出发射和接收回波的时间差Δt , 然后求出距离S 。

在速度v 已知的情况下,距离S 的计算,公式如下:S = vΔt/ 2。

在空气中,常温下超声波的传播速度是334 米/秒,但其传播速度V 易受空气中温度、湿度、压强等因素的影响,其中受温度的影响较大,如温度每升高1 ℃, 声速增加约0. 6 米/ 秒。

因此在测距精度要求很高的情况下, 应通过温度补偿的方法对传播速度加以校正。

已知现场环境温度T 时, 超声波传播速度V 的计算公式如下:V = 331.5 + 0. 607T这样, 只要测得超声波发射和接收回波的时间差Δt 以及现场环境温度T,就可以精确计算出发射点到障碍物之间的距离。

超声波测距模块:(1):采用IO口TRIG触发测距,给至少10us的高电平信号;(2):模块自动发送8个40khz的方波,自动检测是否有信号返回;(3):有信号返回,通过IO口ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。

测试距离=(高电平时间*声速(340M/S))/2。

例程:/******************超声波测距1602显示******************单片机型号:STC89C52RC*开发环境:KEIL*名称:超声波测距液晶1602显示/**********************包含头文件*********************/#include <reg52.h>#define LCD_Data P0#define Busy 0x80/**********************宏定义*************************/#define SPEED_30C 3495 //30摄氏度时的声速,声速V=331.5+0.6*温度;#define SPEED_23C 3453 //23摄氏度时的声速,声速V=331.5+0.6*温度;/**********************位定义*************************/sbit ECHO=P1^6;sbit TRIG=P1^5;sbit BEEP=P2^3;sbit LCD_RS=P1^0;sbit LCD_RW=P1^1;sbit LCD_E=P2^5;/********************定义变量和数组*******************/long int distance=0; //距离变量unsigned char code table0[]={" SL-51A "};unsigned char code table1[]={" NO ECHO "};unsigned char code table2[]={"Distance:xxx.xcm"};unsigned char count;void Delay5Ms(void);void delay(int In,int Out);void WriteDataLCD(unsigned char WDLCD);void WriteCommandLCD(unsigned char WCLCD,BuysC);unsigned char ReadDataLCD(void);unsigned char ReadStatusLCD(void);void LCDInit(void);void DisplayOneChar(unsigned char X,unsigned char Y,unsigned char DData);void DisplayListChar(unsigned char X,unsigned char Y,unsigned char code *DData);void delayt(unsigned int x){unsigned char j;while(x-->0){for(j=0;j<125;j++){;}}}void Delay5Ms(void){unsigned int TempCyc=3552;while(TempCyc--);}void delay(int In,int Out){int i,j;for(i=0;i<In;i++){for(j=0;j<Out;j++){;}}}void Alarm(unsigned char t){unsigned char i;for(i=0;i<t;i++){BEEP=0;delay(10,1000);BEEP=1;delay(10,1000);}}void Init_timer(void){TMOD=0x01;TL0=0x66;TH0=0xfc;ET0=1;EA=1;}void Init_Parameter(void){TRIG=1;ECHO=1;count=0;distance=0;}void display(int number){unsigned char b,c,d,e;b=(number/1000);c=(number/100)%10;d=(number/10)%10;e=number%10;DisplayOneChar(9,1,(0x30+b));DisplayOneChar(10,1,(0x30+c));DisplayOneChar(11,1,(0x30+d));DisplayOneChar(13,1,(0x30+e));}void Trig_SuperSonic(void){TRIG=1;delayt(1);TRIG=0;}void Measure_Distance(void){unsigned char l;unsigned int h,y;TR0=1;while(ECHO){;}TR0=0;l=TL0;h=TH0;y=(h<<8)+l;y=y-0xfc66;distance=y+1000*count;TL0=0x66;TH0=0xfc;delayt(30);distance=SPEED_30C * distance / 20000;}void WriteDataLCD(unsigned char WDLCD){ReadStatusLCD();LCD_Data=WDLCD;LCD_RS=1;LCD_RW=0;LCD_E=0;LCD_E=0;LCD_E=1;}void WriteCommandLCD(unsigned char WCLCD,BuysC) {if (BuysC)ReadStatusLCD();LCD_Data=WCLCD;LCD_RS=0;LCD_RW=0;LCD_E=0;LCD_E=0;LCD_E=1;}unsigned char ReadDataLCD(void){LCD_RS=1;LCD_RW=1;LCD_E=0;LCD_E=0;LCD_E=1;return(LCD_Data);}unsigned char ReadStatusLCD(void){LCD_Data=0xFF;LCD_RS=0;LCD_RW=1;LCD_E=0;LCD_E=0;LCD_E=1;while (LCD_Data & Busy);return(LCD_Data);}void LCDInit(void){LCD_Data=0;WriteCommandLCD(0x38,0);Delay5Ms();WriteCommandLCD(0x38,0);Delay5Ms();WriteCommandLCD(0x38,0);Delay5Ms();WriteCommandLCD(0x38,1);WriteCommandLCD(0x08,1);WriteCommandLCD(0x01,1);WriteCommandLCD(0x06,1);WriteCommandLCD(0x0C,1);}void LCD_Clear(void){WriteCommandLCD(0x01,1);Delay5Ms();}void DisplayOneChar(unsigned char X,unsigned char Y,unsigned char DData){Y&=0x1;X&=0xF;if(Y)X|=0x40;X|=0x80;WriteCommandLCD(X,0);WriteDataLCD(DData);}void DisplayListChar(unsigned char X,unsigned char Y,unsigned char code *DData) {unsigned char ListLength;ListLength=0;Y&=0x1;X&=0xF;while(DData[ListLength]>=0x20){if(X<=0xF){DisplayOneChar(X,Y,DData[ListLength]); ListLength++;X++;}}}void main(void){LCDInit();Init_timer();Init_Parameter();Alarm(2);DisplayListChar(0,0,table0);DisplayListChar(0,1,table1);while(1){Trig_SuperSonic();while(ECHO==0){;}Measure_Distance();DisplayListChar(0,1,table2);display(distance);Init_Parameter();delayt(100);}}void timer0 (void) interrupt 1{TF0=0;TL0=0x66;TH0=0xfc;count++;if(count==18){TR0=0;TL0=0x66;TH0=0xfc;count=0;}}。

基于51单片机超声波测距仪设计

基于51单片机超声波测距仪设计

基于51单片机超声波测距仪设计超声波测距仪是一种应用较为广泛的测量设备,可以用于测量物体与超声波传感器之间的距离。

本文将基于51单片机设计一个简单的超声波测距仪,并介绍其原理、硬件电路和程序设计。

一、原理介绍:超声波测距仪的工作原理是利用超声波传感器发射超声波,并接收其反射回来的波,通过计算发射和接收之间的时间差,从而确定物体与传感器之间的距离。

超声波的传播速度在空气中近似为331.4m/s,根据速度与时间关系,可以通过测量时间来计算距离。

二、硬件电路设计:1.超声波模块:选用一个常见的超声波模块,包括超声波发射器和接收器。

2.51单片机:使用51单片机作为控制器,负责控制超声波模块和处理测距数据。

3.LCD显示屏:连接一个LCD显示屏,用于显示测距结果。

4.连接电路:将超声波发射器和接收器分别连接到单片机的引脚,将LCD显示屏连接到单片机的相应引脚。

三、程序设计:1.初始化:包括初始化单片机的GPIO引脚、定时器以及其他必要的设置。

2.发送信号:发射一个超声波信号,通过超声波模块的引脚控制。

此时,启动定时器开始计时。

3.接收信号:当接收到超声波的反射信号时,停止定时器,记录计时的时间差。

根据超声波传播速度,可以计算出距离。

4.显示结果:将测得的距离数据显示在LCD显示屏上。

四、实现效果:通过以上设计,可以实现一个简单的超声波测距仪。

在实际应用中,可以根据需求扩展功能,例如增加报警功能、计算速度等。

总结:本文基于51单片机设计了一个超声波测距仪,包括硬件电路设计和程序设计。

通过该设备可以实现对物体与超声波传感器之间的距离进行测量,并将结果显示在LCD显示屏上。

该设计只是一个基本的框架,可以根据需要进行进一步的改进和优化。

超声波测距系统 基于51单片机的超声波倒车测距报警系统设计

超声波测距系统 基于51单片机的超声波倒车测距报警系统设计

引言超声波是一种频率在20KHz以上的机械波,在空气中的传播速度约为340 m/s(20°C 时)。

超声波可由超声波传感器产生,常用的超声波传感器两大类:一类是采用电气方式产生超声波,一类是用机械方式产生超声波,目前较为常用的是压电式超声波传感器。

由于超声波具有易于定向发射,方向性好,强度好控制,对色彩、光照度不敏感,反射率高等特点,因此被广泛应用于无损探伤,距离测量、距离开关、汽车倒车防撞、智能机器人等领域。

1 系统原理框图本设计的整体框图如图1所示,主要由超声波发射,超声波接收与信号转换,按键显示电路与温度传感器电路组成。

超声波测距是通过不断检测超声波发射后遇到障碍物所反射的回波,从而测出发射和接收回波的时间差T,然后求出距离S=CT/2,式中的C为超声波波速。

在常温下,空气中的声速约为340m/s。

由于超声波也是一种声波,其传播速度C 与温度有关,在使用时,如果温度变化不大,则可认为声速是基本不变的。

因本系统测距精度要求很高,所以通过对温度的检测对超声波的传播速度加以校正。

超声波传播速度确定后,只要测得超声波往返的时间,如图2所示,即可求得距离。

这就是超声波测距系统的基本原理。

2 超声波信号的发射与接收电路发射部分电路如图3所示,主要由脉冲调制信号产生电路,隔离电路以及驱动电路组成,用来为超声波传感器提供发送信号。

脉冲调制信号产生电路中通过单片机对555定的复位(RESET)端的控制,使555定时器分时工作从而生产生脉冲频率为40KHz,周期为30ms的脉冲调制信号,信号波形如图2所示,本设计中一个周期内发送10个脉冲信号。

隔离电路主要是由两个与非门组成,对输出级与脉冲产生电路之间进行隔离。

输出级由两个通用型集成运放TL084CN 组成,由于超声波传感器的发射距离与其两端所加的电压成正比,因此要求电路要产生足够大的驱动电压,其基本原理就是一个比较电路,当输入信号Vi>2.5V时,运放A的输出电压VA=+12V,运放B的输出电压VB=-12V,当输入信号Vi<2.5V时,运放A的输出电压VA="-12V",运放B的输出电压VB=+12V,所以在超声传感器两端得到两个极性完全相反的对称波形,即VB=-VA,所以加在超声波传感器两端的电压V=VA-VB=2VA,其两端的电压可达到24V,从而保证超声波能够发送较远的距离,提高了测量量程。

基于51单片机的HC-SR04超声波测距系统制作

基于51单片机的HC-SR04超声波测距系统制作

基于51单片机带温度补偿的HC-SR04超声波测距系统利用从网上购买的HC-SR04超声波模块制作了一个测距装置,HC-SR04自身不带温度补偿功能,所以加上一个使用DS18B20做的温度测量模块。

整个系统包括:51单片机最小系统,超声波测距模块、温度测量模块、液晶显示模块。

使用了如下主要元器件:元件说明数量STC90C516RC 51单片机 1HC-SR04 超声波测距模块 1DS18B20 温度测量模块 1lcd1602 液晶显示模块 1系统电路图51单片机最小系统单片机型号:STC90C516,晶振:12Mhz。

自己动手焊接的最小系统板。

LCD1602A液晶显示模块:HC-SR04超声波测距模块HC-SR04超声波测距模块可提供2cm至400cm的非接触式距离感测功能,测距精度可达3mm;模块自身包括超声波发射器、接收器与控制电路。

实物正反两面图HC-SR04电气参数:HC-SR04工作原理及说明:1、给Trig触发控制信号IO端口至少10us的高电平信号;2、模块自动发送8个40khz的方波,并自动检测是否有信号返回;3、有信号返回时,Echo回响信号输出端口输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间;4、两次测距时间间隔最少在60ms以上,以防止发射信号对回响信号的影响;超声波时序图单片机控制HC-SR04超声波测距说明:原理图中,单片机的P1.7口接HC-SR04的Trig端口,P1.6口接HC-SR04的Echo端口,超声波在传播时碰到障碍物即返回,HC-SR04模块收到回波信号后Echo口输出一个高电平,单片机检测到高电平后即启动计数器开始计数,直到单片机检测到Echo口变成低电平后结束计数,计数器的计数值乘以单片机计数周期就是超声波从发射到接收的往返时间,即距离S=v*t/2;由于在室温下,声速受温度的影响,其变化关系为:V=334.1+T*0.61(T为当前温度),利用DS18B20温度传感器可以得到环境温度,补偿温度对声速的影响。

基于51单片机的超声波测距毕业论文

基于51单片机的超声波测距毕业论文
Key Words:Ultrasonic wave;One-chip computer; Rangefinding; AT89C51
目 录
代做本论文毕业设计实物。
代做专科、本科各个专业毕业论文。
代做电子、机械类专业毕业设计。
完全按照毕业设计指导书做,指导毕业答辩。
淘宝交易:
1.3
单片机编程产生超声波,在系统发射超声波的同时利用定时器的计数功能开始计时,接收到回波后,接收电路输出端产生的负跳变在单片机的外部中断源输入口产生一个中断请求信号,响应外部中断请求,执行外部中断服务子程序,停止计时,读取时间差,计算距离,然后通过软件译码,将数据输出P0、P1和P2口显示。
程序流程图如图1-8,(a)为主程序流程图,(b)为定时中断子程序流程图,(c)为外部中断子程序流程图。
表1-1 声速与温度的关系
温度(℃)
-30
-20-100102030100
声速(m/s)
313
319
325
323
338
344
349
386
波速确定后,只要测得超声波往返的时间t,即可求得距离S。其系统原理框图如图1-1所示。
图1-1 超声波测距系统框图
单片机AT89C51发出短暂的40kHz信号,经放大后通过超声波换能器输出;反射后的超声波经超声波换能器作为系统的输入,锁相环对此信号锁定,产生锁定信号启动单片机中断程序,读出时间t,再由系统软件对其进行计算、判别后,相应的计算结果被送至LED数码管进行显示。
在下一节里,我们将详细介绍超声波测距仪的各部分电路的设计思路及方法。
1.2
1.2.1
由单片机AT89C51编程产生40kHz的方波,由P3.6口输出,再经过放大电路,驱动超声波发射探头发射超声波。发射出去的超声波经障碍物反射回来后,由超声波接收头接收到信号,通过接收电路的检波放大、积分整形及一系列处理,送至单片机。单片机利用声波的传播速度和发射脉冲到接收反射脉冲的时间间隔计算出障碍物的距离,并由单片机控制显示出来。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一设计题目基于51单片机的超声波测距二设计者姓名班级学号组号三、设计思路及框图、原理图任务:以单片机为核心,设计并制作一超声波测距系统基本要求:利用时间差测距,不考虑温度变化用数码管显示测试结果工作频率:450kHz测距范围:0.5~10米测试精度:10%发挥部分尽量增大测控范围,提高测试精度1.系统的硬件结构设计1.1. 超声波发生电路发射电路主要由反相器74LS04和超声波发射换能器T构成,单片机P1.0端口输出的450kHz的方波信号一路经一级反向器后送到超声波换能器的一个电极,另一路经两级反向器后送到超声波换能器的另一个电极,用这种推换形式将方波信号加到超声波换能器的两端,可以提高超声波的发射强度。

输出端采两个反向器并联,用以提高驱动能力。

上位电阻R1O、R11一方面可以提高反向器74LS04输出高电平的驱动能力,另一方面可以增加超声波换能器的阻尼效果,缩短其自由振荡时间。

1.2超声波检测接收电路采用集成电路CX20106A为超声波接收芯片。

实验证明用CX20106A接收超声波(无信号时输出高电平),具有很好的灵敏度和较强的抗干扰能力。

适当更改电容C4的大小,可以改变接收电路的灵敏度和抗干扰能力。

1.3 显示电路显示电路主要由74ls273芯片驱动,用PNPC8550三级管进行位选,七段共阳极数码管显示。

2.系统的软件结构设计设计思路主程序中包括温度补偿子程序,计算子程序,显示子程序。

采用汇编编程。

首先进行系统初始化。

其次利用循环产生4个40KHZ的方波,由输出口进行输出,并开始计时。

第三等待中断,若超声波被接收探头捕捉到,那么通过中断可测得超声波在环境中的传播时长。

第四进行计算,求得测距仪到被测物的距离。

第五进行距离显示。

四.工作原理描述超声波发生器发出的超声波以速度V在空气中传播,至被测物体时反射并返回至接收器,测得其往返时间为T,则与被测物体的距离为S = VT/2.因此次设计题目不要求考虑温度变化对V的影响,故设V是一定的,s=340t/2.在此采用AT89C52单片机为控制器,用数码管显示测试结果,超声波驱动信号用单片机定时器。

五.器件清单序号器件型号封装数量1 单片机AT89C52DIP 12 反相器74LS043 集成电路CX20106A4 74ls2735 数码管CON106 三极管PNPC855037 电阻 4.7K 48 200k22k1k 2 按键开关switch 1 晶振12MHz 1电容 3.3uf 2330pf 10.056uf 133pf 20.1uf 1附录程序清单VOUT EQU P1.0TEMP1 EQU 36HTEP1 EQU 37HDQ EQU P1.7FLAG1 EQU 38HORG 0000HJMP STARTORG 0003HJMP PINT0;************主程序****************** START:MOV P3,0FFHMOV P0,0FFHMOV P1,0FFHMOV P2,0FFHMOV TMOD,#01HMOV TH0,#00HMOV TL0,#00HCLR IE0SETB PX0SETB EASETB EX0CLR IT0MOV R4,#4SETB TR0k: CPL P1.0NOPNOPNOPNOPNOPNOPNOPNOPNOPDJNZ R4,KJNB IE0,$LCALL TEMPLCALL GET_TEMPERLCALL CHANGELCALL WORKLCALL DISPLAY1LJMP STARTPINT0:CLR TR0CLR EX0MOV 30H,TL0MOV 31H,TH0RETITEMP: SETB DQNOPCLR DQMOV R0,#0FBH ;给延时程序赋初值TSR1: DJNZ R0,TSR1 ;延时SETB DQMOV R0,#25H ;给延时程序赋初值TSR2: JNB DQ ,TSR3 ; S18B20是否存在,存在就跳转到TSR3DJNZ R0,TSR2 ;不存在等待TSR3: SETB FLAG1 ;置标志位,表明DS18B20存在;CLR P2.0 ;二极管指示AJMP TSR5TSR4: CLR FLAG1LJMP TSR7TSR5: MOV R0,#06BHTSR6: DJNZ R0,TSR6 ;延时TSR7:SETB DQ ;表明不存在RET********读转换后的温度值********* GET_TEMPER:SETB DQLCALL TEMPJB FLAG1,TSS2RET ;若不存在则返回TSS2: MOV A,#0CCH ;跳过ROMLCALL WRITE_18B20MOV A,#44H ;发出温度转换命令LCALL WRITE_18B20LCALL TEMPMOV A,#0CCH ;跳过ROMLCALL WRITE_18B20MOV A,#0BEH ;发出读温度换命令LCALL WRITE_18B20LCALLREAD2_18B20 ;读两个字节的温度RET; *******写ds18b20汇编程序******* WRITE_18B20:MOV R2,#8CLR CWR1:CLR DQMOV R3,#6DJNZ R3,$RRC AMOV DQ,CMOV R3,#23DJNZ R3,$SETB DQNOPDJNZ R2,WR1SETB DQRET; **读18B20程序,读出两个字节的温度** READ2_18B20:MOV R4,#2 ;低位存在29 H,高位存在28HMOV R1,#29HRE00: MOV R2,#8RE01: CLR CSETB CNOPNOPCLR DQNOPNOPNOPSETB DQMOV R3,#7DJNZ R3,$MOV C,DQMOV R3,#23DJNZ R3,$RRC ADJNZ R2,RE01MOV @R1,ADEC R1DJNZ R4,RE00RET; ****读出的温度进行数据转换******** CHANGE: MOV A,29H ;MOV C,28H.0 ;将28H中的最低位移入CRRC AMOV C,28H.1RRC AMOV C,28H.2RRC AMOV C,28H.3RRC AMOV 29H,ALCALL CONVERSERET;* ************DISPLAY****** CONVERSE: MOV A,29H;将29H中的十六进制数转换成10进制MOV DPTR,#TABLEMOVC A,@A+DPTRMOV TEMP1,ATABLE: DB 165D,165D,165D,166D,166D,166D,167D,16 7D,167D,167DDB168D,168D,168D,169D,169D,169D,170D,17 0D,170D,171DDB171D,171D,172D,172D,172D,173D,173D,17 3D,174D,174DDB 174D,174D,175D,175D,175DRET;* ******计算子程序*********WORK: ; MOV PSW, #18h ;选择3区R 系列寄存器MOV R3, 31HMOV R2, 30HMOV R1, #00DMOV R0, TEMP1LCALL MUL2BY2MOV R3, #27HMOV R2, #10HLCALL DIV4BY2LCALL HBCDRET*两字节无符号数乘法程序*; R7R6R5R4 <= R3R2 * R1R0 速度X时间/2MUL2BY2: CLR AMOV R7, AMOV R6, AMOV R5, AMOV R4, AMOV 46H, #10H MULLOOP1: CLR CMOV A, R4RLC AMOV R4, AMOV A, R5RLC AMOV R5, AMOV A, R6RLC AMOV R6, AMOV A, R7RLC AMOV R7, AMOV A, R0RLC AMOV R0, AMOV A, R1RLC AMOV R1, AJNC MULLOOP2MOV A, R4ADD A, R2MOV R4, AMOV A, R5ADDC A, R3MOV R5, AMOV A, R6ADDC A, #00HMOV R6, AMOV A, R7ADDC A, #00HMOV R7, AMULLOOP2: DJNZ 46H, MULLOOP1RET* 四字节/两字节无符号数除法程序* ;R7R6R5R4/R3R2=R7R6R5R4(商)...R1R0(余数)/10000DIV4BY2: MOV 46H, #20HMOV R0, #00HMOV R1, #00H DIVLOOP1: MOV A, R4RLC AMOV R4, AMOV A, R5RLC AMOV R5, AMOV A, R6RLC AMOV R6, AMOV A, R7RLC AMOV R7, AMOV A, R0RLC AMOV R0, AMOV A, R1RLC AMOV R1, ACLR CMOV A, R0SUBB A, R2MOV B, AMOV A, R1SUBB A, R3JC DIVLOOP2MOV R0, BMOV R1, A DIVLOOP2: CPL CDJNZ 46H, DIVLOOP1MOV A, R4RLC AMOV R4, AMOV A, R5RLC AMOV R5, AMOV A, R6RLC AMOV R6, AMOV A, R7RLC AMOV R7, ARET;***************************** ; ;十六进制双字节转三字节十进制; ;***************************** ;HBCD:MOV A,R5MOV R6,AMOV A,R4MOV R7,AHB2: CLR AMOV R3,AMOV R4,AMOV R5,AMOV R2,#10HHB3: MOV A,R7RLC AMOV R7,AMOV A,R6RLC AMOV R6,AMOV A,R5ADDC A,R5DA AMOV R5,AMOV A,R4ADDC A,R4DA AMOV R4,AMOV A,R3ADDC A,R3MOV R3,ADJNZ R2,HB3MOV A,R5ANL A,#0FHMOV 40H,AMOV A,R5ANL A,#0F0HSW AP AMOV 41H,AMOV A,R4MOV 42H,ARET;************************************ ; 显示子程序;************************************ DISPLAY1:MOV DPTR,#TABLE1MOV R0,#4DP1:MOV R1,#250LOOP:MOV A,40H ;显示低位MOVC A,@A+DPTRMOV P0,ACLR P1.4SETB P1.4CLR P1.4CLR P2.5ACALL DELAY1SETB P2.5MOV A,41H;显示中位MOVC A,@A+DPTRMOV P0,ASETB P1.4CLR P1.4CLR P2.6ACALL DELAY1SETB P2.6MOV A,42H ;显示高位JZ LMOVC A,@A+DPTRMOV P0,ASETB P1.4CLR P1.4CLR P2.7L:ACALL DELAY1SETB P2.7DJNZ R1,LOOPDJNZ R0,DP1RETTABLE1:DB 0C0H,0F9H,0A4H,0B0H,99HDB 92H,82H,0F8H,80H,90H DELAY1:MOV R7,#80DJNZ R7,$RETDELAY:MOV R5,#100D: MOV R6,#150DJNZ R6,$DJNZ R5,DRETEND。

相关文档
最新文档