Ir ao conteúdo
  • Cadastre-se
192el

Como criar uma rotina no MicroC pic 16f877A

Recommended Posts

Pessoal,

 

Estou fazendo uma rotina que faça primeiramente a leitura de 3 botões, PR1,PR2 e PR3.

Após um desses ser pressionado ele cai numa condição que deve ser pressionado um dos botões ch1,ch2,ch3,ch4,ch5.

ele deve ficar nessa rotina até ser pressionado um desses 5 botões.

Caso seja pressionado um desses ele volta para a rotina principal para fazer a leitura do  PR1,PR2 e PR3 novamente.

 

post-618345-0-23528300-1446300991_thumb. 

 

 

#define ch1         porta.f1 // chave 1
#define ch2         porta.f2 // chave 2
#define ch3         porta.f3 // chave 3
#define ch4         porta.f4 // chave 4
#define ch5         portd.f7 // chave 5
#define prof1       portd.f4 //professor 1
#define prof2       portd.f5 //professor 2
#define prof3       portd.f6 //professor 3
 
/*****************************************************************************
                               MODULO DE CONEXÃO DO LCD
*****************************************************************************/
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
/*****************************************************************************
                               ROTINAS
*****************************************************************************/
void professor(void);
void limpalcd3(void);
void limpalcd4(void);
/*****************************************************************************
                               Variaveis
*****************************************************************************/
 
/*****************************************************************************
                               Rotina Principal
*****************************************************************************/
void main(void)
{
trisa = 0b11011111; //Configura PORTA
trisc = 0b11011000; //Configura PORTC
trisd = 0b11111111;
cmcon = 0b00000111;
adcon1 = 0b00001110;
porta=0;
portc=0;
portd=0;
trava_lig;
lcd_init();// inicializa lcd
lcd_cmd (_lcd_clear); // limpa lcd
lcd_cmd (_lcd_cursor_off); // desliga cursor
delay_ms(2000);
lcd_out (1,5, "teste");
delay_ms(2000);
lcd_out (2,6, "teste");
 
while(1)          //Loop infinito
      {
             if (prof1 == 1){
             lcd_out(3,1, "PROF: um");
             trava_des;
             delay_ms(2000);
             lcd_out(4,1, "Escolha a chave");
             delay_ms(5000);
             limpalcd3();
             limpalcd4();
             trava_lig;
             professor();
             }
             if (prof2 == 1){
             lcd_out(3,1, "PROF: dois");
             trava_des;
             delay_ms(2000);
             lcd_out(4,1, "Escolha a chave");
             delay_ms(5000);
             limpalcd3();
             limpalcd4();
             trava_lig;
             professor();
             }
             if (prof3 == 1){
             lcd_out(3,1, "PROF:tres");
             trava_des;
             delay_ms(2000);
             lcd_out(4,1, "Escolha a chave");
             delay_ms(5000);
             limpalcd3();
             limpalcd4();
             trava_lig;
             professor();
             }
     }
}
void professor(void)
 {
     if (ch1 == 1){
     lcd_out (4,1, "CHAVE LABORATORIO 1");
     delay_ms(2000);
     limpalcd4();
     lcd_out (4,1, "FECHE A PORTA");
     delay_ms(2000);
     limpalcd4();}
     if (ch2 == 1){
     lcd_out (4,1, "CHAVE LABORATORIO 2");
     delay_ms(2000);
     limpalcd4();
     lcd_out (4,1, "FECHE A PORTA");
     delay_ms(2000);
     limpalcd4();}
     if (ch3 == 1){
     lcd_out (4,1, "CHAVE LABORATORIO 3");
     delay_ms(2000);
     limpalcd4();
     lcd_out (4,1, "FECHE A PORTA");
     delay_ms(2000);
     limpalcd4();}
     if (ch4 == 1){
     lcd_out (4,1, "CHAVE LABORATORIO 4");
     delay_ms(2000);
     limpalcd4();
     lcd_out (4,1, "FECHE A PORTA");
     delay_ms(2000);
     limpalcd4();}
     if (ch5 == 1){
     lcd_out (4,1, "CHAVE LABORATORIO 5");
     delay_ms(2000);
     limpalcd4();
     lcd_out (4,1, "FECHE A PORTA");
     delay_ms(2000);
     limpalcd4();}
 }
 void limpalcd3(void)
 { lcd_out(3,1, "                    ");}
 void limpalcd4(void)
 { lcd_out(4,1, "                    ");}
 
 
 
/*****************************************************************************
                               Fim do Programa
*****************************************************************************/

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×