V

vladolenguado

Usuario (México)

Primer post: 19 jun 2011Último post: 25 feb 2012
4
Posts
78
Puntos totales
20
Comentarios
Teclado Matricial, Display 7 segmentos y Pic 16f877A
Teclado Matricial, Display 7 segmentos y Pic 16f877A
Ciencia EducacionporAnónimo2/24/2012

Hola amigos Taringueros...aqui dejo una practica que realice el año pasado en mi universidad.. Se trata de un teclado matricial, hecho de botones controlado con pic, en este caso el 16F877A..y los numeros se muestran en un Display 7 segmetos, anodo comun,. Materiales: BCD 7 segment decoder (74ls47) display 7 seg, anodo comun pic 16f877a, crystal quartz 4Mhz, 2 cap ceramicos 22nf resistencias de 220 omh + una de 10k para el pic 12 Botones tipo Push, el teclado cuanta con los numeros del 0 al 9 mas * mas # y 4 letras A,B,C y D. la practica esta simulada en Proteus 7.8 sp2, el pic esta progamado en C, con el compilador MikroC Pro for Pic. el teclado matricial tiene 4 filas y 4 columnas es decir, es de 4x4, este programa funciona con uno de 3x3 o de 4x3 tambien.. aqui el codigo: void teclado(){ //* funcion que sirve para reconocer que boton se ha pulsado PORTB=0b00000001; if(Button(&PORTB, 4, 20, 1)){PORTD=1;} else if(Button (&PORTB, 5, 20, 1)){PORTD=2;} else if(Button (&PORTB, 6, 20, 1)){PORTD=3;} else if(Button (&PORTB, 7, 20, 1)){PORTD=13;} else delay_ms(80); PORTB=0b00000010; if(Button (&PORTB, 4, 50, 1)){PORTD=4;} else if(Button (&PORTB, 5, 20, 1)){PORTD=5;} else if(Button (&PORTB, 6, 20, 1)){PORTD=6;} else if(Button (&PORTB, 7, 20, 1)){PORTD=14;} else delay_ms(80); PORTB=0b00000100; if(Button (&PORTB, 4, 20, 1)){PORTD=7;} else if(Button (&PORTB, 5, 20, 1)){PORTD=8;} else if(Button (&PORTB, 6, 20, 1)){PORTD=9;} else if(Button (&PORTB, 7, 20, 1)){PORTD=15;} delay_ms(80); PORTB=0b00001000; if(Button (&PORTB, 4, 20, 1)){ PORTD=10; } else if(Button (&PORTB, 5, 20, 1)){PORTD=0;} else if(Button (&PORTB, 6, 20, 1)){PORTD=12;} else if(Button (&PORTB, 7, 20, 1)){PORTD=11;} delay_ms(80); } //* el bloque anterior se puede entender como sigue: // primero se pone en 1 el primer pin del portb y se recorre la fila 1, segun el boton presionado // obtendremos la activacion del portd con la combinacion correspondiente a la fila- columna //por ejemplo: si se pulsa el segundo boton de izq. a der. de la primer fila, entonces nuestra cordenada es (1,2) //fila 1 columna 2, y por tanto el pin 6 (RB5) del portb que esta configurado como entrada, recibe un 1 logico // y activa el portd, segun lo programamos en el codigo, y el numero es visualizado en el display ; // si no se pulsa ningun boton de la primera fila, entonces se activa el siguiente pin del puerto b y // la segunda fila es recorrida, lo mismo para las filas restantes, void initmain (){ // subfuncion principal; ADCON1=0x06; TRISD=0; PORTD=0; //* configuracion de puertos; TRISB=0b11110000; PORTB=0; } void main() { initmain(); //* aqui madamos a llamar las funciones anteriores... while(1){ teclado(); } } no olviden conectar las resistencias de 220 a tierra y a cada una de las columnas del teclado... subo los archivos, tanto el esquematico en proteus como el hex, les recomiendo que intenten compilar el progrma por si mismos, esta sencillo,....

0
0
C
Cerradura electronica con pic y lcd 16x2
Apuntes Y MonografiasporAnónimo2/25/2012

