utilización de maquina de estado-fase1


Aquí mostramos nuestro código realizado según el bosquejo que dejo el profesor don la programación se aplica para dos casos según se requiere el estado que se muestre en el LCD

........................................................................................................................................................
#include <16f877a.h>
#fuses hs, nowdt
#use delay(clock=20M)
#define lcd_data_port getenv("sfr:portd")
#define lcd_enable_pin pin_d3
#define lcd_rs_pin pin_d2
#define lcd_rw_pin pin_A0
#define lcd_data4 pin_d4
#define lcd_data5 pin_d5
#define lcd_data6 pin_d6
#define lcd_data7 pin_d7

#define use_portb_kbd true
#include <lcd.c>
#include <kbd.c>
#include <string.h>

int point,estado, max,min;

void estadoUno(); //SetPoint
void estadoDos(); //
void programacion();
void cambioEstado();

void main(){
   point=50;
   max=100;
   min=0;
   estado=2;
   port_b_pullups(true);
   lcd_init();


   while(true)
   {  
      while(estado==1){//ejecución
         estadoUno();
         cambioEstado();
      }
      while(estado==2){//Programación
         estadoDos();
         programacion();
         cambioEstado();
      }
   }
}

void programacion(){
    if(input(PIN_A1)){
      if(point < max ){
         point +=1;
         delay_ms(200);
      }    
    }
    if(input(PIN_A2)){
       if(point > min){
         point -=1;
         delay_ms(200);
      }
    }
}
void cambioEstado(){

    if(input(PIN_A3)){
   
      printf(lcd_putc,"\f");
      if(estado == 1){
         estado=2;
      }
      else{
         estado = 1;
      }
      delay_ms(400);
    }
}


void estadoUno(){
   lcd_gotoxy(1,1);
   printf(lcd_putc,"Working...");
}
void estadoDos(){
   lcd_gotoxy(1,2);
   printf(lcd_putc,"Value: %i",point);
}

....................................................................................................................................................


Simulamos en proteus para de esa manera quedar seguro de su funcionamiento











Comentarios