#include <pic.h>
#include <htc.h>
__CONFIG(FOSC_HS &
WDTE_OFF &
PWRTE_ON &
BOREN_OFF &
MCLRE_ON &
LVP_OFF);
#define GLCD_CS RD0
#define GLCD_RST RD1
#define GLCD_DC RD2
#define GLCD_SDA RD3
#define GLCD_SCLK RD4
#define _XTAL_FREQ 20000000
void pic_init(void);
void glcd8544_init(void);
void glcd8544_write(unsigned char c);
void glcd8544_goto(char x,char y);
void glcd8544_char(char c);
void glcd8544_string(const char *s);
static const char FontLookup[][5]={
{0x00,0x00,0x00,0x00,0x00}, // sp
{0x00,0x00,0x2f,0x00,0x00}, // !
{0x00,0x07,0x00,0x07,0x00}, // "
{0x14,0x7f,0x14,0x7f,0x14}, // #
{0x24,0x2a,0x7f,0x2a,0x12}, // $
{0xc4,0xc8,0x10,0x26,0x46}, // %
{0x36,0x49,0x55,0x22,0x50}, // &
{0x00,0x05,0x03,0x00,0x00}, // '
{0x00,0x1c,0x22,0x41,0x00}, // (
{0x00,0x41,0x22,0x1c,0x00}, // )
{0x14,0x08,0x3E,0x08,0x14}, // *
{0x08,0x08,0x3E,0x08,0x08}, // +
{0x00,0x00,0x50,0x30,0x00}, // ,
{0x10,0x10,0x10,0x10,0x10}, // -
{0x00,0x60,0x60,0x00,0x00}, // .
{0x20,0x10,0x08,0x04,0x02}, // /
{0x3E,0x51,0x49,0x45,0x3E}, // 0
{0x00,0x42,0x7F,0x40,0x00}, // 1
{0x42,0x61,0x51,0x49,0x46}, // 2
{0x21,0x41,0x45,0x4B,0x31}, // 3
{0x18,0x14,0x12,0x7F,0x10}, // 4
{0x27,0x45,0x45,0x45,0x39}, // 5
{0x3C,0x4A,0x49,0x49,0x30}, // 6
{0x01,0x71,0x09,0x05,0x03}, // 7
{0x36,0x49,0x49,0x49,0x36}, // 8
{0x06,0x49,0x49,0x29,0x1E}, // 9
{0x00,0x36,0x36,0x00,0x00}, // :
{0x00,0x56,0x36,0x00,0x00}, // ;
{0x08,0x14,0x22,0x41,0x00}, // <
{0x14,0x14,0x14,0x14,0x14}, // =
{0x00,0x41,0x22,0x14,0x08}, // >
{0x02,0x01,0x51,0x09,0x06}, // ?
{0x32,0x49,0x59,0x51,0x3E}, // @
{0x7E,0x11,0x11,0x11,0x7E}, // A
{0x7F,0x49,0x49,0x49,0x36}, // B
{0x3E,0x41,0x41,0x41,0x22}, // C
{0x7F,0x41,0x41,0x22,0x1C}, // D
{0x7F,0x49,0x49,0x49,0x41}, // E
{0x7F,0x09,0x09,0x09,0x01}, // F
{0x3E,0x41,0x49,0x49,0x7A}, // G
{0x7F,0x08,0x08,0x08,0x7F}, // H
{0x00,0x41,0x7F,0x41,0x00}, // I
{0x20,0x40,0x41,0x3F,0x01}, // J
{0x7F,0x08,0x14,0x22,0x41}, // K
{0x7F,0x40,0x40,0x40,0x40}, // L
{0x7F,0x02,0x0C,0x02,0x7F}, // M
{0x7F,0x04,0x08,0x10,0x7F}, // N
{0x3E,0x41,0x41,0x41,0x3E}, // O
{0x7F,0x09,0x09,0x09,0x06}, // P
{0x3E,0x41,0x51,0x21,0x5E}, // Q
{0x7F,0x09,0x19,0x29,0x46}, // R
{0x46,0x49,0x49,0x49,0x31}, // S
{0x01,0x01,0x7F,0x01,0x01}, // T
{0x3F,0x40,0x40,0x40,0x3F}, // U
{0x1F,0x20,0x40,0x20,0x1F}, // V
{0x3F,0x40,0x38,0x40,0x3F}, // W
{0x63,0x14,0x08,0x14,0x63}, // X
{0x07,0x08,0x70,0x08,0x07}, // Y
{0x61,0x51,0x49,0x45,0x43}, // Z
{0x00,0x7F,0x41,0x41,0x00}, // [
{0x55,0x2A,0x55,0x2A,0x55}, // 55
{0x00,0x41,0x41,0x7F,0x00}, // ]
{0x04,0x02,0x01,0x02,0x04}, // ^
{0x40,0x40,0x40,0x40,0x40}, // _
{0x00,0x01,0x02,0x04,0x00}, // '
{0x20,0x54,0x54,0x54,0x78}, // a
{0x7F,0x48,0x44,0x44,0x38}, // b
{0x38,0x44,0x44,0x44,0x20}, // c
{0x38,0x44,0x44,0x48,0x7F}, // d
{0x38,0x54,0x54,0x54,0x18}, // e
{0x08,0x7E,0x09,0x01,0x02}, // f
{0x0C,0x52,0x52,0x52,0x3E}, // g
{0x7F,0x08,0x04,0x04,0x78}, // h
{0x00,0x44,0x7D,0x40,0x00}, // i
{0x20,0x40,0x44,0x3D,0x00}, // j
{0x7F,0x10,0x28,0x44,0x00}, // k
{0x00,0x41,0x7F,0x40,0x00}, // l
{0x7C,0x04,0x18,0x04,0x78}, // m
{0x7C,0x08,0x04,0x04,0x78}, // n
{0x38,0x44,0x44,0x44,0x38}, // o
{0x7C,0x14,0x14,0x14,0x08}, // p
{0x08,0x14,0x14,0x18,0x7C}, // q
{0x7C,0x08,0x04,0x04,0x08}, // r
{0x48,0x54,0x54,0x54,0x20}, // s
{0x04,0x3F,0x44,0x40,0x20}, // t
{0x3C,0x40,0x40,0x20,0x7C}, // u
{0x1C,0x20,0x40,0x20,0x1C}, // v
{0x3C,0x40,0x30,0x40,0x3C}, // w
{0x44,0x28,0x10,0x28,0x44}, // x
{0x0C,0x50,0x50,0x50,0x3C}, // y
{0x44,0x64,0x54,0x4C,0x44} // z
};
main(void)
{
pic_init();
glcd8544_init();
__delay_ms(250);
for(;;){
glcd8544_goto(0,0);
glcd8544_string("PRUEBA HI-TECH");
glcd8544_string(" 84X48 GLCD ");
glcd8544_string("NOKIA 3310 LCD");
glcd8544_string(" ");
glcd8544_string(" ");
glcd8544_string(" ");
__delay_ms(1000);
glcd8544_goto(0,0);
glcd8544_string(" ");
glcd8544_string(" ");
glcd8544_string(" ");
glcd8544_string(" PIC 16F887 ");
glcd8544_string(" GRACIAS ");
glcd8544_string(" GEORGE MANSON ");
__delay_ms(1000);
}}
void pic_init(void)
{
TRISA=0b00010000;
TRISB=0b00000000;
TRISC=0b00000000;
TRISD=0b00000000;
TRISE=0b00000000;
ANSEL=0b00000000;
ANSELH=0b00000000;
PORTA=0b00000000;
PORTB=0b00000000;
PORTC=0b00000000;
PORTD=0b00000000;
PORTE=0b00000000;
}
void glcd8544_init(void)
{
GLCD_RST=1;
__delay_ms(15);
glcd8544_write(0x21);
glcd8544_write(0xC0);
glcd8544_write(0x13);
glcd8544_write(0x20);
glcd8544_write(0x0C);
}
void glcd8544_write(unsigned char c)
{int i;
GLCD_CS=0;
for(i=7;i>=0;i--){
if(((c>>i)&1)==1) GLCD_SDA=1;
else GLCD_SDA=0;
GLCD_SCLK=0;
GLCD_SCLK=1;}
GLCD_CS=1;
}
void glcd8544_goto(char x, char y)
{
GLCD_DC=0;
glcd8544_write(0x40+y);
glcd8544_write(0x80+x);
GLCD_DC=1;
}
void glcd8544_char(char c)
{int i;
for(i=0;i<5;i++) glcd8544_write(FontLookup[c-32][i]);
glcd8544_write(0x00);
}
void glcd8544_string(const char *s)
{
GLCD_DC=1;
while(*s)
glcd8544_char(*s++);
}