Menu Principal:
Prácticas > Práctica 11
Montemos ahora el circuito de la figura.
Son dos displays de 7 segmentos con cátodo común.
Los ánodos van conectados al puerto B y los cátodos a las puertas RA2 y RA3.
Debemos escribir un programa que nos muestre en los displays la cuenta de las pulsaciones sobre el contacto conectado a RA0.
El diagrama de flujo del programa será similar a éste.
Y el programa resultante podría ser el que aparece a continuación.
Se ha hecho uso de funciones y subrrutinas para que pueda servir de ejemplo de como utilizarlos.
program Contador
symbol Display1 = 4
symbol Display2 = 8
dim Contador as word
Unidades,
Decenas,
pass as byte
sub function LED_Mask(dim number as byte)as byte
select case number
case 0 result = $3F ' mask '0'
case 1 result = $06 ' mask '1'
case 2 result = $5B ' mask '2'
case 3 result = $4F ' mask '3'
case 4 result = $66 ' mask '4'
case 5 result = $6D ' mask '5'
case 6 result = $7D ' mask '6'
case 7 result = $07 ' mask '7'
case 8 result = $7F ' mask '8'
case 9 result = $6F ' mask '9'
end select 'case
end sub
sub function Boton_soltado as byte
result = false
if (Button(PORTA, 0, 1, 1)) then
pass = true
end if
if pass and (Button(PORTA, 0, 1, 0)) then
pass = false
result = true
end if
end sub
sub procedure Num_a_Cifras(dim number as word)
dim var as byte
var = (number) div 10
Decenas = LED_Mask(var)
var = number - 10*var
Unidades = LED_Mask(var)
end sub
sub procedure Mostrar_Cifra(dim cifra, display as byte)
PORTB = cifra
PORTA = display
Delay_us(1000)
PORTA = $00
end sub
sub procedure Mostrar_Num(dim numero as word)
Num_a_Cifras(numero)
Mostrar_Cifra(Unidades, Display1)
if Contador >= 10 then
Mostrar_Cifra(Decenas, Display2)
end if
end sub
main:
INTCON = $00
TRISB = $00
TRISA = $01
Contador = 0
pass = false
while true
if Boton_soltado then
inc(Contador)
if Contador = 100 then
Contador = 0
end if
end if
Mostrar_Num(Contador)
wend
end.