|
我給你來個類似程序參考
- #include <reg52.h>
- #include "usart.h"
- #include "iic.h"
- /*
- 硬件接法:
- GY-53----C51
- PWM_input---P3^7
- C51---FT232
- TX ---RX
- RX ---TX
- 軟件說明:
- 該程序采用PWM進行讀取數據 ,距離=高電平時間(us)/10
- */
- void TIME0_Int(uint32_t BaudRatePrescaler)
- {
- TMOD |= 0x01;//定時器0,工作方式1,16位計數
- TH0 =0;
- TL0 =0;
- ET0 =0;
-
- }
- void delay(unsigned int x)
- {
- while(x--);
- }
- sbit PWM_pin=P3^7;
- int main(void)
- {
- unsigned char raw_data[9]={0};
- unsigned int buf=0,distance=0;
- Usart_Int(9600);
- TIME0_Int();
- while(PWM_pin); //等待拉高
- while(1)
- {
- while(!PWM_pin); //等待拉低,啟動定時
- ET0=1;
- TR0=1;
- while(PWM_pin);//等待拉高,關閉定時
- TR0=0x0;
- ET0=0x0;
- buf=(unsigned int)TH0<<8|TL0; //讀取定時器計數
- distance=(float)buf/110.592*12;//數據轉換為距離,定時器計一次時間為12/11.0592(晶振)us,距離=時間(us)/10
- raw_data[0] =distance>>8;
- raw_data[1] = distance;
- raw_data[2] =2; //模塊默認模式
- send_3out(raw_data,3,0x15);//上傳到上位機
- TH0 =0x0;
- TL0 =0x0;
-
- }
- }
復制代碼
|
|