親測可用,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)
2018-1-18 15:40 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|