基于单片机的防酒后驾驶控制系统的仿真图:
课题任务的内容和要求
(1) 学习气体测量传感器的原理和使用,并完成数据采集、调理电路的设计;
(2) 学习单片机系统的设计及编程,完成系统整体设计;
(3) 通过不同颜色显示灯及触发措施,对应三种酒精含量范围(醉酒状态、少量饮酒状态、正常状态),;
(4) 测量结果动态显示。
酒精传感器采集酒精浓度信息,将其转化为变化的电压信号。电压信号经过处理后通过A/D转换电路实现对信号的模数转换,然后送至单片机系统进行逻辑判断处理。如果驾驶员未饮酒,LED显示绿灯,汽车正常启动;如果驾驶员处于少量饮酒状态,LED显示黄灯,且会发出声光报警;如果驾驶员处于醉酒状态时,LED显示红灯,且会控制继电器动作,自动切断汽车启动系统电源,从而使汽车无法启动,有效的防止驾驶员酒后驾车。
流程图:
MQ-3模块的资料:
单片机源程序:
#include
#include<1602.h>
sbit CL=P2^2;
sbit ST=P2^3;
sbit OE=P2^5;
sbit EOC=P2^4; //这四个是定义AD转换器的
sbit DOUT=P3^2; //传感器TTL输出接单片机外部中断0
sbit SK=P2^6; //蜂鸣器
uchar code WU[]=" Welcome use ";
uchar code TS[]="Alcohol Tester";
uchar code YC[]=" You Can Drive!";
uchar code YN[]=" It's Dangerous!";
uchar code GD[]="Drive carefully";
uchar code AP[]="Watch out,Please";
uchar code YD[]=" You have drunk";
uchar code FS[]="Forbidden Start!";
uchar nd[]="Alcohol: ppm ";
uchar i=0,flag=0;
uint Z;
/*******************蜂鸣器报警**************/
void Beep(uchar t)
{
uchar i,j;
for(i=0;i<200;i++)
{
SK=~SK;
for(j=0;j
}
SK=1;
}
/*******************AD转换**************/
void AD0809()
{
ST=0;
ST=1;
ST=0; // 启动ADC0809
while(EOC==0); // 等待数据转化
OE=1; // 传输数据
Z=P1;
OE=0; // 关闭传输数据
delay(1);
Z=Z*500.0/255;
nd[10]=(Z/100-1)*2+Z%100/10/5+'0';
nd[11]=(Z%100/10%5)*2+'0';
nd[12]='0';
}
/*******************主函数**************/
void main()
{
lcd_init();
lcd_pos(0);
dis_date(WU);
lcd_pos(0x41);
dis_date(TS);
delay(2000);
EA=1; // 开放总中断
EX0=1; // 允许外部中断0
ET0=1; // 允许定时器0中断
TCON=0x01; // 外部中断0下降沿触发
TMOD=0X01; // 定时器工作方式1
TR0=1; // 打开定时器0
TH0=(65536-100)/256;
TL0=(65536-100)%256; //设置T0工作频率
OE=0;
while(1)
{
AD0809();
if(flag==1) // 进入酒精检测模式
{
lcd_pos(0);
dis_date(nd);
if(nd[10]>0x32)
{
P3=0x3b; // 醉酒饮酒
lcd_pos(0x40);
dis_date(FS);
}
else
{
P3=0xdb; //少量模式
lcd_pos(0x40);
dis_date(YN);
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』