http://practicas8051.net84.net




       Contador de 0-999 con 3displays de 7
                                Segmentos



                  http://practicas8081.net84.net




             lenguaje c para sistemas embebidos   con el µc AT89s52




Aguayo Adame Gilberto ING. comunicaciones y electronica                           1
http://practicas8051.net84.net


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 25

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




Aguayo Adame Gilberto ING. comunicaciones y electronica                                            2
http://practicas8051.net84.net


Introducción
Display 7 segmentos
PB6/ PB5/ PB4/               PB3/      PB2/       PB1/     PB0/     HEX
A        B       C           D         E          F        G
0        1       1           1         1          1        1        0         3F
1        0       1           1         0          0        0        0         06
2        1       1           0         1          1        0        1         5B
3        1       1           1         1          0        0        1         4F
4        0       1           1         0          0        1        1         66
5        1       0           1         1          0        1        1         6D
6        1       0           1         1          1        1        1         7D
7        1       1           1         0          0        0        0         07
8        1       1           1         1          1        1        1         7F
9        1       1           1         1          0        1        1         67


Programa



#include <stdio.h>

#include <reg51.h>

int counter=0;

int dec,uni,cent;//declaracion de variables

void retardo(unsigned int ms);                       //declaracion de funcion de retardo

int display[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67}; //tabla del display catodo
comun del 0 al 9

int showDisplay(int numero);                         //declaracion de la funcion de multiplexeo




int main (void) {           //inicio cuerpo del programa

      while(1){          //ciclo infinito while



      char option;         //declaracion de variable option para utilizar la sentensia switch

         P3=0X00;         // el puerto 3 leera la entrada de selecion segun sea el caso

         option=P3;
Aguayo Adame Gilberto ING. comunicaciones y electronica                                           3
http://practicas8051.net84.net


      switch(option){         //se inicia el switch case

case 0x01:

    do{              //este do {se hara mientras} P2==0 , se oprimira el pusch botoon una sola ves
y se ara el caso 0x01: hasta que se oprima otro boton

      showDisplay(counter); //se llama a la funcion showdisplay con el parametro counter

     counter++;           //el counter se ira sumando pues este caso es para el contador
ascendente

   if(counter>9999)           // y regresara a 0 cuando sea mayor que 999

     counter=0;

                   }while(P3==0);

break;



case 0x02:               //case 0x02

         do{

              showDisplay(counter);

      counter--;         //en este caso el cunter sera descendente

   if(counter<0)          //y regresara a 999 cuando sea menor que 0

     counter=9999;

             }while(P3==0);

         break;



case 0x04:

         do{

              showDisplay(counter); //caso 0x04 solo mostrara el diplay sin hacer conteo



             }while(P3==0);


Aguayo Adame Gilberto ING. comunicaciones y electronica                                          4
http://practicas8051.net84.net


break;

                   }}} //fin del cuerpo del programa



void retardo(unsigned int ms){                  //en el siguiente parte se crean todas las funciones que
declaramos al principio

unsigned char y,t;                        //como en este caso el retardo

while (ms){



    for(y=0;y<140;y++){

    t++;

    }

        t++;

        t++;

        t++;

         ms--;

               }

}

int showDisplay(int numero){                  //funcion del multiplexeo

        uni =numero/10%10;

                   dec =numero/100%10;

                   cent=numero/1000%10;

               P2&=0xFF;

                   P2=0x04;



        P1=display[uni];

                   retardo(10);

Aguayo Adame Gilberto ING. comunicaciones y electronica                                                    5
http://practicas8051.net84.net




 P2&=0xFF;

       P2=0x02;



  P1=display[dec];

       retardo(10);



 P2&=0xFF;

       P2=0x01;



  P1=display[cent];

       retardo(10);

       P2&=0xFF;



       }




Aguayo Adame Gilberto ING. comunicaciones y electronica                           6
http://practicas8051.net84.net


                                                                        (2)




                           U1
                      19                             39
                            XTAL1        P0.0/AD0
                                                     38
                                         P0.1/AD1
                                                     37
                                         P0.2/AD2
                      18                             36
                            XTAL2        P0.3/AD3
                                                     35
                                         P0.4/AD4
                                                     34
                                         P0.5/AD5
                                                     33
                                         P0.6/AD6
                      9                              32
                            RST          P0.7/AD7

                R10                                  21
                                          P2.0/A8
            a                                        22
                                          P2.1/A9
                                                     23
                70                       P2.2/A10
                      29                             24
                            PSEN         P2.3/A11
                R4    30                             25
                            ALE          P2.4/A12
            b         31                             26
                            EA           P2.5/A13
                                                     27                U4
                70                       P2.6/A14
                                                     28   R1
                                         P2.7/A15
            c
                R9    1                              10
                            P1.0         P3.0/RXD         10k
                      2                              11               U3
                70          P1.1         P3.1/TXD                      NOT
                R5    3                              12         R2
                            P1.2         P3.2/INT0
            d         4                              13
                            P1.3         P3.3/INT1
                      5                              14
                70          P1.4           P3.4/T0              10k
                      6                              15               U2
                            P1.5           P3.5/T1                    NOT
                R6    7                              16   R3
                            P1.6          P3.6/WR
            e         8                              17
                            P1.7          P3.7/RD
                70                                        10k
                           AT89C51
                                                                      NOT
            f
                R7
                70


        g
                R8
                70


            a                        a                    a
            b                        b                    b
            c                        c                    c
            d                        d                    d
            e                        e                    e
            f                        f                    f
            g                        g                    g




