trước có ông bạn vứt cho con lcd của NOKIA nghịch. thấy hay hay,ai có máu nghịch giống mình thì vào chơi.
đầu tiên phải kiếm con lcd về đã.
em nó đây rồi

tiếp theo là đấu nối cho em nó :
sơ đồ đấu nối như sau
và cuối cùng là code cho nó 
với thằng này mình chỉ cần khởi tạo cho nó giống như CLCD ấy là chạy bình thường ,có khi còn dễ hơn cả CLCD ấy chứ
ở đây mình viết những hàm cơ bản giống như viết cho CLCD thôi
hàm void lcd_init(void);
chức năng : dùng để khởi tạo cho lcd. Giống với CLCD
để tiết kiệm và tận dụng chân ngoại vi IO của VDK. Nên mình đã viết 1 hàm tạo cổng SPI ảo sử dụng các chân vào ra bình thường để điều khiển. mọi thay đổi về chân được sửa trong phần đầu của hàm lcd_init() và phần #define
hàm void lcd_clear(void);
chức năng : dùng để xóa cả màn hình lcd. Khi xóa xong thì vị trí con trỏ sẽ không được xác định luôn mà sau hàm này thì ta phải tự đưa con trỏ về vị trí mong muốn. con trỏ lúc này đã nằm ở ngoài màn hình rồi
hàm void lcd_write(char MODE,unsigned char c);
chức năng : hàm để tạo cổng SPI ảo. hàm này dùng để tạo cổng spi ảo và đưa vào lcd.
Do cấu trúc màn hình.khi 1 byte đưa vào nó sẽ xác định xem đó là lệnh hay là dữ liệu .
Nếu là dữ liệu nó sẽ ghi ra màn hình tại vị trí con trỏ. Sau khi ghi xong thì con trỏ sẽ tự động tăng lên 1 vị trí. ở đây là 96 cột
Nếu là lệnh. Bit đầu tiên sẽ là 0
Nếu là dữ liệu, bit đầu tiên sẽ là 1
Hàm void lcd_gotoxy(char x,char y);
Chức năng : đưa con trỏ đến 1 vị trí được xác định. ở đây là số cột(x) và số hàng(y)
- cột tương ứng 0-95 ( 96 cột)
- hàng tương ứng 0 – 7 (64 hàng = 8 dòng x 8 bit)
hàm void lcd_putchar(char c);
Chức năng : ghi 1 kí tự lên lcd theo bảng mã SACII.
Hàm void lcd_putsf(flash char * str);
Chức năng : ghi 1 chuỗi kí tự lên màn hình lcd.
Do cấu trúc màn hình là 1 chip điều khiển cho cả màn hình .nên khi đưa dữ liệu vào màn hình. Nếu hết dòng mà vẫn xuất dữ liệu cho nó . nó sẽ tự động đẩy xuống dòng kế tiếp.
và cuối cùng là code
đầu tiên phải kiếm con lcd về đã.
em nó đây rồi


tiếp theo là đấu nối cho em nó :
sơ đồ đấu nối như sau
sclk PORTD.7
sda PORTC.0
cs PORTC.1
rst PORTC.2
sda PORTC.0
cs PORTC.1
rst PORTC.2

với thằng này mình chỉ cần khởi tạo cho nó giống như CLCD ấy là chạy bình thường ,có khi còn dễ hơn cả CLCD ấy chứ

