【毕业设计】62-基于单片机的防酒驾\酒精浓度检测系统设计研究(原理图、源代码、仿真工程、低重复率参考设计、PPT)

news2024/12/29 9:10:04

【毕业设计】62-基于单片机的防酒驾\酒精浓度检测系统设计研究(原理图、源代码、仿真工程、低重复率参考设计、PPT)@[toc]

资料下载链接

资料下载链接
资料链接:https://www.cirmall.com/circuit/33758/
包含此题目毕业设计全套资料:全套毕业设计源资料(精品)
原理图工程文件
原理图截图
仿真模型工程文件
仿真截图
仿真视频
低重复率文档,24517字
英文文献及翻译
开题报告
任务书
答辩PPT

任务书

主要研究内容:
司机饮酒驾车已成为交通事故高发的原因之一,为预防酒驾的发生,文中设计了一种基于单片机的防酒驾检测系统。系统首先判断驾驶位上是否有人,如果有人,则启动酒精检测仪,收集车内的酒精浓度并判断,如果达到酒驾或醉驾状态,则自动断开车内启动电路,使车辆无法启动,实现预防酒驾的目的。
方法:
通过图书、期刊、网络等途径查阅相关文献资料,研究单片机、传感器、声光报警等知识。
要求:
1、确定系统总体设计方案,给出设计方案的结构框图;
2、利用仿真软件(如:Proteus)完成仿真电路的具体设计;
3、利用编程软件(如:Keil)完成编程;
4、对所设计的系统进行仿真调试,实现防酒驾检测的功能。

设计说明书

摘要

本文将使用STC89C52单片机作为主要控制器对系统进行设计,在系统组成中将由酒精浓度传感器、ADC放大器、显示器、按键,人体检测器等作为主要器件设计一款防酒驾检测系统。在车辆中将对人体进行检测,检查到有人后将开启酒精检测功能,如达到酒精浓度阈值则车辆将不会被启动,反之则可以启动个车辆。通过此方案可以有效的防止交通事故的发生,保证交通安全。本系统将通过硬件电路搭建,编程,最后使用仿真软件Proteus对系统进行仿真运行。保证系统运行安全可靠。

设计框架架构

在这里插入图片描述

前 言 1
第一章 绪 论 2
第一节 研究背景 2
第二节 国内研究情况 3
第三节 国外研究情况 3
第四节 本文的主要研究内容 4
第五节 本章小结 5
第二章 防酒驾检测系统方案设计 6
第一节 系统功能分析 6
第二节 系统主要元器件选型 7
一、单片机选型 7
二、显示器选型 8
第三节 系统硬件总框图 8
第四节 本章小结 9
第三章 酒精浓度检测系统硬件电路设计 10
第一节 主控制器最小系统设计 10
一、52单片机介绍 10
二、单片机最小系统电路设计 11
第二节 电源模块设计 12
第三节 按键电路模块设计 13
第四节 LED显示模块电路设计 13
第五节 LCD液晶显示模块电路设计 14
第六节 酒精浓度及人体检测模块电路设计 16
一、酒精浓度检测电路设计 16
二、人体检测电路设计 16
第七节 蜂鸣器报警模块电路设计 17
第八节 系统总电路图设计 17
第九节 本章小结 19
第四章 酒精浓度检测系统的软件设计 20
第一节 软件开发工具介绍 20
第二节 软件总架构设计 21
第三节 按键模块程序设计 22
第四节 LCD液晶显示模块程序设计 23
第五节 酒精浓度检测模块程序设计 24
第六节 蜂鸣器报警及LED模块程序设计 25
第七节 本章小结 26
第五章 酒精浓度检测系统的仿真实现 27
第一节 仿真开发工具介绍 27
第二节 仿真电路搭建及调试 28
第三节 系统仿真测试 28
一、人体传感器未触发状态 28
二、人体传感器触发状态 30
第四节 本章小结 33
总 结 34
致 谢 35
参考文献 36
附 录 38
一、英文原文 38
二、英文翻译 43
三、工程图纸 48
四、源代码 49

设计说明书及设计文件

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

低重复率文档,24517字
在这里插入图片描述

源码展示

在这里插入图片描述

