Você está na página 1de 4

Esteira - contador de objetos

Por Rafael Varango de Aguiar

CDIGO FONTE :
/**************************************************************************
*
Esteira
Contadora
de
Objetos
*
***************************************************************************
* Rafael Varago de Aguiar
Varago Automatics
*
***************************************************************************
*
Verso:
2.2
*
*
Data:
20/09/2010
*
*
*
*
RAM:
5%
ROM:
17%
*
***************************************************************************
* Controle de 2 Displays 7 segmentos que apresentaram a contagem das
peas*
* ao contar uma pea uma buzina tambem soara, o projeto ter a opo de
*
* congelar a contagem, resetar a contagem, guardar valor da contagem na
*
* memria EEPROM, e por ltimo ter a opo de recuperar est valor
sempre*
* que desejado, ao contar uma pea uma pequena buzina acionada por
*
* alguns instantes para servir de sinalizador auditivo
*
**************************************************************************/
#include
<16f628a.h>
//
Informa
o
PIC
#fuses
XT,NOWDT,NOPROTECT,PUT,BROWNOUT,NOLVP,NOCPD,NOMCLR,IN
TRC_IO
//
Configs
internas
#use delay (clock=4000000) // Seleciona delay para 4Mhz de clock
/**************************************************************************
**************************************************************************/
//
Definies
de
pinos

#define
ldr
pin_a0
//
Sensor
de
passagem
de
peas
#define bz pin_a1 // Indicador sonoro de passagem de peas
#define
stop
pin_a2
//
Congela
a
Contagem
#define
reset
pin_a3
//
Reseta
a
"
#define
gcont
pin_a4
//
Grava
a
"
na
EEPROM
#define
rcont
pin_a5
//
Recupera
a
"
na
"
#define
dd
pin_a6
//
Catodo
Display
de
unidade
#define
du
pin_a7
//
"
"
de
dezena
/**************************************************************************
**************************************************************************/
//
Variaveis
globais
int cont; // Armazanam o valor da contagem do placar
/**************************************************************************
**************************************************************************/
// Tabela para converter o valor da contagem para exibir no display
byte const tabela[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xe7};
/**************************************************************************
**************************************************************************/
void jogacont(void){ // Rotina para jogar valores no contador
output_high(du);
//
Apaga
display
de
unidade
output_low(dd);
//
Seleciona
display
de
dezena
output_b(tabela[cont/10]);
//
Joga
o
valor
do
contador
delay_ms(50);
//
Tempo
para
display
ligado
output_high(dd);
//
Apaga
display
de
dezena
output_low(du);
//
Seleciona
display
de
unidade
output_b(tabela[cont%10]);
//
Joga
o
valor
do
contador
delay_ms(50);
//
Tempo
para
display
ligado
return;
//
Retorna
}
int
para_cont(int
a){
//
Rotina
para
parar
contagem
while(1){ // Lao infinito at STOP ser novamente pressionado
jogacont(); // Chama rotina para jogar valores no contador
if(!input(stop)){ // Executa bloco caso boto STOP for pressionado
while(!input(stop)){
}
//
Lao
para
soltar
tecla
return
(1);
}
if(!input(reset)){ // Zera o contador caso RESET sej pressionado
while(!input(reset)){
}
//
Lao
para
soltar
tecla
cont=0;
//
Zera
cont
}
if(!input(gcont)){ // Grava valor do contador na EEPROM
while(!input(gcont)){
}
//
Lao
para
soltar
tecla
write_eeprom(1,cont); // Salva o valor do contador na EEPROM
}
if(!input(rcont)){ // Recupera valor do contador na EEPROM

while(!input(rcont)){
}
//
Lao
para
soltar
tecla
cont=read_eeprom(1); // Recupera o valor do contador da EEPROM
}
}
}
//
Fim
do
bloco
para
boto
STOP
pressionado
/**************************************************************************
**************************************************************************/
void
main(void){
//
Rotina
principal
int temp,aux; // Variavel auxiliar de tempo de execuo de lao
aux=0;
//
Variavel
para
controlar
lao
set_tris_a(0b00111101); // configurao da direo dos pinos de I/O
set_tris_b(0b00000000);
cont=0; // Garante que o contador comece em zero
delay_ms(300);
//
Estabilizao
da
EEPROM
while(1){
//
Lao
de
repetio
infinito
if(!input(ldr)){ // Testa se sensor foi cortado (passagem de peas)
while(!input(ldr)){
}
//
Lao
para
sensor
voltar
ao
estado
normal
if(cont < 99){ // Executa se o contador estiver abaixo do limite
cont
++;
//
Incrementa
1
em
cont
temp=5; // Joga 5 em temp para definir tempo para disparar buzzer
while(temp != 0){ // Lao para acionar o buzzer
output_high(bz);
//
Joga
nivel
alto
no
buzzer
delay_ms(5); // Tempo para gerar frequencia de nivel alto
output_low(bz);
//
Joga
nivel
baixo
no
buzzer
delay_ms(5); // Tempo para gerar frequencia de nivel baixo
temp
--;
//
Decrementa
1
de
temp
delay_ms(temp); // Delay carregado com o valor de temp
}
//
Fim
do
lao
do
buzzer
}
else cont=0; // Se contador j estiver em 99 o mesmo zerado
}
//
Fim
do
teste
de
sensor
cortado
if(!input(stop)){ // Executa bloco caso boto STOP for pressionado
while(!input(stop)){
}
//
Lao
para
soltar
tecla
while(!para_cont(aux)){ // Chama rotina para parar contagem
}
}
//
Fim
do
bloco
para
STOP
if(!input(reset)){ // Zera o contador caso RESET sej pressionado
while(!input(reset)){
}
//
Lao
para
soltar
tecla
cont=0;
//
Zera
cont
}
if(!input(gcont)){ // Grava valor do contador na EEPROM
while(!input(gcont)){
}
//
Lao
para
soltar
tecla
write_eeprom(1,cont); // Salva o valor do contador na EEPROM

}
if(!input(rcont)){ // Recupera valor do contador na EEPROM
while(!input(rcont)){
}
//
Lao
para
soltar
tecla
cont=read_eeprom(1); // Recupera o valor do contador da EEPROM
}
jogacont(); // Chama rotina para jogar valores no contador
}
//
Fim
do
lao
de
repetio
} // Fim do programa