Nokia5110 usage methods and examples of writing 51 microcontroller

Nokia5110

Nokia is the screen removed from Nokia. Control using SPI

  • 84x48 dot matrix LCD can display 4 lines of Chinese characters.
  • A serial interface is used to communicate with the main processor, and the number of interface signal lines is greatly reduced. There are only 9 signal lines including power supply and ground. Supports a variety of serial communication protocols (such as SPI of AVR microcontroller, serial port mode 0 of MCS51, etc.), with a transmission rate up to 4Mbps, and can write display data at full speed without waiting time.
  • The module can be connected to the printed board through conductive glue instead of connecting cables. The module can be fixed to the printed board with metal hooks on the module, making it very easy to install and replace.
  • The LCD controller/driver chip has been bound to the LCD chip, and the module size is very small.
  • Using low voltage power supply, the operating current during normal display is below 200μA, and it has a power-down mode.
  • These features of the LPH7366 are ideally suited for use in battery-operated portable communications equipment and test equipment

Physical map

Please add image descriptionPlease add image description

Pinout and schematic

More information such as corresponding data sheets are available.
Insert image description here
Insert image description here

51 microcontroller example software simulates SPI to control Nokia5110 display characters

My pin configuration

sbit SCLK = P2^5;		// pin 2	 header	5
sbit SDIN = P2^4;		// pin 3	 header	4
sbit LCD_DC = P2^3;		// pin 4	 header	3
sbit LCD_CE = P2^2;		// pin 5	 header	2
sbit LCD_RST = P2^1;	// pin 9	 header	1

Sending byte timing diagram (there are too many pictures, the key pictures have been cut out)

Take a closer look to understand how to transfer data to facilitate subsequent code writing.
Insert image description hereInsert image description here
Insert image description hereInsert image description here

Insert image description here

Initialization requires configuration

Insert image description here
Insert image description here
Insert image description here

Example writing

Review wiring

sbit SCLK = P2^5; // pin 2 header 5
sbit SDIN = P2^4; // pin 3 header 4
sbit LCD_DC = P2^3; // pin 4 header 3
sbit LCD_CE = P2^2; // pin 5 header 2
sbit LCD_RST = P2^1; // pin 9 header 1

First is main.c

#include <reg51.h>
#include "nokia5110.h"
int main()
{
    
    
	LCD_init();	//初始化lcd
	LCD_clear();	//清屏
	
//	LCD_write_chinese_string(0,0,12,7,0,0);汉字函数已删除,不是很完善
//	LCD_write_chinese_string(0,2,12,7,0,0);
//	LCD_write_chinese_string(0,4,12,7,0,0);
	
	//显示字符
	LCD_write_english_string(1,0,"--ShunGe51--");
	LCD_write_english_string(1,1,"************");
	LCD_write_english_string(1,2,"distance is ");
	LCD_write_english_string(1,3,"************");
	LCD_write_english_string(1,4," flag = off ");
	while(1);
	
}

The above is the main function. We see three functions. They are included in nokia5110.hthe file. Next, continue to look at nokia5110.hthe file
nokia5110.h .

#ifndef __NOKIA5110_H__
#define __NOKIA5110_H__

#include <reg51.h>

sbit SCLK = P2^5;		// pin 2	 header	5
sbit SDIN = P2^4;		// pin 3	 header	4
sbit LCD_DC = P2^3;		// pin 4	 header	3
sbit LCD_CE = P2^2;		// pin 5	 header	2
sbit LCD_RST = P2^1;	// pin 9	 header	1

void LCD_init(void);
void LCD_clear(void);

//void LCD_move_chinese_string(unsigned char X, unsigned char Y, unsigned char T); 
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);
//void chinese_string(unsigned char X, unsigned char Y, unsigned char T);                 
void LCD_write_char(unsigned char c);
//void LCD_draw_bmp_pixel(unsigned char X,unsigned char Y,unsigned char *map,
//                 unsigned char Pix_x,unsigned char Pix_y);
void LCD_write_byte(unsigned char dat, unsigned char dc);
void LCD_set_XY(unsigned char X, unsigned char Y);               
#endif /* __NOKIA5110_H__ */