/*此处的蜂鸣器是NPN型的*/
#include "reg52.H"
#include "1602.h"
#include "ADC0832.h"
#define uchar unsigned char
#define uint  unsigned int
//#include "eeprom52.h"
//声明常量
#define ALCH       80       //报警值
//K_MG_MV和K_ZERO为传感器校准系数,要根据每个MQ-3模块校准
#define K_MG_MV    80/160  //传感器灵敏度系数
#define K_ZERO     20      //传感器零点漂移
//定义按键
sbit Key_Up = P3^6;
sbit Key_Down = P3^7;
//定义LED报警灯
sbit Led_Warn1 = P3^4;
sbit Led_Warn2 = P3^5;
sbit beep=P1^4;		   //蜂鸣器IO口
//定义标识
volatile bit FlagStartAL = 0;  //开始转换标志
volatile bit FlagKeyPress = 0; //有键弹起标志
//全局变量定义
uchar Threshold;	           //酒精浓度上限报警值
uint  ALCounter;                //酒精转换计时器
long   ALValue;                   //酒精测量值
float ALtemp;                    //计算临时变量
uchar n;
uint keyvalue, keyUp, keyDown; //键值
char * pSave;                  //EEPROM存盘用指针
//函数声明
void Data_Init();
void Timer0_Init();
void Port_Init();
void ADC_Init();
uchar GetADVal();
void KeyProcess(uint );
void DELAY(unsigned int t)
{
	while(t!=0)
	t--;
}
//数据初始化
void Data_Init()
{
   ALCounter = 30;
   ALValue = 0;
   Led_Warn1 = 1;
   Led_Warn2 = 2;
   keyvalue = 0;
   keyUp = 1;
   keyDown = 1;
}
void di()
{
   beep = 0;
   DELAY(500);
   beep = 1;
}
void Timer0_Init()
{
	ET0 = 1;        //允许定时器0中断
	TMOD = 0x01;       //定时器工作方式选择
	TL0 = (65536-2000)%256;
	TH0 = (65536-2000)/256;     //定时器赋予初值
	TR0 = 1;        //启动定时器
}
//定时器0中断
void Timer0_ISR (void) interrupt 1 using 0
{
	TL0 = (65536-2000)%256;
	TH0 = (65536-2000)/256;     //定时器赋予初值
	//每1秒钟启动一次AD转换
    ALCounter ++;
    if (ALCounter >= 500)
    {
       FlagStartAL = 1;
	   ALCounter = 0;
    }
}
//按键处理程序,参数为键值,1为Up键,2为Down键
void KeyProcess(uint num)			  //设置按键 调节报警浓度
{
   switch (num)
   {
      case 1:
	     if (Threshold<255) Threshold++;
	     break;
	  case 2:
	     if (Threshold>1) Threshold--;
	     break;
	  default:
	     break;
   }
   if ((Threshold>=255)||(Threshold<0)) Threshold = 80;
   	LCD1602_write(0,0xc6);
	if(Threshold>9)
	LCD1602_write(1,0x30+Threshold/10%10);
	else 
	LCD1602_writebyte(" ");
	LCD1602_write(0,0xc7);
	LCD1602_write(1,0x30+Threshold%10);
//   L1602_int(2,5,Threshold);
}
void main()
{
   Threshold = 15;	/*此处是事先设定的浓度,这个值程序可以改*/
   LCD1602_cls();				  
 //  L1602_init();
   EA = 0;
   Data_Init();     //数据初始化
   Timer0_Init();   //定时器0初始化 
   EA = 1;		 //打开中断
   LCD1602_write(0,0x80);
   LCD1602_writebyte("Al:     mg/100ml");
   LCD1602_write(0,0xc0);
   LCD1602_writebyte("Th:     mg/100ml");
//   L1602_string(1,1,"Al:     mg/100ml");	 //显示当前浓度值
 //  L1602_string(2,1,"Th:     mg/100ml");	 //显示报警浓度值
	LCD1602_write(0,0xc6);
	if(Threshold>9)
	LCD1602_write(1,0x30+Threshold/10%10);
	else 
	LCD1602_writebyte(" ");
	LCD1602_write(0,0xc7);
	LCD1602_write(1,0x30+Threshold%10);
//   L1602_int(2,5,Threshold);
   while(1)
   {
//       if(n<40)
//		n++;
//		else
//		n=0;
      //如果FlagStartAL标志置位,则进行AD转换
		 if (FlagStartAL == 1)
		 {	
	         ALValue = (long)500 * A_D(0) / 256;        //8位ADC,首先得到电压值,单位10毫伏
		     ALValue = ALValue - K_ZERO;              //首先减去零点漂移
			 if (ALValue < 0) ALValue = 0;			  
			 ALValue = ALValue * K_MG_MV;             //将mV转变成mg/100L,K_MG_MV系数需要校准
			LCD1602_write(0,0x85);
			if(ALValue>99)
			LCD1602_write(1,0x30+ALValue/100%10);
			else 
			LCD1602_writebyte(" ");  
			LCD1602_write(0,0x86);
			if(ALValue>9)
			LCD1602_write(1,0x30+ALValue/10%10); 
			else 
			LCD1602_writebyte(" ");
			LCD1602_write(0,0x87);
			LCD1602_write(1,0x30+ALValue%10);         
	  //       L1602_int(1,5,(int)ALValue);			 
		    FlagStartAL = 0;
	    }
		if (ALValue > Threshold)
			  {      
			         Led_Warn2 = 1;
					 if(n<20)
						{
						    di();
							Led_Warn1 = 0;
						}
						else
						{
						    beep = 0;
							Led_Warn1 = 1;
						}
					
			  }   //超过阈值,则 Led_Warn1灯报警,否则报警灯灭。
		    else 
			{
				Led_Warn1 = 1;
				Led_Warn2 = 0;
				beep=0;
			}	 
	   //键盘查询,在弹起时响应
	   if ((Key_Up)&&(keyUp==0)) {FlagKeyPress = 1; keyvalue = 1;}
       else if ((Key_Down)&&(keyDown==0)) {FlagKeyPress = 1; keyvalue = 2;}
	   if (FlagKeyPress == 1)
	   {
          KeyProcess(keyvalue);
          FlagKeyPress = 0;           
	   }
       if (!Key_Up) keyUp = 0;
	   else keyUp = 1;
       if (!Key_Down) keyDown = 0;
	   else keyDown = 1;
	   DELAY(100); 
   }  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/21911.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

国科大课程自动评价脚本JS

国科大课程一键评估 操作流程&#xff1a; 方法 打开F12点击console/控制台复制粘贴下面代码回车 for(var i 0; i<1000; i) { if($("input[nameitem_"i"]").length) $("input[nameitem_"i"]").get(Math.round(Math.random()*2)…

C++11--lambda表达式--包装器--bind--1119

1.lambda表达式 lambda表达式书写格式&#xff1a;[捕捉列表] (参数列表) mutable -> 返回值类型 { 比较的方法 } int func() {int a, b, c, d, e;a b c d e 1;// 全部传值捕捉auto f1 []() {cout << a << b << c << d << e << …

BLE学习(3):ATT和GATT详解

本文章将介绍在面向连接的蓝牙模式中&#xff0c;ATT(attribute protocol,属性协议)和GATT(generic attribute profile,通用属性配置文件)这两个重要的协议层&#xff0c;它与蓝牙的数据传输密切相关。 1 设备之间如何建立连接(Gap层) 若BLE设备之间要进行数据传输&#xff0…

Qt5 QML TreeView currentIndex当前选中项的一些问题

0.前言 Qt5 QML Controls1.4 中的 TreeView 存在诸多问题&#xff0c;比如节点连接的虚线不好实现&#xff0c;currentIndex 的设置和 changed 信号的触发等。我想主要的原因在于 TreeView 是派生自 BasicTableView&#xff0c;而 TableView 内部又是由 ListView 实现的。 正…

二、openCV+TensorFlow入门

目录一、openCV入门1 - 简单图片操作2 - 像素操作二、TensorFlow入门1 - TensorFlow常量变量2 - TensorFlow运算本质3 - TensorFlow四则运算4 - tensorflow矩阵基础5 - numpy矩阵6 - matplotlib绘图三、神经网络逼近股票收盘均价&#xff08;案例&#xff09;1 - 绘制15天股票K…

编译原理 x - 练习题

简答题逆波兰后缀表达式和三元式序列源程序翻译成中间代码DAG优化正则文法 构造正则表达式正规式 改 上下文无关文法表示DFA有限状态机图移进-规约消除左递归文法-最左推导-短语LL(1)文法LR(0) | SLR(1)文法简答题 编译过程可分为前端和后端&#xff0c;描述一下前端和后端分别…

【设计模式】装饰者模式:以造梦西游的例子讲解一下装饰者模式,这也是你的童年吗?

文章目录1 概述1.1 问题1.2 定义1.3 结构1.4 类图2 例子2.1 代码2.2 效果图3 优点及适用场景3.1 优点3.2 适用场景1 概述 1.1 问题 众所周知&#xff0c;造梦西游3有四个角色&#xff0c;也就是师徒四人&#xff0c;这师徒四人每个人都有自己专属的武器和装备。假定我们以及设…

推荐10个Vue 3.0开发的开源前端项目

Vue 是一款用于构建用户界面的 JavaScript 框,它基于标准 的HTML、CSS 和 JavaScript 构建,并提供了一套声明式的、组件化的编程模型,用以帮助开发者高效地开发用户界面。目前,Vue 3.0正式版也发布了两年的时间,越累越多的开发者也用上了Vue 3.0。 对比Vue2.x,Vue 3.0在…

并发bug之源(二)-有序性

什么是有序性&#xff1f; 简单来说&#xff0c;假设你写了下面的程序&#xff1a; java int a 1; int b 2; System.out.println(a); System.out.println(b);但经过编译器/CPU优化&#xff08;指令重排序&#xff0c;和编程语言无关&#xff09;后可能就变成了这样&#x…

【DDR3 控制器设计】(7)DDR3 的用户端口读写模块设计

写在前面 本系列为 DDR3 控制器设计总结&#xff0c;此系列包含 DDR3 控制器相关设计&#xff1a;认识 MIG、初始化、读写操作、FIFO 接口等。通过此系列的学习可以加深对 DDR3 读写时序的理解以及 FIFO 接口设计等&#xff0c;附上汇总博客直达链接。 【DDR3 控制器设计】系列…

CSS---复合选择器

目录 一&#xff1a;复合选择器的介绍 二、复合选择器的讲解 &#xff08;1&#xff09;后代选择器 &#xff08;2&#xff09;子元素选择器 &#xff08;3&#xff09;并集选择器 &#xff08;4&#xff09;链接伪类选择器 &#xff08;5&#xff09;focus伪类选择器 一&…

基于SpringBoot的线上买菜系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SpringBoot 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目…

【Spring系列】- Spring事务底层原理

Spring事务底层原理 &#x1f604;生命不息&#xff0c;写作不止 &#x1f525; 继续踏上学习之路&#xff0c;学之分享笔记 &#x1f44a; 总有一天我也能像各位大佬一样 &#x1f3c6; 一个有梦有戏的人 怒放吧德德 &#x1f31d;分享学习心得&#xff0c;欢迎指正&#xff0…

Vue-CLI的安装、使用及环境配置(超详细)

Vue CLI 是一个基于 Vue 进行快速项目开发的工具。它可以提供可交互式的项目脚手架和运行时的服务依赖&#xff0c;帮助你快速完成一个风格统一、拓展性强的现代化 web 单页面应用。 Vue-CLI 所需环境 Vue-CLI 是一个需要全局安装的NPM包&#xff0c;安装需要在 Node.js 环境下…

一、openCV+TensorFlow环境搭建

目录一、anaconda安装二、tensorflow安装三、Opencv安装四、pycharm新建项目使用Anaconda的环境五、验证环境安装六、tensorflow安装jupyter notebook一、anaconda安装 anaconda官网&#xff1a;https://www.anaconda.com/anaconda下载&#xff1a;https://repo.anaconda.com/…

【k8s】10.网络插件

文章目录一、etcd详解1、etcd的特点2、准备签发证书的环境二、网络插件原理1、flannel1.1 UDP模式&#xff08;性能差&#xff09;1.2 VXLAN模式&#xff08;性能较好&#xff09;1.3 host-gw模式&#xff08;性能最高&#xff09;2、calico插件3、总结一、etcd详解 etcd是Cor…

Redis_第二章_实战篇_第一节_ 短信登录

Redis_第二章_实战篇_第一节_ 短信登录 文章目录Redis_第二章_实战篇_第一节_ 短信登录短信登录1.1、导入黑马点评项目1.1.1 、导入SQL1.1.2、有关当前模型1.1.3、导入后端项目1.1.4、导入前端工程1.1.5 运行前端项目:1.2 、基于Session实现登录流程1.3 、实现发送短信验证码功…

ANDI数据集介绍|补充信息|2022数维杯国际赛C题

目录 1.患者基本信息 2.生物标记物量化值 3.认知评估 4.解剖结构量化值 5.Other 6.上述各信息的bl值 1.患者基本信息 RID (Participant roster ID) ex. 2、PTID (Original study protocol) ex. 011_S_0002、VISCODE (Visit code) ex. bl、SITE ex. 11、COLPROT (Study p…

服务拆分和远程调用(微服务)

博客主页&#xff1a;踏风彡的博客 博主介绍&#xff1a;一枚在学习的大学生&#xff0c;希望在这里和各位一起学习。 所属专栏&#xff1a;SpringCloud 文章创作不易&#xff0c;期待各位朋友的互动&#xff0c;有什么学习问题都可在评论区留言或者私信我&#xff0c;我会尽我…

课程设计 | 教学设备管理系统

&#x1f388; 作者&#xff1a;Linux猿 &#x1f388; 简介&#xff1a;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我&#xff0c;关注我&#xff0c;有问题私聊&#xff01; &…