资源描述:
《51单片机超声波测距离(带温度补偿)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、超声波模块原理图:发射接收原理图PCB:51单片机原理图:软件部分C语言程序:/*====================================================================调试要求:1.MCU:AT89S52芯片或AT89C522.晶振:12MHz调试注意:本程序带温度补偿,采用DS18B20测量温度1.LCD1602液晶屏有显示后,才接入超声波模块。2.注意超声波模块电源的极性。不清楚请参好淘宝的电路图3.没有选用频率为12MHz晶振,用了别的频率晶振,单片机
2、定时器的测量值与发出的40KHz频率脉冲不对。4.使用者经常误发出20KHZ脉冲当40KHZ脉冲。(40KHz频率脉冲,周期25us,占空比为50%=12.5us)5.如果是用开发板调超声波模块,请检查开发板上的电路是否与超声波模块的控制脚复用了,若复用了,请通过跳线分开发板上的电路。6如果使用的是万用板,请确定单片机的复位电路和晶振电路是否正常,同时单片机的31脚(EA)记得接高电平。=============================================================
3、=======*/#include#include#defineucharunsignedchar#defineuintunsignedint//===============================LCD1602接口定义=====================/*-----------------------------------------------------
4、DB0-----P2.0
5、DB4-----P2.4
6、RW-------P0.1
7、
8、DB1
9、-----P2.1
10、DB5-----P2.5
11、RS-------P0.2
12、
13、DB2-----P2.2
14、DB6-----P2.6
15、E--------P0.0
16、
17、DB3-----P2.3
18、DB7-----P2.7
19、注意,P0.0到P0.2需要接上拉电阻---------------------------------------------------=============================================================*/#defineLCM_DataP2/
20、/数据接口#defineBusy0x80//用于检测LCM状态字中的Busy标识sbitLCM_RW=P0^1;//读写控制输入端,LCD1602的第五脚sbitLCM_RS=P0^2;//寄存器选择输入端,LCD1602的第四脚sbitLCM_E=P0^0;//使能信号输入端,LCD1602的第6脚//===============================超声波模块定义========================sbitRemPin=P3^2;//接收端(这个不能修改,因为是外部中断(INT0
21、)的引脚)sbitTxPin=P3^1;//发射端//***********************************************************************//ds18b20数字温度传感器控制引脚定义sbitdq_ds18b20=P3^3;//定义控制DS18B20//***********************************************************************//LCD显示模块的函数声明voidWriteDataLCM
22、(ucharWDLCM);//LCD模块写数据voidWriteCommandLCM(ucharWCLCM,BuysC);//LCD模块写指令ucharReadDataLCM(void);//LCD模块读数据ucharReadStatusLCM(void);//读LCD模块的忙标voidDisplayOneChar(ucharX,ucharY,ucharASCII);//在第X+1行的第Y+1位置显示一个字符voidDisplayListChar(ucharX,ucharY,uchardelayms,uch
23、arcode*DData);voidDisplayCursorPos(ucharX,ucharY);voidLCMInit(void);voidDisplayIntData(ucharX,ucharY,intZhengShu,ucharDigit,ucharXiaoShu);voidDisplayCharData(ucharX,ucharY,ucharZiFu);//***********************