• No results found

Contador de 0 a 99 Con PIC16F887 en Dos Display de 7 Segementos

N/A
N/A
Protected

Academic year: 2021

Share "Contador de 0 a 99 Con PIC16F887 en Dos Display de 7 Segementos"

Copied!
17
0
0

Loading.... (view fulltext now)

Full text

(1)

Contador de 0 a 99 con PIC16F887 en dos display de 7

segementos

#include <16f887.h> #fuses hs,nowdt,noprotect,nolvp #use delay(clock=20000000) #byte portd=8 int i,j; int tabla7s[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x67}; void main() { set_tris_d(0x00); do {

for (i=0; i<=9; i++) { for (j=0; j<=9; j++) { portd=(tabla7s[i]+0x80); delay_ms(80); portd=(tabla7s[j]); delay_ms(80); } } } while(true); }

Contador de 0 a 99 con Display 7 Segmentos con el

PIC16F887

Hola gente!!, en esta ocasión les traigo el ejemplo mostrado en la pagina 63 del libro de Compilador C CCS y Simulador PROTEUS para microcontroladores PIC, en donde se realiza un contador de cero a noventa y nueve con la ayuda de dos Display 7 Segmentos, utilizando la tecnica de multiplexación o visualización estereoscopica, con el objetivo de compartir un solo puerto de salida para los dos display, y de esta manera economizar mas puertos de entrada y/o salida.

Para realizar el proyecto primero es necesarío determinar si el display es de anodo común o de catado común, tal como lo muestra esta imagen,

Para entregar las señales digitales y que puedan ser entendidas a la hora de visualizarlo en el Display es necesario realizar una decodificación para esto se puede utilizar el decodificador 7447, pero para este caso se ha realizado la decodificación internamente en el

(2)

CÁTODO COMÚN

NUM A B C D E F G DP DECIMAL HEXA

0

1 1 1 1 1 1 0

0

63

0X3F

1

0 1 1 0 0 0 0

0

6

0X06

2

1 1 0 1 1 0 1

0

91

0X5B

3

1 1 1 1 0 0 1

0

79

0X4F

4

0 1 1 0 0 1 1

0

102

0X66

5

1 0 1 1 0 1 1

0

109

0X6D

6

1 0 1 1 1 1 1

0

125

0X7D

7

1 1 1 0 0 0 0

0

7

0X07

8

1 1 1 1 1 1 1

0

127

0X7F

9

1 1 1 1 0 1 1

0

111

0X6F

ÁNODO COMÚN

NUM A B C D E F G DP DECIMAL HEXA

0

0 0 0 0 0 0 1

1

3

0X03

1

1 0 0 1 1 1 1

1

249

0XF9

2

0 0 1 0 0 1 0

1

164

0XA4

3

0 0 0 0 1 1 0

1

176

0XB0

4

1 0 0 1 1 0 0

1

163

0X99

5

0 1 0 0 1 0 0

1

146

0X92

6

0 1 0 0 0 0 0

1

130

0X82

7

0 0 0 1 1 1 1

1

248

0XF8

8

0 0 0 0 0 0 0

1

128

0X80

9

0 0 0 0 1 0 0

1

144

0X90

Contador 0-99 con

PIC16F84A y

Mikrobasic

Ratings: (0)|Views: 5.070|Likes: 33

Publicado por

Carlos Navarro M.

Bueno aquí el programa con proteus. 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...

Ver más

(3)

Bueno aquí el programa con pruteus. Espero sea de utilidad: el objetivo es hacer un

contador de 0-99 con el PIC16F84ACon el fin de hacerlo manualmente para contar ya

sea con SW1 y Reset SW2. También se podría cambiar este SW1, poralgún sensor de

movimiento u otro.

(4)
(5)

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.' *

(6)

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

7 segdim millar as word 'Millares del conteodim centena as word 'Centenas del conteodi

m decena as word 'Decenas del conteodim unidad as word 'unidades del conteodim cuen

ta as word 'Cuenta el numero de sensados'ADCON1 = 7 'Puerto A digital este solo en PI

