欢迎来到天天文库
浏览记录
ID:11116117
大小:21.71 KB
页数:27页
时间:2018-07-10
《酒精浓度检测系统设计程序设计》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、//#include"reg52.H"#include"STC12c5A.h"#include"1602.h"#include"2402.h"#defineucharunsignedchar#defineuintunsignedint//声明常量#defineALCH250//醉驾标准80mg/L//K_MG_MV和K_ZERO为传感器校准系数,要根据每个MQ-3模块校准#defineK_MG_MV160/66//传感器灵敏度系数,每毫克/L对应的10毫伏数#defineK_ZERO15//传感器零点漂移,约130mV//定义按键sbitKey_Up=P3^4;sbitKey_Down=P3^
2、5;//定义LED报警灯sbitLed_Warn1=P3^2;sbitLed_Warn2=P3^3;sbitBuzzer=P3^0;//定义蜂鸣器//定义乙醇传感器TTL电平输出引脚sbitDOUT=P1^4;//定义标识volatilebitFlagStartAL=0;//开始转换标志volatilebitFlagKeyPress=0;//有键弹起标志//全局变量定义ucharThreshold;//酒精浓度上限报警值uintALCounter;//酒精转换计时器longALValue;//酒精测量值floatALtemp;//计算临时变量uintkeyvalue,keyUp,keyDown
3、;//键值char*pSave;//EEPROM存盘用指针//函数声明voidData_Init();voidTimer0_Init();voidPort_Init();voidADC_Init();ucharGetADVal();voidKeyProcess(uint);//数据初始化voidData_Init(){ALCounter=0;ALValue=0;Led_Warn1=1;Led_Warn2=2;keyvalue=0;keyUp=1;keyDown=1;Buzzer=1;}//定时器0初始化,中断时间约2毫秒//计算:晶振11.0592MHz,定时器时钟11059200/12=92
4、1600,每毫秒922个脉冲//16位定时器初值65536-1844=63692=0xf8ccvoidTimer0_Init(){ET0=1;//允许定时器0中断TMOD=1;//定时器工作方式选择TL0=0xcc;//TH0=0xf8;//定时器赋予初值,大约为2毫秒中断1次TR0=1;//启动定时器}//定时器0中断voidTimer0_ISR(void)interrupt1using0{TL0=0xcc;TH0=0xf8;//定时器赋予初值//每1秒钟启动一次AD转换ALCounter++;if(ALCounter>=500){FlagStartAL=1;ALCounter=0;}}vo
5、idPort_Init(){P1M0=0x80;//10000000,P1.7作为AD输入P1M1=0x80;//}voidADC_Init(){uinti;P1ASF=0x80;//设P1.7为AD输入ADC_RES=0;//清先前的结果ADC_CONTR
6、=0x80;//POWER=1,打开ADC电源for(i=5000;i>0;i--);//延时ADC_CONTR=ADC_CONTR&0xE0;//1110,0000清ADC_FLAG,ADC_START位和低3位ADC_CONTR=ADC_CONTR&0xf8
7、0x07;//设置当前通道号为P1.7for(i=2500;i>0;i--)
8、;//延时}//进行AD转换,得到当前酒精值ucharGetADVal(){uinti;ADC_CONTR&=0xf7;for(i=250;i>0;i--);//待输入电压稳定后开始转换//ADC_RES=0;ADC_CONTR
9、=0x08;//ADC_Start=1,启动转换while((ADC_CONTR&0x10)==0);//等待转换结束ADC_FLAG=1ADC_CONTR&=0xe7;//清ADC_FLAG和ADC_START位,停止转换returnADC_RES;}//存入设定值voidSave_Setting(){pSave=(char*)&Threshold;//地址低位对应
10、低8位,高位对应高8位wrteeprom(0,*pSave);//存醉酒阈值低8位DELAY(300);pSave++;wrteeprom(1,*pSave);//存醉酒阈值高8位DELAY(300);}//载入设定值voidLoad_Setting(){pSave=(char*)&Threshold;*pSave++=rdeeprom(0);*pSave=rdeeprom(1);if((Thre
此文档下载收益归作者所有