Sunteți pe pagina 1din 11

ESCUELA SUPERIOR POLITCNICA DEL

LITORAL

FACULTAD DE INGENIERA ELCTRICA Y


COMPUTACIN

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:

Familiarizarse con el manejo del LCD y del teclado matricial 4x4

1.- Enunciado del proyecto


La prctica est dividida en dos programas funcionales. El primer programa recurre a
la utilizacin de un DISPLAY 16x2 para mostrar un mensaje escrito dentro de la
programacin del microcontrolador; A su vez desplaza el mensaje en ambos sentidos
con el objetivo de utilizar los espacios de memoria visible y oculta del DISPLAY.

El segundo programa adems de utilizar el DISPLAY 16x2, agrega un teclado 4x4


conectado al microcontrolador. Al presionar cualquier tecla, se presentar en el
DISPLAY su valor y el nmero de veces seguidas que se aplaste dicha tecla.

2.- Diagrama de Bloques

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

4.- Descripcin del algoritmo o estrategia utilizada.


1) Se inicia el programa configurando los puertos como entradas o salidas
digitales. Se configura el puerto B como salida digital. Se utiliza un DISPLAY
16x2 para mostrar un mensaje escrito; A su vez desplaza el mensaje en ambos
sentidos a travs de un lazo for con el objetivo de utilizar los espacios de
memoria visible y oculta del DISPLAY.Todo esto estar dentro de un lazo infinito
while.

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.

5.- Listado del programa fuente en lenguaje C con comentarios en las


lneas de cdigo que considere fundamentales

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
*/

// LCD module connections


sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;

sbit LCD_RS_Direction at TRISB4_bit;


sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
// End LCD module connections

char txt1[] = "mikroElektronika";


char txt2[] = "EasyPIC5";
char txt3[] = "Lcd4bit";
char txt4[] = "example";

char i; // Loop variable

void Move_Delay() { // Function used for text moving


Delay_ms(500); // You can change the moving speed here
}

void main(){
TRISB = 0;
PORTB = 0xFF;
TRISB = 0xff;
ANSEL = 0; // Configure AN pins as digital I/O
ANSELH = 0;
Lcd_Init(); // Initialize LCD

Lcd_Cmd(_LCD_CLEAR); // Clear display


Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off
Lcd_Out(1,6,txt3); // Write text in first row

Lcd_Out(2,6,txt4); // Write text in second row


Delay_ms(2000);
Lcd_Cmd(_LCD_CLEAR); // Clear display

Lcd_Out(1,1,txt1); // Write text in first row


Lcd_Out(2,5,txt2); // Write text in second row

Delay_ms(2000);

while(1) { // Endless loop


// Moving text

for(i=0; i<16; i++) { // Move text to the right 4 times


Lcd_Cmd(_LCD_SHIFT_RIGHT);
Move_Delay();
}

for(i=0; i<16; i++) { // Move text to the left 7 times


Lcd_Cmd(_LCD_SHIFT_LEFT);
Move_Delay();
} }}

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];

// Keypad module connections


char keypadPort at PORTD;
// End Keypad module connections
// LCD module connections

sbit LCD_RS at RB4_bit;


sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;

sbit LCD_RS_Direction at TRISB4_bit;


sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
// End LCD module connections

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

// Wait for key to be pressed and released


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 10: kp = 42; break; // '*' // Uncomment this block for keypad4x3
//case 11: kp = 48; break; // '0'
//case 12: kp = 35; break; // '#'
//default: kp += 48;

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 (kp != oldstate) { // Pressed key differs from previous


cnt = 1;
oldstate = kp;
}
else { // Pressed key is same as previous
cnt++;
}

Lcd_Chr(1, 10, kp); // Print key ASCII value on Lcd

if (cnt == 255) { // If counter varialble overflow


cnt = 0;
Lcd_Out(2, 10, " ");
}

WordToStr(cnt, txt); // Transform counter value to string


Lcd_Out(2, 10, txt); // Display counter value on Lcd
} while (1);
}
1
RE3/MCLR/VPP RC0/T1
U1 2
RC1/T
RA0/AN0/ULPW U/C12IN0- RC2
3
RA1/AN1/C12IN1- RC
4
RA2/AN2/VREF-/CVREF/C2IN+ RC
5
RA3/AN3/VREF+/C1IN+
6
RA4/T0CKI/C1OUT
7
RA5/AN4/SS/C2OUT
14
RA6/OSC2/CLKOUT
13
RA7/OSC1/CLKIN
6.- Copia impresa del circuito armado en PROTEUS para la simulacin
33
en
RB0/AN12/INT
el momento de su ejecucin. 34
1
35
RB1/AN10/C12IN3-
RE3/MCLR/VPP RC0/T1
RB2/AN8
U1 36
2 RB3/AN9/PGM/C12IN2-
RC1/T
37 RA0/AN0/ULPW U/C12IN0- RC2
PROGRAMA 1: En el puerto B se encuentran los valores de entrada que configuran el 3
38
4
RB4/AN11
RA1/AN1/C12IN1-
RB5/AN13/T1G
RC
39 RA2/AN2/VREF-/CVREF/C2IN+ RC
mensaje en la pantalla del LCD. Como se puede observar al iniciar el LCD presenta el 5
40
6
RB6/ICSPCLK
RA3/AN3/VREF+/C1IN+
RB7/ICSPDAT
RA4/T0CKI/C1OUT
mensaje A; Despus de unos segundos limpia la pantalla y muestra el mensaje B; El 7
14
RA5/AN4/SS/C2OUT
RA6/OSC2/CLKOUT
cual se desplaza de izquierda a derecha en la pantalla. 13
RA7/OSC1/CLKIN
PIC16F887
33
RB0/AN12/INT
34
1 15 RB1/AN10/C12IN3-
A

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

