Nokia5110の使い方と51マイコンの書き込み例

ノキア5110

NokiaはNokiaからスクリーンを取り外したものです。SPIによる制御

  • 84×48ドットマトリクスLCDで漢字4行表示可能。
  • メインプロセッサとの通信にはシリアルインターフェースを採用し、インターフェースの信号線数を大幅に削減し、電源、グランドを含む信号線は9本のみとなります。最大4Mbpsの伝送速度でさまざまなシリアル通信プロトコル(AVRマイコンのSPI、MCS51のシリアルポートモード0など)をサポートし、待ち時間なしでフルスピードで表示データを書き込むことができます。
  • モジュールとプリント基板の接続は、ケーブル接続の代わりに導電性接着剤を介して行うことができ、モジュールの金属製フックでプリント基板に固定できるため、取り付けや交換が非常に簡単です。
  • 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; // ピン 2 ヘッダー 5
sbit SDIN = P2^4; // ピン 3 ヘッダー 4
sbit LCD_DC = P2^3; // ピン 4 ヘッダー 3
sbit LCD_CE = P2^2; // ピン 5 ヘッダー 2
sbit LCD_RST = P2^1; // ピン 9 ヘッダー 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);
	
}

上記はメイン関数です。3 つの関数が表示されます。これらはファイルに含まれています。次に、ファイルnokia5110.hnokia5110.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