C con puerto digital en este caso no.trisa=%00010000 'RA4 entrada resto como salidatri

sb=%10000000 'RB7 entrada, resto salidaporta=0 'Limpia Porta Aportb=0 'Limpia Porta

Bcuenta=0 'Inicializa numero de cuentasporta.0=1delay_ms(2000)porta.0=0while true '

Ciclo INFINITOif Button(PORTB, 7, 10, 1)

thencuenta=cuenta+1 'Incrementa la cuenta'porta.0=1 'BUZZER en on conectado en PA

0'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)

(7)

CONTADOR 0-99 DISPLAY 7 SEGMENTOS

Written by Hector Torres

Tuesday, 15 March 2011 00:16

There are no translations available.

Contador de 0-99 con 2 displays de 7 Segmentos

DESCRIPCIÓN

El programa incrementara el valor de una variable, la cual se mostrara a través de un par de displays de 7 segmentos, los cuales se controlaran de manera multiplexada, uno a la vez, a una velocidad que el ojo no alcance a detectar el cambio y perciba ambos displays encendidos a la vez.

DIAGRAMA ESQUEMÁTICO Materiales  2 Displays 7 segmentos  7 Resistencias de 220 Ohms  2 Resistencias de 10 kOhms

 2 Transistores de pequeña señal

 1 Microcontrolador ATmega8

 Programador USBasp V3.0

(8)

DISPLAY 7 SEGMENTOS

El display de 7 segmentos es un dispositivo que nos sirve para mostrar números o caracteres, los cuales se visualizan al activar o desactivar los LEDs que este tiene, esto se hace conectando el común a la tierra y voltaje en el segmento que deseemos activar (en caso de ser cátodo común).

Para poder representar los números con el display, es necesario generar la tabla que nos dará el valor que será necesario para generar el numero deseado.

Por ejemplo, se puede observar que para hacer un cero se busca que enciendan todos los segmentos menos el g (pin 10 del display el cual va conectado al PB0 del Micro), con esa información del numero, tendremos el valor que tomara el puerto para mostrar el numero deseado a través del display.

Para controlar dos displays a la vez, se hará uso de un par de transistores, en este caso conmutaran entre uno y otro, mientras los displays están conectados al mismo puerto del micro. Primero se mostrara las decenas mientras se desactiva el display de las unidades y después de una fracción de tiempo, se activa el de la unidad y se desactiva el de las decenas y el micro manda el valor de la unidad. Esto se repite determinadas veces a alta velocidad para dar la impresión de que siempre se encuentran prendidos los dos displays.

Para activar y desactivar los displays se les pondrá un transistor a modo de swhitch el cual se conectara del colector al común del display, y este controlara el display activándolo o desactivándolo desde la base.

(9)

Para este caso el transistor se está usando como un swhitch, eso es que se está trabajando en las regiones de corte y saturación, lo que nos dice que al pasar una corriente en la base, el transistor se comporta como un interruptor que se abre o se cierra. PROGRAMA EN C #include <avr/io.h> #include <util/delay.h> int contador=0;

int unidades, decenas,i;

int numeros[10]={0x7E, //Se declara un vector de longitud 10 que contenga los

0x30, //valores obtenidos de la tabla, acomodados en orden

0x6D, //Según su posición del 0 al 9

0x79, 0x33, 0x5B, 0x5F, 0x70, 0x7F, 0x7B};

int mostrar(int numero){ //Creamos una función de tipo entero

unidades=numero%10; //Al dividir un valor entre 10 el residuo nos da las unidades

decenas =numero/10; //Se obtiene la decena dividiendo el numero entre 10

for(i=0;i<20;i++){

PORTD=0x02; //Se activa el transistor de las unidades

PORTB=numeros[unidades]; //Se asigna al PORTB la variable numero en la posición unidades

_delay_ms(5);

PORTD=0x01; //Se activa el transistor de las decenas

PORTB=numeros[decenas]; //Se asigna al PORTB la variable numero en la posición decenas

_delay_ms(5); } return 0; }