Aguayo Adame Gilberto ING. comunicaciones y electronica                                                   7
http://practicas8051.net84.net




Aguayo Adame Gilberto ING. comunicaciones y electronica                           8

Multiplexeo dedisplay

  • 1.
    http://practicas8051.net84.net Contador de 0-999 con 3displays de 7 Segmentos http://practicas8081.net84.net lenguaje c para sistemas embebidos con el µc AT89s52 Aguayo Adame Gilberto ING. comunicaciones y electronica 1
  • 2.
    http://practicas8051.net84.net Descripción El programa incrementarael 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 25 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 Aguayo Adame Gilberto ING. comunicaciones y electronica 2
  • 3.
    http://practicas8051.net84.net Introducción Display 7 segmentos PB6/PB5/ PB4/ PB3/ PB2/ PB1/ PB0/ HEX A B C D E F G 0 1 1 1 1 1 1 0 3F 1 0 1 1 0 0 0 0 06 2 1 1 0 1 1 0 1 5B 3 1 1 1 1 0 0 1 4F 4 0 1 1 0 0 1 1 66 5 1 0 1 1 0 1 1 6D 6 1 0 1 1 1 1 1 7D 7 1 1 1 0 0 0 0 07 8 1 1 1 1 1 1 1 7F 9 1 1 1 1 0 1 1 67 Programa #include <stdio.h> #include <reg51.h> int counter=0; int dec,uni,cent;//declaracion de variables void retardo(unsigned int ms); //declaracion de funcion de retardo int display[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67}; //tabla del display catodo comun del 0 al 9 int showDisplay(int numero); //declaracion de la funcion de multiplexeo int main (void) { //inicio cuerpo del programa while(1){ //ciclo infinito while char option; //declaracion de variable option para utilizar la sentensia switch P3=0X00; // el puerto 3 leera la entrada de selecion segun sea el caso option=P3; Aguayo Adame Gilberto ING. comunicaciones y electronica 3
  • 4.
    http://practicas8051.net84.net switch(option){ //se inicia el switch case case 0x01: do{ //este do {se hara mientras} P2==0 , se oprimira el pusch botoon una sola ves y se ara el caso 0x01: hasta que se oprima otro boton showDisplay(counter); //se llama a la funcion showdisplay con el parametro counter counter++; //el counter se ira sumando pues este caso es para el contador ascendente if(counter>9999) // y regresara a 0 cuando sea mayor que 999 counter=0; }while(P3==0); break; case 0x02: //case 0x02 do{ showDisplay(counter); counter--; //en este caso el cunter sera descendente if(counter<0) //y regresara a 999 cuando sea menor que 0 counter=9999; }while(P3==0); break; case 0x04: do{ showDisplay(counter); //caso 0x04 solo mostrara el diplay sin hacer conteo }while(P3==0); Aguayo Adame Gilberto ING. comunicaciones y electronica 4
  • 5.
    http://practicas8051.net84.net break; }}} //fin del cuerpo del programa void retardo(unsigned int ms){ //en el siguiente parte se crean todas las funciones que declaramos al principio unsigned char y,t; //como en este caso el retardo while (ms){ for(y=0;y<140;y++){ t++; } t++; t++; t++; ms--; } } int showDisplay(int numero){ //funcion del multiplexeo uni =numero/10%10; dec =numero/100%10; cent=numero/1000%10; P2&=0xFF; P2=0x04; P1=display[uni]; retardo(10); Aguayo Adame Gilberto ING. comunicaciones y electronica 5
  • 6.
    http://practicas8051.net84.net P2&=0xFF; P2=0x02; P1=display[dec]; retardo(10); P2&=0xFF; P2=0x01; P1=display[cent]; retardo(10); P2&=0xFF; } Aguayo Adame Gilberto ING. comunicaciones y electronica 6
  • 7.
    http://practicas8051.net84.net (2) U1 19 39 XTAL1 P0.0/AD0 38 P0.1/AD1 37 P0.2/AD2 18 36 XTAL2 P0.3/AD3 35 P0.4/AD4 34 P0.5/AD5 33 P0.6/AD6 9 32 RST P0.7/AD7 R10 21 P2.0/A8 a 22 P2.1/A9 23 70 P2.2/A10 29 24 PSEN P2.3/A11 R4 30 25 ALE P2.4/A12 b 31 26 EA P2.5/A13 27 U4 70 P2.6/A14 28 R1 P2.7/A15 c R9 1 10 P1.0 P3.0/RXD 10k 2 11 U3 70 P1.1 P3.1/TXD NOT R5 3 12 R2 P1.2 P3.2/INT0 d 4 13 P1.3 P3.3/INT1 5 14 70 P1.4 P3.4/T0 10k 6 15 U2 P1.5 P3.5/T1 NOT R6 7 16 R3 P1.6 P3.6/WR e 8 17 P1.7 P3.7/RD 70 10k AT89C51 NOT f R7 70 g R8 70 a a a b b b c c c d d d e e e f f f g g g Aguayo Adame Gilberto ING. comunicaciones y electronica 7
  • 8.
    http://practicas8051.net84.net Aguayo Adame GilbertoING. comunicaciones y electronica 8