It’s a dense bunch, but it doesn’t matter. This is just a function declaration and some pin definitions. For details on how to use it, continue to see
nokia5110.c

#include <reg51.h>
#include <intrins.h>
#include "nokia5110.h"
#include "english_6x8_pixel.h"
//#include "write_chinese_string_pixel.h"

void Delay1us()		//@11.0592MHz
{
    
    
	_nop_();
	_nop_();
	_nop_();
}
/*-----------------------------------------------------------------------
LCD_init          : 3310LCD初始化

编写日期          :2023-8-12 
最后修改日期      :2023-8-12 
-----------------------------------------------------------------------*/
void LCD_init(void)
{
    
    
		            // 产生一个让LCD复位的低电平脉冲
   LCD_RST = 0;
    Delay1us();

   LCD_RST = 1;
    
		// 关闭LCD
   LCD_CE = 0;
    Delay1us();
		// 使能LCD
   LCD_CE = 1;
    Delay1us();

    LCD_write_byte(0x21, 0);	// 使用扩展命令设置LCD模式
    LCD_write_byte(0xc8, 0);	// 设置偏置电压
    LCD_write_byte(0x06, 0);	// 温度校正
    LCD_write_byte(0x13, 0);	// 1:48
    LCD_write_byte(0x20, 0);	// 使用基本命令
    LCD_clear();	        // 清屏
    LCD_write_byte(0x0c, 0);	// 设定显示模式,正常显示
        
           // 关闭LCD
   LCD_CE = 0;
}
/*-----------------------------------------------------------------------
LCD_clear         : LCD清屏函数

编写日期          :2023-8-12 
最后修改日期      :2023-8-12 
-----------------------------------------------------------------------*/
void LCD_clear(void)
{
    
    
	 unsigned int i;

    LCD_write_byte(0x0c, 0);			
    LCD_write_byte(0x80, 0);			

    for (i=0; i<504; i++)
      LCD_write_byte(0, 1);			

}

void LCD_write_byte(unsigned char dat, unsigned char command)
{
    
    
	unsigned int i;
	
	LCD_CE = 0;		//片选信号
	
	LCD_DC = command;//传送命令 or 传输数据 
	
	for(i = 0;i<8;i++){
    
    
		SDIN = dat & 0x80;			//最高位给数据
		Delay1us();				//这里包括下面可以不用等待,为了保险我还是加了一丢丢
		SCLK = 0;					//拉低表示我已经修改好数据并上传了
		Delay1us();
		dat = dat << 1;				//继续下一位
		Delay1us();
		SCLK = 1;					//拉高准备传输	
		Delay1us();
	}
	
	LCD_CE = 1;
}

/*-----------------------------------------------------------------------
LCD_write_char    : 显示英文字符

输入参数:c       :显示的字符;

编写日期          :2023-8-12 
最后修改日期      :2023-8-12 
-----------------------------------------------------------------------*/
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);
}

/*-----------------------------------------------------------------------
LCD_write_english_String  : 英文字符串显示函数

输入参数:*s      :英文字符串指针;
          X、Y    : 显示字符串的位置,x 0-83 ,y 0-5

编写日期          :2023-8-12
最后修改日期      :2023-8-12		
-----------------------------------------------------------------------*/
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++;
      }
  }

english_6x8_pixel.h

// 6 x 8 font
// 1 pixel space at left and bottom
// index = ASCII - 32
//字模软件而已啦
code 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
};

You should understand now! So I reviewed mainthe function and got the result.
Insert image description here
Why should I display this? In fact, learning this is to prepare for my future smart trash can project...

Finish

Welcome to make mistakes and make progress together.

Guess you like

Origin blog.csdn.net/qq_52749711/article/details/132251966