标题:
STC15单片机超声波测距+LCD1602显示+串口调试+程序详细解释
[打印本页]
作者:
远小刘
时间:
2018-10-30 10:10
标题:
STC15单片机超声波测距+LCD1602显示+串口调试+程序详细解释
基于单片机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 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
什么都不会小白
时间:
2019-6-4 14:40
代码有错误?
作者:
lipengkun
时间:
2019-8-7 20:22
程序有错误,审核不合格
作者:
lipengkun
时间:
2019-8-7 20:23
什么都不会小白 发表于 2019-6-4 14:40
代码有错误?
有错误、
作者:
吴亦几
时间:
2020-3-28 19:36
代码好像有问题
作者:
lhqsbz
时间:
2022-10-24 19:09
不错不错,下载下来学习一下。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1