基于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课题设计的目的和意义论文设计目的;随着社会的不断地发展,电子测量技术得到了长远的展,超声波的精准测量得到了科技人员的重视和研究。

  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。

相关文档
最新文档