Hemos decidido renovar y ahora traemos mejoras. Primero que nada agradecer a los usuarios que han hecho de este un buen post. Proyecto Cerradura Electronica Con Pic 16f877A Se trata de una placa que cuenta con microcontrolador PIC16F877A, LCD 16x2, Teclado Matricial, Leds para señalar algunas funciones y salidas opcionales para Usar el proyecto en muchas cosas mas. La cerradura electronica funciona a traves de un teclado en el cual introducimos la clave de acceso y eso nos activa nuestra etapa de potencia ( en la placa se encienden leds indicando el estado). La contraseña puede ser cambiada pero la que tiene por defecto es 1110. El proyecto incluye 2 versiones tanto de codigo como de realizacion de placa( ya sea con hoja impresa planchado o bien con Router CNC y Mach3): Codigo Escrito en MiKroC: Simulacion en Proteus PCB Impreso manual o para Router CNC. (archivos Ares de Proteus e Eagle PCB para Mach3). Archivos Autodesk Inventor (planos) para contruir carcasa con 3D printer. Pacla Compatible con Pic16F887 y otros de gama media y alta como el 18F4550 por tener el mismo orden de Pines. Aqui os dejo unas capturas: Preview de la placa para rutear en CNC generado con CatSotf Eagle Vista Arriba en Eagle Vista Soldier Site Eagle Equematico Proteus PCB en Proteus para imprimir y planchar vista 3D proteus Simulacion Proteus En el link de descargas encontraras todos los archivos completos los cuales son: 1. Lista de materiales 2.Archivos .hex y .c para Compilar con MiKroC Pro For Pic 3.Archivos de Simulaciones y PCB tanto de Proteus Como de Eagle 4. Archivos .tap .drill etc, para Maquina Router CNC controlada con Mach3 5.Archivos .cad de Inventor 2015 para plano y construccion 3D de la carcasa muy bien cualquier duda comenta, o a mi correo cae.v09(@)gmail.com

66
33
Comunicacion Uart Pic16F877A
Comunicacion Uart Pic16F877A
Apuntes Y MonografiasporAnónimo6/19/2011

Material: 2 Pic16f877A; 2 display 7 Segmentos Catodo comun; 2 Transistor 2n2222; 3 led; tres push button; 3 r 220ohm, 2 r 10K ohm;crystal y capacitores para reloj de ambos pics; 7448 (bcd a siete segmentos). El primer Codigo Para el pic; recibe el pulso de los botones en el puerto E; envia el valor al segundo pic, luego recibe un dato del otro micro y lo visualiza en los display. **********************************************************************// char x1; char x2; int unidades; int decenas; void initmain(){ ADCON1=0x06; //se configura el pic solo con entradas digitales TRISE=1; // puerto E como entrada TRISB=0; // puerto B como salida PORTB=0; PORTE=0; TRISD=0; PORTD=0; UART1_Init(9600); // inicializando UART a 9600 bps Delay_ms(100); UART1_Write_Text("Start"; // envia el texto start //UART1_Write(10); //UART1_Write(13); // salto de linea } void main() { initmain(); while(1) { x1=PORTE; // guarda en x1 segun el boton pulsado UART1_Write(x1); // envia el dato via uart delay_ms(100); if (UART1_Data_Ready()) { // recibe dato de vuelta x2= UART1_Read(); unidades=x2%10; // operacion para separar digitos decenas=x2/10; // y representar en el 7 segmentos a traves del 7448 PORTD=1; PORTB=unidades; delay_ms(50); PORTD=0; delay_ms(50) ; PORTD=2; PORTB=decenas; delay_ms(50); PORTD=0; delay_ms(50); } } } El siguiente codigo es para el segundo micro, recibe el valor y lo representa en el puerto E donde enciende los leds correspondientes a la combinacion de botonoes pulsado en el primer micro, el valor lo eleva al cuadrado y lo envia hacia el primer micro. Ej. Recibe el 3, lo eleva al cuadrado y envia el numero 9 de vuelta. char x1;char x2;char x3; void initmain(){ ADCON1=0x06; //se configura el pic solo con entradas digitales TRISE=0; TRISB=0; // puerto B como salida //TRISD=0; PORTB=0; PORTA=0; PORTE=0 ; //PORTD=0; UART1_Init(9600); Delay_ms(100); } void main() { initmain(); while(1){ if (UART1_Data_Ready()) { x1 = UART1_Read(); x2=x1*x1; delay_ms(200); UART1_Write(x2); } PORTE=x1; // PORTD=x2; }} Con esto tenemos una comunicacion serial entre dos micros, podes adaptar para visualizar en LCD y registrar valores de sensores con el ADC, etc.... Espero les sirva. Saludos a la comunidad.

