亲测可用,51单片机测试超声波模块
单片机源程序如下:
- #include<reg51.h>
- #include<intrins.h>
- typedef unsigned char uint8;
- typedef unsigned int uint16;
- sbit Trig=P3^3;//触发引脚定义
- sbit Echo=P3^2;//测量引脚定义
- uint16 distance;//定义全局变量
- /******************************************
- 延时让Trig引脚产生大于10us的脉冲
- ********************************************/
- void delay()
- {
- uint8 i;
- for(i=0;i<100;i++);
- }
- //初始化
- void init()
- {
- EA=1;//开总中断
- IT0=0;//外部中断0,低电平触发
- TMOD|=0x01;//定时器0 工作模式1
- TH0=0;
- TL0=0;
- TR0=0;
- }
- //串口设置
- void UART_init()
- {
- SCON=0x50;
- TMOD=0x20;
- TH1=0xFD;
- TL1=0xFD;
- TR1=1;
- }
- //发送一个字节
- void UART_send_byte(uint8 dat)
- {
- SBUF=dat;
- while(TI==0);
- TI=0;
- }
- //发送一组测得的distance
- void UART_send_dat(uint16 temp)
- {
- UART_send_byte((temp/10000)%10 + '0');
- UART_send_byte((temp/1000)%10 + '0');
- UART_send_byte((temp/100)%10 + '0');
- UART_send_byte((temp/10)%10 + '0');
- UART_send_byte('.');
- UART_send_byte(temp%10 + '0');
- UART_send_byte('c');
- UART_send_byte('m');
- }
- //主函数
- main()
- {
- UART_init();//初始化
- init(); //初始化
- Trig=0;//先把引脚拉低
- while(1)//进入循环
- {
- Trig=1;
- delay();//产生脉冲
- Trig=0;
- while(Echo==0);//等待引脚被拉高
- TR0=1;//打开定时器0
- EX0=1;//打开中断
- while(TH0<250);//正在测量数据,需要等待
- TR0=0;
- TL0=0;
- TH0=0;
- UART_send_dat(distance);//向串口发送测得的distance
- UART_send_byte('\r');
- UART_send_byte('\n');
- }
- }
- void extra_interrupt() interrupt 0 //外部中断0
- {
- distance=(256*TH0+TL0)*0.184;//测得最小精度位mm(晶振为11059200Hz)
- //P0=Echo;
- EX0=0;//关闭中断
- }
复制代码
所有资料51hei提供下载:
AJ-SR04M测试程序(51).zip
(24.05 KB, 下载次数: 60)
|