/**********************************AD (TLC1543)**********************************************/
#include <reg51.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit CS=P1^7; //TLC1543与89c52的接口连接线路 sbit DOUT=P1^6;
sbit ADIN=P1^5;
sbit CLOCK=P1^4;
sbit EOC=P1^3;
uint readTLC1543();
void delay1543(uint time);
extern void lcdwnumat(uchar pos, uint num);
uchar add=0;
uint Voltage0=1;
unsigned long int Voltage[4];
unsigned int Vot0[5],Vot1[5],Vot2[5],Vot3[5],Vot4[5];
uchar Channal=0;
void Tl1543Init()
{
uchar i;
CS=1;
delay1543(10);
CS=0;
ADIN=0;
EOC=1;
for(i=0;i<10;i++)
{
CLOCK=1;
CLOCK=0;
} //填充10个脉冲,前4个设置下一次转换通道0 }
uint readTLC1543()
{
uint i,ad=0;
uchar port;
if(Channal>5)port=0;
else port=Channal;
CS=0; //片选使能
while(!EOC); //等待转换完成
for(i=0;i<4;i++) //把通道写入TLC1543芯片中
烟气道 {
ADIN=(bit)(port&0x08); //输入转换地址通道 port<<=1; //
CLOCK=1;
if(DOUT)ad|=0x01;
ad<<=1; //高位在前
CLOCK=0; //
}
for(i=4;i<10;i++)//
太阳能光伏控制器卡因是什么制成的 {
CLOCK=1;
if(DOUT)ad|=0x01;
ad<<=1; //高位在前
CLOCK=0;
}
CS=1;
ad>>=1;
贴纸机 ad&=0x03ff;
//if(Channal==3)lcdwnumat(0x45,ad);
return(ad);
}
void delay1543(uint time)
{
uint i;
for(i=time;i>0; i--)
{;}
}
void ReadVoltage()
{
uint Votbuf=0,Vote;
Votbuf=readTLC1543();
if(Votbuf>Voltage0)Vote=Votbuf-Voltage0;
else Vote=0;
switch(Channal)
鞋帮 {
case 1:Vot0[add]=Vote*31/64;break; //0 放大100倍
case 2:Vot1[add]=Vote*31/64;break; //1 放大10000倍
case 3:Vot2[add]=Vote*31/64;break; //2 放大100倍
case 4:Vot3[add]=Vote*31/64;break; //3 放大100倍
case 5:Vot4[add]=Vote*31/64;break; //4 放大10000倍
//case 0:Voltage0=Votbuf;lcdwnumat(0,Voltage0);break;
}
if(++Channal==7)
{
Channal=0; //通道地址回0
if(++add==4)add=0;
}
Voltage[0]=(unsigned long int)(Vot0[0]+Vot0[1]+Vot0[2]+Vot0[3])/4;
Voltage[1]=(unsigned long int)(Vot1[0]+Vot1[1]+Vot1[2]+Vot1[3])/4;
Voltage[2]=(unsigned long int)(Vot2[0]+Vot2[1]+Vot2[2]+Vot2[3])/4;
Voltage[3]=(unsigned long int)(Vot3[0]+Vot3[1]+Vot3[2]+Vot3[3])/4;
Voltage[4]=(unsigned long int)(Vot4[0]+Vot4[1]+Vot4[2]+Vot4[3])/4;
}