#includereg52.h#includeI2C.H#definePCF85910x90//PCF8591地址/elseIOsbitLS138A=P2^2;sbitLS138B=P2^3;sbitLS138C=P2^4;//此表为LED的字模,共阴数码管0-9-unsignedcharcodeDisp_Tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};unsignedcharAD_CHANNEL;unsignedlongxdataLedOut[8];unsignedintD[32];bitDACconversion(unsignedcharsla,unsignedcharc,unsignedcharVal){Start_I2c();//启动总线SendByte(sla);//发送器件地址if(ack==0)return(0);SendByte(c);//发送控制字节if(ack==0)return(0);SendByte(Val);//发送DAC的数值if(ack==0)return(0);Stop_I2c();//结束总线return(1);}bitISendByte(unsignedcharsla,unsignedcharc){Start_I2c();//启动总线SendByte(sla);//发送器件地址if(ack==0)return(0);SendByte(c);//发送数据if(ack==0)return(0);Stop_I2c();//结束总线return(1);}unsignedcharIRcvByte(unsignedcharsla){unsignedcharc;Start_I2c();//启动总线SendByte(sla+1);//发送器件地址if(ack==0)return(0);c=RcvByte();//读取数据0Ack_I2c(1);//发送非就答位Stop_I2c();//结束总线return(c);}main(){chari,j;while(1){/********以下AD-DA处理*************/switch(AD_CHANNEL){case0:ISendByte(PCF8591,0x41);D[0]=IRcvByte(PCF8591)*2;//ADC0模数转换1放大2倍显示break;case1:ISendByte(PCF8591,0x42);D[1]=IRcvByte(PCF8591)*2;//ADC1模数转换2break;case2:ISendByte(PCF8591,0x43);D[2]=IRcvByte(PCF8591)*2;//ADC2模数转换3break;case3:ISendByte(PCF8591,0x40);D[3]=IRcvByte(PCF8591)*2;//ADC3模数转换4break;case4:DACconversion(PCF8591,0x40,D[4]/4);//DAC数模转换break;}//D[4]=400;//数字---模拟输出D[4]=D[0];//把模拟输入采样的信号通过数模转换输出if(++AD_CHANNEL4)AD_CHANNEL=0;LedOut[0]=Disp_Tab[D[1]%10000/1000];LedOut[1]=Disp_Tab[D[1]%1000/100];LedOut[2]=Disp_Tab[D[1]%100/10]|0x80;LedOut[3]=Disp_Tab[D[1]%10];LedOut[4]=Disp_Tab[D[0]%10000/1000];LedOut[5]=Disp_Tab[D[0]%1000/100];LedOut[6]=Disp_Tab[D[0]%100/10]|0x80;LedOut[7]=Disp_Tab[D[0]%10];for(i=0;i8;i++){P0=LedOut[i];switch(i)/{case0:LS138A=0;LS138B=0;LS138C=0;break;case1:LS138A=1;LS138B=0;LS138C=0;break;case2:LS138A=0;LS138B=1;LS138C=0;break;case3:LS138A=1;LS138B=1;LS138C=0;break;case4:LS138A=0;LS138B=0;LS138C=1;break;case5:LS138A=1;LS138B=0;LS138C=1;break;case6:LS138A=0;LS138B=1;LS138C=1;break;case7:LS138A=1;LS138B=1;LS138C=1;break;}for(j=0;j90;j++){;}//扫描间隔时间}P0=0;}}