一设计题目基于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 单片机AT89C52 DIP 12 反相器74LS043 集成电路CX20106A4 74ls2735 数码管CON106 三极管PNPC8550 37 电阻 4.7K 48 200k22k1k 2 按键开关switch 1 晶振12MHz 1电容 3.3uf 2330pf 10.056uf 133pf 20.1uf 1 附录程序清单VOUT EQU P1.0 TEMP1 EQU 36H TEP1 EQU 37HDQ EQU P1.7 FLAG1 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,DRET END。