switching four devices using a PRESET

Status
Not open for further replies.

niteshtripathi

Member level 3
Joined
Oct 11, 2013
Messages
59
Helped
0
Reputation
0
Reaction score
0
Trophy points
6
Visit site
Activity points
429
I have a switch board consisting 4 switches, as we know well are four switches are independent, means we can either switch ON or OFF desired switch.

I want to switch ON/OFF these four devices independently means at a time any no of switches can be switched ON or OFF by using a single preset. so for that i am using a ADC which convert the analog o/p from preset in digital which is fed to MCU(AT89S52). but the prob is that when i want to switch ON or OFF one device then the status of other devices get changed.
 

There may be some logic missed on your code.If you can share your code anybody could help.
Code:
#include<reg52.h>
#define cmdport P3
#define dataport P2
#define adc_input P1

sbit rs = cmdport^2;  
sbit rw = cmdport^1;  
sbit e  = cmdport^0;
sbit wr= cmdport^4;
sbit rd= cmdport^3;
sbit intr= cmdport^5;
sbit relay1=P0^0;
sbit relay2=P0^1; 
sbit relay3=P0^2; 
sbit relay4=P0^3; 

unsigned char i,a,d1,d2,d3,d4,x1,x2,x3,x4,b,c,d,z[4];
 

unsigned char text[]= "SW1:OFF SW2:OFF ";
unsigned char text1[]= "SW3:OFF SW4:OFF ";
unsigned char text2[]= "ON ";
unsigned char text3[]= "OFF";

unsigned char i,a,b,c,d,input;

void delay(unsigned int msec)  
{
int i,j ;
for(i=0;i<msec;i++)
for(j=0;j<1275;j++);
}

void lcdcmd(unsigned char item)  
{
dataport = item;
rs= 0;
rw=0;
e=1;
delay(1);
e=0;
}

void lcddata(unsigned char item)  
{
dataport = item;
rs= 1;
rw=0;
e=1;
delay(1);
e=0;
}

void convert(unsigned int value)
{
	x1 = value / 10;
	d1 = value % 10;
	
	x2 = x1 / 10;
	d2 = x1 % 10;
	
	x3 = x2 / 10;
	d3 = x2 % 10;							   
	
	d4 = x3 % 10;

	d1=d1|0x30;
	d2=d2|0x30;
	d3=d3|0x30;
	d4=d4|0x30;
	

	lcddata(d4);
	lcddata(d3);
	lcddata(d2);
	lcddata(d1);
}



void main(void)
{

adc_input=0xff;
relay1=0;
relay2=0;
relay3=0;
relay4=0;

delay(50);

lcdcmd(0x38);  
delay(100);
lcdcmd(0x0E);  
delay(100);
lcdcmd(0x01);  
delay(100);
lcdcmd(0x06);  
delay(100);
lcdcmd(0x80);  
delay(100);

for(i=0;i<=15;i++)
{
lcddata(text[i]);
delay(1);
}

lcdcmd(0xc0);
delay(1); 

for(i=0;i<=15;i++)
{
lcddata(text1[i]);
delay(1);
}
lcdcmd(0x80);


while(1)
{		
				for(i=0;i<3;i++)
                {
                delay(1);
                rd=1;
                wr=0;
                delay(1);
                wr=1;
                while(intr==1);
                rd=0;
                lcdcmd(0x88);
                input=adc_input;
                delay(1);
                intr=1;
                z[i]=input;
                }			
				z[3]=(z[0]+z[1]+z[2])/3;
				input=z[3];
				lcdcmd(0x01);
				lcdcmd(0x80);
				convert(z[2]);
				
				if(input>20&&input<50)
				{
				  delay(100);
				 
				  if(a==0)
				  {
				  relay1=1;
				  a=1;
				  lcdcmd(0x84); 
				  delay(1);
				  for(i=0;i<=2;i++)
                  {
                  lcddata(text2[i]);
				  delay(1);
                  }
				  }
				  else
				  {
				  relay1=0;
				  a=0;
				  lcdcmd(0x84);
				  delay(1); 
				  for(i=0;i<=2;i++)
                  {
                  lcddata(text3[i]);
				  delay(1);
                  }
				  }
				  delay(200);
				 }
			     else if(input>70&&input<95)
				 {
				  delay(100);
				  if(b==0)
				  {
				  relay2=1;
				  b=1;
				  lcdcmd(0x8C); 
				  delay(1);
				  for(i=0;i<=2;i++)
                  {
                  lcddata(text2[i]);
				  delay(1);
                  }
				  }
				  else
				  {
				  relay2=0;
				  b=0;
				  lcdcmd(0x8C); 
				  delay(1);
				  for(i=0;i<=2;i++)
                  {
                  lcddata(text3[i]);
				  delay(1);
                  }
				  }
				  delay(200);
				 }
			     else if(input>100&&input<120)
				 {
				  delay(100);
				  if(c==0)
				  {
				  relay3=1;
				  c=1;
				  lcdcmd(0xc4); 
				  delay(1);
				  for(i=0;i<=2;i++)
                  {
                  lcddata(text2[i]);
				  delay(1);
                  }
				  }
				  else
				  {
				  relay3=0;
				  c=0;
				  lcdcmd(0xc4); 
				  delay(1);
				  for(i=0;i<=2;i++)
                  {
                  lcddata(text3[i]);
				  delay(1);
                  }
				  }
				  delay(200);
				 }
			     else if(input>120)
				 {
				  delay(100);
				  if(d==0)
				  {
				  relay4=1;
				  d=1;
				  lcdcmd(0xCC);
				  delay(1); 
				  for(i=0;i<=2;i++)
                  {
                  lcddata(text2[i]);
				  delay(1);
                  }
				  }
				  else
				  {
				  relay4=0;
				  d=0;
				  lcdcmd(0xCC); 
				  delay(1);
				  for(i=0;i<=2;i++)
                  {
                  lcddata(text3[i]);
				  delay(1);
                  }
				  }
				  delay(200);
				 }	 
}

}
 

Status
Not open for further replies.

Similar threads

Cookies are required to use this site. You must accept them to continue using the site. Learn more…