基于單片機STC15單片機的超聲波測距,采用超聲波模塊,
運用定時器計算波時,
采用串口加以調試,
運用LCD1602顯示
精確0.01m
測量距離在此范圍內:4m--0.01m
大于4m后,將產生誤差。
詳細請下載附件
單片機源程序如下:
- #include "super.h"
- #include<intrins.h>
- #include "stdio.h"
- float High_Time=0; //高電平時間
- float Ultrasonic_Distance=0;//超聲波測試的距離
- void Delay15us() //@24.000MHz
- {
- unsigned char i;
- _nop_();
- _nop_();
- i = 87;
- while (--i);
- }
- void Timer0Init(void) //20微秒@24.000MHz
- {
- AUXR &= 0x7F; //定時器時鐘12T模式
- TMOD &= 0xF0; //設置定時器模式
- TL0 = 0x00; //設置定時初值
- TH0 = 0x00; //設置定時初值
- TF0 = 0; //清除TF0標志
-
- TR0 = 0; //定時器0開始計時
- ET0 = 0;
- EA = 1; //使能
- }
- //void Timer1Init(void) //20毫秒@24.000MHz
- //{
- // AUXR &= 0xBF; //定時器時鐘12T模式
- // TMOD &= 0x0F; //設置定時器模式
- // TL1 = 0xC0; //設置定時初值
- // TH1 = 0x63; //設置定時初值
- // TF1 = 0; //清除TF1標志
- // TR1 = 1; //定時器1開始計時
- //
- // ET1 = 1;
- // EA = 1;
- //}
- //void UartInit(void) //9600bps@24.000MHz
- //{
- // SCON = 0x50; //8位數據,可變波特率
- // AUXR |= 0x01; //串口1選擇定時器2為波特率發生器
- // AUXR &= 0xFB; //定時器2時鐘為Fosc/12,即12T
- // T2L = 0xCC; //設定定時初值
- // T2H = 0xFF; //設定定時初值
- // TI=1; //發送
- // RI=0; //接收
- // ES=0;
- // AUXR |= 0x10; //啟動定時器2
- //}
- void Ultrasonic_Dispose()//超聲波處理
- {
- Trig=1;
- Delay15us();
- Trig=0;
- while(!Echo);
- TL0=0;
- TH0=0;
- TR0=1;
- while(Echo);
- TR0=0;
- High_Time=(TH0*256+TL0)/2; //高電平時間High_time毫秒
- Ultrasonic_Distance=High_Time*0.017;//00.0
- }
- void Ultrasonic_Display()//超聲波顯示處理
- {
- Ultrasonic_Dispose();//超聲波處理
- Ultrasonic_Distance*=10;
- string2[4] = (unsigned long)Ultrasonic_Distance/1000+'0';
- string2[5] = (unsigned long)Ultrasonic_Distance/100%10+'0';
- string2[6] = (unsigned long)Ultrasonic_Distance/10%10+'0';
- string2[8] = (unsigned long)Ultrasonic_Distance%10+'0';
-
- LCD_Write_Char(4,1,string2[4]);
- LCD_Write_Char(5,1,string2[5]);
- LCD_Write_Char(6,1,string2[6]);
- LCD_Write_Char(8,1,string2[8]);
- printf("%f\n",Ultrasonic_Distance/10);
- }
- //void Timer1_Rountine(void) interrupt 3
- //{
- // static unsigned int t;
- // t++;
- // if(t==25)
- // {
- // t=0;
- // Ultrasonic_Dispose();
- // }
- //
- //}
復制代碼- #include "main.h"
- void main(void)
- {
- GPIO_Init();//IO初始化
- Timer0Init();
- // Timer1Init();
- // UartInit();
- LCD_Init();//1602初始化
- while(1)
- {
-
- Ultrasonic_Display();//超聲波顯示處理
- delayMS(500);
- }
- }
復制代碼
全部資料51hei下載地址(提醒:代碼有錯誤,大家不要下載):
超聲波測距 串口顯示 詳細解析.rar
(58.86 KB, 下載次數: 171)
2018-10-30 09:02 上傳
點擊文件名下載附件
|