STM32驱动_NOKIA5110

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 );
    }
}

猜你喜欢

转载自blog.csdn.net/fukangwei_lite/article/details/121868221