LCD5110液晶屏最早是用于手机上,相对于数码管来讲它比较省电且显示的信息量更多。在配置字库的情况下,可以显示字符、数字及中文等。同NV32F100开发板相配合是一种不错的显示方案,其显示效果如图所示。
- #include "common.h"
- #include "ics.h"
- #include "uart.h"
- #include "gpio.h"
- #include "sysinit.h"
- #include "start.h"
- //中文字库
- unsigned char chinese[][24]=
- {
- //tian?
- {0x20,0x22,0x22,0x22,0xA2,0x7E,0xA2,0x22,0x22,0x22,0x20,0x00,0x08,0x08,0x04,0x02,0x01,0x00,0x01,0x02,0x04,0x08,0x08,0x00},
- //jin?
- {0x22,0x44,0x00,0x08,0xAA,0xAA,0xFF,0xAA,0xAA,0xBE,0x08,0x00,0x04,0x02,0x01,0x02,0x02,0x02,0x0F,0x02,0x02,0x02,0x02,0x00},
- //li?
- {0x12,0x12,0xFE,0x12,0x3F,0xA5,0xA5,0xFF,0xA5,0xA5,0x3F,0x00,0x02,0x02,0x01,0x05,0x04,0x04,0x04,0x07,0x04,0x04,0x04,0x00},
- //gong?
- {0x00,0x02,0x02,0x02,0x02,0xFE,0x02,0x02,0x03,0x02,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x07,0x04,0x04,0x04,0x04,0x04,0x00},
- //da?
- {0x08,0x08,0x08,0x08,0xC8,0x3F,0xC8,0x08,0x08,0x0C,0x08,0x00,0x04,0x04,0x02,0x01,0x00,0x00,0x00,0x01,0x02,0x04,0x04,0x00},
- //xue?
- {0x9C,0x84,0x95,0x96,0x95,0xD6,0xB4,0x94,0x87,0x94,0x8C,0x00,0x00,0x00,0x00,0x04,0x04,0x07,0x00,0x00,0x00,0x00,0x00,0x00},
- };
- //字符库
- 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
- };
- long int delay_1us(void)
- {
- long int count=2;
- while(count--);
- return 0;
- }
- void delay_ms(unsigned int nms)
- {
- unsigned int n,m;
- n=nms;
- while(n)
- {
- for(m=0;m<1000;m++) delay_1us();
- n--;
- }
- }
-
- void Delay(unsigned long count)
- {
- while(count--);
- }
- void set_SCE(void)
- {
- GPIO_PinSet(GPIO_PTD1);
- }
- void clear_SCE(void)
- {
- GPIO_PinClear(GPIO_PTD1);
- }
- void set_RES(void)
- {
- GPIO_PinSet(GPIO_PTH1);
- }
- void clear_RES(void)
- {
- GPIO_PinClear(GPIO_PTH1);
- }
- void set_DC(void)
- {
- GPIO_PinSet(GPIO_PTH0);
- }
- void clear_DC(void)
- {
- GPIO_PinClear(GPIO_PTH0);
- }
- void set_SDIN(void)
- {
- GPIO_PinSet(GPIO_PTE0);
- }
- void clear_SDIN(void)
- {
- GPIO_PinClear(GPIO_PTE0);
- }
- void set_SCLK(void)
- {
- GPIO_PinSet(GPIO_PTE1);
- }
- void clear_SCLK(void)
- {
- GPIO_PinClear(GPIO_PTE1);
- }
- void LCD_write_byte(unsigned char data,unsigned char cmd)
- {
- unsigned char i;
- clear_SCE();
- if(cmd)
- set_DC();
- else
- clear_DC();
- for(i=0;i<8;i++)
- {
- if(data&0x80)
- set_SDIN();
- else
- clear_SDIN();
- data = data<<1;
- clear_SCLK();
- delay_1us();
- delay_1us();
- set_SCLK();
- clear_SCLK();
- }
- }
- void LCD_init(void)
- {
- set_SCE();
- set_RES();
- delay_ms(20);
- clear_RES();
- delay_ms(20);
- set_RES();
- delay_ms(20);
- LCD_write_byte(0x21,0);
- LCD_write_byte(0xd0,0);
- LCD_write_byte(0x20,0);
- LCD_write_byte(0x0c,0);
- set_SCE();
- }
- void LCD_set_XY(unsigned char X, unsigned char Y)
- {
- LCD_write_byte(0x40 | Y, 0);
- LCD_write_byte(0x80 | X, 0);
- set_SCE();
- }
- void LCD_clear(void)
- {
- unsigned char t;
- unsigned char k;
- LCD_set_XY(0,0);
- for(t=0;t<6;t++)
- {
- for(k=0;k<84;k++)
- {
- LCD_write_byte(0x00,1);
- }
- }
- set_SCE();
- }
- void LCD_write_char(unsigned char c)
- {
- unsigned char c_line;
- c-=32;
- for (c_line=0; c_line<6; c_line++)
- LCD_write_byte(font6x8[c][c_line], 1);
- }
- void LCD_write_String(unsigned char X,unsigned char Y,char *s)
- {
- LCD_set_XY(X,Y);
- while (*s)
- {
- LCD_write_char(*s);
- s++;
- }
- }
- 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_hanzi(unsigned char X,unsigned char Y,char s)
- {
- do
- {
- char line;
- LCD_set_XY(X,Y);
- for (line=0; line<12; line++)
- {
- LCD_write_byte(chinese[s][line],1);
- }
- LCD_set_XY(X,Y+1);
- for (line=12; line<24; line++)
- {
- LCD_write_byte(chinese[s][line],1);
- }
- }while(0);
- }
- int main (void)
- {
- sysinit();
- cpu_identify();
- printf("\nRunning the GPIO_demo project.\n");
- GPIO_Init(GPIOB, GPIO_PTE0_MASK, GPIO_PinOutput);
- GPIO_Init(GPIOB, GPIO_PTE1_MASK, GPIO_PinOutput);
- GPIO_Init(GPIOB, GPIO_PTH0_MASK, GPIO_PinOutput);
- GPIO_Init(GPIOB, GPIO_PTH1_MASK, GPIO_PinOutput);
- GPIO_Init(GPIOA, GPIO_PTD1_MASK, GPIO_PinOutput);
- LCD_init();
- LCD_clear();
- LCD_write_english_string(10,0,"NV32F100 ");
- LCD_write_english_string(10,1,"LCD5110 v1.0");
- LCD_write_english_string(10,5,"2018.6.30");
- LCD_write_hanzi(10,3,0);
- LCD_write_hanzi (40,3,1) ;
- while (1);
- }