int main(void){ //Inicio del programa

DDRB=0xFF; DDRD=0x03;

(10)

while(1){

mostrar(contador); //Llamar a la función mostrar, mandando la variable contador

contador++; //Incrementar el valor de la variable contador

if (contador > 99) //Si llega a 99, que tome el valor de 0

contador=0; }

}

DETALLES DEL PROGRAMA

int numeros[10]={0x7E, 0x30, 0x6D, 0x79, 0x33, 0x5B, 0x5F, 0x70, 0x7F, 0x7B};

Aquí se está declarando un vector de tipo entero, el cual le indicamos la longitud del mismo, el cual tiene 10 datos, se acomodaron conforme a que la posición del vector corresponde al número que representa ese valor en el display, en el caso del 3 el cual es el 0x79 (previamente obtenido en la tabla), podemos ver que se encuentra en la tercera posición.

int mostrar(int numero){

Una función se declara como "tipo de dato" "nombre de la función" ( "tipo de dato" "nombre de entrada"), en este caso la función obtendrá la unidad y la decena de cualquier numero entre 0-99 y mandara el dato para mostrarlo en el display.

unidades=numero%10; decenas =numero/10;

Operación para obtener separar un numero entre su unidad y decena. Por ejemplo el 45, si lo dividimos entre 10, esto es 45/10 = 4 (recuerde que como son variables de tipo entero es solo 4 y no 4.5), y con el operador mod (de modulo) "%" el resultado es 45%10 = 5. Gracias a esto tenemos en una variable el numero 4 y en otra el numero 5.

PORTB=numeros[unidades];

Al puerto B se le asigna el valor que tenga el vector números en la posición unidades, si tomamos el ejemplo anterior, unidades valía 5, si vamos al vector números y vemos la quinta posición, veremos un 0x5B la cual corresponde al número 5 en la tabla, esto es, que al mostrarlo por el puerto B aparecerá el 5 en el display.

mostrar(contador);

(11)

numero del 0-99, al llamar la función, esta ejecutara todas las instrucciones que se encuentren dentro de la misma, al terminar regresara y continuara con la siguiente instrucción.

CONTADOR 0-99 MPLAB

Código del programa desarrollado en ensamblador con el programa MPLAB en el cual

se establece la rutina para que en un par de displays de 7 segmentos observemos el

conteo de 0 hasta 99.

;EXAMEN SEGUNDO PARCIAL

;ESTE PROGRAMA CONTABILIZA DE 0-99

;23 DE OCTUBRE DEL 2010

;JOSÉ LUIS MORELES LOZANO

;***************************************************************

;***************************************************************

list p=16f877a

#include<P16f877a.inc>

errorlevel -302

__CONFIG _WDT_OFF&_PWRTE_ON&_XT_OSC&_LVP_OFF&_CP_OFF

ORG 0x0000

;Variables de retardo, nos permitirán apreciar el conteo evitando que se realice a

intervalos de tiempo muy rapidos.

valor1 equ h'21'

valor2 equ h'22'

valor3 equ h'23'

contador equ h'24'

;Hay que definir la asignación de segmentos apagados o encendidos, estas variables

serán cargadas posteriormente.

; HEXADECIMAL BINARIO

CERO EQU h'3F' ; 01111110B

UNO EQU h'06' ; 01001000B

DOS EQU h'5B' ; 00111101B

TRES EQU h'4F' ; 01101101B

CUATRO EQU h'66' ; 01001011B

CINCO EQU h'6D' ; 01100111B

(12)

SEIS EQU h'7D' ; 01110111B

SIETE EQU h'07' ; 01001110B

OCHO EQU h'7F' ; 01111111B

NUEVE EQU h'6F' ; 01101111B

org 0h ;Reset

goto salidas

salidas:

clrf PORTB

clrf PORTC ;Limpia puertos B y C para determinar que son salidas

bsf STATUS,RP0

bcf STATUS,RP1

movlw h'0'

movwf TRISB

movwf TRISC

bcf STATUS,RP0 ;ir al Banco 0

INICIO:

clrf contador ;Inicia las decenas

clrf PORTC

LOOP:

movlw CERO ;carga a w el valor de cero

movwf PORTB

call RETARDO

movlw UNO

movwf PORTB

call RETARDO

movlw DOS

movwf PORTB

call RETARDO

(13)

movlw TRES

movwf PORTB

call RETARDO

movlw CUATRO

movwf PORTB

call RETARDO

movlw CINCO

movwf PORTB

call RETARDO

movlw SEIS

movwf PORTB

call RETARDO

movlw SIETE

movwf PORTB

call RETARDO

movlw OCHO

movwf PORTB

call RETARDO

movlw NUEVE

movwf PORTB

call RETARDO

incf contador,1 ;Incrementa contador de decenas

movlw h'A'

xorwf contador,w

btfsc STATUS,Z

goto INICIO

Decenas

(14)

movlw h'1'

xorwf contador,w

btfsc STATUS,Z

goto PRINT1

movlw h'2'

xorwf contador,w

btfsc STATUS,Z

goto PRINT2

movlw h'3'

xorwf contador,w

btfsc STATUS,Z

goto PRINT3

movlw h'4'

xorwf contador,w

btfsc STATUS,Z

goto PRINT4

movlw h'5'

xorwf contador,w

btfsc STATUS,Z

goto PRINT5

movlw h'6'

xorwf contador,w

btfsc STATUS,Z

goto PRINT6

(15)

movlw h'7'

xorwf contador,w

btfsc STATUS,Z

goto PRINT7

movlw h'8'

xorwf contador,w

btfsc STATUS,Z

goto PRINT8

movlw h'9'

xorwf contador,w

btfsc STATUS,Z

goto PRINT9

;Decenas en el display

PRINT1:

movlw UNO

movwf PORTC

goto LOOP

PRINT2:

movlw DOS

movwf PORTC

goto LOOP

PRINT3:

movlw TRES

movwf PORTC

(16)

goto LOOP

PRINT4:

movlw CUATRO

movwf PORTC

goto LOOP

PRINT5:

movlw CINCO

movwf PORTC

goto LOOP

PRINT6:

movlw SEIS

movwf PORTC

goto LOOP

PRINT7:

movlw SIETE

movwf PORTC

goto LOOP

PRINT8:

movlw OCHO

movwf PORTC

goto LOOP

PRINT9:

movlw NUEVE

movwf PORTC

goto LOOP

RETARDO

movlw h'40' ;Valor que genera un retardo

movwf valor1

(17)

tres movlw h'40'

movwf valor2

dos movlw h'40'

movwf valor3

uno decfsz valor3

goto uno

decfsz valor2

goto dos

decfsz valor1

goto tres

return

end

References

Related documents

cemic compensation (mean HbA1c level is increased in both groups). Previous studies performed on 15-isoprostane F 2t ap- preciated the importance of oxidative stress in diabetes [11,

If the time interval of UDP packets which sent from phone APP is long ( 20ms ~ 50ms ) , each UDP packet will in different packets in physical layer, may be a AMPDU packet which

For Ariel’s global strategies, its Portfolio Manager, or a designated member of the global research team, reviews client accounts at least monthly, to ensure compliance with

This allowed us to identify 24 new candidate members of YMGs as well as a new M7.5 bona fide member of Tucana-Horologium among known low-gravity brown dwarfs.... candidates

(H3) Th e share of CIBs that hired an expert in alternative fi nancing is 0.15, which is much lower than the expected 0.52, p=0.03 (1-sided, p&lt;0.05); therefore, the

For instance, other areas wherein faculty members in public institutions indicated that they needed more support to effectively use the Web in their scholarly pursuits than those

Cases that were studied are; G-Force values during the starting or riding a motorcycle, values during passing a bumper, and values during emergency braking.. As the graphs

17.09.2013 | Secure Software Engineering Group | Steven Arzt and Siegfried Rasthofer | 18 T6: Monitoring for Apps Runtime Code Changes. • Protect Dalvik data structures