Micros CAP2 CAP3
Micros CAP2 CAP3
CÓDIGO
#include <18F4550.h> //Librería para usar el PIC18F4550.
#fuses HS,NOWDT,NOPROTECT,PUT, NOPBADEN //Configuración de fusibles.
#use delay (clock=12000000) // FOSC =12MHz.
#byte tris_b = 0xF93 //Define el registro tris b en la localidad 0xF93.
#bit b0= 0xF81.0 //Define el bit b0 en la localidad 0xF81.0.
void main() //Función principal main.
{
disable_interrupts (GLOBAL); //Deshabilita las interrupciones globales.
tris_b = 0x00; //Configura el puerto B como salida.
do{ //Inicio del bucle infinito.
b0= 0; //El puerto RB0 = 0.
delay_ms( 500 ); //Retardo de 500 ms.
b0 =1; //El Puerto RB0 = 1.
delay_ms(500); //Retardo de 500 ms.
} while ( TRUE ); //Bucle infinito.
} //Fin del bucle main.
EJERCICIO 2.2
PRENDER Y APAGAR LOS LEDS DEL PUERTO B
CÓDIGO
#include <18F4550.h> //Librería para usar el PIC18F4550.
#fuses HS,NOWDT,NOPROTECT,PUT, NOPBADEN //Configuración de fusibles.
#use delay (clock=12000000) // FOSC = 12MHz.
#byte port_b = 0xF81 //Identificador para el puerto b en la localidad 0xF81.
#byte tris_b = 0xF93 //Identificador para el registro tris b en la localidad 0xF93.
void main() //Función principal main.
{
disable_interrupts(GLOBAL); //Deshabilita todas las interrupciones globales.
tris_b = 0x00; //Configura todo el puerto B como salida.
port_b = 0x00; // Asigna a todo el Puerto B cero (0).
do{ // Hace o empieza el bucle infinito.
port_b = 0xFF; //Coloca todo el puerto B en 1.
delay_ms( 500 ); //Retardo de 500 ms.
port_b = 0x00; //Coloca todo el puerto B en 0.
delay_ms(500); //Retardo de 500 ms.
} while ( TRUE ); //Bucle infinito.
} //Fin del bucle main.
EJERCICIO 2.3
EJERCICIO 2.4
EJERCICIO 2.5
EJERCICIO 2.6
EJERCICIO 2.7
EJERCICIO 2.9
MANEJO DE PULSADORES
CÓDIGO
#include <18f4550.h> //Librería para usar el PIC18F4550.
#fuses HS,WDT,NOPROTECT,PUT, NOPBADEN //Configuración de fusibles.
#use delay (clock=12000000) // FOSC =12MHz.
#BYTE port_b= 0xF81 //Identificador para el puerto b en la localidad 0xF81
#BYTE port_d= 0xF83 //Identificador para el puerto d en la localidad 0xF83.
#define prender bit_test(port_d,0) //Define el pin RD0 para prender.
#define apagar bit_test(port_d,1) //Define el pin RD1 para apagar.
void main(void) //Función principal main.
{
set_tris_b(0x00); //Define puerto b como salida.
set_tris_d(0xff); //Define puerto d como entrada.
disable_interrupts(GLOBAL); //Todas las interrupciones desactivadas.
while(TRUE){ //Inicio del bucle.
if (prender == 0) //Censa si P1= 0 .
{
bit_set(port_b,0); //LED on.
}
if (apagar==0) //Censa si P2 = 0.
{
bit_clear(port_b,0); //LED off.
}
} //Fin de bucle infinito.
} //Fin del main.
EJERCICIO 2.10
EJERCICIO 2.11
EJERCICIO 2.12
GENERACIÓN DE SONIDO
CÓDIGO
generate_tone(C_NOTE[0],fusa);
generate_tone(C_NOTE[1],fusa);
generate_tone(Eb_NOTE[2],corchea);
generate_tone(C_NOTE[3],fusa);
generate_tone(C_NOTE[0],fusa);
generate_tone(Eb_NOTE[1],corchea);
generate_tone(C_NOTE[3],fusa);
generate_tone(Eb_NOTE[3],fusa);
generate_tone(Ab_NOTE[3],semicorchea);
generate_tone(G_NOTE[3],semicorchea);
generate_tone(F_NOTE[3],semicorchea);
generate_tone(F_NOTE[3],semicorchea);
generate_tone(Eb_NOTE[3],semicorchea);
delay_ms(100);
EJERCICIO 2.14
EJERCICIO 2.15
CÓDIGO
EJERCICIO 3.1
port_b = 0; //Puerto b = 0.
}
} //Fin del bucle de inicio.
EJERCICIO 3.2
CÓDIGO
#include <18f4550.h> //Librería para usar el PIC18F4550
#fuses HS,WDT,NOPROTECT,PUT, NOPBADEN //Configuración de fusibles
#use delay (clock=12000000) //FOSC =12MHz
#BYTE port_d= 0xF83 //Identificador para el puerto d en la localidad 0xF83.
int i; //Variable i, contador para el bucle FOR.
const int x[]= {64,121,36,48,25,18,2,120,0,16}; //Tabla de datos decodificados a 7
segmentos.
void main(void) //Función principal main.
{
set_tris_d(0x00); //Identificador para el puerto d como salida.
disable_interrupts(GLOBAL); //Todas las interrupciones desactivadas.
port_d = 64; //Asigna el valor de 64 al Puerto para ver el número 0.
while(TRUE) //Bucle infinito.
{ //Inicio del bucle.
for (i=0; i<=9;++i) //Repite mientras i sea menor o igual a 9.
{
delay_ms(100); //Retardo de 500 ms. Necesario para mantener el dato en el
// puerto.
port_d= x[i]; //Asigna al puerto el valor apuntado por la variable i en el
//array x.
}
} //Fin del bucle infinito.
}
EJERCICIO 3.3
CÓDIGO
#include <18f4550.h> //Librería para usar el PIC18F4550.
#fuses HS,WDT,NOPROTECT,PUT, NOPBADEN //Configuración de fusibles.
#use delay (clock=12000000) //FOSC =12MHz.
#BYTE port_b= 0xF81 //Identificador para el puerto b en la localidad 0xF81.
#BYTE port_d= 0xF83 //Identificador para el puerto d en la localidad 0xF83.
int unidad, decena, x; //Variables.
//Función display. Muestra los datos en los display y genera un retardo de 1segundo.
void display()
{
for (x= 1; x<= 25; ++x){ //Repite 25 veces.
port_d = 1; //Habilita display unidad y apaga display decena.
port_b= unidad; //Asigna al Puerto b el dato de unidad.
delay_ms(500); //El dato de unidad permanece el Puerto b 20 ms.
port_d = 2; //Habilita el display decena y apaga display unidad.
port_b= decena; //Asigna al Puerto b el dato de decena.
delay_ms(500); //El dato de decena permanece el Puerto b 20 ms.
}
return; //Retorna al programa principal.
}
void main(void) //Función principal main.
{
set_tris_b(0x00); //Define port_b como salida.
set_tris_d(0x00); //Identificador para el puerto d como salida.
disable_interrupts(GLOBAL); //Todas las interrupciones desactivadas.
port_b = 0; //Puerto b =0.
while(TRUE){
for (decena=0; decena<=9;++decena){ //Datos para el display decena 0 a 9.
for (unidad=0; unidad<=9;++unidad){ //Datos para el display unidad 0 a 9.
display(); //Función display.
}
}
} //Fin del bucle infinito.
}
EJERCICIO 3.4
CÓDIGO
#include <18f4550.h> //Librería para usar el PIC18F4550.
#fuses HS, NOPROTECT, NOWRT, NOPUT, NOWDT //Configuración de fusibles.
#use delay (clock=12000000) //FOSC =12MHz.
#include <lcd.c> //Librería lcd.c
//Identificador para el puerto d como salida
void main(void) //Función principal main.
{
set_tris_d(0x00);
lcd_init(); // Inicializa el LCD.
lcd_gotoxy(4,1); //Sitúa el cursor en columna 4, fila 1.
lcd_putc("HOLA MUNDO!!\n LCD en CCS"); //Escribe en el LCD.
}
EJERCICIO 3.5
CÓDIGO
CÓDIGO
CÓDIGO
#include <18f4550.h> //Librería para usar el PIC18F4550.
#fuses HS, NOPROTECT, NOWRT, NOPUT, NOWDT //Configuración de fusibles.
#use delay (clock=12000000) //FOSC = 12 MHz.
#include <lcd.c> //Librería para el manejo del LCD.
const char mensaje[]= {"electromicrodigital"}; //Mensaje a desplegarse en el LCD.
void main(void) //Función principal main.
{
char y=1; //Índice fila.
signed char x=16; //Índice columnas (posiciones).
lcd_init(); //Inicializa LCD.
while(TRUE){ //Bucle inicio.
lcd_gotoxy(x,y) ; //Ubica cursor para escribir mensaje.
lcd_putc(mensaje ) ; //Muestra por pantalla el mensaje.
delay_ms(50); //Retardo 150 ms.
x--; //Decremento índice de columnas.
if(x>-16){ //¿Se ha mostrado mensaje entero en la primera fila?.
x=16; //SI, índice columna x=-16, inicia el cursor en la primera posición.
y++; //Incremento índice fila (mostrar texto en segunda columna).
if(y>2) //Se ha mostrado mensaje por segunda fila?.
y=1; //SI, restaurar índice de fila.
}
lcd_putc("\f" ) ; ///Borra pantalla.
} //Bucle infinito.
}
EJERCICIO 3.8
CÓDIGO
#include <18f4550.h> //Librería para usar el PIC18F4550.
#fuses HS,NOWDT,NOPROTECT,NOPUT, NOLVP //Configuración de fusibles.
#use delay (clock=12000000) // FOSC = 12 MHz.
#include <lcd.c> //Librería para el manejo del LCD.
const char mensaje[]= {"electromicrodigital"}; //Mensaje a desplegarse en el LCD.
void main(void) //Función principal main.
{
char y=1; //Índice fila.
signed char x=-16; //Índice columnas (posiciones).
lcd_init(); //Inicializa LCD.
while(TRUE){ //Inicio del bucle.
lcd_gotoxy(x,y) ; //Ubica cursor para escribir mensaje.
lcd_putc(mensaje); //Muestra por pantalla el mensaje.
delay_ms(150); //Retardo de 150 ms.
x++; //Incremento índice de columnas.
if(x>16){ //¿se ha mostrado mensaje entero en la primera fila?
x=-16; //SI, índice columna x=-16, inicia el cursor en la primera posición.
y++; //incremento índice fila (mostrar texto en segunda columna).
if(y>2) //¿se ha mostrado mensaje por segunda fila?.
y=1; //SI, restaurar índice de fila.
}
lcd_putc("\f" ) ; //Borra pantalla.
} //Bucle infinito.
}
EJERCICIO 3.9
EJERCICIO 3.10
EJERCICIO 3.11
EJERCICIO 3.13
EJERCICIO 3.14
EJERCICIO 3.15
EJERCICIO 3.16
EJERCICIO 3.17
void main(){
CÓDIGO
};
//Función para dibujar la imagen.
void glcd_imagen()
{
char i,j;
signed char k;
for( i = 0 ; i < 55 ; i ++ )
{
for( j = 0 ; j < 14 ; j ++)
{
for(k=7;k>-1;k--)
{
if( bit_test(imagen[i][j] ,7-k ))
glcd_pixel( j*8+k,i, ON );
}
}
}
}
void main() //Función principal.
{
GLCD_init(1); //Inicializa el GLCD, encendido.
GLCD_fillscreen(0); //Limpia la pantalla.
while(TRUE){
glcd_imagen(); //Llamamos a la función imagen para dibujar.
delay_ms(4000); // en el Display gráfico.
glcd_fillScreen(0); //Limpia la pantalla.
} //Ciclo infinito.
}
EJERCICIO 3.19
EJERCICIO 3.21
MANEJO DE TECLADO 4X3, MODIFICANDO EL DRIVER KBD.C
UTILIZANDO PIC16F877A.
CÓDIGO
#include <16f877A.h> //Incluye librería para usar PIC16F877A.
#fuses XT,WDT,NOPROTECT,NOPUT //Configuración de fusibles.
#use delay (clock=4000000) //FOSC=4 MHz
#include <kbd.c> //Driver creado para manejo de teclado por puerto B.
#include <lcd.c> //Driver para el LCD por el puerto D.
char k; //Variable donde se almacena tecla pulsada.
void main() //Función principal main.
{
lcd_init(); //Inicializa el LCD.
kbd_init(); //Inicializa el teclado.
port_b_pullups(TRUE); //Activa las resistencias PULL UP del puerto B.
printf(lcd_putc,"\fTECLA PULSADA ES:\n"); //Mensaje para la tecla pulsada.
lcd_gotoxy(8,2); //Ubica el cursor en la columna 1, fila 2.
while(TRUE) { //Inicio del bucle...
k = kbd_getc(); //Detecta la tecla pulsada.
switch (k)
{ //Muestra en el LCD el valor de la tecla pulsada.
case '0': lcd_putc("0"); break;
case '1': lcd_putc("1"); break;
case '2': lcd_putc("2"); break;
case '3': lcd_putc("3"); break;
case '4': lcd_putc("4"); break;
case '5': lcd_putc("5"); break;
case '6': lcd_putc("6"); break;
case '7': lcd_putc("7"); break;
case '8': lcd_putc("8"); break;
case '9': lcd_putc("9"); break;
case '#': lcd_putc("#"); break;
case '*': lcd_putc("*"); break;
default: break;
}
lcd_gotoxy(8,2); //Ubica el cursor en la 1 columna. fila2
} //Fin del bucle infinito.
}
EJERCICIO 3.22
CÓDIGO
CÓDIGO
#include <18f4550.h> //Librería para usar el PIC18F4550
#fuses HS,NOWDT,NOPROTECT,NOPUT, NOLVP //Configuración de fusibles.
#use delay (clock=4000000) //FOSC =4MHz
#rom int8 0xF00000= {'5','3','1','7','2'} //Datos para la EEPROM.
void main()
{
//……. Programa
}
EJERCICIO 3.24