目录
一、主要功能
1、距离测量与LCD显示
2、低于测量阈值,警报模块启动
3、测量距离阈值设置
二、使用步骤
使用LCD1602液晶、按键、蜂鸣器、GP2D12红外传感器,
GP2D12红外传感器测量范围 20-150 因非线性测量存在误差。
系统运行后,LCD1602显示红外测量距离值和阈值;
当测量距离值低于阈值,报警器启动。
按键调节阈值。
三、硬件资源
1、32单片机核心模块
2、按键模块
3、GP2D12红外传感器
4、蜂鸣器模块
5、LCD1602显示模块
四、软件设计
#include "delay.h"
#include "sys.h"
#include "1602.h"
#include "key.h"
#include "ADC.h"
#include "Tool.h"
u16 Infrared_value; //距离检测值
u16 Infrared_value_L=25; //距离检阈值
u8 Set_num=0; //设置标志位
u8 Key_num=0;//按键值
void key_san(void);//按键判断函数
void Work(void);//工作运行函数
void Delay(int num)
{
while(num--) ;
}
void display_data(void)///显示
{
LcdWriteCom(0x0C); //取消光标闪烁
LcdWriteCom(0x80+7); //第一行
LcdWriteData(Infrared_value%1000/100+0x30);
LcdWriteData(Infrared_value%100/10+0x30);
LcdWriteData(Infrared_value%10+0x30);
LcdWriteCom(0x80+0x40+7); //第二行
LcdWriteData(Infrared_value_L%1000/100+0x30);
LcdWriteData(Infrared_value_L%100/10+0x30);
LcdWriteData(Infrared_value_L%10+0x30);
}
int main()
{
delay_init(); //延时函数初始化
LCD1602_Init(); //lcd函数初始化
ADC1_Init(); //adc函数初始化
TOOL_Init(); //工具初始化
KEY_Init(); //按键函数初始化
while(1)
{
key_san();//按键判断函数
middleAverageFilter();//获取ad值
Work();//工作运行函数
display_data();///显示
}
}
void Work()//工作运行函数
{
if(Key_num==0)
{
if(Infrared_value<Infrared_value_L)//低于距离
BEEP = 0;//开启
else
BEEP = 1;//关闭
}
else
BEEP = 1;//关闭
}
void key_san()//按键判断函数
{
Key_num=KEY_Scan(0);
switch(Key_num)
{
case 1://设置按键
if(Set_num==1)
Set_num = 0 ;
else
Set_num++;
break;
case 2://加
if(Set_num==1)
{
if(Infrared_value_L<100) Infrared_value_L++;
}
break;
case 3://减
if(Set_num==1)
{
if(Infrared_value_L>20) Infrared_value_L--;
}
break;
case 4:
break;
}
if(Set_num==1)
{
LcdWriteCom(0x80+0x40+15); //第二行
LcdWritestr("<");
}
else if(Set_num==0)
{
LcdWriteCom(0x80+0x40+15); //第二行
LcdWritestr(" ");
}
}
五、实验现象
B站演示视频:

联系作者
作者B站链接:https://space.bilibili.com/3493294220773802
专注于51单片机、STM32、Proteus、物联网软件开发,PCB设计。