Você está na página 1de 4

/*******************************************************************************

FileName: Semaforo.C- FATEC SANTO ANDRÉ


Dependencies: Veja a seção de includes
Processor: PIC18F4550
Compiler: MPLAB X v3.65 + XC8 1.40
Company: FATEC Santo Andre
Author: Gabriel dos Santos Jeronimo
Date: 13/10/2021
Software License Agreement: Somente para fins didáticos
*******************************************************************************
File Description: Simula um Semaforo de duas vias.
*
Change History:
*
* Created on 13 de Outubro de 2021, 12:17

*******************************************************************************/

// Includes do Compilador

#include <xc.h>
#include <stdio.h>
#include <p18f4550.h>

// Includes do Projeto
// Observe que usamos aspas
#include "config_4550.h" //Quando usar o PICSIM LAB
//#include "Config.h" //Quando usar a placa FATEC
#include "displayLCD.h"

//Protótipos das Funções

void delay_ms(unsigned int tempodeAtraso);

//Variáveis Globais

//=============================================================================

// Define os apelidos das variáveis do PIC para o projeto SEMAFORO

#define VM_VIA PORTBbits.RB7


#define AM_VIA PORTBbits.RB6
#define VD_VIA PORTBbits.RB5

#define VM_ACESSO PORTBbits.RB4


#define AM_ACESSO PORTBbits.RB3
#define VD_ACESSO PORTBbits.RB2

#define ledRB1 PORTBbits.RB1


#define ledRB0 PORTBbits.RB0

#define SENSOR PORTEbits.RE0


#define botaoB1 PORTEbits.RE1
#define botaoB2 PORTEbits.RE2

//===========================INICIO DO MAIN=====================================

void main(void)
{
// Telas de Saudação

const unsigned char Texto_0[] = "FATEC S.A. 2021 ";


const unsigned char Texto_1[] = " SEMAFORO ";
const unsigned char Texto_2[] = "B1 ACIONADO: x ";
const unsigned char Texto_3[] = " ";

// Funções de Trabalho e Calculo


unsigned int contagem = 0;

// Configura os I/O Digitais

ADCON1 = 0x0F; // Define somente as entradas digitais


TRISB = 0b00000000; // Define todos os pinos 0 = Saída e 1=Entrada
TRISE = 0b11111111;

// Configura o Timer 0 para gerar um pulso a cada 1 segundo

T0CS = 0; //Seleciona clock interno


T0PS2 = 1; //Seleciona prescaler = 256
T0PS1 = 1;
T0PS0 = 1;
PSA = 0; //Seleciona sinal do prescaler
T08BIT = 0; //Seleciona o modo de 16 bits
TMR0 = 18661; //Recarrega o inicio do Timer 0
TMR0 = 1;

// Prepara o Display

ConfiguraLCD();
delay_ms(1);
PosicaoCursorLCD(1, 1);
EscreveFraseRamLCD(Texto_0);
PosicaoCursorLCD(2, 1);
EscreveFraseRamLCD(Texto_1);
DesligaCursor();
delay_ms(3000);

PosicaoCursorLCD(1, 1);
EscreveFraseRamLCD(Texto_2);
PosicaoCursorLCD(2, 1);
EscreveFraseRamLCD(Texto_3);

// Laço Infinito

while(1)
{

// NESTE PROGRAMA, CONSIDERE QUE PARA ACENDER QUALQUER LÂMPADA DO


// SEMÁFORO SERÁ NECESSÁRIO COLOCAR A VARIÁVEL CORRESPONDENTE IGUAL A 1
// VEJA O EXEMPLO ABAIXO
// PARA DETECTAR A PRESENÇA DE UM VEÍCULO, BASTA PRESSIONAR O BOTÃO B1
// E NO PROGRAMA AVALIAR SE O BOTÀO FOI PRESSIONADO.

VM_ACESSO = 1;

if(SENSOR == 0)
{

AM_VIA = 1;
delay_ms(30000);
VM_VIA = 1;

if (VM_VIA == 1){
delay_ms(10000);
VD_ACESSO = 1;
delay_ms(30000);
AM_ACESSO = 1;
delay_ms(20000);
VM_ACESSO = 1;

if (VM_ACESSO == 1){
VD_VIA = 1;
delay_ms(10000);

if (SENSOR == 0 ){

contagem = contagem + 1;
PosicaoCursorLCD(1,13);
EscreveInteiroLCD(contagem);
}

//==============================FIM DO MAIN=====================================

// Esta função é usada para gerar um delay programável, cuja base de tempo é de
// 1 ms. Assim, se você colocar delay_ms(500), ele esperará um tempo de 500 ms
// para seguir o programa.

void delay_ms(unsigned int tempodeAtraso) // Gera delay para o novo compilador


{
while (--tempodeAtraso)
{
__delay_ms(1);
}
}

Você também pode gostar