/**************************************************************************************
实验现象: 下载程序后,打开串口调试助手,选择CH340对应的串口号,
设置波特率为9600,可实时显示超声波模块测量的距离。
接线说明: 1,STC8A单片机-->HC-SR04超声波模块
P15-->ECHO
P14-->TRIG
5V-->VCC
GND-->GND
注意事项: USB连接线给开发板通电下载程序,STC下载软件中内部IRC时钟选择11.0592MHZ
务必保证超声波模块与前方或上方待测物平行,并且待测物截面够平面积够大
***************************************************************************************/
#include "STC8.H"
#include "intrins.h"
#include "uart.h"
#define MAIN_Fosc 11059200L //定义主时钟
#define uint32 unsigned long
#define uint16 unsigned int
#define uint8 unsigned char
/**********************
引脚别名定义
***********************/
sbit ECHO=P1^5;
sbit TRIG=P1^4;
#define Distance_MAX 700 //HC-SR04模块可检测的最大距离
uint8 code table[] = {"the distance is:"};
uint16 time=0; //测距用时间
uint32 S=0; //测距用距离
bit flag =0; //测距用超出范围标识符
uint8 disbuff[5] ={ 0,0,0,0,0}; //测距定义数组
/**************************************
功能描述:延时函数
入口参数:uint16 x ,该值为1时,延时1ms
返回值:无
***************************************/
void delay_ms(uint16 x)
{
uint16 j,i;
for(j=0;j<x;j++)
{
for(i=0;i<1100;i++);
}
}
/**************************************
功能描述:计算距离并在LCD1602屏上显示
入口参数:无
返回值:无
***************************************/
void Conut(void)
{
time=TH0*256+TL0; //计算出所用总时间
TH0=0; //清零定时器0装载值
TL0=0; //清零定时器0装载值
S=(time*1.7)/100; //算出来实测距离(单位是CM)
if((S>=Distance_MAX)||flag==1)
{
flag=0; //清零测距用超出范围标识符
U1SendString("Distance Overrun\r\n");
}
else
{
disbuff[0]=S%1000/100+0x30;
disbuff[1]='.';
disbuff[2]=S%1000%100/10+0x30;
disbuff[3]=S%1000%100%10+0x30;
disbuff[4]='M';
U1SendString(disbuff);
U1SendString("\r\n");
}
}
/**************************************
功能描述:计数器0初始化函数
入口参数:无
返回值:无
***************************************/
void Timer0Init(void)
{
AUXR &= 0x7F; //定时器0为12T模式
TMOD &= 0xF8; //定时器0设置为定时方式
TMOD &= 0xF7; //定时器0门控位GATE设置为0
TMOD |= 0x01; //设定定时器0为16位不可重装载模式
TL0 = 0; //12T模式下初始装载值
TH0 = 0; //12T模式下初始装载值
ET0 = 1; //使能定时器0的溢出中断允许位
}
/**************************************
功能描述:计数器0中断服务函数
入口参数:无
返回值:无
***************************************/
void timer0_int (void) interrupt 1
{
flag=1; //测距用超出范围标识符置1
}
/**************************************
功能描述:启动HC-SR04模块 (控制控制口发一个10uS以上的高电平)
入口参数:无
返回值:无
***************************************/
void StartModule(void)
{
TRIG=1; //控制模块控制口Trig输出高电平
delay_ms(5); //此延时不可少,需大于10uS
TRIG=0; //控制模块控制口Trig输出低电平
}
/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void main()
{
P1M1 |= 0x30; P1M0 |= 0x30; //设置P1.4和P1.5为准双向口
delay_ms(100); //上电延时
UartInit(); //液晶初始化
U1SendString(table); //显示字符串the distance is:
Timer0Init(); //定时器0初始化
EA=1; //开启总中断
while(1)
{
StartModule(); //启动HC-SR04模块 (控制控制口发一个10uS以上的高电平)
while(!ECHO); //当HC-SR04模块的接收端ECHO为低电平时,程序执行空语句,即等待ECHO端口变为高电平才执行下面的语句
TR0=1; //当HC-SR04模块的接收端ECHO为高电平时,开启定时器0计数
while(ECHO); //若HC-SR04模块的接收端ECHO仍为高电平,程序执行空语句,即等待ECHO端口变为低电平才执行下面的语句
TR0=0; //当HC-SR04模块的接收端ECHO变为低电平时,关闭定时器0
Conut(); //计算距离并在LCD1602屏上显示
delay_ms(80); //80ms延时
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
基于STC8A8K64S4A12-LQFP44单片机HC-SR04超声波测距-串口助手显示实验软件例程源码.rar
共11个文件
c:2个
uvopt:1个
template:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 97 浏览量
2023-05-24
15:11:15
上传
评论
收藏 225KB RAR 举报
温馨提示
基于STC8A8K64S4A12_LQFP44单片机HC-SR04超声波测距-串口助手显示实验软件例程源码 void main() { P1M1 |= 0x30; P1M0 |= 0x30; //设置P1.4和P1.5为准双向口 delay_ms(100); //上电延时 UartInit(); //液晶初始化 U1SendString(table); //显示字符串the distance is: Timer0Init(); //定时器0初始化 EA=1; //开启总中断 while(1) { StartModule(); //启动HC-SR04模块 (控制控制口发一个10uS以上的高电平) while(!ECHO); //当HC-SR04模块的接收端ECHO为低电平时
资源推荐
资源详情
资源评论
收起资源包目录
基于STC8A8K64S4A12_LQFP44单片机HC-SR04超声波测距-串口助手显示实验软件例程源码.rar (11个子文件)
template.M51 13KB
uart.h 378B
template 45KB
template.uvgui.Administrator 132KB
template.uvproj 13KB
template_Target 1.cfg 20B
uart.c 2KB
template.hex 5KB
STC8A8K64S4A12_LQFP44单片机开发板原理图.rar 199KB
main.c 5KB
template.uvopt 6KB
共 11 条
- 1
资源评论
GJZGRB
- 粉丝: 1075
- 资源: 5911
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功