IV SEMANA DE ENGENHARIA
Universidade São Francisco - Campus Swift-Campinas/SP
![]() |
Campus Campinas-SP |
Desenvolvendo o Cronômetro:
O projeto deste cronômetro tem o objetivo de contar de 00:00
até 99:99, desta forma utilizaremos quatro displays de 7 segmentos para mostrar a informação. Neste cronômetro utilizaremos o microcontrolador PIC16F628A em
conjunto com um conversor binário para display de 7 segmentos HEF4511B.
Utilizaremos quatro pinos do microcontrolador PIC16F628A
para controlar o conversor HEF4511B. Esses quatro pinos (RB0, RB3, RB2, RB1)
serão conectados nas quatro entradas de dados do HEF4511B (DA, DB, DC, DD),
isto é, se as quatro saídas do microcontrolador forem iguais a 0 (zero –
binário) o conversor HEF4511B irá mostrar no display o número 0 (zero - decimal).
Portanto as saídas de A à G do conversor HEF4511B serão conectadas nos
respectivos segmentos dos displays de sete segmentos, catodo comum.
Os segmentos dos displays serão conectados em cascata, isto
é, segmento de um display conectado com o segmento igual do próximo display.
A informação em binário é calculada pela programação gravada no PIC16F628A, é enviada para a entrada de dados do HEF4511B. Com a informação convertida de binário para 7 segmentos, o PIC16F628A, pelo programa, indica qual display vai ascender, isto é, se a informação é da dezena de segundos, somente esse display será ativado. Quatro pinos do PIC16F628 efetuam esse controle que são: RA4 - display unidade de segundos, RA5 - display dezena de segundos, RA6 - unidade de minutos, RA7 - dezena de minutos.
A informação em binário é calculada pela programação gravada no PIC16F628A, é enviada para a entrada de dados do HEF4511B. Com a informação convertida de binário para 7 segmentos, o PIC16F628A, pelo programa, indica qual display vai ascender, isto é, se a informação é da dezena de segundos, somente esse display será ativado. Quatro pinos do PIC16F628 efetuam esse controle que são: RA4 - display unidade de segundos, RA5 - display dezena de segundos, RA6 - unidade de minutos, RA7 - dezena de minutos.
Uma porta do microcontrolador PIC16F628A será utilizada como
função pause do cronômetro (RA1) e outra porta (RA2) será utilizada como função
reset do cronômetro. Ambas as funções são controladas por botões NA, que ao
pressionar envia nível lógico alto na entrada do PIC16F628A.
Características do PIC 16F628A:
- 2048 palavras de 14 bits de memória de programa FLASH;
- 224 bytes de memória de dados RAM;
- 128 bytes de memória de dados EEPROM;
- 3 Temporizadores/ Contadores;
- 2 Comparadores analógicos;
- Módulo CCP (Captura/Comparação/PWM);
- Comunicação serial síncrona e assíncrona (USART);
- Tensão de referência interna programável;
- Encapsulamento DIP de 18 terminais;
- 16 Terminais configuráveis como entrada ou saída independentemente;
- 10 Interrupções;
- Vários modos de oscilador (XT, LP, HS, RC interno e externo);
- Temperatura de trabalho: -40°C até +125°C;
- Tensão de trabalho: 3,0 Vcc A 5,5Vcc;
- Tensão máxima no pino MCLR (Em relação ao Vss): -0,3 até +14,0Vcc;
- Corrente máxima de saída de uma porta: 25mA;
- Corrente máxima de entrada de uma porta: 25mA;
- Corrente máxima de entrada dos PORT A+PORT B: 200mA;
- Corrente máxima de saída dos PORT A+PORT B: 200mA;
Pinos do PIC16F628A:
![]() |
Imagem retirada da folha de dados do componente. |
Pinos do Conversor HEF4511B:
Imagem retirada da folha de dados do componente. |
Neste projeto não abordaremos todas as funções do microcontrolador PIC16F628A, apenas
abordaremos como foi realizada a programação do microcontrolador, e como foi
projetado o circuito do cronômetro.
Abaixo temos o circuito do cronômetro:
Esquema elétrico desenvolvido no programa Proteus 8 Professional®. |
Abaixo temos a programação do PIC16F628:
#INCLUDE<16F628A.H> //INCLUI A BIBLIOTECA DO PIC16F628A
#USE DELAY(CLOCK=10000000) //USE UM CRISTAL DE 10MHz
#FUSES NOWDT
#FUSES INTRC_IO
#FUSES NOPUT
#FUSES NOPROTECT
#FUSES NOBROWNOUT
#FUSES NOMCLR
#FUSES NOLVP
#FUSES NOCPD
#FUSES INTRC_IO
#FUSES NOPUT
#FUSES NOPROTECT
#FUSES NOBROWNOUT
#FUSES NOMCLR
#FUSES NOLVP
#FUSES NOCPD
#BYTE RA=0X05
#BYTE RB=0X06
#BYTE RB=0X06
#BIT DA=RB.0 //VAI PARA O PINO "DA" DO 4511#BIT DB=RB.3 //VAI PARA O PINO "DB" DO 4511
#BIT DC=RB.2 //VAI PARA O PINO "DC" DO 4511
#BIT DD=RB.1 //VAI PARA O PINO "DD" DO 4511
#BIT DC=RB.2 //VAI PARA O PINO "DC" DO 4511
#BIT DD=RB.1 //VAI PARA O PINO "DD" DO 4511
#BIT D1=RB.4 //KATODO COMUM DO DISPLAY DA UNIDADE
#BIT D2=RB.5 //KATODO COMUM DO DISPLAY DA DEZENA
#BIT D3=RB.6 //KATODO COMUM DO DISPLAY DA CENTENA
#BIT D4=RB.7 //KATODO COMUM DO DISPLAY DO MILHAR
#BIT D2=RB.5 //KATODO COMUM DO DISPLAY DA DEZENA
#BIT D3=RB.6 //KATODO COMUM DO DISPLAY DA CENTENA
#BIT D4=RB.7 //KATODO COMUM DO DISPLAY DO MILHAR
#BIT BOTAO2=RA.2 //BOTAO DE RESETE (ZERA A CONTAGEM)
#BIT PAUSE=RA.1 //BOTAO DE PAUSE
#BIT PAUSE=RA.1 //BOTAO DE PAUSE
INT UNI; //VARIAVEL UNIDADE
INT DEZ; //VARIAVEL DEZENA
INT CEN; //VARIAVEL CENTENA
INT MIL; //VARIAVEL MILHAR
INT NUMERO; //VARIAVEL DO DISPLAY DE 7 SEGMENTOS(0 A 9
INT CICLOS; //VARREDURA DOS DISPLAYS(TAXA DE ATUALIZAÇÃO)
INT DEZ; //VARIAVEL DEZENA
INT CEN; //VARIAVEL CENTENA
INT MIL; //VARIAVEL MILHAR
INT NUMERO; //VARIAVEL DO DISPLAY DE 7 SEGMENTOS(0 A 9
INT CICLOS; //VARREDURA DOS DISPLAYS(TAXA DE ATUALIZAÇÃO)
DIVERSOS() //SUB ROTINA DO CONTADOR
{
UNI++;
IF(UNI==10)UNI=0; //CONTA ATE 9 DEPOIS ZERA A UNIDADE
ELSE GOTO SAI;
DEZ++;
IF(DEZ==6)DEZ=0; //CONTA ATE 5 DEPOIS ZERA A DEZENA
ELSE GOTO SAI;
CEN++;
IF(CEN==10)CEN=0; //CONTA ATE 9 DEPOIS ZERA A CENTENA
ELSE GOTO SAI;
MIL++;
IF(MIL==10)MIL=0; //CONTA ATE 9 DEPOIS ZERA O MILHAR
SAI:
CICLOS=0; //ZERA CICLOS
}
FORMATO() //CONVERSSOR DECIMAL PARA BINARIO (SAIDA DO PIC PARA A ENTRADA DO 4511)
{
IF(NUMERO==0)DA=0,DB=0,DC=0,DD=0;
IF(NUMERO==1)DA=1,DB=0,DC=0,DD=0;
IF(NUMERO==2)DA=0,DB=1,DC=0,DD=0;
IF(NUMERO==3)DA=1,DB=1,DC=0,DD=0;
IF(NUMERO==4)DA=0,DB=0,DC=1,DD=0;
IF(NUMERO==5)DA=1,DB=0,DC=1,DD=0;
IF(NUMERO==6)DA=0,DB=1,DC=1,DD=0;
IF(NUMERO==7)DA=1,DB=1,DC=1,DD=0;
IF(NUMERO==8)DA=0,DB=0,DC=0,DD=1;
IF(NUMERO==9)DA=1,DB=0,DC=0,DD=1;
}
MAIN()//INICIA O PROGRAMA
{
SET_TRIS_A(0B00000111); //SETA O PORT A COMO ENTRADA
SET_TRIS_B(0B00000000); //SETA TODO O PORTO B COMO SAIDA
{
SET_TRIS_A(0B00000111); //SETA O PORT A COMO ENTRADA
SET_TRIS_B(0B00000000); //SETA TODO O PORTO B COMO SAIDA
COMUM:
UNI=0,DEZ=0,CEN=0,MIL=0,CICLOS=0; //ZERA TODAS AS VARIAVEIS (CONDIÇÃO INICIAL)
ESPERA:
IF(BOTAO2==0)UNI=0,DEZ=0,CEN=0,MIL=0,CICLOS=0; //SE O BOTAO2 FOR PRESSIONADO ZERA TODAS AS VARIAVEIS
IF(BOTAO2==0)UNI=0,DEZ=0,CEN=0,MIL=0,CICLOS=0; //SE O BOTAO2 FOR PRESSIONADO ZERA TODAS AS VARIAVEIS
NUMERO=UNI,FORMATO();
D1=0,D2=1,D3=1,D4=1,DELAY_US(990); //ACENDE O DISPLAY DA UNIDADE DURANTE 1MS E APAGA O RESTANTE
NUMERO=DEZ,FORMATO();
D1=1,D2=0,D3=1,D4=1,DELAY_US(990); //ACENDE O DISPLAY DA DEZENA DURANTE 1MS E APAGA O RESTANTE
NUMERO=CEN,FORMATO();
D1=1,D2=1,D3=0,D4=1,DELAY_US(990); //ACENDE O DISPLAY DA CENTENA DURANTE 1MS E APAGA O RESTANTE
NUMERO=MIL,FORMATO();
D1=1,D2=1,D3=1,D4=0,DELAY_US(990); //ACENDE O DISPLAY DO MILHAR DURANTE 1MS E APAGA O RESTANTE
D1=0,D2=1,D3=1,D4=1,DELAY_US(990); //ACENDE O DISPLAY DA UNIDADE DURANTE 1MS E APAGA O RESTANTE
NUMERO=DEZ,FORMATO();
D1=1,D2=0,D3=1,D4=1,DELAY_US(990); //ACENDE O DISPLAY DA DEZENA DURANTE 1MS E APAGA O RESTANTE
NUMERO=CEN,FORMATO();
D1=1,D2=1,D3=0,D4=1,DELAY_US(990); //ACENDE O DISPLAY DA CENTENA DURANTE 1MS E APAGA O RESTANTE
NUMERO=MIL,FORMATO();
D1=1,D2=1,D3=1,D4=0,DELAY_US(990); //ACENDE O DISPLAY DO MILHAR DURANTE 1MS E APAGA O RESTANTE
IF(PAUSE==0)GOTO ESPERA;
IF(CICLOS<250)CICLOS++; //DEFINE A TAXA DE ATUALIZAÇÃO DOS DISPLAYS EM 250 VEZES
IF(CICLOS<250)CICLOS++; //DEFINE A TAXA DE ATUALIZAÇÃO DOS DISPLAYS EM 250 VEZES
ELSE DIVERSOS();
GOTO ESPERA;
}
GOTO ESPERA;
}
Gravando o microcontrolador PIC16F628A:
Para gravarmos o programa acima foi necessário a utilização do gravador de PIC K150 USB.

Para mais informações acesse sobre como instalar o gravador:
Vídeo do circuito montado em um protoboard Minipa:
Desenvolvedores do projeto Cronômetro:
Alunos do 8º Semestre (2014) de Engenharia Elétrica da Universidade São Francisco, campus Swift - Campinas-SP.
Na foto abaixo os desenvolvedores desse projeto, da esquerda para a direita, são:
- Mauricio
Antônio Da Silva;
- Gilberto Dinis Soares Junior;
- Luiz Flavio Viana;
- Gustavo Oliveira Silva.
- Gilberto Dinis Soares Junior;
- Luiz Flavio Viana;
- Gustavo Oliveira Silva.
![]() |
Foto do grupo na apresentação do projeto interdisciplinar realizado no dia 27/10/2014 |