english_6x8_pixel.h
english_6x8_pixel.h
如下:
const unsigned char font6x8[][6] = {
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // sp
{
0x00, 0x00, 0x00, 0x2f, 0x00, 0x00 }, // !
{
0x00, 0x00, 0x07, 0x00, 0x07, 0x00 }, // "
{
0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14 }, // #
{
0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12 }, // $
{
0x00, 0x62, 0x64, 0x08, 0x13, 0x23 }, // %
{
0x00, 0x36, 0x49, 0x55, 0x22, 0x50 }, // &
{
0x00, 0x00, 0x05, 0x03, 0x00, 0x00 }, // '
{
0x00, 0x00, 0x1c, 0x22, 0x41, 0x00 }, // (
{
0x00, 0x00, 0x41, 0x22, 0x1c, 0x00 }, // )
{
0x00, 0x14, 0x08, 0x3E, 0x08, 0x14 }, // *
{
0x00, 0x08, 0x08, 0x3E, 0x08, 0x08 }, // +
{
0x00, 0x00, 0x00, 0xA0, 0x60, 0x00 }, // ,
{
0x00, 0x08, 0x08, 0x08, 0x08, 0x08 }, // -
{
0x00, 0x00, 0x60, 0x60, 0x00, 0x00 }, // .
{
0x00, 0x20, 0x10, 0x08, 0x04, 0x02 }, // /
{
0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E }, // 0
{
0x00, 0x00, 0x42, 0x7F, 0x40, 0x00 }, // 1
{
0x00, 0x42, 0x61, 0x51, 0x49, 0x46 }, // 2
{
0x00, 0x21, 0x41, 0x45, 0x4B, 0x31 }, // 3
{
0x00, 0x18, 0x14, 0x12, 0x7F, 0x10 }, // 4
{
0x00, 0x27, 0x45, 0x45, 0x45, 0x39 }, // 5
{
0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30 }, // 6
{
0x00, 0x01, 0x71, 0x09, 0x05, 0x03 }, // 7
{
0x00, 0x36, 0x49, 0x49, 0x49, 0x36 }, // 8
{
0x00, 0x06, 0x49, 0x49, 0x29, 0x1E }, // 9
{
0x00, 0x00, 0x36, 0x36, 0x00, 0x00 }, // :
{
0x00, 0x00, 0x56, 0x36, 0x00, 0x00 }, // ;
{
0x00, 0x08, 0x14, 0x22, 0x41, 0x00 }, // <
{
0x00, 0x14, 0x14, 0x14, 0x14, 0x14 }, // =
{
0x00, 0x00, 0x41, 0x22, 0x14, 0x08 }, // >
{
0x00, 0x02, 0x01, 0x51, 0x09, 0x06 }, // ?
{
0x00, 0x32, 0x49, 0x59, 0x51, 0x3E }, // @
{
0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C }, // A
{
0x00, 0x7F, 0x49, 0x49, 0x49, 0x36 }, // B
{
0x00, 0x3E, 0x41, 0x41, 0x41, 0x22 }, // C
{
0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C }, // D
{
0x00, 0x7F, 0x49, 0x49, 0x49, 0x41 }, // E
{
0x00, 0x7F, 0x09, 0x09, 0x09, 0x01 }, // F
{
0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A }, // G
{
0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F }, // H
{
0x00, 0x00, 0x41, 0x7F, 0x41, 0x00 }, // I
{
0x00, 0x20, 0x40, 0x41, 0x3F, 0x01 }, // J
{
0x00, 0x7F, 0x08, 0x14, 0x22, 0x41 }, // K
{
0x00, 0x7F, 0x40, 0x40, 0x40, 0x40 }, // L
{
0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F }, // M
{
0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F }, // N
{
0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E }, // O
{
0x00, 0x7F, 0x09, 0x09, 0x09, 0x06 }, // P
{
0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E }, // Q
{
0x00, 0x7F, 0x09, 0x19, 0x29, 0x46 }, // R
{
0x00, 0x46, 0x49, 0x49, 0x49, 0x31 }, // S
{
0x00, 0x01, 0x01, 0x7F, 0x01, 0x01 }, // T
{
0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F }, // U
{
0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F }, // V
{
0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F }, // W
{
0x00, 0x63, 0x14, 0x08, 0x14, 0x63 }, // X
{
0x00, 0x07, 0x08, 0x70, 0x08, 0x07 }, // Y
{
0x00, 0x61, 0x51, 0x49, 0x45, 0x43 }, // Z
{
0x00, 0x00, 0x7F, 0x41, 0x41, 0x00 }, // [
{
0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55 }, // 55
{
0x00, 0x00, 0x41, 0x41, 0x7F, 0x00 }, // ]
{
0x00, 0x04, 0x02, 0x01, 0x02, 0x04 }, // ^
{
0x00, 0x40, 0x40, 0x40, 0x40, 0x40 }, // _
{
0x00, 0x00, 0x01, 0x02, 0x04, 0x00 }, // '
{
0x00, 0x20, 0x54, 0x54, 0x54, 0x78 }, // a
{
0x00, 0x7F, 0x48, 0x44, 0x44, 0x38 }, // b
{
0x00, 0x38, 0x44, 0x44, 0x44, 0x20 }, // c
{
0x00, 0x38, 0x44, 0x44, 0x48, 0x7F }, // d
{
0x00, 0x38, 0x54, 0x54, 0x54, 0x18 }, // e
{
0x00, 0x08, 0x7E, 0x09, 0x01, 0x02 }, // f
{
0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C }, // g
{
0x00, 0x7F, 0x08, 0x04, 0x04, 0x78 }, // h
{
0x00, 0x00, 0x44, 0x7D, 0x40, 0x00 }, // i
{
0x00, 0x40, 0x80, 0x84, 0x7D, 0x00 }, // j
{
0x00, 0x7F, 0x10, 0x28, 0x44, 0x00 }, // k
{
0x00, 0x00, 0x41, 0x7F, 0x40, 0x00 }, // l
{
0x00, 0x7C, 0x04, 0x18, 0x04, 0x78 }, // m
{
0x00, 0x7C, 0x08, 0x04, 0x04, 0x78 }, // n
{
0x00, 0x38, 0x44, 0x44, 0x44, 0x38 }, // o
{
0x00, 0xFC, 0x24, 0x24, 0x24, 0x18 }, // p
{
0x00, 0x18, 0x24, 0x24, 0x18, 0xFC }, // q
{
0x00, 0x7C, 0x08, 0x04, 0x04, 0x08 }, // r
{
0x00, 0x48, 0x54, 0x54, 0x54, 0x20 }, // s
{
0x00, 0x04, 0x3F, 0x44, 0x40, 0x20 }, // t
{
0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C }, // u
{
0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C }, // v
{
0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C }, // w
{
0x00, 0x44, 0x28, 0x10, 0x28, 0x44 }, // x
{
0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C }, // y
{
0x00, 0x44, 0x64, 0x54, 0x4C, 0x44 }, // z
{
0x14, 0x14, 0x14, 0x14, 0x14, 0x14 } // horiz lines
};
write_chinese_string_pixel.h
write_chinese_string_pixel.h
如下:
const unsigned char write_chinese[][24] = {
{
0x89, 0xF2, 0x00, 0xFF, 0x01, 0xF9, 0xFF, 0x00, 0xFC, 0x00, 0xFF, 0x00,
0x00, 0x07, 0x04, 0x04, 0x02, 0x01, 0x02, 0x04, 0x01, 0x04, 0x07, 0x00
}, /* 测 */
{
0x11, 0xF6, 0x00, 0x04, 0x24, 0xE4, 0x24, 0x24, 0xFF, 0x05, 0x06, 0x00,
0x00, 0x07, 0x02, 0x01, 0x02, 0x03, 0x01, 0x01, 0x01, 0x02, 0x07, 0x00
}, /* 试 */
{
0x8A, 0x6A, 0xFF, 0x49, 0x20, 0xAF, 0xA9, 0xE9, 0xA9, 0xAF, 0x20, 0x00,
0x01, 0x00, 0x07, 0x00, 0x04, 0x04, 0x04, 0x07, 0x04, 0x04, 0x04, 0x00
}, /* 程 */
{
0x00, 0xFE, 0x42, 0x4A, 0x4A, 0x5B, 0xEA, 0x5A, 0x4A, 0xC2, 0x42, 0x00,
0x06, 0x01, 0x00, 0x00, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00
}, /* 序 */
{
0x00, 0xFC, 0x94, 0x94, 0x94, 0xFF, 0x94, 0x94, 0x94, 0xFE, 0x04, 0x00,
0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x04, 0x04, 0x04, 0x04, 0x06, 0x00
}, /* 电 */
{
0x20, 0x21, 0x21, 0x21, 0x21, 0xF9, 0x29, 0x25, 0x23, 0x31, 0x20, 0x00,
0x00, 0x00, 0x00, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
}, /* 子 */
{
0x18, 0xD6, 0x54, 0xFF, 0x54, 0x56, 0xD4, 0x00, 0xFC, 0x00, 0xFF, 0x00,
0x00, 0x03, 0x00, 0x07, 0x00, 0x02, 0x03, 0x00, 0x04, 0x04, 0x07, 0x00
}, /* 制 */
{
0x10, 0x08, 0xFC, 0x13, 0x08, 0x04, 0xFF, 0x24, 0x24, 0x24, 0x04, 0x00,
0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x01, 0x01, 0x01, 0x01, 0x00
}, /* 作 */
{
0x40, 0x62, 0x52, 0xCA, 0x47, 0xE2, 0x42, 0xDE, 0x50, 0x50, 0x58, 0x00,
0x04, 0x02, 0x01, 0x04, 0x04, 0x07, 0x00, 0x00, 0x01, 0x02, 0x04, 0x00
}, /* 杂 */
{
0x04, 0xA4, 0x24, 0xA4, 0x24, 0xBF, 0x24, 0x24, 0x24, 0xA6, 0x04, 0x00,
0x02, 0x01, 0x00, 0x07, 0x04, 0x04, 0x05, 0x04, 0x06, 0x00, 0x03, 0x00
}, /* 志 */
{
0x84, 0x44, 0xF5, 0x2E, 0x40, 0x10, 0x10, 0xFF, 0x10, 0x10, 0x10, 0x00,
0x00, 0x00, 0x07, 0x00, 0x04, 0x04, 0x04, 0x07, 0x04, 0x04, 0x04, 0x00
}, /* 社 */
};
nokia_5110.h
nokia_5110.h
如下:
#ifndef __NOKIA5110_H_
#define __NOKIA5110_H_
#include "sys.h"
#define SCLK PAout(4)
#define SDIN PAout(3)
#define LCD_DC PAout(2)
#define LCD_CE PAout(1)
#define LCD_RST PAout(0)
void LCD_init ( void );
void LCD_write_english_string ( unsigned char X, unsigned char Y, char *s );
void LCD_write_chinese_string ( unsigned char X, unsigned char Y, unsigned char ch_with,
unsigned char num, unsigned char line, unsigned char row );
#endif
nokia_5110.c
nokia_5110.c
如下:
#include "delay.h"
#include "nokia_5110.h"
#include "english_6x8_pixel.h"
#include "write_chinese_string_pixel.h"
static void LCD_write_byte ( unsigned char dat, unsigned char command ) {
unsigned char i;
LCD_CE = 0;
if ( command == 0 ) {
LCD_DC = 0;
} else {
LCD_DC = 1;
}
for ( i = 0; i < 8; i++ ) {
if ( dat & 0x80 ) {
SDIN = 1;
} else {
SDIN = 0;
}
SCLK = 0;
dat = dat << 1;
SCLK = 1;
}
LCD_CE = 1;
}
static void LCD_set_XY ( unsigned char X, unsigned char Y ) {
LCD_write_byte ( 0x40 | Y, 0 );
LCD_write_byte ( 0x80 | X, 0 );
}
static void LCD_clear ( void ) {
unsigned int i;
LCD_write_byte ( 0x0c, 0 );
LCD_write_byte ( 0x80, 0 );
LCD_write_byte ( 0x40, 0 );
for ( i = 0; i <= 503; i++ ) {
LCD_write_byte ( 0, 1 );
}
}
static void LCD_write_char ( unsigned char c ) {
unsigned char line;
c -= 32;
for ( line = 0; line < 6; line++ ) {
LCD_write_byte ( font6x8[c][line], 1 );
}
}
void LCD_init ( void ) {
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd ( RCC_APB2Periph_GPIOA, ENABLE );
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init ( GPIOA, &GPIO_InitStructure );
LCD_RST = 0;
delay_us ( 1 );
LCD_RST = 1;
LCD_write_byte ( 0x21, 0 );
LCD_write_byte ( 0xc8, 0 );
LCD_write_byte ( 0x06, 0 );
LCD_write_byte ( 0x13, 0 );
LCD_write_byte ( 0x20, 0 );
LCD_clear();
LCD_write_byte ( 0x0c, 0 );
LCD_CE = 0;
}
void LCD_write_english_string ( unsigned char X, unsigned char Y, char *s ) {
LCD_set_XY ( X, Y );
while ( *s ) {
LCD_write_char ( *s );
s++;
}
}
void LCD_write_chinese_string ( unsigned char X, unsigned char Y, unsigned char ch_with,
unsigned char num, unsigned char line, unsigned char row ) {
unsigned char i, n;
LCD_set_XY ( X, Y );
for ( i = 0; i < num; ) {
for ( n = 0; n < ch_with * 2; n++ ) {
if ( n == ch_with ) {
if ( i == 0 ) {
LCD_set_XY ( X, Y + 1 );
} else {
LCD_set_XY ( ( X + ( ch_with + row ) *i ), Y + 1 );
}
}
LCD_write_byte ( write_chinese[line + i][n], 1 );
}
i++;
LCD_set_XY ( ( X + ( ch_with + row ) *i ), Y );
}
}
main.c
main.c
如下:
#include "delay.h"
#include "sys.h"
#include "nokia_5110.h"
int main ( void ) {
SystemInit();
delay_init ( 72 );
NVIC_Configuration();
LCD_init();
while ( 1 ) {
LCD_write_english_string ( 0, 0, " Welcome!" );
LCD_write_english_string ( 0, 3, " Nokia5110 LCD" );
LCD_write_chinese_string ( 12, 4, 12, 4, 0, 5 );
}
}