基于51单片机的汽车测速仪表红外避障车辆高速测速方案原理图设计

系统的功能分析

链接:https://pan.baidu.com/s/1ybZ6iI7bgalPX0oNgtwVuQ
提取码:grlz

本设计由STC89C52单片机电路+红外避障传感器电路+LCD1602液晶显示电路+蜂鸣器报警电路+电源电路组成。
1、通过2个红外避障传感器检测人体反应的开始和结束,LCD1602液晶显示人体反应的速度。中间距离计算默认1m。
2、第一个红外避障传感器检测到障碍物时,蜂鸣器鸣叫一声作为提示。

本系统具体框图

在这里插入图片描述
原理图:
在这里插入图片描述
蜂鸣器报警电路(低电平有效)设计
有源蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。本系统所采用的报警模块为5V有源蜂鸣器模块,电路中采用三极管9012来驱动,只要单片机控制引脚为低电平,蜂鸣器就会鸣叫报警,反之则不鸣叫,可以通过控制单片机引脚方波输出形式控制蜂鸣器的鸣叫方式。电阻为限流电阻,保护作用。
在这里插入图片描述
LCD1602液晶显示模块电路设计
LCD显示器分为字段显示和字符显示两种。其中字段显示与LED显示相似,只要送对应的信号到相应的管脚就能显示。字符显示是根据需要显示基本字符。本设计采用的是字符型显示。系统中采用LCD1602作为显示器件输出信息。与传统的LED数码管显示器件相比,液晶显示模块具有体积小、功耗低、显示内容丰富等优点,而且不需要外加驱动电路,现在液晶显示模块已经是单片机应用设计中最常用的显示器件了。LCD1602可以显示2行16个汉字。
一、LCD1602主要技术参数如下:
(1)显示容量为16×2个字符;
(2)芯片工作电压为4.5~5.5V;
(3)工作电流为2.0mA(5.0V);
(4)模块最佳工作电压为5.0V;
(5)字符尺寸为2.95×4.35(W×H)mm。
二、LCD1602采用标准的14脚,其接口的引脚说明如下:
(1)第1脚:VSS为地电源。
(2)第2脚:VDD接5V正电源。
(3)第3脚:V0为液晶显示器对比度调整端。
(4)第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
(5)第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。
(6)第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
(7)第7~14脚:D0~D7为8位双向数据线。
(8)第15~16脚:空脚
在这里插入图片描述

系统软件设计

在这里插入图片描述

 #include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include<stdio.h>
#include "1602.h"
#include "delay.h"

sbit buzzer = P1^0;	   //接口定义
sbit hot1 = P3^3;
sbit hot2 = P3^2;

char dis0[16];			   //打印数组初始化
char dis1[16];			   //打印数组初始化

unsigned long time_20ms=0;		   //定时器计数
bit disFlag = 0 ;//定时更新显示

unsigned long suCount = 0;//计数 
float   sudu ;//速度

void Init_Timer0(void);				//函数声明

void main (void)
{     

	Init_Timer0();        //定时器0初始化
	             
	LCD_Init();           //初始化液晶
	DelayMs(20);          //延时有助于稳定
	LCD_Clear(); 

	LCD_Write_String(0,0,"my desiger! ");
	sprintf(dis0,"sudu:  0.0 km/h  ",sudu);//打印
	TR0=0; 
	while (1)         //主循环
	{

	    if(hot1 == 0)//按键触发 上端
	    {
		  buzzer = 0;	  //打开蜂鸣器
	      suCount = 0;	 //计数开始
	      TR0=1;  //开启定时器
	    }
		else
		{
		  buzzer = 1;
		}
    
	    if(hot2 == 0)//按键触发 下端
	    {
	      TR0=0;  //停止定时器
	      sudu = 3.6/((float)(suCount*5)/1000); //设置距离为 1m 
	      if(sudu > 999) sudu = 999;//速度误操作
	      sprintf(dis0,"sudu:%5.1f km/h  ",sudu);//打印
	      LCD_Write_String(0,1,(unsigned char*)dis0);  //显示        
	    }
	}
}



void Init_Timer0(void)
{
	TMOD |= 0x01;	  //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响		     
	TH0=(65536-20000)/256;		  //重新赋值 20ms
	TL0=(65536-20000)%256;
	EA=1;            //总中断打开
	ET0=1;           //定时器中断打开
	TR0=1;           //定时器开关打开
}

void Timer0_isr(void) interrupt 1 
{
	TH0=(65536-2000)/256;		  //重新赋值 20ms
	TL0=(65536-2000)%256;
	suCount++;		//定时计数
//	time_20ms++;
//	if(time_20ms % 100 == 0)
//	{
//	 	disFlag =1 ;//定时更新显示
//	}

}


.

.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值