Sunday, March 18, 2012

Program to interface external interrupt to switches [Embedded systems Lab]

/*Program to interface external interrupt to switches// 
/*programed by hiq test equipment***/
#include<reg51.h> //include at89c51 microcontoller header file

//#define led P0 //connect lower nibble of p0 to leds


sbit rs  = P1^0;
sbit en  = P1^1;
sbit db7 = P1^5;
sbit db6 = P1^4;
sbit db5 = P1^3;
sbit db4 = P1^2;


void init_lcd(void);
void cmd_lcd(unsigned char);
void write_lcd(unsigned char);
void display_lcd(unsigned char *);
void delay_ms(unsigned int);

sbit sw1=P3^7;
sbit sw2=P3^6;
sbit sw3=P3^5;
sbit sw4=P3^4;

sbit led1=P0^0;
sbit led2=P0^1;
sbit led3=P0^2;
sbit led4=P0^3;

fun0();
fun1();
fun2();
fun3();
fun4();


//sbit led1=P0^0;
//sbit led2=P0^1;
void delay_ms(unsigned int);
void external_intruppet0(void) interrupt 0;
int flag=0;


void main(void)
{
init_lcd();
delay_ms(500);
init_lcd();
init_lcd();
display_lcd("hi");
delay_ms(1000);
cmd_lcd(0x01);

IE=0x81; 
IT0=1;  




while(1) 
{  
                   
  if(flag==1)
{
flag=0;
init_lcd();
if(sw1==1&&sw2==1&&sw3==1&&sw4==1)
{
cmd_lcd(0x01);
fun0();
}
else if(sw1==0&&sw2==1&&sw3==1&&sw4==1)
{
fun1();
}
else if(sw1==1&&sw2==0&&sw3==1&&sw4==1)
{
    
  fun2();
 }  
   
   else if(sw1==1&&sw2==1&&sw3==0&&sw4==1)
   {

  fun3();
   cmd_lcd(0x01);
   display_lcd("HI to ALL");
   }
   else if(sw1==1&&sw2==1&&sw3==1&&sw4==0)
   {

   fun4();
  }

}
}
}

void init_lcd(void)
{
delay_ms(10);
cmd_lcd(0x28);
cmd_lcd(0x0c);
cmd_lcd(0x06);
cmd_lcd(0x01);
}
void cmd_lcd(unsigned char c)
{
unsigned char temp;
temp = c & 0xf0;
rs = 0;
en = 1;
db7 = temp & 0x80;
db6 = temp & 0x40;
db5 = temp & 0x20;
db4 = temp & 0x10;
en = 0;
temp = ( c & 0x0f ) << 4;
rs = 0;
en = 1;
db7 = temp & 0x80;
db6 = temp & 0x40;
db5 = temp & 0x20;
db4 = temp & 0x10;
en = 0;
delay_ms(2);
}
void write_lcd(unsigned char c)
{
unsigned char temp;
temp = c & 0xf0;
rs = 1;
en = 1;
db7 = temp & 0x80;
db6 = temp & 0x40;
db5 = temp & 0x20;
db4 = temp & 0x10;
en = 0;
temp = ( c & 0x0f ) << 4;
rs = 1;
en = 1;
db7 = temp & 0x80;
db6 = temp & 0x40;
db5 = temp & 0x20;
db4 = temp & 0x10;
en = 0;
delay_ms(2);
}
void display_lcd(unsigned char *s)
{
while(*s)
write_lcd(*s++);
}

void delay_ms(unsigned int i)
{
unsigned int j;
while(i-->0)
{
for(j=0;j<500;j++);
}
}



void external_interrupt0(void) interrupt 0 
{  
EX0=0;    
flag=1;   
 delay_ms(200);
EX0=1;    
}


  fun0()
 {
 //while((sw1==1)&&(sw2==1)&&(sw3==1)&&(sw4==1))
 {
 led1=1;
 led2=1;
 led3=1;
 led4=1;
 delay_ms(500);
 led1=0;
 led2=0;
 led3=0;
 led4=0;
 delay_ms(500);
 }
 }
 fun1()
 {
// while((sw1==1)&&(sw2==1)&&(sw3==1)&&(sw4==1))
 {
cmd_lcd(0x01); 
display_lcd("Good Morning");

 led1=0;
 led2=1;
 led3=1;
 led4=1;
 delay_ms(500);
 led1=0;
 led2=0;
 led3=0;
 led4=0;
 delay_ms(500);
 }
 }

 fun2()
  {
// while((sw1==1)&&(sw2==1)&&(sw3==1)&&(sw4==1))
  {
  cmd_lcd(0x01); 
  display_lcd("Hello Everybody");
   led1=1;
 led2=0;
 led3=1;
 led4=1;
 delay_ms(500);
 led1=0;
 led2=0;
 led3=0;
 led4=0;
 delay_ms(500);
 }
}

 fun3()
   {
  //while((sw1==1)&&(sw2==1)&&(sw3==1)&&(sw4==1))
  {
   cmd_lcd(0x01);
   display_lcd("HI to ALL");

   led1=1;
 led2=1;
 led3=0;
 led4=1;
 delay_ms(500);
 led1=0;
 led2=0;
 led3=0;
 led4=0;
 delay_ms(500);
  }
 }

 fun4()
  {
//while((sw1==1)&&(sw2==1)&&(sw3==1)&&(sw4==1))
  {
   cmd_lcd(0x01);
   display_lcd("HELLO to ALL");

   led1=1;
led2=1;
led3=1;
  led4=0;
  delay_ms(500);
  led1=0;
  led2=0;
  led3=0;
  led4=0;
  delay_ms(500);
  }
 } 


save it as LCD & INT.c

No comments:

Post a Comment