Nokia5110使用方法及实例编写51单片机

Nokia5110

Nokia是诺基亚拆下来的屏幕。使用SPI控制

  • 84x48 的点阵 LCD,可以显示 4 行汉字,
  • 采用串行接口与主处理器进行通信,接口信号线数量大幅度减少,包括电源和地在内的信号线仅有 9 条。支持多种串行通信协议(如 AVR 单片机的SPI、MCS51 的串口模式0等),传输速率高达 4Mbps,可全速写入显示数据,无等待时间。
  • 可通过导电胶连接模块与印制版,而不用连接电缆,用模块上的金属钩可将模块固定到印制板上,因而非常便于安装和更换。
  • LCD 控制器/驱动器芯片已绑定到 LCD 晶片上,模块的体积很小。
  • 采用低电压供电,正常显示时的工作电流在 200μA 以下,且具有掉电模式。
  • LPH7366 的这些特点非常适合于电池供电的便携式通信设备和测试设备中

实物图

请添加图片描述请添加图片描述

引脚和原理图

更具对应数据手册等资料得知
在这里插入图片描述
在这里插入图片描述

51单片机实例软件模拟SPI实现控制Nokia5110显示字符

我的引脚配置

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

发送字节时序图(图片太多了,关键图片已截取出来)

细细看理解如何传递数据,方便后面代码编写
在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述

在这里插入图片描述

初始化需要配置

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

实例编写

回顾接线

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

首先是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);
	
}

上面是main函数,看到了三个函数,他们被包含在nokia5110.h文件当中接下来继续看nokia5110.h文件
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__ */

密密麻麻的一堆,不过没关系,这只是函数申明和一些管脚定义,具体怎么使用继续看
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
};

这下应该明白了吧!于是乎回顾main函数,得出结果
在这里插入图片描述
为什么要显示这个呢,其实学习这个是为我后面的智能垃圾桶项目做准备的……

结束

欢迎提出错误,共同进步。

猜你喜欢

转载自blog.csdn.net/qq_52749711/article/details/132251966