酒駕報(bào)警:
2、設(shè)置不同的報(bào)警值,喝酒檢測和醉酒狀態(tài)檢測,LED指示不同的報(bào)警狀態(tài)
3、檢測到喝酒狀態(tài),報(bào)警;檢測到醉酒狀態(tài),啟動剎車
#include "ADC0832.h"
#include "intrins.h"
//讀取AD值
unsigned int ADC0832(unsigned char channel) //AD轉(zhuǎn)換,返回結(jié)果
{
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++) //循環(huán)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++)//循環(huán)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; //合并數(shù)據(jù)
if (i < 7) ndat >>= 1;//去掉符號
}
ADCS = 1; //清除片選
ADCLK = 0;//拉低時鐘
ADDI=1;
dat <<= 8;//數(shù)據(jù)移位
dat |= ndat;//合并數(shù)據(jù)
return(ndat);
}
?
資料借鑒于此?紛傳
閱讀全文