功能介绍:采用stm32单片机作为主控CPU,采用LD303-24G雷达模块来进行测量距离,OLED显示屏显示测量距离和报警距离,可以通过按键设置报警值,当测量值低于设置值,蜂鸣器则产生报警,如果高于设置值,蜂鸣器停止报警,文末有资料分享:
14-基于stm32单片机毫米波雷达测距报警系统(程序+原理图+元器件清单全套资料)
程序部分展示,有中文注释,新手容易看懂
u16 hextoDec(u8 hex)
{
u16 sum=0,mul=1;
int i,r;
int count=0;
do{
r=hex%16;
for(i=0;i<count;i++)
mul*=16;
mul*=r;
sum+=mul;
mul=1;
count++;
}while(hex/=16);
return sum;
}
int main(void)
{
u8 time[15];
u16 nian,buf1=30;
u8 key;u8 Res;
SystemInit(); //系统时钟初始化为72M SYSCLK_FREQ_72MHz
delay_init();
TIM4_PWM_Init(7199,0); //初始化PWM
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2
uart_init(115200); //串口初始化为9600
ZYSTM32_brake(500);
OLED_Init();
OLED_ColorTurn(0);//0正常显示,1 反色显示
OLED_DisplayTurn(0);//0正常显示 1 屏幕翻转显示
OLED_Clear();
OLED_ShowString(100,8,"CM",24,1);OLED_ShowString(10,8,"JL=",24,1);
OLED_ShowString(100,32,"CM",24,1);OLED_ShowString(10,32,"YZ=",24,1);
OLED_Refresh();
KEY_Init();
delay_ms(100);
LED_Init();
led1=1;
while(1)
{
if(KEY0==0)//按键设置+
{
buf1++;
}
if(KEY1==0)//按键设置-
{
buf1--;
if(buf1<1) buf1=1;
}
if(buf[3]=0xD3)//读到标志位
{
nian=hextoDec(buf[5]);//获取距离值
}
if(nian<buf1) led1=~led1;//距离小于设置值 闪缩报警
else led1=1; //否则 停止闪烁报警
OLED_ShowNum(56,8,nian,3,24,1);//显示距离
OLED_ShowNum(56,32,buf1,3,24,1);//显示设置值
OLED_Refresh();
}
}
下面是原理图文件展示: