基于单片机防酒后驾驶控制系统设计程序及PCB图.docx
- 文档编号:3744918
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:10
- 大小:118.98KB
基于单片机防酒后驾驶控制系统设计程序及PCB图.docx
《基于单片机防酒后驾驶控制系统设计程序及PCB图.docx》由会员分享,可在线阅读,更多相关《基于单片机防酒后驾驶控制系统设计程序及PCB图.docx(10页珍藏版)》请在冰豆网上搜索。
基于单片机防酒后驾驶控制系统设计程序及PCB图
附录1:
实物图
附录二:
电路图及PCB图
附录三:
程序
/*饮酒驾车是指车辆驾驶人员血液中的酒精含量
大于或者等于20mg/100ml,小于80mg/100ml的驾驶行为。
醉酒驾车是指车辆驾驶人员血液中的酒精含量
大于或者等于80mg/100ml的驾驶行为*/
#include
#include
#defineuintunsignedint
#defineucharunsignedchar
//数码管位选端接口
sbitw1=P2^4;
sbitw2=P2^5;
sbitw3=P2^6;
sbitw4=P2^7;
////////按键接口///////////////////
sbitk1=P3^2;
sbitk2=P3^3;
sbitk3=P3^4;
///////////////////////////////////////
sbitjdq=P2^1;//继电器接口
sbitbeep=P2^0;//蜂鸣器端口定义
//////////AD端口定义////////////////////
sbitAD_CS=P1^2;//ADC0832片选端
sbitCLK=P1^0;//ADC0832时钟端
sbitDIO=P1^1;//ADC0832数据输入输出
/////四位共阴数码管段选//////////////////////////////////////////////
uchartable[22]={0x5F,0x44,0x9D,0xD5,0xC6,0xD3,0xDB,0x45,
0xDF,0xD7,0xCF,0xDA,0x1B,0xDC,0x9B,0x8B,//0-F,0-15
0x80,0x1a,0xce,0x00,0xff,0x4f};//'-',L,H,灭,全亮,n16-21
uchardat;//AD值
uintdat1;//显示数据
uintdat2=30;//比较浓度值
ucharCH;//通道变量
uchard1,d2,d3;//显示数据
ucharnum;//定时器计数变量
voiddelay(uinti)
{
ucharj;
for(i;i>0;i--)
for(j=110;j>0;j--);
}
voiddi()//蜂鸣器滴滴声
{
beep=0;delay(300);//开启蜂鸣器,延时300ms
beep=1;delay(300);//关闭蜂鸣器,延时300ms
}
voiddisplay(uintdate)//显示函数
{
d1=date/100;
d2=date%100/10;
d3=date%10;
w1=0;
P0=table[d1]|0x20;
delay(10);
w1=1;
P0=0x00;
delay
(1);
w2=0;
P0=table[d2];
delay(10);
w2=1;
P0=0x00;
delay
(1);
w3=0;
P0=table[d3];
delay(10);
w3=1;
P0=0x00;
delay
(1);
w4=0;
P0=table[0];
delay(10);
w4=1;
P0=0x00;
delay
(1);
}
voidkeyscan()//按键扫描函数
{
bitflag;
if(k1==0)//第一次按设定键,进入设定
{
delay(10);
if(k1==0)
{
flag=1;
}
while(!
k1);
}
if(flag==1)
{
TR0=1;//开启定时器
while(flag)
{
if(num<10)display(dat2);
if(num>=10)display(0);
if(k1==0)//开始设定的时候按设定键退出设定
{
delay(10);
if(k1==0)
{
flag=0;
}
while(!
k1);
}
if(k2==0)
{
delay(10);
if(k2==0)
{
dat2+=10;
if(dat2==410)
dat2=30;
}
while(!
k2);
}
if(k3==0)
{
delay(10);
if(k3==0)
{
dat2-=10;
if(dat2==20)
dat2=400;
}
while(!
k3);
}
}
TR0=0;//关闭定时器
}
}
/**************************************************
AD转换函数
***************************************************/
uintADC0832()
{
uchari=0;
ucharValue1=0;
ucharValue2=0;
AD_CS=1;//关掉AD;
CLK=0;
DIO=0;
AD_CS=0;//开启芯片
DIO=1;//开始位
CLK=0;
CLK=1;
DIO=1;//并分/单通首
CLK=0;
CLK=1;
DIO=0;//通首选择位
CLK=0;
CLK=1;
DIO=1;//空闲位
CLK=0;
CLK=1;
for(i=0;i<8;i++)//读第一次数据
{
CLK=1;
CLK=0;
if(DIO)
{
Value1|=0x80>>i;
}
}
for(i=0;i<8;i++)//读第二次数据
{
if(DIO)
{
Value2|=0x01<
}
CLK=1;
CLK=0;
}
AD_CS=1;//关掉芯片
if(Value1==Value2)//数据校难
{
returnValue1;
}
else
{
return0;
}
}
voidbao_jing()//报警处理函数
{
bitflag;
if(dat1>dat2)//大于设定值报警
{
TR0=1;//开启定时器
flag=1;
}
while(flag)
{
jdq=0;//开启继电器
if(num<10)beep=0;//蜂鸣器报警
if(num>10)beep=1;//停止
dat=ADC0832();//读出数据
dat1=dat*80/51;//数据转换
display(dat1);//显示浓度值
if(dat1 { jdq=1;//关闭继电器 flag=0; beep=1;//关闭蜂鸣器 TR0=0;//关闭定时器 } } } voidmain() { //定时器初始化 TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=0;//关闭定时器 //上电封锁延时一分钟等待传感器加热稳定 di();//滴一声 delay(60000); delay(60000); delay(60000); delay(60000); di();//滴一声 di();//滴一声 while (1) { dat=ADC0832();//读出数据 dat1=dat*80/51;//数据转换 display(dat1);//显示浓度值 keyscan();//按键扫描函数 bao_jing();//报警处理函数 } } voidT0_int()interrupt1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; num++; if(num==20)num=0; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 酒后 驾驶 控制系统 设计 程序 PCB