Practica #3 (Contador de 0 a 9) *Vamos a realizar un programa que cuente de 0 a 9 y esto lo visualizaremos en un display. 1. Tenemos que agregar algo nuevo a este programa, vamos a necesitar una variable con vectores que nos represente los números del 0 al 9, necesitamos indicarle al programa el código de cada número para que los pueda representar en el display. Como sabemos un display tiene 8 segmentos incluyendo el punto, y vamos a darle a cada número un código:
0 1 2 3 4 5 6 7 8 9
h 0 0 0 0 0 0 0 0 0 0
g 0 0 1 1 1 1 1 0 1 1
f 1 0 0 0 1 1 1 0 1 1
e 1 0 1 0 0 0 1 0 1 0
d 1 0 1 1 0 1 1 0 1 1
c 1 1 0 1 1 1 1 1 1 1
b 1 1 1 1 1 0 0 1 1 1
a 1 0 1 1 0 1 1 1 1 1
Ahora pasemos esto a hexadecimal: 0 3f 1 06 2 5B 3 4F 4 66 5 6D 6 7D 7 07 8 7F 9 6F Ya tenemos el código en hexadecimal de cada número, ahora tenemos que colocarlo en la variable y a esta variable la vamos a llamar display. int Display[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; Es una variable de 8 bits, son 10 vectores y dentro de los corchetes los códigos en hexa de los números del 0 al 9 ordenados; ejemplo, si en el programa llama al vector 5 este busca la posición 5 y donde fue llamado pone el código que esta en el vector 5 que en este caso es el numero 4 (0x66).
2. Hasta ahora solo tenemos la parte inicial del programa, solo nos falta agregar una variable más que es donde vamos a almacenar los números y la llamaremos unidades: #include <18f2550.h> #use delay(clock=8000000) int Display[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; int unidades; void main (void) { }
3. Para lo esencial del programa vamos a utilizar un “for” que es que realizara el conteo. Pero antes de este for debemos agregar el while. for(unidades=0;unidades<10;++unidades) Igualamos a 0 las unidades, le damos la condición: si unidades es menor a 10 se hace lo que esta dentro del for sino cumple esa condición se sale del for y sigue con el resto del programa, y las unidades van aumentando de uno en uno; sino colocáramos la condición de unidades<10, las unidades siempre irían en aumento sin tener un numero limite de conteo. #include <18f2550.h> #use delay(clock=8000000) int Display[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; int unidades; void main (void) { while(true) { for(unidades=0;unidades<10;++unidades) { } } }
4. Solo queda una cosa, hacer que en el display se visualicen los números: for(unidades=0;unidades<10;++unidades) { output_b(display[unidades]); delay_ms(500); } La variable display se va visualizar a la salida del puerto B, pero como tenemos 10 vectores la variable unidades nos va a indicar que vector vamos a utilizar y esta variable va a estar en constante cambio ya que esta aumentando de uno en uno cada ves que se realiza el for y por ultimo colocamos un retardo para poder ver el numero claramente en el display.
#include <18f2550.h> #use delay(clock=8000000) int Display[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; int unidades; void main (void) { while(true) { for(unidades=0;unidades<10;++unidades) { output_b(display[unidades]); delay_ms(500); } } } Ese es el programa final y el montaje quedaría más o menos así: