📄 lcd.c
字号:
#include "LCD.h"
int strlen(char *);
//-----------------------------------------------------------------------------
/*
Here is how the LCD Registors are layed out:
Byte
ARM Addr 0 1 2 3
-----------------------
0880 0000 R0 R1 xx xx
0880 0004 R2 R3 xx xx
0880 0008 R4 R5 xx xx
. .
. .
. .
R0 is a byte access at address 08800000,
R1 is a byte access at address 08800001,
R2 is a byte access at address 08800004,
R3 is a byte access at address 08800005,
and so on.
LCD memory is layed out similarly:
Byte
ARM Addr 0 1 2 3
-----------------------
0800 0000 P0 P1 xx xx
0800 0004 P2 P3 xx xx
0800 0008 P4 P5 xx xx
. .
. .
. .
Pixel 0 (P0) is a byte access at address 08000000,
Pixel 1 (P1) is a byte access at address 08000001,
Pixel 2 (P2) is a byte access at address 08000004,
Pixel 3 (P3) is a byte access at address 08000005,
and so on. Note that you can also write the pixels
in pairs using 16 bit wide accesses at 08000000,
08000004, 08000008, etc.
*/
//-----------------------------------------------------------------------------
#define NUM_LUT_ENTRIES 8
static const unsigned char LUT[3][NUM_LUT_ENTRIES] =
{
{0x00,0x02,0x04,0x06,0x09,0x0B,0x0D,0x0F},
{0x00,0x02,0x04,0x06,0x09,0x0B,0x0D,0x0F},
{0x00,0x05,0x0A,0x0F,0x0F,0x0F,0x0F,0x0F}
};
//-----------------------------------------------------------------------------
//
// Each letter in the font is 8 x 8 bits
//
#define MAX_FONT 97
static const unsigned char font[MAX_FONT][8] =
{
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // (blank)
{ 0x30, 0x78, 0x78, 0x30, 0x30, 0x00, 0x30, 0x00}, // !
{ 0x6C, 0x6C, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x00}, // "
{ 0x6C, 0x6C, 0xFE, 0x6C, 0xFE, 0x6C, 0x6C, 0x00}, // #
{ 0x30, 0x7C, 0xC0, 0x78, 0x0C, 0xF8, 0x30, 0x00}, // $
{ 0x00, 0xC6, 0xCC, 0x18, 0x30, 0x66, 0xC6, 0x00}, // %
{ 0x38, 0x6C, 0x38, 0x76, 0xDC, 0xCC, 0x76, 0x00}, // &
{ 0x60, 0x60, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00}, // '
{ 0x18, 0x30, 0x60, 0x60, 0x60, 0x30, 0x18, 0x00}, // (
{ 0x60, 0x30, 0x18, 0x18, 0x18, 0x30, 0x60, 0x00}, // )
{ 0x00, 0x66, 0x3C, 0xFF, 0x3C, 0x66, 0x00, 0x00}, // *
{ 0x00, 0x30, 0x30, 0xFC, 0x30, 0x30, 0x00, 0x00}, // +
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x60}, // ,
{ 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00}, // -
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00}, // .
{ 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0x80, 0x00}, // /
{ 0x7C, 0xC6, 0xCE, 0xDE, 0xF6, 0xE6, 0x7C, 0x00}, // 0
{ 0x30, 0x70, 0x30, 0x30, 0x30, 0x30, 0xFC, 0x00}, // 1
{ 0x78, 0xCC, 0x0C, 0x38, 0x60, 0xCC, 0xFC, 0x00}, // 2
{ 0x78, 0xCC, 0x0C, 0x38, 0x0C, 0xCC, 0x78, 0x00}, // 3
{ 0x1C, 0x3C, 0x6C, 0xCC, 0xFE, 0x0C, 0x1E, 0x00}, // 4
{ 0xFC, 0xC0, 0xF8, 0x0C, 0x0C, 0xCC, 0x78, 0x00}, // 5
{ 0x38, 0x60, 0xC0, 0xF8, 0xCC, 0xCC, 0x78, 0x00}, // 6
{ 0xFC, 0xCC, 0x0C, 0x18, 0x30, 0x30, 0x30, 0x00}, // 7
{ 0x78, 0xCC, 0xCC, 0x78, 0xCC, 0xCC, 0x78, 0x00}, // 8
{ 0x78, 0xCC, 0xCC, 0x7C, 0x0C, 0x18, 0x70, 0x00}, // 9
{ 0x00, 0x30, 0x30, 0x00, 0x00, 0x30, 0x30, 0x00}, // :
{ 0x00, 0x30, 0x30, 0x00, 0x00, 0x30, 0x30, 0x60}, // ;
{ 0x18, 0x30, 0x60, 0xC0, 0x60, 0x30, 0x18, 0x00}, // <
{ 0x00, 0x00, 0xFC, 0x00, 0x00, 0xFC, 0x00, 0x00}, // =
{ 0x60, 0x30, 0x18, 0x0C, 0x18, 0x30, 0x60, 0x00}, // >
{ 0x78, 0xCC, 0x0C, 0x18, 0x30, 0x00, 0x30, 0x00}, // ?
{ 0x7C, 0xC6, 0xDE, 0xDE, 0xDE, 0xC0, 0x78, 0x00}, // @
{ 0x30, 0x78, 0xCC, 0xCC, 0xFC, 0xCC, 0xCC, 0x00}, // A
{ 0xFC, 0x66, 0x66, 0x7C, 0x66, 0x66, 0xFC, 0x00}, // B
{ 0x3C, 0x66, 0xC0, 0xC0, 0xC0, 0x66, 0x3C, 0x00}, // C
{ 0xF8, 0x6C, 0x66, 0x66, 0x66, 0x6C, 0xF8, 0x00}, // D
{ 0xFE, 0x62, 0x68, 0x78, 0x68, 0x62, 0xFE, 0x00}, // E
{ 0xFE, 0x62, 0x68, 0x78, 0x68, 0x60, 0xF0, 0x00}, // F
{ 0x3C, 0x66, 0xC0, 0xC0, 0xCE, 0x66, 0x3E, 0x00}, // G
{ 0xCC, 0xCC, 0xCC, 0xFC, 0xCC, 0xCC, 0xCC, 0x00}, // H
{ 0x78, 0x30, 0x30, 0x30, 0x30, 0x30, 0x78, 0x00}, // I
{ 0x1E, 0x0C, 0x0C, 0x0C, 0xCC, 0xCC, 0x78, 0x00}, // J
{ 0xE6, 0x66, 0x6C, 0x78, 0x6C, 0x66, 0xE6, 0x00}, // K
{ 0xF0, 0x60, 0x60, 0x60, 0x62, 0x66, 0xFE, 0x00}, // L
{ 0xC6, 0xEE, 0xFE, 0xFE, 0xD6, 0xC6, 0xC6, 0x00}, // M
{ 0xC6, 0xE6, 0xF6, 0xDE, 0xCE, 0xC6, 0xC6, 0x00}, // N
{ 0x38, 0x6C, 0xC6, 0xC6, 0xC6, 0x6C, 0x38, 0x00}, // O
{ 0xFC, 0x66, 0x66, 0x7C, 0x60, 0x60, 0xF0, 0x00}, // P
{ 0x78, 0xCC, 0xCC, 0xCC, 0xDC, 0x78, 0x1C, 0x00}, // Q
{ 0xFC, 0x66, 0x66, 0x7C, 0x6C, 0x66, 0xE6, 0x00}, // R
{ 0x78, 0xCC, 0xE0, 0x70, 0x1C, 0xCC, 0x78, 0x00}, // S
{ 0xFC, 0xB4, 0x30, 0x30, 0x30, 0x30, 0x78, 0x00}, // T
{ 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xFC, 0x00}, // U
{ 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0x00}, // V
{ 0xC6, 0xC6, 0xC6, 0xD6, 0xFE, 0xEE, 0xC6, 0x00}, // W
{ 0xC6, 0xC6, 0x6C, 0x38, 0x38, 0x6C, 0xC6, 0x00}, // X
{ 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0x30, 0x78, 0x00}, // Y
{ 0xFE, 0xC6, 0x8C, 0x18, 0x32, 0x66, 0xFE, 0x00}, // Z
{ 0x78, 0x60, 0x60, 0x60, 0x60, 0x60, 0x78, 0x00}, // [
{ 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x02, 0x00}, // (backslash)
{ 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x78, 0x00}, // ]
{ 0x10, 0x38, 0x6C, 0xC6, 0x00, 0x00, 0x00, 0x00}, // ^
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF}, // _
{ 0x30, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00}, //
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -