Bootstrap

101.基于51单片机的酒驾报警【ADC0832,LCD1602】(仿真)

101.基于51单片机的酒驾报警【ADC0832,LCD1602】(仿真)

101.基于51单片机的酒驾报警【ADC0832,LCD1602】(仿真)

酒驾报警:

1、通过AD芯片和传感器检测酒精浓度

2、设置不同的报警值,喝酒检测和醉酒状态检测,LED指示不同的报警状态

3、检测到喝酒状态,报警;检测到醉酒状态,启动刹车

资料包括:

image.png

原理图:

image.png

仿真图:

image.png

程序运行图:

image.png

#include "ADC0832.h"
#include "intrins.h"
//读取AD值
unsigned int ADC0832(unsigned char channel)  //AD转换,返回结果
{
	unsigned char i = 0;
	unsigned char j;
	unsigned int dat = 0;
	unsigned char ndat = 0;

	if (channel == 0) channel = 2;//通道1
	if (channel == 1) channel = 3;//通道2
	ADDI = 1;//输入引脚拉高
	_nop_();//延时1us
	_nop_();//延时1us
	ADCS = 0;//片选
	_nop_();//延时1us
	_nop_();//延时1us
	ADCLK = 1;//拉高时钟
	_nop_();//延时1us
	_nop_();//延时1us
	ADCLK = 0;//拉低时钟
	_nop_();//延时1us
	_nop_();//延时1us
	ADCLK = 1;//拉高时钟
	ADDI = channel & 0x1;
	_nop_();//延时1us
	_nop_();//延时1us
	ADCLK = 0;//拉低时钟
	_nop_();//延时1us
	_nop_();//延时1us
	ADCLK = 1;//拉高时钟
	ADDI = (channel >> 1) & 0x1;
	_nop_();//延时1us
	_nop_();//延时1us
	ADCLK = 0;//拉低时钟
	ADDI = 1;//输出1
	_nop_();//延时1us
	_nop_();//延时1us
	dat = 0; //存储清零
	ADDI =1;
	for (i = 0; i < 8; i++)	//循环8次
	{
		dat |= ADDI;//读取引脚
		ADCLK = 1; //拉高时钟
		_nop_();//延时1us
		_nop_();//延时1us
		ADCLK = 0;//拉低时钟
		_nop_();//延时1us
		_nop_();//延时1us
		dat <<= 1;//左移
		if (i == 7) dat |= ADDI;//读取引脚
	}
	for (i = 0; i < 8; i++)//循环8次
	{
		j = 0;
		j = j | ADDI; //读取引脚
		ADCLK = 1;	//拉高时钟
		_nop_();//延时1us
		_nop_();//延时1us
		ADCLK = 0;	//拉低时钟
		_nop_();//延时1us
		_nop_();//延时1us
		j = j << 7;	//左移7位
		ndat = ndat | j; //合并数据
		if (i < 7) ndat >>= 1;//去掉符号
	}
	ADCS = 1; //清除片选
	ADCLK = 0;//拉低时钟
	ADDI=1;
	dat <<= 8;//数据移位
	dat |= ndat;//合并数据
	return(ndat);
}

;