ở đây mình viết những hàm cơ bản giống như viết cho CLCD thôi
void lcd_clear(void);
void lcd_init(void);
void lcd_write(char MODE,unsigned char c);
void lcd_gotoxy(char x,char y);
void lcd_putchar(char c);
void lcd_putsf(flash char * str);
void lcd_init(void);
void lcd_write(char MODE,unsigned char c);
void lcd_gotoxy(char x,char y);
void lcd_putchar(char c);
void lcd_putsf(flash char * str);
chức năng : dùng để khởi tạo cho lcd. Giống với CLCD
để tiết kiệm và tận dụng chân ngoại vi IO của VDK. Nên mình đã viết 1 hàm tạo cổng SPI ảo sử dụng các chân vào ra bình thường để điều khiển. mọi thay đổi về chân được sửa trong phần đầu của hàm lcd_init() và phần #define
hàm void lcd_clear(void);
chức năng : dùng để xóa cả màn hình lcd. Khi xóa xong thì vị trí con trỏ sẽ không được xác định luôn mà sau hàm này thì ta phải tự đưa con trỏ về vị trí mong muốn. con trỏ lúc này đã nằm ở ngoài màn hình rồi
hàm void lcd_write(char MODE,unsigned char c);
chức năng : hàm để tạo cổng SPI ảo. hàm này dùng để tạo cổng spi ảo và đưa vào lcd.
Do cấu trúc màn hình.khi 1 byte đưa vào nó sẽ xác định xem đó là lệnh hay là dữ liệu .
Nếu là dữ liệu nó sẽ ghi ra màn hình tại vị trí con trỏ. Sau khi ghi xong thì con trỏ sẽ tự động tăng lên 1 vị trí. ở đây là 96 cột
Nếu là lệnh. Bit đầu tiên sẽ là 0
Nếu là dữ liệu, bit đầu tiên sẽ là 1
Hàm void lcd_gotoxy(char x,char y);
Chức năng : đưa con trỏ đến 1 vị trí được xác định. ở đây là số cột(x) và số hàng(y)
- cột tương ứng 0-95 ( 96 cột)
- hàng tương ứng 0 – 7 (64 hàng = 8 dòng x 8 bit)
hàm void lcd_putchar(char c);
Chức năng : ghi 1 kí tự lên lcd theo bảng mã SACII.
Hàm void lcd_putsf(flash char * str);
Chức năng : ghi 1 chuỗi kí tự lên màn hình lcd.
Do cấu trúc màn hình là 1 chip điều khiển cho cả màn hình .nên khi đưa dữ liệu vào màn hình. Nếu hết dòng mà vẫn xuất dữ liệu cho nó . nó sẽ tự động đẩy xuống dòng kế tiếp.
và cuối cùng là code

