UNIVERSIDAD DISTRITAL FRANCISCO JOS DE CALDAS
SISTEMAS EMBEBIDOS I
LABORATORIO 1
Manejo de las Lneas GPIO del PSoC 3
Segura Cano Claudia 20092005096, Sastoque Caro. Miguel 20101005072
PLANTEAMIENTO DEL PROBLEMA
Disear e implementar una librera para el PSoC3 que se encargue de configurar y manejar las
funciones de una LCD grafica de 128x64 pixeles (que haga uso del controlador KS0108B)
disponibles en el laboratorio. La librera diseada debe incluir funciones similares a las
estudiadas para la LCD alfanumrica (ver tabla), que permita configurar el puerto GPIO que
utiliza la LCD, adems de funciones de inicializacin, escritura de caracteres alfanumricos, el
dibujo de imgenes, entre otras. Luego de tener implementada la librera se pide hacer uso de esta
por medio de una aplicacin en la que se visualice una imagen en la mitad de la LCD (es decir
una imagen de 64x64 pixeles) en la otra mitad se escribir un mensaje que utilice caracteres
alfanumricos estndar.
ANLISIS DEL PROBLEMA
Para dar solucin al problema propuesto se estructura el proyecto en los siguientes mdulos:
Pines entrada Salida para la LCD
Se requiere implementar los puertos de entrada salida del PSoC Creator para generar comunicacin entra la RAM
y el microcontrolador.
2 pines de control
Desde estos se puede controlar las pginas de la LCD graficadora.
Pin de reset, R/W, D/I, Enable
Estos pines permiten implementar funciones de habilitacin, lectura, escritura, reset, entre otras.
DISEO
El diagrama esquemtico de la solucin propuesta se presenta en la figura 1, en donde se utiliza:
-
Pines GPIO
Psoc 3
Figura 1. Diagrama esquemtico de la solucin.
DATAPins
Los pines utilizan una configuracin:
- Bidirectional
- Drive mode: Resistive Pull Up
Resto de Pines
Los pines utilizan una configuracin:
- Digital Output sin HW Conection.
- Drive Mode: Strong Drive
MODELO DE SOLUCIN
A continuacin se presentan los diagramas de flujo que conforman el programa para graficar, al igual que el
programa principal.
Figura 2. Inicializacin de la LCD graficadora.
Figura 3. Diagramas de flujo del control de la LCD.
Figura 4. Diagrama de flujo para la escritura en la LCD.
Figura 5. Diagrama de flujo para ubicar el cursor en la pgina, columna y fila deseada por el usuario.
Figura 6. Diagrama de flujo para borrar la pgina.
Figura 7. Diagrama de flujo para impresin en LCD
CONCLUSIONES
Se aprendi a implementar los mdulos GPIO del PSoC Creator.
Se aprendi a implementar una librera para el PSoC Creator 3.
Se aprendi a implementar la LCD graficadora.
Para enviar datos a la RAM de la LCD es necesario conectar unas resistencias de Pull Up externas, pues con
las que se implementan desde el Software no es suficiente para enviar los datos desde la RAM de la
graficadora al microcontrolador.
ANEXO I Cdigo de la librera implementada para graficar en el PSoC Creator 3
////
Libreria manejo LCD Grafica
////
#include <project.h>
///
Definicion de pines IO
//#define lcd_DATA CYREG_PRT0_PS
#define data0
CYREG_PRT0_PC0
#define data1
CYREG_PRT0_PC1
#define data2
CYREG_PRT0_PC2
#define data3
CYREG_PRT0_PC3
#define data4
CYREG_PRT0_PC4
#define data5
CYREG_PRT0_PC5
#define data6
CYREG_PRT0_PC6
#define data7
CYREG_PRT0_PC7
#define
#define
#define
#define
#define
#define
///
lcd_CS1 CYREG_PRT1_PC4
lcd_CS2 CYREG_PRT1_PC5
lcd_RST CYREG_PRT1_PC2
lcd_RW CYREG_PRT1_PC6
lcd_DI CYREG_PRT1_PC7
lcd_EN CYREG_PRT2_PC7
// DB
//CS1
//CS2
//RST
//RW
//DI
//EN
CYREG_PRTx_PCy
const
const
const
const
Definicion de pines IO
uint8
uint8
uint8
uint8
DisplayOn = 0x3F;
DisplayOff = 0x3E;
setline = 0xB8;
setpos = 0x40;
/// Definicion variables globales
volatile uint8 NPAG, COL1, FIL1, COL2, FIL2;
//#define lcd_DATA CYREG_PRT0_PS
#define data0
CYREG_PRT0_PC0
#define data1
CYREG_PRT0_PC1
#define data2
CYREG_PRT0_PC2
#define data3
CYREG_PRT0_PC3
#define data4
CYREG_PRT0_PC4
#define data5
CYREG_PRT0_PC5
#define data6
CYREG_PRT0_PC6
#define data7
CYREG_PRT0_PC7
#define
#define
#define
#define
#define
#define
lcd_CS1 CYREG_PRT1_PC4
lcd_CS2 CYREG_PRT1_PC5
lcd_RST CYREG_PRT1_PC2
lcd_RW CYREG_PRT1_PC6
lcd_DI CYREG_PRT1_PC7
lcd_EN CYREG_PRT2_PC7
// DB
//CS1
//CS2
//RST
//RW
//DI
//EN
/// Definicionees caracteres
const unsigned char caracter[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x5E, 0x00, 0x00, 0x00,
CYREG_PRTx_PCy
// Code for char
// Code for char !
0x06,
0x10,
0x46,
0x66,
0x34,
0x0C,
0x3C,
0x00,
0x48,
0x10,
0x30,
0x08,
0x00,
0x40,
0x3E,
0x00,
0x00,
0x22,
0x18,
0x2F,
0x3E,
0x00,
0x36,
0x06,
0x00,
0x00,
0x00,
0x14,
0x00,
0x02,
0x3C,
0x70,
0x7F,
0x1C,
0x7F,
0x7F,
0x7F,
0x1E,
0x7F,
0x42,
0x41,
0x7F,
0x7F,
0x7E,
0x7E,
0x3C,
0x7F,
0x3E,
0x7F,
0x46,
0x01,
0x3F,
0x03,
0x1F,
0x61,
0x01,
0x61,
0x00,
0x72,
0x49,
0x36,
0x4A,
0x00,
0x42,
0x42,
0x68,
0x10,
0x70,
0x08,
0x60,
0x30,
0x41,
0x41,
0x62,
0x41,
0x14,
0x49,
0x49,
0x02,
0x49,
0x49,
0x66,
0xE6,
0x08,
0x14,
0x41,
0x01,
0x42,
0x1E,
0x49,
0x22,
0x41,
0x49,
0x09,
0x21,
0x08,
0x7E,
0x41,
0x0C,
0x40,
0x02,
0x06,
0x42,
0x09,
0x41,
0x09,
0x49,
0x01,
0x40,
0x1C,
0x70,
0x12,
0x06,
0x51,
0x06,
0x1E,
0xFF,
0x18,
0x4A,
0x00,
0x00,
0x3C,
0x3C,
0x7C,
0x00,
0x08,
0x00,
0x0C,
0x41,
0x7F,
0x51,
0x49,
0x12,
0x49,
0x49,
0x62,
0x49,
0x49,
0x00,
0x00,
0x14,
0x14,
0x22,
0xB1,
0xB9,
0x11,
0x49,
0x41,
0x41,
0x49,
0x09,
0x49,
0x08,
0x42,
0x41,
0x12,
0x40,
0x0C,
0x1C,
0x42,
0x09,
0x51,
0x09,
0x49,
0x7F,
0x40,
0x60,
0x1C,
0x0C,
0x78,
0x4D,
0x00,
0x73,
0x49,
0x6C,
0x54,
0x00,
0x00,
0x00,
0x68,
0x10,
0x00,
0x00,
0x00,
0x02,
0x41,
0x40,
0x49,
0x49,
0x7E,
0x49,
0x49,
0x1A,
0x49,
0x29,
0x00,
0x00,
0x14,
0x14,
0x22,
0x09,
0xA5,
0x11,
0x49,
0x41,
0x22,
0x49,
0x09,
0x49,
0x08,
0x00,
0x3F,
0x21,
0x40,
0x02,
0x70,
0x42,
0x09,
0x21,
0x19,
0x49,
0x01,
0x40,
0x1C,
0x70,
0x12,
0x06,
0x43,
0x00,
0x1E,
0x31,
0x66,
0x28,
0x00,
0x00,
0x00,
0x48,
0x10,
0x00,
0x00,
0x00,
0x00,
0x3E,
0x00,
0x46,
0x36,
0x10,
0x30,
0x32,
0x06,
0x36,
0x1E,
0x00,
0x00,
0x22,
0x14,
0x14,
0x06,
0xA5,
0x1E,
0x36,
0x41,
0x1C,
0x41,
0x01,
0x39,
0x7F,
0x00,
0x00,
0x40,
0x00,
0x7E,
0x7E,
0x3C,
0x06,
0x5E,
0x66,
0x39,
0x01,
0x3F,
0x03,
0x1F,
0x61,
0x01,
0x41,
0x00,
0x13,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x22,
0x14,
0x08,
0x00,
0xBD,
0x70,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
"
#
$
%
&
'
(
)
*
+
,
.
/
0
1
2
3
4
5
6
7
8
9
:
;
<
=
>
?
@
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
0x7E,
0x06,
0x00,
0x04,
0x80,
0x00,
0x30,
0x7F,
0x3C,
0x30,
0x3C,
0x7C,
0x4C,
0x7F,
0x00,
0x20,
0x7F,
0x00,
0x78,
0x78,
0x3C,
0xFE,
0x0C,
0x00,
0x00,
0x00,
0x3E,
0x06,
0x1C,
0x42,
0x06,
0x62,
0x00,
0x00,
0x00,
0x0C,
0x7F,
};
const
0xFF,
0x7F,
0xBF,
0x14,
0x05,
0xFF,
0xFF,
0x00,
0xFF,
0x01,
0x10,
0x10,
0x04,
0x2F,
0xBF,
0x00,
0x42,
0x0C,
0x42,
0x02,
0x80,
0x00,
0x4A,
0x48,
0x42,
0x48,
0x4A,
0x12,
0x92,
0x08,
0x00,
0x40,
0x08,
0x7F,
0x08,
0x08,
0x42,
0x12,
0x12,
0x7E,
0x4C,
0x3E,
0x40,
0x18,
0x60,
0x24,
0x98,
0x52,
0x08,
0xFF,
0x42,
0x04,
0x40,
0x00,
0x18,
0x7E,
0x01,
0x80,
0x00,
0x4A,
0x48,
0x42,
0x48,
0x4A,
0x12,
0x92,
0x08,
0x7A,
0x42,
0x14,
0x00,
0x38,
0x08,
0x42,
0x12,
0x12,
0x04,
0x4A,
0x44,
0x40,
0x60,
0x18,
0x18,
0x60,
0x4A,
0x76,
0x00,
0x76,
0x0C,
0x7F,
0x00,
0x30,
0x00,
0x02,
0x80,
0x0C,
0x4A,
0x48,
0x42,
0x48,
0x4A,
0x04,
0x92,
0x08,
0x00,
0x7E,
0x22,
0x00,
0x08,
0x08,
0x42,
0x12,
0x12,
0x02,
0x52,
0x44,
0x40,
0x18,
0x60,
0x24,
0x18,
0x46,
0x42,
0x00,
0x08,
0x08,
0x00,
0x00,
0x60,
0x00,
0x04,
0x80,
0x08,
0x7C,
0x30,
0x00,
0x7F,
0x2C,
0x00,
0x7E,
0x70,
0x00,
0x00,
0x40,
0x00,
0x78,
0x70,
0x3C,
0x0C,
0xFE,
0x00,
0x32,
0x00,
0x7E,
0x06,
0x1C,
0x42,
0x06,
0x00,
0x00,
0x00,
0x00,
0x0C,
0x00,
unsigned char einstein [] = {
0xFF, 0xBF, 0xFF, 0xFF, 0xFF,
0xFF,
0x7F, 0xBF, 0x7F, 0x9F, 0xBF,
0x15,
0x15, 0x17, 0x1F, 0x1F, 0x1F,
0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x00,
0xFF, 0xFF, 0xF7, 0xFF, 0xFF,
0x20,
0x00, 0x00, 0x00, 0x00, 0x00,
0x00,
0x00, 0x10, 0x00, 0x00, 0x00,
0x6F,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
Code
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
[
BackSlash
]
^
_
`
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
{
|
}
~
0xFF, 0xFF, 0xFF, 0xFF, 0xBB, 0xBF, 0xFF, 0xFE,
0x0F, 0x27, 0x23, 0x3F, 0x0F, 0x8D, 0x20, 0x24,
0x1F, 0xBB, 0x3F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xBB, 0xFF,
0xFF, 0x7F, 0xBF, 0xF7, 0x37, 0x1F, 0x1F, 0x00,
0x00, 0x00, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00,
0x00, 0x11, 0x08, 0x20, 0x01, 0x03, 0x13, 0x13,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F,
0xFF,
0x00,
0x00,
0x80,
0x01,
0x00,
0x03,
0x00,
0xFF,
0x00,
0xE0,
0x70,
0x00,
0x00,
0x00,
0x00,
0xFF,
0xE0,
0x01,
0x00,
0x00,
0x00,
0x05,
0x00,
0xFF,
0x0E,
0x14,
0x00,
0x00,
0x00,
0x90,
0x00,
0xFF,
0x2C,
0x04,
0x00,
0x00,
0xFF,
0xFF,
0x00,
0xFF,
0x9F,
0xC0,
0x80,
0xC0,
0xFF,
0xFF,
0x00,
};
const
0x00,
0x00,
0x00,
0xD4,
0xF4,
0xFC,
0xEF,
0x00,
0x00,
0x80,
0x00,
0x00,
0x11,
0x00,
0xFF,
0x80,
0x00,
0x50,
0x00,
0x00,
0x00,
0x00,
0xFF,
0x1C,
0x00,
0x00,
0x00,
0x00,
0x2C,
0x00,
0xFF,
0x08,
0x00,
0x00,
0x00,
0x60,
0xB2,
0x00,
0xFF,
0x04,
0x84,
0x00,
0x00,
0xFF,
0xFF,
0x00,
0xFF,
0x38,
0x80,
0x92,
0xE0,
0xFF,
0xFF,
0x00
0xFF, 0xDF, 0xFC, 0xF8, 0xBE, 0x1B, 0x8D, 0xC0, 0xC0, 0x50, 0x00, 0x00,
0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0xC0, 0x80, 0x80,
0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x04, 0x0C,
0x13, 0x7B, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0x00,
0xFF, 0xFF, 0xFD, 0xFF, 0x05, 0x03, 0xE1, 0xE0, 0x81, 0x90, 0xC0, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xE0,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x04, 0x1C, 0x6B, 0xA7, 0xB7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
0xFF, 0xFE, 0xFF, 0xFF, 0x0F, 0x0C, 0x02, 0x03, 0x02, 0x01, 0x03, 0xC1,
0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
0x00, 0x00, 0x00, 0x20, 0x60, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x2C, 0x58, 0x40, 0x71, 0x80, 0x04, 0x0E, 0x0F, 0x17, 0xBF, 0x1F, 0x00,
0xFF, 0xFF, 0xFE, 0xFE, 0x74, 0xF8, 0x04, 0x00, 0x00, 0x00, 0x00, 0x0F,
0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, 0x20,
0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x06, 0x00, 0x80, 0x00, 0x00,
0xA0, 0xA0, 0x80, 0x80, 0x8F, 0xC0, 0x80, 0x80, 0xA0, 0xEE, 0xDE, 0x00,
0xFF, 0xFF, 0xFF, 0xFF, 0xF4, 0xC2, 0x10, 0x63, 0x04, 0x06, 0x04, 0xFC,
0x04, 0x08, 0x00, 0x00, 0x00, 0x08, 0x88, 0x38, 0x1C, 0x08, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xF4, 0xFC, 0xFC, 0xFC, 0xFE, 0xBE,
0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0x00,
0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xF8, 0xE8, 0xE0, 0x8F,
0x00, 0x10, 0x10, 0x42, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xF8, 0xFE, 0xFC, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xFD, 0xFF, 0xEF, 0xFF, 0xF7, 0x00,
unsigned char mafalda [] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00,
0x20, 0x30, 0x10, 0x50, 0x48, 0x08, 0x88, 0x00, 0x24, 0x04, 0x84, 0xC4, 0xD4,
0xF4,
0xF0, 0xF0, 0xF0, 0xF8, 0xF8, 0xF0, 0xF8, 0xFC, 0xF8, 0xFC, 0xFC, 0xF8, 0xFC,
0xF4,
0xF8,
0x00,
0x08,
0x00,
0x00,
0x00,
0x00,
0x40,
0x40,
0x00,
0x80,
0xFF,
0xFF,
0x7F,
0x0F,
0x0F,
0x0F,
0xFF,
0xFF,
0x00,
0x00,
0x03,
0x81,
0x50,
0x80,
0xFF,
0xFF,
0xFF,
0xFF,
0x00,
0xDE,
0x00,
0x00,
0xFF,
0xFF,
0x00,
0x01,
0x00,
0x30,
0x90,
0x10,
0xFF,
0xFF,
0x00,
0x07,
0x78,
0x78,
0x00,
0x00,
0xFF,
0xFF,
0xD0,
0xD8,
0x00,
0xE0,
0x00,
0xF0,
0x00,
0x08,
0x00,
0x00,
0x00,
0x00,
0x40,
0x40,
0x80,
0xC0,
0xFF,
0xFF,
0x1F,
0x0F,
0x0F,
0x1F,
0xFF,
0xFF,
0x00,
0x00,
0x03,
0x81,
0xC0,
0x00,
0xFF,
0xFF,
0xFF,
0xFF,
0x00,
0x20,
0x00,
0xFC,
0xFF,
0xFF,
0x00,
0x01,
0x00,
0x30,
0x10,
0x20,
0xFF,
0xFF,
0x02,
0x04,
0x78,
0x78,
0x00,
0x00,
0xFF,
0xFF,
0xF0,
0x9C,
0x80,
0x90,
0x01,
0xF8, 0xF8, 0xF8, 0xF0, 0xF0, 0xF0, 0xC0, 0xE0, 0x60, 0x60, 0x00, 0x80,
0x08, 0x08, 0x00, 0x90, 0x10, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0xA0, 0x80, 0xC0, 0x40,
0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x40, 0xE0, 0xC0, 0xE0, 0xF6, 0xF6, 0xF9, 0xF9, 0xF8, 0xFE, 0xFF, 0xFF,
0xFF, 0xF0, 0xF8, 0xF8, 0xFF, 0xFF, 0x3F, 0x3F, 0x3F, 0x3F, 0x1F, 0x1F,
0x0F, 0x0F, 0x0F, 0x0F, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x0F,
0x1F, 0x3F, 0x7F, 0x3F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xF0, 0xFF,
0xFF, 0xF9, 0xF8, 0xFE, 0xE6, 0xD8, 0xE8, 0x80, 0x40, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x80, 0x40, 0x40, 0x20, 0x20, 0x18, 0x08, 0x0C, 0x06,
0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xC0, 0x40, 0x60, 0x40,
0x01, 0x07, 0x0E, 0x0C, 0x18, 0x70, 0x00, 0x00, 0xE8, 0xF5, 0xFA, 0xFE,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x7F, 0x7F, 0x3F, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x10, 0x10, 0x20, 0x20, 0x60, 0x9C, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00,
0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xF8, 0x24, 0x00, 0x00, 0x00,
0x01, 0x01, 0x01, 0x01, 0x01, 0xB9, 0xC5, 0xC5, 0x87, 0x30, 0x30, 0x80,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x36, 0x23, 0x00, 0x00,
0x00, 0x80, 0x00, 0x22, 0x1F, 0x1F, 0x7F, 0x3F, 0x7F, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xC1, 0x80, 0x00, 0x00,
0x08, 0x08, 0x08, 0x18, 0x18, 0x18, 0x38, 0x38, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x70, 0x30, 0x30, 0x30, 0x10, 0x10, 0x00, 0x08, 0x08, 0x06,
0x00, 0x01, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0x7F, 0x5F, 0x3F, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0,
0x86, 0x83, 0x80, 0x80, 0x00, 0x02, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00,
0x00, 0x20, 0x20, 0x08, 0x20, 0x10, 0x04, 0x14, 0x0B, 0x08, 0x0C, 0x07,
0x00,
0x0F,
0x0F,
0x08,
0x10,
0x40,
0x60,
0xFC,
0x7F,
0xFB,
0x88,
0x00,
0x01,
0x08,
0x30,
0x00,
0x00,
0x12,
0x04,
0x27,
0x5C,
0x00,
0x4C,
0xB8,
0x00,
0xF1,
0x11,
0x06,
0x08,
0x10,
0x00,
0x00,
0x00,
0x31,
0x01,
0x78,
0xC0,
0x48,
0x0A,
0x00,
0x00,
0x00,
0x00,
0xFC,
0xFC,
0x00,
0x00,
0x00,
0x00,
0x1C,
0x1C,
0x04,
0x0C,
0x0E,
0x07,
0x00,
0x00,
0x0F,
0x4F,
0x10,
0x30,
0x40,
0x20,
0x7E,
0x7F,
0xC8,
0xE8,
0x01,
0x02,
0x10,
0x00,
0x00,
0x00,
0x06,
0x26,
0x02,
0xD1,
0x0C,
0x0C,
0x0F,
0x00,
0x11,
0x3F,
0x08,
0x00,
0xF4,
0x00,
0x00,
0x00,
0x00,
0x02,
0xC0,
0xC1,
0x48,
0xFA,
0x00,
0x00,
0x00,
0x00,
0xFC,
0xFC,
0x00,
0x00,
0x00,
0x11,
0x1C,
0x1C,
0x0C,
0x0C,
0x0F,
0x06,
0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x05, 0x0B, 0x07, 0x0F, 0x8F,
0x5F, 0x9F, 0xCF, 0xBF, 0xBF, 0x3F, 0xFE, 0x1E, 0xFC, 0x78, 0x18, 0x18,
0x30, 0x50, 0xD0, 0xD0, 0x90, 0x10, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00,
0x20, 0x20, 0x00, 0x20, 0x30, 0x70, 0x30, 0xF0, 0x70, 0xF8, 0x78, 0x7C,
0xBF, 0x7F, 0x7F, 0x1F, 0x3F, 0x7F, 0x3F, 0x9F, 0xAF, 0x9F, 0x8F, 0x87,
0xB8, 0x88, 0x88, 0x08, 0x08, 0x08, 0x88, 0xF8, 0x00, 0x00, 0x00, 0x00,
0x02, 0xC3, 0x43, 0x08, 0x00, 0x09, 0x03, 0x03, 0x03, 0x0B, 0x43, 0x63,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x40, 0x40, 0x60, 0x47, 0x5A, 0x99, 0x80, 0x98, 0x9E,
0x27, 0x35, 0xA0, 0x01, 0x21, 0x29, 0x20, 0x22, 0x86, 0x0E, 0x04, 0x35,
0x50, 0x5D, 0x03, 0x0D, 0x01, 0x20, 0x10, 0x0F, 0xA5, 0x36, 0x26, 0x24,
0x04, 0x04, 0x10, 0x13, 0x06, 0x05, 0x20, 0x6C, 0x98, 0x10, 0xA1, 0x68,
0x00, 0x00, 0x00, 0x07, 0xEC, 0x28, 0x28, 0xA8, 0xA9, 0xBF, 0x91, 0x91,
0x61, 0x41, 0x41, 0x6F, 0x38, 0x00, 0x00, 0x00, 0x80, 0x48, 0x14, 0x0E,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x70, 0x30, 0x30, 0x3F, 0x31,
0x42, 0x42, 0x42, 0x42, 0x41, 0x40, 0x44, 0x44, 0x44, 0xC4, 0xC4, 0x44,
0x45, 0x4C, 0x4C, 0x4C, 0x4D, 0x08, 0x08, 0x08, 0x4A, 0x4E, 0x4A, 0x4A,
0x82, 0x00, 0x05, 0x85, 0x07, 0x01, 0x00, 0x02, 0x02, 0x02, 0x01, 0x01,
0x01, 0x01, 0x01, 0xE1, 0x20, 0x30, 0x0C, 0x07, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x03, 0x0B, 0x07, 0x8B, 0xCF, 0xFE, 0xFE, 0xFE, 0xFE,
0xFD, 0xF9, 0xFA, 0xFA, 0xFA, 0xF9, 0xF9, 0x80, 0x00, 0x00, 0x02, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x14, 0x0F, 0x0F, 0x0E, 0x0C, 0x0C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
0x1C, 0x1C, 0x0E, 0x0E, 0x0E, 0x06, 0x06, 0x07, 0x03, 0x03, 0x02, 0x06,
0x0C, 0x0C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x0C, 0x0C, 0x0C, 0x0E,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00,
0x00,
0x0A,
0x0F,
0x0F,
0x00,
};
0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x08,
0x1B, 0x1B, 0x1D, 0x19, 0x19, 0x0B, 0x0D, 0x05, 0x15, 0x15, 0x11, 0x1B, 0x0B,
0x0F,
0x0F, 0x1F, 0x17, 0x07, 0x1F, 0x06, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00
void Data(unsigned char valor);
void Control(unsigned char a);
void Escribir(unsigned char a);
uint8 Leer();
void Ubicar(unsigned char pag, unsigned char col, unsigned char fil);
void BorraPag(unsigned char pag);
void Glcd_Start();
void Glcd_Print(unsigned char ascii);
void Glcd_String(char frase[]);
void Glcd_Dibujo(uint8 tx,uint8 ty, uint8 pag ,char dibujo[]);
void Glcd_Dibujo2(uint8 xin,uint8 yin, uint8 tamx, uint8 tamy ,char dibujo[]);
///======Definicion Funciones Basicas=================
/// Escribir 8 bit en el puerto
void Data(unsigned char valor){
if ((valor & 0x01)==0x01){CyPins_SetPin(data0);}
else{CyPins_ClearPin(data0);}
if ((valor & 0x02)==0x02){CyPins_SetPin(data1);}
else{CyPins_ClearPin(data1);}
if ((valor & 0x04)==0x04){CyPins_SetPin(data2);}
else{CyPins_ClearPin(data2);}
if ((valor & 0x08)==0x08){CyPins_SetPin(data3);}
else{CyPins_ClearPin(data3);}
if ((valor & 0x10)==0x10){CyPins_SetPin(data4);}
else{CyPins_ClearPin(data4);}
if ((valor & 0x20)==0x20){CyPins_SetPin(data5);}
else{CyPins_ClearPin(data5);}
if ((valor & 0x40)==0x40){CyPins_SetPin(data6);}
else{CyPins_ClearPin(data6);}
if ((valor & 0x80)==0x80){CyPins_SetPin(data7);}
else{CyPins_ClearPin(data7);}
}
/// Habilita estado control y escribe sentencia
void Control(uint8 a){
CyPins_ClearPin(lcd_DI);
CyPins_ClearPin(lcd_RW);
Data(a);
CyPins_SetPin(lcd_EN);
CyDelayUs(1);
CyPins_ClearPin(lcd_EN);
CyDelayUs(1);
}
/// Escribir una columna x8 pixeles
void Escribir(uint8 a){
CyPins_SetPin(lcd_DI);
CyPins_ClearPin(lcd_RW);
Data(a);
CyPins_SetPin(lcd_EN);
CyDelayUs(1);
CyPins_ClearPin(lcd_EN);
CyDelayUs(1);
}
uint8 Leer(){
uint8 a=1;
CyPins_SetPin(lcd_DI);
CyDelayUs(1);
CyPins_SetPin(lcd_RW);
CyPins_SetPin(lcd_EN);
CyDelayUs(1);
a = DATA_Read();
// a =(CyPins_ReadPin(data7)<<7) |(CyPins_ReadPin(data6)<<6)
|(CyPins_ReadPin(data5)<<5) |(CyPins_ReadPin(data4)<<4) |(CyPins_ReadPin(data3)<<3)
| (CyPins_ReadPin(data2)<<2) |(CyPins_ReadPin(data1)<<1) | CyPins_ReadPin(data0);
CyDelayUs(1);
CyPins_ClearPin(lcd_EN);
CyDelayUs(1);
return(a);
}
/// Ubicar cursor pagina (0,1) colunma(0-63) y fila(0-7)
void Ubicar(uint8 pag, uint8 col, uint8 fil){
uint8 y,x;
if(pag == 1){
CyPins_SetPin(lcd_CS2);
CyPins_ClearPin(lcd_CS1);
y = setline | fil;
x = setpos | col;
Control(y);
Control(x);
COL1 = col;
FIL1 = fil;
NPAG = 1;
}
if(pag == 2){
CyPins_SetPin(lcd_CS1);
CyPins_ClearPin(lcd_CS2);
y = setline | fil;
x = setpos | col;
Control(y);
Control(x);
COL2 = col;
FIL2 = fil;
NPAG = 2;
}
}
///Borrar pagina
void BorraPag(uint8 pag){
uint8 i,j;
if(pag == 1){
CyPins_SetPin(lcd_CS2);
CyPins_ClearPin(lcd_CS1);
COL1 = 0;
FIL1 = 0;
}
if(pag == 2){
CyPins_SetPin(lcd_CS1);
CyPins_ClearPin(lcd_CS2);
COL2 = 0;
FIL2 = 0;
}
for(i=0;i<=7;i++){
for(j=0;j<=63;j++){
Ubicar(pag,j,i);
Escribir(0x00);
}
}
}
///=======FUNCIONES MEDIAS =================
// Inicializar LCD
void Glcd_Start(){
CyPins_ClearPin(lcd_RST);
CyPins_SetPin(lcd_RST);
CyPins_ClearPin(lcd_EN);
CyPins_ClearPin(lcd_DI);
CyPins_ClearPin(lcd_RW);
CyPins_ClearPin(lcd_CS2);
CyPins_ClearPin(lcd_CS1);
Data(0x3F);
CyPins_SetPin(lcd_CS1);
CyPins_ClearPin(lcd_DI);
CyPins_SetPin(lcd_EN);
CyPins_ClearPin(lcd_EN);
CyPins_ClearPin(lcd_CS1);
Data(0x3F);
CyPins_SetPin(lcd_CS2);
CyPins_ClearPin(lcd_DI);
CyPins_SetPin(lcd_EN);
CyPins_ClearPin(lcd_EN);
CyPins_ClearPin(lcd_CS2);
BorraPag(1);
BorraPag(2);
}
//Imprime los caracteres predefinidos
void Glcd_Print(uint8 ascii){
uint16 letra;
uint8 i;
letra = ascii-32;
letra = letra*6;
if (NPAG == 1){
if(COL1 >= 59){
Ubicar(1,0,FIL1+1);
COL1=5;
}
else{
COL1 = COL1 +6;
}
}
if (NPAG == 2){
if(COL2 >= 59){
Ubicar(2,0,FIL2+1);
COL2 = 5;
}
else{
COL2 = COL2 + 6;
}
}
for(i=0;i<6;i++){
Escribir(caracter[letra+i]);
}
}
//Imprime Palabras
void Glcd_String(char frase[]){
uint8 i,l;
l = strlen(frase);
for(i=0;i<l;i++){
Glcd_Print(frase[i]);
}
}
///=======FUNCIONES DIBUJAR================
//Imprime dibujo tx (0-64) ty(0-7) pag(1-2)
void Glcd_Dibujo(uint8 tx,uint8 ty, uint8 pag ,char dibujo[]){
for(ty=0;ty<8;ty++)
{
for(tx=0;tx<64;tx++)
{
Ubicar(pag,tx,ty);
Escribir(dibujo[ty*64+tx]);
}
}
}
//Imprime dibujo en posicion pantallas intersectas
void Glcd_Dibujo2(uint8 xin,uint8 yin, uint8 tamx, uint8 tamy ,char dibujo[]){
uint8 i=0,j=0;
COL1 = xin;
FIL1 = yin;
NPAG = 1;
for(j=0;j<(tamy/8);j++)
{
for(i=0;i<tamx;i++)
{
if(NPAG == 1)
{
if(COL1<64)
{
Ubicar(1,COL1,FIL1);
Escribir(dibujo[j*tamy + i]);
COL1++;
}else
{
NPAG = 2;
FIL2 = FIL1;
COL2 = 0;
}
}else
{
Ubicar(2,COL2,FIL2);
Escribir(dibujo[j*tamy + i]);
COL2++;
}
}
FIL1++;
COL1 = xin;
NPAG = 1;
}
}
ANEXO II Cdigo principal
/* ========================================
*
* Laboratorio I - Embebidos I
* Claudia Segura 20092005096
* Miguel Sastoque 20101005072
* ========================================
*/
#include <project.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <GRAFICOS.h>
uint8 dato,i,j;
///========Programa Principal
int main()
{
Glcd_Start();
//Inicial LCD
COL1
FIL1
COL2
FIL2
NPAG
//inicializacin de variables
=
=
=
=
=
0;
0;
0;
0;
1;
dato=0x11;
Ubicar(1,0,2);
//
//
//
//
Glcd_Print('"');
Glcd_String("Cada dia sabemos mas y entendemos menos");
Glcd_Print('"');
Ubicar(1,4,6);
Glcd_String("Albert
Einstein");
//
//Glcd_Dibujo(0,0,2,einstein);
//Glcd_Dibujo2(0,0,126,64,mafalda);
Glcd_Dibujo2(30,0,64,64,einstein);
for(;;)
{
}
}
/* [] END OF FILE */