Documente Academic
Documente Profesional
Documente Cultură
LITORAL
Laboratorio de Microcontroladores
Prctica 8
MANEJO DEL LCD
Integrantes
Isaac Mguez V.
Ericka Oyague B.
Paralelo: 2
Grupo: 2
Fecha de presentacin:
30/07/2013
2013 1 TRMINO
OBJETIVOS:
Programa 1:
PANTALLA LCD
PIC16F887
Programa 2:
PANTALLA LCD
PIC16F887
TECLADO 4X4
3.- Diagrama de Flujo funcional del Programa principal y de las
subrutinas
Programa Principal 1
Programa Principal 2
Subrutina Parte 1
2) Se prueba el valor vectorial del Puerto D para saber que tecla se aplasto. Al
presionar cualquier tecla, se presentar en el DISPLAY su valor y el nmero de
veces seguidas que se aplaste dicha tecla. En cada condicional preguntara si se
ha aplastado el mismo valor con lo que aumentara el contador de veces; Si no
fue as vuelve a cero su valor. En el display se muestra la tecla que se presion y
el valor de veces consecutives que se lo hizo.
Programa 1
/*
* Nombre del Proyecto:
P8a_lcd.c
* Nombre del Autor:
(c) Mikroelektronika, 2009.
* Description:
Utiliza el microcontrolador como medio para iniciar los parmetros de configuracin
Del display 16x2; El cual muestra un mensaje en la pantalla y lo desplaza en ambas
direcciones simultaneamente.
* Test configuration:
MCU: PIC16F887
Oscillator: HS, 08.0000 MHz
SW: mikroC PRO for PIC
*/
void main(){
TRISB = 0;
PORTB = 0xFF;
TRISB = 0xff;
ANSEL = 0; // Configure AN pins as digital I/O
ANSELH = 0;
Lcd_Init(); // Initialize LCD
Delay_ms(2000);
Programa 2
/*
* Nombre del Proyecto:
P8a_lcd.c
* Nombre del Autor:
(c) Mikroelektronika, 2009.
* Description:
Utiliza el microcontrolador como medio para iniciar los parmetros de configuracin
Del display 16x2 y un teclado 4x4. El display muestra lo que se presiona en el teclado y
tambien
el numero de veces consecutivas de lo que se aplaste.
* Test configuration:
MCU: PIC16F887
Oscillator: HS, 08.0000 MHz
SW: mikroC PRO for PIC
*/
unsigned short kp, cnt, oldstate = 0;
char txt[6];
void main() {
anselh=0;
ansel=0;
cnt = 0; // Reset counter
Keypad_Init(); // Initialize Keypad
Lcd_Init(); // Initialize Lcd
Lcd_Cmd(_LCD_CLEAR); // Clear display
Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off
Lcd_Out(1, 1, "1");
Lcd_Out(1, 1, "Key :"); // Write message text on Lcd
Lcd_Out(2, 1, "Times:");
do {
kp = 0; // Reset key code variable
10
12
13
14
11
RE3/MCLR/VPP RC0/T1OSO/T1CKI
35
1
2
3
4
5
6
7
8
9
16
RC1/T1OSI/CCP2
U1 2 17 RB2/AN8
3
RA0/AN0/ULPW U/C12IN0- RC2/P1A/CCP1
18 36
RA1/AN1/C12IN1- RC3/SCK/SCL RB3/AN9/PGM/C12IN2-
37
E
VDD
D0
D1
D2
D3
D4
D5
D6
D7
VSS
VEE
RS
4 23
RW
RA2/AN2/VREF-/CVREF/C2IN+ RC4/SDI/SDA
5 24 RB4/AN11
6
RA3/AN3/VREF+/C1IN+ RC5/SDO
25 38
RA4/T0CKI/C1OUT RC6/TX/CK RB5/AN13/T1G
7
14
RA5/AN4/SS/C2OUT
RA6/OSC2/CLKOUT
RC7/RX/DT
26
LCD1 39
RB6/ICSPCLK
13 19 LM016L 40
RA7/OSC1/CLKIN RD0
20 RB7/ICSPDAT
RD1
33 21
RB0/AN12/INT RD2
RV1 34
RB1/AN10/C12IN3- RD3
22
35 27
10k RB2/AN8 RD4
36 28
RB3/AN9/PGM/C12IN2- RD5/P1B
37
38
RB4/AN11 RD6/P1C
29
30
PIC16F887
RB5/AN13/T1G RD7/P1D
39
RB6/ICSPCLK
40 8
RB7/ICSPDAT RE0/AN5
9
RE1/AN6
B
10
12
13
14
11
10
1
2
3
4
5
6
7
8
9
RE2/AN7
PIC16F887
E
VDD
D0
D1
D2
D3
D4
D5
D6
D7
VSS
VEE
RS
RW
10
12
13
14
11
1
2
3
4
5
6
7
8
9
LCD1
E
VDD
VSS
VEE
RS
D0
D1
D2
D3
D4
D5
D6
D7
RW
LM016L
LCD1
LM016L
+
RB1/AN10/C12IN3- RD3
ON
35
36
RB2/AN8
RB3/AN9/PGM/C12IN2-
RD4
RD5/P1B
27
28
D
C 0 =
37 29
RB4/AN11 RD6/P1C
38 30
1
RB5/AN13/T1G RD7/P1D
39
RB6/ICSPCLK
40 8
RB7/ICSPDAT RE0/AN5
9
RE1/AN6
RV1 RE2/AN7
10
20K
PIC16F887
R5 R1 R2 R3
PULLUP PULLUP PULLUP PULLUP
10
12
13
14
11
1
2
3
4
5
6
7
8
9
E
VDD
D0
D1
D2
D3
D4
D5
D6
D7
VSS
VEE
RS
RW
LCD1
LM016L
7.- Conclusiones
Se debe recordar que son de mucha utilidad las funciones definidas en el programa
MIKROC, siempre y cuando se tenga claro el debido uso de los comandos para cada
componente, as tambin podemos adaptar para otros tipos de teclados ms grandes y
tambin para pantallas LCD con un nmero mayor de cuadrculas.
Los LCD en la actualidad son unos de los dispositivos con mayor uso para presentar
contenido alfanumrico, debido a su gran versatilidad para presentar mensajes de texto,
valores numricos y smbolos especiales. Con un bajo consumo y su facilidad de
programacin en lenguajes de alto nivel.
Se observ que el teclado matricial 4x4 est constituido por una matriz de pulsadores
dispuestos en filas y columnas, con la intencin de reducir el nmero de pines
necesarios para su conexin. Su funcionamiento es muy sencillo, cuando se presiona
una tecla, se conectan internamente la fila y columna correspondientes.
8.- Recomendaciones
Primer programa:
/*
* Nombre del Proyecto:
P8a_lcde.c
* Nombre del Autor:
(c) Mikroelektronika, 2009.
* Description:
Utiliza el microcontrolador como medio para iniciar los parmetros de configuracin
Del display 16x2; El cual muestra el numero de veces que se haya aplastado la botonera
Conectada al pin0 del Puerto D.
* Test configuration:
MCU: PIC16F887
Oscillator: HS, 08.0000 MHz
SW: mikroC PRO for PIC
*/
void main(){
TRISB = 0;
PORTB = 0xFF;
TRISB = 0xff;
ANSEL = 0; // Configure AN pins as digital I/O
ANSELH = 0;
Lcd_Init(); // Initialize LCD
} }
wordToStr(cnt,txt3); // Transform counter value to string
Lcd_Out(2,9,txt3); // Display counter value on Lcd
}
}
1 15
RE3/MCLR/VPP RC0/T1OSO/T1CKI
16
U1 2
RC1/T1OSI/CCP2
17
RA0/AN0/ULPW U/C12IN0- RC2/P1A/CCP1
3 18
RA1/AN1/C12IN1- RC3/SCK/SCL
4 23
RA2/AN2/VREF-/CVREF/C2IN+ RC4/SDI/SDA
5 24
RA3/AN3/VREF+/C1IN+ RC5/SDO
6 25
RA4/T0CKI/C1OUT RC6/TX/CK
7 26
RA5/AN4/SS/C2OUT RC7/RX/DT
14
RA6/OSC2/CLKOUT
13 19
RA7/OSC1/CLKIN RD0
20
RD1
33 21
RB0/AN12/INT RD2
RV1 34
RB1/AN10/C12IN3- RD3
22 R1
35 27 10k
10k RB2/AN8 RD4
36 28
RB3/AN9/PGM/C12IN2- RD5/P1B
37 29
RB4/AN11 RD6/P1C
38 30
RB5/AN13/T1G RD7/P1D
39
RB6/ICSPCLK
40 8
RB7/ICSPDAT RE0/AN5
9
RE1/AN6
10
RE2/AN7
PIC16F887
10
12
13
14
11
1
2
3
4
5
6
7
8
9
E
VDD
D0
D1
D2
D3
D4
D5
D6
D7
VSS
VEE
RS
RW
LCD1
LM016L
* Test configuration:
MCU: PIC16F887
Oscillator: HS, 08.0000 MHz
SW: mikroC PRO for PIC
*/
unsigned short y,kp = 0;
int k,i,n,x=0;
void main() {
anselh=0;
ansel=0;
C1ON_bit = 0; // Disable comparators
C2ON_bit = 0;
Keypad_Init(); // Initialize Keypad
Lcd_Init(); // Initialize Lcd
Lcd_Cmd(_LCD_CLEAR); // Clear display
Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off
Lcd_Out(1, 1, "valor :0000"); // Write message text on Lcd
Lcd_Out(2, 1, "valorinv:0000");
i=10;
n=0;
do {
kp = 0; // Reset key code variable
do
//kp = Keypad_Key_Press(); // Store key code in kp variable
kp = Keypad_Key_Click(); // Store key code in kp variable
while (!kp);
// Prepare value for output, transform key to it's ASCII value
switch (kp) {
case 1: kp = 49; break; // 1 // Uncomment this block for keypad4x4
case 2: kp = 50; break; // 2
case 3: kp = 51; break; // 3
case 4: kp = 65; break; // A
case 5: kp = 52; break; // 4
case 6: kp = 53; break; // 5
case 7: kp = 54; break; // 6
case 8: kp = 66; break; // B
case 9: kp = 55; break; // 7
case 10: kp = 56; break; // 8
case 11: kp = 57; break; // 9
case 12: kp = 67; break; // C
case 13: kp = 42; break; // *
case 14: kp = 48; break; // 0
case 15: kp = 35; break; // #
case 16: kp = 68; break; // D
}
if (n != 4) {
Lcd_Chr(1, i, kp); // Print key ASCII value on Lcd
EEPROM_Write(0x00+n,kp);
n++;
i++; }
Delay_ms(350);
if (n == 4) {
i=10;
k=10;
for(n = 0; n<4;n++) {
y=EEPROM_Read(0x03-n); // and display data on display
Lcd_Chr(2,k, y);
k++;}
k=10;
n=0; }
} while (1);
}
U1
1 15
RE3/MCLR/VPP RC0/T1OSO/T1CKI
2
RA0/AN0/ULPW U/C12IN0-
RC1/T1OSI/CCP2
RC2/P1A/CCP1
16
17
A 7 8 9
3 18
RA1/AN1/C12IN1- RC3/SCK/SCL
4 23
RA2/AN2/VREF-/CVREF/C2IN+ RC4/SDI/SDA
5
6
RA3/AN3/VREF+/C1IN+
RA4/T0CKI/C1OUT
RC5/SDO
RC6/TX/CK
24
25
B 4 5 6
7 26
RA5/AN4/SS/C2OUT RC7/RX/DT
14
RA6/OSC2/CLKOUT
13
RA7/OSC1/CLKIN RD0
RD1
19
20
C 1 2 3
33 21
RB0/AN12/INT RD2
34 22
+
RB1/AN10/C12IN3- RD3
ON
35
36
RB2/AN8
RB3/AN9/PGM/C12IN2-
RD4
RD5/P1B
27
28
D
C 0 =
37 29
RB4/AN11 RD6/P1C
38 30
1
RB5/AN13/T1G RD7/P1D
39
RB6/ICSPCLK
40 8
RB7/ICSPDAT RE0/AN5
9
RE1/AN6
RV1 RE2/AN7
10
20K
PIC16F887
EPR_W RITECODE_DELAY=10m
R5 R1 R2 R3
PULLUP PULLUP PULLUP PULLUP
10
12
13
14
11
1
2
3
4
5
6
7
8
9
E
VDD
D0
D1
D2
D3
D4
D5
D6
D7
VSS
VEE
RS
RW
LCD1
LM016L