วันพฤหัสบดีที่ 7 กุมภาพันธ์ พ.ศ. 2562

งานที่13 Water Level Indicator and Controller using PIC Microcontroller


code

Code

// LCD module connections
sbit LCD_RS at RB2_bit;
sbit LCD_EN at RB3_bit;
sbit LCD_D4 at RB4_bit;
sbit LCD_D5 at RB5_bit;
sbit LCD_D6 at RB6_bit;
sbit LCD_D7 at RB7_bit;

sbit LCD_RS_Direction at TRISB2_bit;
sbit LCD_EN_Direction at TRISB3_bit;
sbit LCD_D4_Direction at TRISB4_bit;
sbit LCD_D5_Direction at TRISB5_bit;
sbit LCD_D6_Direction at TRISB6_bit;
sbit LCD_D7_Direction at TRISB7_bit;
// End LCD module connections

char txt1[] = "Water";
char txt2[] = "Level";
char txt3[] = "Indicator";
char txt4[] = "And Controller";

char mtr1[] = "Motor ";
char mtr2[] = "OFF";
char mtr3[] = "ON";

char wtr1[] = "Level: ";
char wtr2[] = "Very Low";
char wtr3[] = "Low";
char wtr4[] = "Medium";
char wtr5[] = "High";
char wtr6[] = "Full";

void main() 
{

  int i = 0;
  int c = 16;
  int b = 0;
  CMCON = 0x07;
  ADCON1 = 0x06;
  TRISA = 0x0F;                  // set direction to be input
  PORTA = 0x00;
  PORTD = 0x00;
  PORTC = 0x00;
  TRISB = 0x00;                  //  set direction to be output
  TRISC = 0x00;                  // set direction to be output
  TRISD = 0x80;                  // set direction to be output

  PORTD.F2 = 1;
  PORTD.F7 = 1;

  Lcd_Init();                    // Initialize LCD
  Lcd_Cmd(_LCD_CLEAR);           // Clear display
  Lcd_Cmd(_LCD_CURSOR_OFF);      // Cursor off
  Lcd_Out(1,1,txt1);             // Write text in first row
  Lcd_Out(2,1,txt2);             // Write text in second row
  Delay_ms(500);
  Lcd_Cmd(_LCD_CLEAR);           // Clear display
  Lcd_Out(1,1,txt3);             // Write text in first row
  Lcd_Out(2,1,txt4);             // Write text in second row
  Delay_ms(500);

  // Moving text
  for(i=0; i<15; i++) 
  {    
    Lcd_Cmd(_LCD_SHIFT_RIGHT);   
    Delay_ms(125);
  } 

  i=0; //Motor Status OFF
 
  do 
  {    
    Lcd_Cmd(_LCD_CLEAR);    
    Lcd_Out(1,1,wtr1);    
    Lcd_Out(2,1,mtr1);    
    if(c>0)
    {
      PORTD.F2 = 1               //LCD Backlight ON
      c--;
    }
    else
      PORTD.F2 = 0;              //LCD Backlight OFF
      
    if(b>0)
    {
      PORTD.F0 = 1;              //Buzzer ON
      Delay_ms(125);
      PORTD.F0 = 0;              //Buzzer OFF
      b--;
    }
      
    if(PORTD.F7 == 0)            //Manual Backlight ON
      c = 16;
     
    if(PORTA == 0x0F)
    {
       PORTD.F1 = 1;
       Lcd_Out(1,8,wtr2);
       Lcd_Out(2,7,mtr3);
       PORTC = 1;
       if(i == 0)
       {
          c = 16;                //Backlight
          b=3;                   //Buzzer
       }
       i=1;
    }
    else if(PORTA == 0x0E)
    {
       Lcd_Out(1,8,wtr3);
       if(i == 1)
          Lcd_Out(2,7,mtr3);
       else
          Lcd_Out(2,7,mtr2);
       PORTC = 3;                 //LED Bar
    }
    else if(PORTA == 0x0C)
    {
       Lcd_Out(1,8,wtr4);
       if(i == 1)
          Lcd_Out(2,7,mtr3);
       else
          Lcd_Out(2,7,mtr2);
       PORTC = 7;                  //LED Bar
    }
    else if(PORTA == 0x08)
    {
       Lcd_Out(1,8,wtr5);
       if(i == 1)
          Lcd_Out(2,7,mtr3);
       else
          Lcd_Out(2,7,mtr2);
          PORTC = 15;              //LED Bar
    }
    else if(PORTA == 0x00)
    {
       Lcd_Out(1,8,wtr6);
       Lcd_Out(2,7,mtr2);
       PORTD.F1 = 0;              // Motor OFF
       if(i == 1)
       {
         c = 16;                  //Backlight
         b = 3;                   //Buzzer
       }
       i=0;                       //Motor Status Updated
       PORTC = 31;                //LED Bar
    }
    else
       PORTA = 0x0F;
   Delay_ms(125);


  }while(1);                     // Endless loop
}

อ้างอิง

ไม่มีความคิดเห็น:

แสดงความคิดเห็น