基于单片机防酒后驾驶控制系统设计程序及PCB图.docx

上传人:b****6 文档编号:3744918 上传时间:2022-11-25 格式:DOCX 页数:10 大小:118.98KB
下载 相关 举报
基于单片机防酒后驾驶控制系统设计程序及PCB图.docx_第1页
第1页 / 共10页
基于单片机防酒后驾驶控制系统设计程序及PCB图.docx_第2页
第2页 / 共10页
基于单片机防酒后驾驶控制系统设计程序及PCB图.docx_第3页
第3页 / 共10页
基于单片机防酒后驾驶控制系统设计程序及PCB图.docx_第4页
第4页 / 共10页
基于单片机防酒后驾驶控制系统设计程序及PCB图.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

基于单片机防酒后驾驶控制系统设计程序及PCB图.docx

《基于单片机防酒后驾驶控制系统设计程序及PCB图.docx》由会员分享,可在线阅读,更多相关《基于单片机防酒后驾驶控制系统设计程序及PCB图.docx(10页珍藏版)》请在冰豆网上搜索。

基于单片机防酒后驾驶控制系统设计程序及PCB图.docx

基于单片机防酒后驾驶控制系统设计程序及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;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 职业规划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1