PROGRAMA 2: Como se puede observar en el LCD se presenta la tecla que se aplasta y


el nmero de veces que se lo hace.
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

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

Al finalizar la prctica, nos familiarizamos con el uso de la sintaxis en el programa


MIKROC, para definir funciones usando el teclado 4x4 y el LCD 16x2; Que gracias al
lenguaje C, es de mucha ayuda las funciones preestablecidas en las libreras del
programa.

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.

En la simulacin en Proteus se pudo observar como la LCD funcionaba de acuerdo al


cdigo hecho en el lenguaje C; El mismo que al gusto del programador, se puede
modificar. De esa manera se puede mostrar las seales enviadas desde el
microcontrolador al LCD. Adems se puede incorporar un instrumento externo de
cambios de seal como lo es un teclado; Creando un diseo que incorpore salida de
datos visuales a travs de una interfaz fsica.

8.- Recomendaciones

Tomar en cuenta que la posicin correcta de los pines del display.


Tomar en cuenta que para poder reconocer caracteres en el teclado 4x4, es necesario
saber la tabla del cdigo ASCII de las palabras que queramos leer, y posteriormente
mostrarlas en una pantalla LCD. Por esta razn debemos utilizar y definir una tabla de
conversiones a utilizar, en este caso se tendr la tabla de conversiones a ASCII q luego
el valor se mostrara por el LCD.
Tener precaucin de no sobrescribir en el mismo espacio de memoria del LCD, para que
no existan errores de visualizacin.
mikroC PRO proporciona libreras para comunicacin con el LCD, a travs de un
interfaz de 4 bits para datos. Para poder utilizar las funciones establecidas para el uso de
LCD, se debe declarar previamente un total de 12 variables; 6 que definen los pines del
microcontrolador y otras 6 que permiten programar su sentido de circulacin de datos.
Adems recordar que para poder utilizar las funciones que determinan el uso del teclado
matricial, se tiene que declarar previamente una variable que especifica el puerto que se
emplear para la conexin del teclado.
ANEXO
RESPONDER:

Primer programa:

1) Al ejercicio 1 agregue un botn en RD0 y cada vez que se presione el botn se


mostrar en la pantalla LCD cuantas veces ha sido presionado el botn, es decir
que se cuente cuantos pulsos van ingresando por RD0.

/*
* 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
*/

// LCD module connections


sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;

sbit LCD_RS_Direction at TRISB4_bit;


sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
// End LCD module connections

char txt1[] = "NUMERO DE PULSOS";


char txt2[] = "#";
char txt3[] ="0";
int cnt=0;

void Move_Delay() { // Function used for text moving


Delay_ms(100); // You can change the moving speed here
}

void main(){
TRISB = 0;
PORTB = 0xFF;
TRISB = 0xff;
ANSEL = 0; // Configure AN pins as digital I/O
ANSELH = 0;
Lcd_Init(); // Initialize LCD

Lcd_Cmd(_LCD_CLEAR); // Clear display


Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off
Lcd_Out(1,1,txt1); // Write text in first row
Lcd_Out(2,8,txt2); // Write text in second row

while(1) { // Endless loop


// Moving text
if (PORTD.F0 == 1) { // Pressed PORTD,0
cnt = cnt+1;
aun_presinado:
if (PORTD.F0 == 1) {
goto aun_presinado;

} }
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

2) Modifique el programa 2 para que se ingrese 4 caracteres desde el teclado 4x4 y


se graben estos datos en la memoria Eeprom. En la primera lnea de la pantalla
LCD se muestra los caracteres en el mismo orden que ingres el usuario y en la
segunda lnea se muestran los caracteres al revs. Por ejemplo:

1. 1234 Primera lnea en el LCD

2. 4321 Segunda lnea en el LCD


/*
* 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 y,kp = 0;
int k,i,n,x=0;

// Keypad module connections


char keypadPort at PORTD;
// End Keypad module connections

// LCD module connections


sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;

sbit LCD_RS_Direction at TRISB4_bit;


sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
// End LCD module connections

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

S-ar putea să vă placă și