typora-root-url: ./
【毕业设计】36-基于单片机的酒精浓度/车载酒精测试仪设计(原理图工程+仿真工程源代码+实物图+答辩论文+答辩PPT)
文章目录
任务书
设计(论文)的主要内容与要求:
随着科技和生活水平的飞速发展,交通拉进彼此的距离,扩大了日常生活范围,成为人们生活的重要部分。2008年世界卫生组织的事故调查显示,大约50%—60%的交通事故与酒后驾驶有关,酒后驾驶已经被列为车祸致死的主要原因,酒后驾车的危害触目惊心,已经成为交通事故的第一大“杀手”。基于此,本文通过设计和安装酒精浓度监测装置预防事故的发生。
(1)学习酒精监测传感器原理及确定选型。
(2)熟悉单片机原理及Proteus软件
(3)将烟酒精监测传感器检测信号进行A/D转换,并输入至单片机并采用数码管显示
(4)单片机根据检测结果进行判断,如果超出限制发出警报
要求:要求学生熟悉单片机技术,数据采样和传感器测量等相关课程内容,具有一定的仿真软件学习能力。
原理图工程文件
原理图截图
仿真模型工程文件
仿真截图
搭建视频
答辩论文低重复率文档
英文文献及翻译
开题报告
任务书
答辩PPT
设计说明书
摘要
本文选择使用STC89C52单片机作为主控制器,酒精传感器,模数转换器,液晶显示器以及按键来设计出一款车载环境酒精浓度监测仪,通过酒精传感器将酒精浓度信号转化为电信号。通过模拟传感器将电信号转化为数字信号,经过单片机处理实现。酒精浓度检测并将数字显示在液晶显示器中,可以通过按键对酒精浓度阈值调节实现酒精浓度检测,保障行车安全。在系统的设计验证过程中。充分保证电路设计安全,并且符合国家标准设定保证系统在设计过程中符合国家标准,并且可以推广应用在车载系统中。
设计框架架构
设计说明书及设计文件
源码展示
/*此处的蜂鸣器是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;
}
}