0
14
C
Contador de 0 a 9999 con pic 16f877a
Apuntes Y MonografiasporAnónimo6/19/2011

Hola taringueros en este mi primer post deseo compartir un trabajo que me llevo varias oras de lectura y algunas noches de desvelo... Se trata de una maquina "su turno" con 3 botones: uno para sumar, otro para restar y un reset. utiliza un pic y 4 displays para mostrar los numeros ademas de un decodificador bcd para 7 segmetos... aqui el codigo escrito en C, compilado en MikroC.... //**************************************************************************************// unsigned int const numero[10]={0,1,2,3,4,5,6,7,8,9}; // matriz e 1 dimension para los valosres del display unsigned int unidad=0,decena=0, centena=0, millar=0, residuos=0; //varialbes para hacer las operaciones int long contador=0; // contador principal void sumar(){ //funcion que incrementa de 1 en 1 cada vez que pulsa el boton sumar contador++; residuos=contador; // obtiene valor actual del contador unidad=residuos %10; //descompone el numero cifra por cifra residuos=residuos/10; //dividiendo entre 10, hasta que decena=residuos%10; // sea menor a cero residuos=residuos/10; // los residuos de cada division entera, son centena=residuos%10; // los que muestra el display segun sea el caso residuos=residuos/10; // unidad, decena, centena, millares.... millar=residuos%10; residuos=residuos/10; } void restar(){ // funcion que decrementa en 1 al contador por cada pulso contador--; residuos=contador; unidad=residuos %10; residuos=residuos/10; decena=residuos%10; residuos=residuos/10; centena=residuos%10; residuos=residuos/10; millar=residuos%10; residuos=residuos/10; } void limpiar(){ // aqui limpiamos para iniciar desde 0 residuos=contador=0; } void main() { asm { movlw 0x07 // este bloque desabilita los comparadores analogicos movwf CMCON // debras leer la hoja de datos del micro que uses para ver como desabilitarlo } ADCON1=0x06; // configura el puerto A como entrada Digital TRISA=1; //Puerto A como entradas TRISB=0; //Puerto B como salidas TRISD=0; //puerto d como salidas PORTB=0; PORTD=0b00000000;//Se prenden los dos (4)dis while(1) //Entra a ciclo infinito { //pregunta si ha pulsado boton para sumar; si es cierto entonces: if (Button(&PORTA, 0, 50, 1)) { // rutina que evita el rebote generado por el boton sumar(); // llama funcion suma } else if(Button(&PORTA,1,50,1)){ // pregunta si ha pulsado boton restar; si es cierto restar(); // llama funcion restar } else if(Button(&PORTA,2,50,1)){ limpiar(); } else // este bloque multiplexa los displays de 7 segmentos PORTB=numero; // controla los transistores a traves del puerto D PORTD=0x07; // la logica es: delay_ms(10); // prende primer display, manda unidades atravez de puerto b PORTD=0xff; // apaga primer display, manda dato y prende segundo display PORTB=numero; // asi sucesivamente para los 4 displays PORTD=0x0B; // de modo que prenden y apagan uno a la vez delay_ms(10); // tan rapido ( 1 a 10 milisegundos) PORTD=0x0f; // que parece que estan prendidos constantemente PORTB=numero; PORTD=0x0D; delay_ms(10); PORTD=0x0f; PORTB=numero; PORTD=0x0E; delay_ms(10); PORTD=0x0f; }} //****************************************************************************************// dijo:'Me lo contaron y lo olvidé. Lo vi y lo entendí. Lo hice y lo aprendí.'

12
13
PosteameloArchivo Histórico de Taringa! (2004-2017). Preservando la inteligencia colectiva de la internet hispanohablante.

CONTACTO

18 de Septiembre 455, Casilla 52

Chillán, Región de Ñuble, Chile

Solo correo postal

© 2026 Posteamelo.com. No afiliado con Taringa! ni sus sucesores.

Contenido preservado con fines históricos y culturales.