当前位置:首页 > 煤矿瓦斯远程监测系统 - 图文
switch(AD_CHANNEL) { case 0: ISendByte(PCF8591,0x41); D[0]=IRcvByte(PCF8591); //ADC0 break; case 1: ISendByte(PCF8591,0x42); D[1]=IRcvByte(PCF8591); //ADC1 break; case 2: ISendByte(PCF8591,0x43); D[2]=IRcvByte(PCF8591); //ADC2 break; case 3: ISendByte(PCF8591,0x40); D[3]=IRcvByte(PCF8591); //ADC3 break; case 4: DACconversion(PCF8591,0x40, D[4]); //DAC break; }
if(++AD_CHANNEL>4) AD_CHANNEL=0; //将AD返回的数据转换为实际的电压值 voltage1 = (float)D[0]*5/256; voltage2 = (float)D[1]*5/256;
//如果传感器的电压值大于我们设置的报警阈值,控制蜂鸣器发出警报,否则关闭蜂鸣器 if(voltage1 >= MAX_VOLTAGE || voltage2>= MAX_VOLTAGE) { //开启声光报警 BEEP = 1; } else { }
//关闭声光报警 BEEP = 0;
//将采集到的传感器数据格式化输出到一个数组中
39
sprintf(outStr1,\//格式化完的字符串发送到上位机 sendStr(outStr1);
//将采集到的传感器电压值和气体浓度格式化到数组中 sprintf(outStr2,\ sprintf(outStr3,\P2=d \int)(voltage1*1000*PPM_PER_MV),(unsigned int)(voltage2*1000*PPM_PER_MV)); //将采集到的电压值和气体浓度显示在液晶屏幕上 LCD_Write_String(0,0,outStr2); LCD_Write_String(0,1,outStr3); //延时程序 delay(250); } }
40
附录II 部分子程序清单
#include
#define uchar unsigned char
void delay(unsigned char i) {
unsigned char j,k; for(j=i;j>0;j--)
for(k=125;k>0;k--); }
/******************************************************************* DAC
*******************************************************************/ bit DACconversion(unsigned char sla,unsigned char c, unsigned char Val) {
Start_I2c(); SendByte(sla);
if(ack==0)return(0); SendByte(c);
if(ack==0)return(0); SendByte(Val); if(ack==0)return(0); Stop_I2c(); return(1); }
/******************************************************************* ADC
*******************************************************************/ bit ISendByte(unsigned char sla,unsigned char c) {
Start_I2c(); //???? SendByte(sla); //?????? if(ack==0)return(0);
SendByte(c); //???? if(ack==0)return(0);
Stop_I2c(); //???? return(1);
41
}
/******************************************************************* ADC
*******************************************************************/ unsigned char IRcvByte(unsigned char sla) { unsigned char c;
Start_I2c(); //???? SendByte(sla+1); //?????? if(ack==0)return(0);
c=RcvByte(); //????0
Ack_I2c(1); //?????? Stop_I2c(); //???? return(c); }
此部分为I2C总线的驱动程序
#include
#define NOP() _nop_() /* 定义空指令 */ #define _Nop() _nop_() /*定义空指令*/
sbit SCL=P1^0; //I2C 时钟 sbit SDA=P1^1; //I2C 数据 bit ack; /*应答标志位*/
/******************************************************************* 起动总线函数 函数原型: void Start_I2c();
功能: 启动I2C总线,即发送I2C起始条件.
********************************************************************/ void Start_I2c() {
SDA=1; /*发送起始条件的数据信号*/
42
共分享92篇相关文档