基于单片机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)
|