简介
本过程贴记录测距仪实现过程中调试LCD1601显示数据以及驱动HC-SRR04的实现过程。
一、显示部分

由于LCD1601使用的是并口,并且是工作于5V电源的,而FRDM-MCXA153开发板的GPIO、外设默认是3.3V的逻辑电平,因此并口模式下要考虑并口的接口的电平匹配问题。所以这里选择PCF8574T模块,将并口通讯转为I2C通讯,减少了接口引脚,测试上也更方便。

程序上,参照Arduino的处理方式,以及LCD1601的文档,在程序中加入lcd601.h文件,实现以下几个关键函数:
// 初始化
void LCD_Init(void);
// 设置光标位置
void LCD_SetCursor(uint8_t col, uint8_t row);
// 显示字符串
void LCD_Print(char *str);
// 清除屏幕
void LCD_Clear(void);
并在主程序中调用、测试。

二、传感器部分

本次活动使用的是HC-SR04,工作电源同样是5V。这种传感器的特点是,提供触发信号后,等待返回信号的电平变化,根据脉冲的高电平的持续时间计算距离。而在这个信号是微秒级的,因此使用FRDM-MCXA153驱动时,考虑使用CTimer0外设捕捉回波信号的电平变化。
在CTimer0的中断处理中,要注意记录采集检测到传感器的回波信号ECHO的上升沿计数和下降沿计数。这两个计数值的差,乘以CTimer0的计数脉冲宽得到时间差,用这个差乘以声波在空气中的速度,就得到的距离。
CTimer0的中断处理流程

设计程序一开始的时候,打算使用CTimer的两个通道干活;一个检测上升沿,一个检测下降沿。但搞了半天没成功,就改用一个通道分时检测上升沿和下降沿。因为CTimer的工作脉冲时间足够短,远远小于超声波的回波脉冲宽度,所以问题不大。
测试过程中,为了防止电平匹配问题,一开始使用一个GPIO口(P3.0)模拟输出ECHO信号,因此要将P3.0和P1.8短接。P1.8是CTimer0的输入检测通道。这一步通过后,换做传感器。接线后发现,电平匹配的问题没出现,可以直接使用,程序都不用改。完美!
我要赚赏金
