Contador 0-99 con PIC16F84A y Mikrobasic

Bueno aquí el programa con pruteus. Espero sea de utilidad: el objetivo es hacer un contador de 0-99 con el PIC16F84A Co

Views 167 Downloads 43 File size 193KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

Bueno aquí el programa con pruteus. Espero sea de utilidad: el objetivo es hacer un contador de 0-99 con el PIC16F84A Con el fin de hacerlo manualmente para contar ya sea con SW1 y Reset SW2. También se podría cambiar este SW1, por algún sensor de movimiento u otro.

Les dejo también el programa con MIKROBASIC y arriba como programar las casillas que solo selecciono 4: program Cont7seg0a9CNM ' *MikroElektronika, 2012 ' *Descripcion:TIEEE, FIME, UANL,MX. 2012-2013 ' Prof: Carlos Navarro Morín ' *Este codigo demuestra el uso de 2 display de 7 segmentos de cátodo comun ' en modo multiplexado trabajando en un contador de 0 a 99. ' Todos los display connectados al portb(RB0..RB7, segment A a RB0,...G a RB6) ' con refrescamiento a través de los pines RA0..RA3 en porta.

' * Configuración: '

MCU:

PIC16F84A

'

Oscilador:

XT, 4.000 MHz

'

SW:

mikroBasic v7.2

const display as byte[10]=(63,6,91,79,102,109,125,7,127,111) 'Códigos para 7 seg dim millar as word

'Millares del conteo

dim centena as word

'Centenas del conteo

dim decena as word

'Decenas del conteo

dim unidad as word

'unidades del conteo

dim cuenta as word

'Cuenta el numero de sensados

'ADCON1 = 7

'Puerto A digital este solo en PIC con puerto digital en este caso no.

trisa=%00010000

'RA4 entrada resto como salida

trisb=%10000000

'RB7 entrada, resto salida

porta=0

'Limpia Porta A

portb=0

'Limpia Porta B

cuenta=0

'Inicializa numero de cuentas

porta.0=1 delay_ms(2000) porta.0=0

while true

'Ciclo INFINITO

if Button(PORTB, 7, 10, 1) then cuenta=cuenta+1

'Incrementa la cuenta

'porta.0=1 'delay_ms(50) 'porta.0=0

'BUZZER en on conectado en PA0 'Espera 'PA0 en OFF (extinguido buzzer)

end if

rem ------Si se supera la cuenta maxima o hay un reset---if (cuenta >= 10000) or (porta.4=1) then porta.0=1

'BUZZER en on conectado en PA0

delay_ms(2000) porta.0=0 cuenta=0

'Espera 'PA0 en OFF (extinguido buzzer)

'Limpia o borra el número de cuentas

end if

rem -----Calculo matemático----'División con rendondeo "/" decena=cuenta-(millar*1000)-(centena*100) decena=decena/10 unidad=cuenta-(millar*1000)-(centena*100)-(decena*10)

rem -----Pilotea Display 1 (Decena)-----porta=0

'Borra todo el display portb=display[decena] porta=4

'Coloca la cifra correspondiente

'Enciende el 1er display PortA.2=1

delay_ms(85)

'Espera 5 milisegundos

rem -----Pilotea Display 2 (Unidad')-----porta=0

'Borra todo el display

portb=display[unidad] porta=8 delay_ms(85) wend end.

'Coloca la cifra correspondiente

'Enciende el 2o display PortA.3=1 'Espera 5 milisegundos