#define led_debug PORTB.1
#define sclk PORTD.7
#define sda PORTC.0
#define cs PORTC.1
#define rst PORTC.2
//--------------
#define sclk_IO DDRD.7
#define sda_IO DDRC.0
#define cs_IO DDRC.1
#define rst_IO DDRC.2
//===============================
#define CMD 0
#define DATA 1
void lcd_clear(void);
void lcd_init(void);
void lcd_write(char MODE,unsigned char c);
void lcd_gotoxy(char x,char y);
void lcd_putchar(char c);
void lcd_putsf(flash char * str);
//================================================== =========================
flash unsigned char font[96][5]=
{
{0x00, 0x00, 0x00, 0x00, 0x00},// (space)
{0x00, 0x00, 0x5F, 0x00, 0x00},// !
{0x00, 0x07, 0x00, 0x07, 0x00},// "
{0x14, 0x7F, 0x14, 0x7F, 0x14},// #
{0x24, 0x2A, 0x7F, 0x2A, 0x12},// $
{0x23, 0x13, 0x08, 0x64, 0x62},// %
{0x36, 0x49, 0x55, 0x22, 0x50},// &
{0x00, 0x05, 0x03, 0x00, 0x00},// '
{0x00, 0x1C, 0x22, 0x41, 0x00},// (
{0x00, 0x41, 0x22, 0x1C, 0x00},// )
{0x08, 0x2A, 0x1C, 0x2A, 0x08},// *
{0x08, 0x08, 0x3E, 0x08, 0x08},// +
{0x00, 0x50, 0x30, 0x00, 0x00},// ,
{0x08, 0x08, 0x08, 0x08, 0x08},// -
{0x00, 0x30, 0x30, 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},// ;
{0x00, 0x08, 0x14, 0x22, 0x41},// <
{0x14, 0x14, 0x14, 0x14, 0x14},// =
{0x41, 0x22, 0x14, 0x08, 0x00},// >
{0x02, 0x01, 0x51, 0x09, 0x06},// ?
{0x32, 0x49, 0x79, 0x41, 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, 0x01, 0x01},// F
{0x3E, 0x41, 0x41, 0x51, 0x32},// 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, 0x04, 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
{0x7F, 0x20, 0x18, 0x20, 0x7F},// W
{0x63, 0x14, 0x08, 0x14, 0x63},// X
{0x03, 0x04, 0x78, 0x04, 0x03},// Y
{0x61, 0x51, 0x49, 0x45, 0x43},// Z
{0x00, 0x00, 0x7F, 0x41, 0x41},// [
{0x02, 0x04, 0x08, 0x10, 0x20},// "\"
{0x41, 0x41, 0x7F, 0x00, 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
{0x08, 0x14, 0x54, 0x54, 0x3C},// g
{0x7F, 0x08, 0x04, 0x04, 0x78},// h
{0x00, 0x44, 0x7D, 0x40, 0x00},// i
{0x20, 0x40, 0x44, 0x3D, 0x00},// j
{0x00, 0x7F, 0x10, 0x28, 0x44},// 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
{0x00, 0x08, 0x36, 0x41, 0x00},// {
{0x00, 0x00, 0x7F, 0x00, 0x00},// |
{0x00, 0x41, 0x36, 0x08, 0x00},// }
{0x08, 0x08, 0x2A, 0x1C, 0x08},// ->
{0x08, 0x1C, 0x2A, 0x08, 0x08} // <-
};
//================================================== ======================================
//################################################## ######################################
void main(void)
{
lcd_init();
lcd_clear();
lcd_gotoxy(10,1);
lcd_putsf("Hello m(_ _)m I'm NgThang !!");
lcd_gotoxy(5,4);
lcd_putsf("It's me (^_6)b");
while(1);
}
//================================================== ======================================
//################################################## ######################################
void lcd_gotoxy(char x,char y)
{
lcd_write(CMD,(0xB0|(y&0x0F))); // Y axis initialisation: 0100 yyyy
lcd_write(CMD,(0x00|(x&0x0F))); // X axis initialisation: 0000 xxxx ( x3 x2 x1 x0)
lcd_write(CMD,(0x10|((x>>4)&0x07))); // X axis initialisation: 0010 0xxx ( x6 x5 x4)
}
//================================================== ======================================
//################################################## ######################################
// clear LCD
void lcd_clear(void)
{
unsigned int i;
lcd_write(CMD,0x40); // Y = 0
lcd_write(CMD,0xb0);
lcd_write(CMD,0x10); // X = 0
lcd_write(CMD,0x00);
lcd_write(CMD,0xae);
for(i=0 ; i<864 ; i++)
{
lcd_write(DATA,0x00);
}
lcd_write(CMD,0xaf);
}
//================================================== ======================================
//################################################## ######################################
// init LCD
void lcd_init(void)
{
sclk_IO = 1;
sda_IO = 1;
cs_IO = 1;
rst_IO = 1;
//-------------------
cs = 0;
rst = 0;
delay_ms(10); // 5mS so says the stop watch(less than 5ms will not work)
rst = 1;
lcd_write(CMD,0x20); // write VOP register
lcd_write(CMD,0x90);
lcd_write(CMD,0xA4); // all on/normal display
lcd_write(CMD,0x2F); // Power control set(charge pump on/off)
lcd_write(CMD,0x40); // set start row address = 0
lcd_write(CMD,0xb0); // set Y-address = 0
lcd_write(CMD,0x10); // set X-address, upper 3 bits
lcd_write(CMD,0x00); // set X-address, lower 4 bits
lcd_write(CMD,0xC8); // mirror Y axis (about X axis)
lcd_write(CMD,0xa1); // Invert screen in horizontal axis
lcd_write(CMD,0xac); // set initial row (R0) of the display
lcd_write(CMD,0x07);
lcd_write(CMD,0xaf); // display ON
}
//================================================== ===
//************************************************** ***
void lcd_write(char MODE,unsigned char c)
{
char i;
cs = 0;
sclk = 0;
sda = MODE;
sclk = 1;
for(i=0;i<8;i++)
{
sclk = 0;
if(c & 0x80) sda = 1;
else sda = 0;
sclk = 1;
c <<= 1;
}
cs = 1;
}
//************************************************** *
//************************************************** *
void lcd_putchar(unsigned char c)
{
int i;
for ( i = 0; i < 5; i++ )
{
lcd_write(DATA,font[c - 32][i] << 1);
}
lcd_write(DATA,0x00);
}
//************************************************** *
//************************************************** *
void lcd_putsf(flash char *str)
{
lcd_write(CMD,0xae);
while (*str)
{
lcd_putchar(*str++);
}
lcd_write(CMD,0xaf);
}
#define sclk PORTD.7
#define sda PORTC.0
#define cs PORTC.1
#define rst PORTC.2
//--------------
#define sclk_IO DDRD.7
#define sda_IO DDRC.0
#define cs_IO DDRC.1
#define rst_IO DDRC.2
//===============================
#define CMD 0
#define DATA 1
void lcd_clear(void);
void lcd_init(void);
void lcd_write(char MODE,unsigned char c);
void lcd_gotoxy(char x,char y);
void lcd_putchar(char c);
void lcd_putsf(flash char * str);
//================================================== =========================
flash unsigned char font[96][5]=
{
{0x00, 0x00, 0x00, 0x00, 0x00},// (space)
{0x00, 0x00, 0x5F, 0x00, 0x00},// !
{0x00, 0x07, 0x00, 0x07, 0x00},// "
{0x14, 0x7F, 0x14, 0x7F, 0x14},// #
{0x24, 0x2A, 0x7F, 0x2A, 0x12},// $
{0x23, 0x13, 0x08, 0x64, 0x62},// %
{0x36, 0x49, 0x55, 0x22, 0x50},// &
{0x00, 0x05, 0x03, 0x00, 0x00},// '
{0x00, 0x1C, 0x22, 0x41, 0x00},// (
{0x00, 0x41, 0x22, 0x1C, 0x00},// )
{0x08, 0x2A, 0x1C, 0x2A, 0x08},// *
{0x08, 0x08, 0x3E, 0x08, 0x08},// +
{0x00, 0x50, 0x30, 0x00, 0x00},// ,
{0x08, 0x08, 0x08, 0x08, 0x08},// -
{0x00, 0x30, 0x30, 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},// ;
{0x00, 0x08, 0x14, 0x22, 0x41},// <
{0x14, 0x14, 0x14, 0x14, 0x14},// =
{0x41, 0x22, 0x14, 0x08, 0x00},// >
{0x02, 0x01, 0x51, 0x09, 0x06},// ?
{0x32, 0x49, 0x79, 0x41, 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, 0x01, 0x01},// F
{0x3E, 0x41, 0x41, 0x51, 0x32},// 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, 0x04, 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
{0x7F, 0x20, 0x18, 0x20, 0x7F},// W
{0x63, 0x14, 0x08, 0x14, 0x63},// X
{0x03, 0x04, 0x78, 0x04, 0x03},// Y
{0x61, 0x51, 0x49, 0x45, 0x43},// Z
{0x00, 0x00, 0x7F, 0x41, 0x41},// [
{0x02, 0x04, 0x08, 0x10, 0x20},// "\"
{0x41, 0x41, 0x7F, 0x00, 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
{0x08, 0x14, 0x54, 0x54, 0x3C},// g
{0x7F, 0x08, 0x04, 0x04, 0x78},// h
{0x00, 0x44, 0x7D, 0x40, 0x00},// i
{0x20, 0x40, 0x44, 0x3D, 0x00},// j
{0x00, 0x7F, 0x10, 0x28, 0x44},// 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
{0x00, 0x08, 0x36, 0x41, 0x00},// {
{0x00, 0x00, 0x7F, 0x00, 0x00},// |
{0x00, 0x41, 0x36, 0x08, 0x00},// }
{0x08, 0x08, 0x2A, 0x1C, 0x08},// ->
{0x08, 0x1C, 0x2A, 0x08, 0x08} // <-
};
//================================================== ======================================
//################################################## ######################################
void main(void)
{
lcd_init();
lcd_clear();
lcd_gotoxy(10,1);
lcd_putsf("Hello m(_ _)m I'm NgThang !!");
lcd_gotoxy(5,4);
lcd_putsf("It's me (^_6)b");
while(1);
}
//================================================== ======================================
//################################################## ######################################
void lcd_gotoxy(char x,char y)
{
lcd_write(CMD,(0xB0|(y&0x0F))); // Y axis initialisation: 0100 yyyy
lcd_write(CMD,(0x00|(x&0x0F))); // X axis initialisation: 0000 xxxx ( x3 x2 x1 x0)
lcd_write(CMD,(0x10|((x>>4)&0x07))); // X axis initialisation: 0010 0xxx ( x6 x5 x4)
}
//================================================== ======================================
//################################################## ######################################
// clear LCD
void lcd_clear(void)
{
unsigned int i;
lcd_write(CMD,0x40); // Y = 0
lcd_write(CMD,0xb0);
lcd_write(CMD,0x10); // X = 0
lcd_write(CMD,0x00);
lcd_write(CMD,0xae);
for(i=0 ; i<864 ; i++)
{
lcd_write(DATA,0x00);
}
lcd_write(CMD,0xaf);
}
//================================================== ======================================
//################################################## ######################################
// init LCD
void lcd_init(void)
{
sclk_IO = 1;
sda_IO = 1;
cs_IO = 1;
rst_IO = 1;
//-------------------
cs = 0;
rst = 0;
delay_ms(10); // 5mS so says the stop watch(less than 5ms will not work)
rst = 1;
lcd_write(CMD,0x20); // write VOP register
lcd_write(CMD,0x90);
lcd_write(CMD,0xA4); // all on/normal display
lcd_write(CMD,0x2F); // Power control set(charge pump on/off)
lcd_write(CMD,0x40); // set start row address = 0
lcd_write(CMD,0xb0); // set Y-address = 0
lcd_write(CMD,0x10); // set X-address, upper 3 bits
lcd_write(CMD,0x00); // set X-address, lower 4 bits
lcd_write(CMD,0xC8); // mirror Y axis (about X axis)
lcd_write(CMD,0xa1); // Invert screen in horizontal axis
lcd_write(CMD,0xac); // set initial row (R0) of the display
lcd_write(CMD,0x07);
lcd_write(CMD,0xaf); // display ON
}
//================================================== ===
//************************************************** ***
void lcd_write(char MODE,unsigned char c)
{
char i;
cs = 0;
sclk = 0;
sda = MODE;
sclk = 1;
for(i=0;i<8;i++)
{
sclk = 0;
if(c & 0x80) sda = 1;
else sda = 0;
sclk = 1;
c <<= 1;
}
cs = 1;
}
//************************************************** *
//************************************************** *
void lcd_putchar(unsigned char c)
{
int i;
for ( i = 0; i < 5; i++ )
{
lcd_write(DATA,font[c - 32][i] << 1);
}
lcd_write(DATA,0x00);
}
//************************************************** *
//************************************************** *
void lcd_putsf(flash char *str)
{
lcd_write(CMD,0xae);
while (*str)
{
lcd_putchar(*str++);
}
lcd_write(CMD,0xaf);
}


Comment