設(shè)計(jì)要求:
(1)數(shù)據(jù)采集系統(tǒng)以單片機(jī)為控制核心,外圍電路帶有LCD顯示以及鍵盤響應(yīng)電路,無需要其他計(jì)算機(jī),用戶就可以與之進(jìn)行交互工作,完成數(shù)據(jù)的采集、存儲(chǔ)、計(jì)算、分析等過程。
(2)系統(tǒng)具有低功耗、小型化、高性價(jià)比等特點(diǎn)。
(3)從便攜式的角度出發(fā),系統(tǒng)成功使用了液晶顯示器以及小鍵盤。由單片機(jī)系統(tǒng)控制鍵盤和LCD顯示來實(shí)現(xiàn)人機(jī)交互操作,界面友好。
include <reg52.h>
#include <intrins.h>
//顯示函數(shù)
#include <display.h>
#include <4004.h>
//宏定義
#define uint unsigned int
#define uchar unsigned char
#define Data_ADC0809 P1
//管腳聲明
//sbit LED_R= P2^2; //紅指示燈
//sbit LED_G= P2^0; //綠色指示燈
//sbit FENG = P2^5; //蜂鳴器
//ADC0809
sbit ST=P3^3;
sbit EOC=P3^1;
sbit OE=P3^2;
//按鍵
sbit Key1=P2^5; //設(shè)置按鍵
sbit Key2=P2^4; //加
sbit Key3=P2^3; //減
sbit Key4=P2^2;
bit bdata flag;//指示燈和蜂鳴器閃爍報(bào)警標(biāo)志位
uchar set; //設(shè)置標(biāo)志位
//函數(shù)聲明
extern uchar ADC0809();
extern void Key();
//酒精含量變量
uchar temp=0;
uchar WARNING=25; // 初始報(bào)警值
void delay_2S(void) //4S
{
uchar a;
uchar b,c;
for(c=90;c>0;c--)
for(b=171;b>0;b--)
for(a=16;a>0;a--);
_nop_(); //if Keil,require use intrins.h
}
//初始化函數(shù)
/*void init()
{
TMOD=0x01; //定時(shí)器0方式1
TL0=0xb0;
TH0=0x3c; //賦初值
EA=1; //開總中斷
ET0=1; //允許定時(shí)器0中斷
TR0=1; //定時(shí)器0開
} */
//主函數(shù)
void main()
{
uchar p=0;
uint sum;
Init1602(); //1602初始化
// init(); //初始化函數(shù)
while(1)//主循環(huán)
{
for(p=0;p<20;p++)
{
temp=ADC0809(); //讀取酒精值
sum=sum+temp;
}
temp=sum/20;
sum=0;
if(set==0) //如果沒有按下設(shè)置(默認(rèn)set是0,就是正常顯示狀態(tài))
Display_1602(temp,WARNING,Mode); //顯示酒精值
//開始語音播報(bào)
if(set==0)
{
//現(xiàn)在濃度
playbit=1;
playcout=1;
playsound();
delay_2S();
delay_2S();
DDstop();
//第一位
playbit=1;
playcout=(temp/100)+2;
playsound();
delay_2S();
DDstop();
//第二位
playbit=1;
playcout=(temp%100/10)+2;
playsound();
delay_2S();
DDstop();
//第三位
playbit=1;
playcout=(temp%100%10)+2;
playsound();
delay_2S();
DDstop();
/* //米
playbit=1;
playcout=12;
playsound();
delay_2S();
DDstop(); */
if(temp<WARNING&&set==0) //如果實(shí)際的酒精值小于報(bào)警值且在正常顯示狀態(tài)下
{
// flag=0; //執(zhí)行下面flag=0的(主要就是綠燈閃,關(guān)蜂鳴器和繼電器)
//濃度正常
playbit=1;
playcout=12;
playsound();
delay_2S();
delay_2S();
DDstop();
}
else if(temp>WARNING&&set==0) //如果實(shí)際的酒精值大于報(bào)警值且在正常顯示狀態(tài)下
{
// flag=1; //執(zhí)行下面flag=1的(主要就是紅燈閃,開蜂鳴器和繼電器)
//濃度超標(biāo)
playbit=1;
playcout=13;
playsound();
delay_2S();
delay_2S();
DDstop();
}
delay_2S();
//錄音鍵按下
if(Key4==0)
{
Mode=1;
while(Mode!=14)
{
//按鍵判斷
if(Key4==0)
{
Mode++;
Display_1602(0,0,Mode);
while(Key4==0);
//開始錄音
playbit=0;
recbit=1;
// playcout=Mode-1;
資料借鑒于此?紛傳