📄 ejem_21.c
字号:
// EJEMPLO 21
// Autor: Mikel Etxebarria
// (c) Ingenier韆 de Microsistemas Programados S.L.
// www.microcontroladores.com
// Bilbao 2006
//
//El teclado y el LCD.
//
//Haciendo uso de las rutinas incluidas en los ficheros KBD2.C y LCD2.C, se trata
//de leer el teclado y, visualizar sobre el m骴ulo LCD la tecla pulsada.
//
//El ejemplo pretende mostrar la interrupci髇 por cambio de estado en cualquiera de las l韓eas RB4-RB7 del PIC
//el sistema se mantiene en el modo SLEEP de bajo consumo y s髄o reacciona cuando tiene lugar la pulsaci髇
//de cualquier tecla.
#include <16f876A.h>
//Ajusta los valores de la palabra de configuraci髇 durante el ensamblaje:
//Protecci髇 de c骴igo y datos=OFF, LVP=OFF, WDT=OFF y OSC=XT
#fuses NOPROTECT,NOCPD,NOLVP,NOWDT,XT
// Con estas directivas las funciones "input" y "output_bit" no reprograman
// el pin de la puerta cada vez que son utilizadas. Si no se indica el
// modo fast_io se asume por defecto standard_io el cual reprograma el pin
// siempre antes de ser utilizadas estas funciones.
#use fast_io (A)
#use fast_io (B)
#use delay(clock=4000000)
#include <kbd2.c> //Incluir funciones de manejo del teclado
#include <lcd2.c> //Incluir funciones de manejo del LCD
char tecla;
int temporal;
#int_rb //Tratamiento de interrupci髇 por cambio de estado
tratamiento()
{
tecla=kbd_getc(); //Lee el teclado
delay_ms(5); //Temporizaci髇
lcd_gotoxy(16,1); //Posiciona el cursor
lcd_putc(tecla); //Visualiza la tecla pulsada
set_tris_b(0b11110000); //RB7-RB4 entradas, RB3-RB0 salidas
output_b(0x00);
temporal=input_b(); //Repone el estado de la puerta B
clear_interrupt(int_rb); //Repone el flag de interrupci髇 RB
}
main()
{
SETUP_ADC_PORTS(NO_ANALOGS);//Puerta A Digital
lcd_init(); //Secuencia de inicio del LCD
printf(lcd_putc,"Se ha pulsado: "); //Mensaje en el LCD
port_b_pullups(true); //Activa cargas pull-up
set_tris_b(0xf0); //RB0-RB3 salidas, RB4-RB7 entradas
output_b(0x00);
temporal=input_b(); //Repone el estado de la puerta A
clear_interrupt(int_rb); //Repone flag de interrupci髇 RB
enable_interrupts(int_rb); //Activa interrupci髇 RB
enable_interrupts(global); //Habilita interrupciones
while(1)
{
sleep();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -