毕业设计 基于单片机的交通安全车辆测速系统 - 嵌入式 物联网

发布于:2022-11-28 ⋅ 阅读:(485) ⋅ 点赞:(0)


0 前言

🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。

为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是

🚩 **基于单片机的交通安全车辆测速系统 **

🥇学长这里给一个题目综合评分(每项满分5分)

  • 难度系数:4分
  • 工作量:4分
  • 创新点:3分

🧿 选题指导, 项目分享:

https://gitee.com/dancheng-senior/project-sharing-1/blob/master/%E6%AF%95%E8%AE%BE%E6%8C%87%E5%AF%BC/README.md


1 简介

基于51单片机的速度检测系统,利用速度检测模块检测速度和路程,通过LCD1602显示屏进行速度和路程的显示,速度检测模块内通过检测每次通过的时间,进而实现对速度的检测。

2 主要器件

  • 52单片机
  • 槽型光耦测速模块
  • LCD1602显示屏

3 实现效果

在这里插入图片描述
在这里插入图片描述

4 设计原理

4.1 槽型光耦测速模块

简介

槽型光耦以光为媒介传输电信号。它对输入、输出电信号有良好的隔离作用,所以,它在各种电路中得 1553b耦合器线缆接头到广泛的应用。目前它已成为种类最多、用途最广的光电器件之一。光耦合器一般由三部分组成:光的发射、光的接收及信号放大。输入的电信号驱动发光二极管(LED),使之发出一定波长的光,被光探测器接收而产生光电流,再经过进一步放大后输出。这就完成了电—光—电的转换,从而起到输入、输出、隔离的作用。由于光耦合器输入输出间互相隔离,电信号传输具有单向性等特点,因而具有良好的电绝缘能力和抗干扰能力。又由于光耦合器的输入端属于电流型工作的低阻元件,因而具有很强的共模抑制能力。所以,它在长线传输信息中作为终端隔离元件可以大大提高信噪比。在计算机数字通信及实时控制中作为信号隔离的接口器件,可以大大增加计算机工作的可靠性。槽型光耦作为一种非常常见的电子元件,在电子电路系统设计的过程中,其选型的正确与否是非常重要的。槽型光耦合器也常常被称为直射式光电传感器,其工作原理是通过对红外发射光的阻断和导通,在红外接收管感应出的电流变化来实现开和关的判断。光电耦合器具有体积小、使用寿命长、工作温度范围宽、抗干扰性能强。无触点且输入与输出在电气上完全隔离等特点,因而在各种电子设备上得到广泛的应用。光电耦合器可用于隔离电路、负载接口及各种家用电器等电路中。

在这里插入图片描述
模块原理图
在这里插入图片描述

特点

槽型光耦的特点

  • 检测距离长。与接近开关等比较,光电开关的检测距离非常长,且是无接触式的,所以不会损伤检测物体,也不受检测物体的影响。
  • 几乎不受检测物体的制约。由于是采用对检测对象的表面进行反射及光透过方式,不像接近开关只能对金属,还能对玻璃、塑料、木制物体、液体等各种物质进行检测。
  • 响应速度快。与接近开关同样,由于无机械运动,所以能对高速运动的物体进行检测。镜头容易受有机尘土等的影响镜头免受污染后,光会散射或被遮光,所以在有活水蒸汽、尘土等较多的环境下使用的场合,需施加适当的保护装置。
  • 不受环境强光的影响。几乎不受一般照明光的影响,但像太阳光那样的强光直接照射受光体时,会造成误动作或损坏。

4.2 LCD1602显示模块

简介
作为各类单片机实物设计的常用显示屏,LCD1602是一种专门用于显示字母、数字、符号等点阵式LCD,其1602是指LCD显示的内容为16X2,即可以显示两行,每行16个字符(1个汉字占用2个字符)。这里需要要注意的是lcd1602是不能显示汉字的,它只能显示字母字符。

引脚功能
在这里插入图片描述
控制指令集
在这里插入图片描述

5 部分核心代码

/*定时器0中断号1*/
void Time0() interrupt 1
{	
	TH0 = 0xDC;					//11.0592M晶振下装入10ms初值
	TL0 = 0x00;
	time++;
	
	if(time == 100)
	{
		Wheel_Speed = ( Angular_N / 20 ) * 2 * 3.5 * 3.14 ;	//获取1s内中断计数的值num,并进行数值处理  (中断数值/20*直径*3.14为1s内移动距离)
		time = 0;	
		Angular_N = 0;
	}
}
 
/*外部中断0初始化*/
void Int0Init()
{
	IT0 = 1;				//跳变沿出发方式(下降沿)
	EX0 = 1;				//打开INT0的中断允许
	EA = 1;					//打开总中断	
}
 
/*外部中断0的中断函数*/
void Int0()	interrupt 0		
{
	Angular_N++;		
}
#include"lcd1602.h"
 
sbit rs=P2^6;    //1602的数据/指令选择控制线 
sbit rw=P2^5;        //1602的读写控制线 
sbit en=P2^7;        //1602的使能控制线
 
void delay(uint n)       //延时函数                       
{ 
    uint x,y;  
    for(x=n;x>0;x--) 
        for(y=110;y>0;y--); 
} 
 
void Busy(void)
{
	uchar temp=0;
	do
	{
		rw=1;
		rs=0;
		en=0;
		_nop_();
		en=1;
		delay(1);
		en=0;
		temp=P0;
	}while(temp&0x80);
}
 
void Lcd_WriteCom(uchar com)  //1602写命令函数
{ 
	P0=com;  //把命令字送入P2
	en=0; 
	rs=0;            //选择指令寄存器
    rw=0;            //选择写
    _nop_();//一个机械周期       
    en=1;           //使能线电平变化,命令送入1602的8位数据口 
    delay(1);
	en=0; 
} 
 
void Lcd_WriteData(uchar dat)        //1602写数据函数       
{ 
    P0=dat;        //把要显示的数据送入P0
	en=0; 
	rs=1;        //选择数据寄存器 
    rw=0;        //选择写 
    _nop_();//一个机械周期   
    en=1;        //使能线电平变化,数据送入1602的8位数据口 
	delay(1);
	en=0; 
} 
 
void lcd_init()              //1602初始化函数       
{ 
	delay(1);
    Lcd_WriteCom(0x38);       //8位数据,双列,5*7字形       
    Busy();
	Lcd_WriteCom(0x0c);      //开启显示屏,关光标,光标不闪烁 
    Busy();
	Lcd_WriteCom(0x06);    //显示地址递增,即写一个数据后,显示位置右移一位 
    Busy();
	Lcd_WriteCom(0x01);    //清屏 
	Busy();
	Lcd_WriteCom(0x80);   //设置数据指针起点
}

6 最后

本文含有隐藏内容,请 开通VIP 后查看