基于51单片机 超声波测距 倒车雷达
51单片机最小系统电路+LCD1602+蜂鸣器报警电路+按键电路+超声波模块+电源电路
实现液晶显示距离 超设置数值报警 按键可修改数值
可加蓝牙模块 用户可以通过手机端查看距离数据
可加温度显示DS18B20显示温度
可加数码管替代LCD1602
可加DS1302时钟模块 显示年月日 星期 时分秒
可加超声波模块 测量三个四个方向距离
等等功能均可添加设计
以上思路均可参考
源代码? 原理图? ?开题报告? 参考论文 答辩技巧 等均可提供
贴部分源码?
/*------------------------------------------------
主函数
/* QQ 2696472421
时间;2022年3月30日 23:12:11*/
------------------------------------------------*/
main()
{
float temp; //距离变量
uchar i = 0,key;
unsigned int S_MIN = 20;
int wendu = 0;
char xdata SEND_BUF[20];
TIM0init(); //初始化定时器0
Init_Timer1(); //定时器初始化
lcd_init(); //初始化LCD
lcd_write_str(0,0,"D= cm ");
lcd_write_str(0,1,"V= cm/s ");
uart_init(9600);
while(1)
{
temp = Get_S();//获取距离
S = temp > 400? 400 : temp;
TR1 = 0;
LCD1602_write_float(2,0,(long)(100*S),5,3);//显示距离
LCD1602_write_float(2,1,(long)(100*SPEED),5,3);//显示速度
TR1 = 1;
DelayMs(500); //延时决定采样速度
key = KEY_Scan(0); //读取按键值
if(key == 1)//设置报警距离
{
lcd_clear();
key = 0;
while(key != 1)
{
key = KEY_Scan(0);//读取按键值
lcd_write_str(0,0,"Set the distance");
lcd_write_str(0,1,"min: cm");
if(key == 2 && S_MIN < 400) S_MIN++;//最大到400
if(key == 3 && S_MIN > 3) S_MIN--;//最小到3
//显示
lcd_write_char(4,1,S_MIN / 100 + 0x30);
lcd_write_char(5,1,S_MIN % 100 /10 + 0x30);
lcd_write_char(6,1,S_MIN % 10 + 0x30);
DelayMs(50);
}
key = 0;
lcd_write_str(0,0,"D= CM ");
lcd_write_str(0,1,"V= cm/s ");
}
if(sendFlag)
{
sendFlag=0;
sprintf(SEND_BUF,"距离: %6.2fcm\r\n",S);
uart_send(SEND_BUF,0xFF);
sprintf(SEND_BUF,"速度: %6.2fcm/s\r\n",SPEED);
uart_send(SEND_BUF,0xFF);
}
if(S < S_MIN)//低于安全距离,蜂鸣器报警
beep = 0;
else
beep = 1;
}
}
|