catatbcd
Usuario (Colombia)
hola he encontrado esta pagina http://ejercicios-en-pseint.jimdo.com/ con ejercicios resueltos espero que les sea util
Hola, taringueros. Hoy les traigo un proyecto sencillo con el PIC 16F84A. Estoy empezando con esto de la programación en C y este es uno de mis primeros proyectos que me gustaría compartir. Componentes: 4 Display 7 segmentos cátodo común. 7 resistencias de 330 ohm. PIC 16F84A. Cristal 4Mhz. 2 capacitores de 22 pF. 3 pulsadores. 3 resistencias 10 Kohm. Fuente de 5V DC. (Yo uso un cable USB con eso alimento el circuito). Diagrama del circuito: Ahora vamos a la programación. Estoy programando en PIC C. ---------------------------------------------------------------------------------------------------------------------- //***************************************************************************** //******************Reloj Digital con display 7 segmentos********************** //*******************************Por catatbcd********************************** //***************************************************************************** #include <16f84a.h> //pic a utilizar #use delay (clock=4000000) //Fosc=4Mhz #fuses XT,NOWDT,NOPROTECT,PUT //ordenes para el programador // XT es el tipo de oscilador a utilizar. //NOWDT desactiva el perro guardian. //NOPROTECT desactiva proteccion del codigo. #include <math.h> // libreria para hacer operaciones matematicas void main (void){ //Declaración de variables. int seg=0, min1=0,min2=0, hora1=0,hora2=0; int16 i=0; // entero de 16 Bit ya que con 8 bit solo llega hasta 255 y debe llegar a 1000 //Tabla con los datos correspondientes 0,1,2,3,4,5,6,7,8,9. en Hexadecimal int tab7seg[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x67}; //Configuración de puertos. set_tris_b(0b10000000); //RB7 como entrada y el resto del puerto b como salida set_tris_a(0x11110000); //RA4 como entrada y el resto del puesto a como salida disable_interrupts(GLOBAL); //todas las interrupciones desactivadas while(TRUE) { seg++; //incrementa Segundos if (seg==60) { //condicion para incrementar el primer digito de los minutos min1++; seg=0; } if (min1==10) { //condicion para incrementar el segundo digito de los minutos min2++; min1=0; } if (min2==6) { //condicion para incrementar el primer digito de las horas min2=0; min1=0; hora1++; } if (hora1==10) {//condicion para incrementar el segundo digito de las horas hora2++; hora1=0; } if ((hora1==4)&&(hora2==2)) {// reinicia el conteo al cumplir 24 horas hora1=0; hora2=0; } //esta parte es para programar la hora if (input(pin_A4)==0){ // al pulsar el boton conectado a RA4 incrementa las horas delay_ms(250); //retardo para el rebote del pulsador hora1++; if (hora1==10) { hora2++; hora1=0; } if ((hora1==4)&&(hora2==2)) { hora1=0; hora2=0; } seg=0; } if (input(pin_B7)==0){//al pulsar el boton conectado a RB7 incrementa los min delay_ms(250); //retardo para el rebote del pulsador min1++; if (min1==10) { min2++; min1=0; } if (min2==6) { min2=0; min1=0; } seg=0; } // ciclo para la visualizacion de los displays for (i=1;i<=1000;i=i+20){ output_b(tab7seg[min1]); //muestra por portb digito 7 segmentos output_a(0b00001110); //enciende 4 display delay_ms(5); output_b(tab7seg[min2]); //muestra por portb digito 7 segmentos output_a(0b00001101); //enciende 3 display delay_ms(5); output_b(tab7seg[hora1]); //muestra por portb digito 7 segmentos output_a(0b00001011); //enciende 2 display delay_ms(5); output_b(tab7seg[hora2]); //muestra por portb digito 7 segmentos output_a(0b00000111); //enciende 1 display delay_ms(5); } } } --------------------------------------------------------------------------------------------------------------------------- los archivos: se los paso por correo.