Está en la página 1de 4
Bueno aquí el programa con pruteus. Espero sea de utilidad: el objetivo es hacer un
Bueno aquí el programa con pruteus. Espero sea de utilidad: el objetivo es hacer un

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

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

' con refrescamiento a través de los pines RA0

' * Configuración:

' MCU:

PIC16F84A

' Oscilador:

XT, 4.000 MHz

' SW:

mikroBasic v7.2

RB7,

segment A a RB0,

RA3 en porta.

G

a RB6)

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

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

'BUZZER en on conectado en PA0

'delay_ms(50)

'Espera

'porta.0=0

'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) 'Espera porta.0=0 'PA0 en OFF (extinguido buzzer) cuenta=0 end if 'Limpia o borra el

delay_ms(2000)

'Espera

porta.0=0

'PA0 en OFF (extinguido buzzer)

cuenta=0

end if

'Limpia o borra el número de cuentas

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]

'Coloca la cifra correspondiente

porta=4

'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]

'Coloca la cifra correspondiente

porta=8

delay_ms(85)

'Enciende el 2o display PortA.3=1

'Espera 5 milisegundos

wend

end.