基于S3C2410的超声波测距

本文记录了一次使用S3C2410单片机配合HC-SR04超声波模块进行测距的实践过程。文中详细介绍了硬件接线、程序代码以及遇到的问题与解决方案。通过液晶屏和串口输出距离值,程序主要依赖看门狗定时器进行计时。虽然简单,但适合初学者参考,包含了单片机初始化、超声波模块使用和液晶屏显示的相关知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、概述

  这是本学期的一次小作业,用的学校的老旧的S3C2410试验箱,外接一个超声波模块,实现测距。对于这个题目,只要学过一些单片机方面的知识,那么这应该是一个很简单的任务,因为操作系统不是必须的,所以就当单片机用就很简单了。既然很简单,那为什么我还要记录一下呢,因为还是会有人觉得不太简单的,同时也因为不想码代码了,写一下这个记录一下,说不定还能帮到别人。

二、超声波模块

  超声波模块就很常见了,使用的是HC-SR04,四个引脚,VCC,TRIG,ECHO,GND。记得要使用5V供电,一般的超声波模块都是5V供电,如果使用3.3V供电,TRIG引脚的电平信号会不正常,开始没注意使用3.3V,结果怎么也不正常,后来换成5V就好了,要注意。
  这里放两张图,网上扒的,该有的还是要有。
在这里插入图片描述

在这里插入图片描述

三、接线引脚

  超声波模块引脚对应的S3C2410的引脚接线。

VCC+5V
TRIGPB1
ECHOPG2
GNDGND

四、程序代码

  这里贴代码。

UINT8T txt[100];
float distance;
int main()
{
	sys_init();		//系统初始化
	timer_init();	//定时器初始化
	lcd_init_app();	//液晶屏初始化
	
	rGPBCON |=(0x01<<2);  //初始化PB1引脚为输出		TRIG
	rGPBUP  |=(0x01<<1);  //不使能上拉
	
	rGPGCON &=~(0x00<<4); //初始化PG2引脚为输入		ECHO
	rGPGUP  &=~(0x00<<2); //使能上拉
	
	Glib_FilledRectangle(330,240,330+160,240+20,WHITE);		//液晶屏局部清屏
	while(1)
	{
		
		rGPBDAT |=(0x01<<1);	//输出拉高  
		delay(150);				//短暂延时发送一定时间的高电平
		rGPBDAT &=~((0x01<<1));	//输出拉低
		
		while((rGPGDAT&0x04)==0);	//等待引脚抬高  PG2
		
		rWTCNT = 0xffff;	//重置计数器值	向下计数模式
		rWTCON |=(0x01<<5);	//开启定时器
		
		while((rGPGDAT&0x04)!=0);	//等待引脚拉低  PG2
		
		rWTCON &=~(0x01<<5);	//关闭定时器
		
		distance = ( (float)(0xffff-rWTCNT)*340*100/2/1000000 );	//距离
		//因为是自动重载向下计数模式,并且重载值为0XFFFF,所以需要用0XFFFF减去计数值
		//声速为340m/s,计数频率为1M,所以需要除2再乘100再除1000000将单位转换为cm
		sprintf((char *)txt,"Distance:%.3fcm ",distance);
		
		uart_printf("%.3fcm",distance);		//串口发送
		
		Lcd_DspAscII8x16(330+12,240+2,BLACK,txt);	//液晶屏显示
		
		delay(1000);	//延时
	}
}

  就这些了,里面有一些液晶屏的代码,因为试验箱上是带液晶屏的,所以在液晶屏上显示出了距离,也通过串口发送了,串口的初始化在sys_init();这个子函数里,使用的串口1。
  代码中有两处while(1)等待程序,是对照着时序图写的,先等待ECHO引脚抬高,之后开始计时,等待引脚拉低后停止计时器,计算距离。只是计算出了理论上的距离值,并没有进行滤波或拟合等操作,因为对于这次那啥来说没什么必要。
  使用的是看门狗定时器,当做普通计时器用了,为什么使用看门狗定时器呢,因为资料例程使用的看门狗定时器,稍作修改就可以使用了,就不用再查手册了,哈哈。定时器不使用中断,直接开启计数读寄存器WTCNT的计数值。这里要注意是向下计数模式,即WTCNT的值是递减的,初始值设置为了0xffff,所以程序中使用0xffff减去WTCNT得到计数值,再计算得出距离值。
  S3C2410的GPIO还是需要看一下手册,有的只能输出,这里放两个寄存器配置图,GPIOB的GPBCON(第一个图)和GPBUP寄存器。
在这里插入图片描述
在这里插入图片描述

  GPIO功能由两个位来配置功能,所以在上面程序中会看到是左移了两位。下面会上传S3C2410的寄存器手册和代码。

五、总结

  就这些东西了,没什么难的东西,能用就行。因为是在那啥期间做的,还是帮别的组做的,所以就更随意了,能用就行。
  代码是在资料的例程中的修改、添加实现的,能用就行。有液晶屏的,没有或者不需要可以屏蔽掉,使用串口观察。
  计算的距离值没有做任何滤波操作,就是计算出一个理论值,能用就行。
  建立S3C2410工程需要安装对应的keil5支撑包,下面会上传一下。
  有的地方说的不是很清楚比如定时器配置部分,到时候可以下载一下工程自己看一下。
  写这个主要是为了记录一下,其中尝试时还是遇到一些问题的,弄好了就记录分享一下,助人助己。当然只是实现了最基本的。

  以上纯属个人经验,并且个人能力也有限,可能出现差错,如有问题请指正,我就改。

  下面上传一下寄存器手册、工程代码和keil支撑包,不需要积分就可以下载,下载链接:
  https://download.youkuaiyun.com/download/wojueburenshu/33182546

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值