LCD1602和12864显示器

2023-05-16

1 LCD显示器相关背景

1.1 LCD简介

(1)显示器,常见显示器。

(2)LCD(Liquid Crystal Display),液晶显示器,原理介绍。

(3)LCD应用领域。

(4)LED OLED。

1.2 电子显示器的原理

(1)像素(分辨率)。

(2)显存,用来做显示的内存。

(3)字模。

(4)字库。

(5)控制器和驱动器。

(6)软件+硬件实现功能。

2 开始学习LCD1602

2.1 简介

(1)为什么叫1602(16x2,显示器显示2排,每排16个字符)。能显示的字符数是32,但是像素数不是32,因为一个字符是由多个像素组成的。有可能一个字符是由5*7=35个像素组成的,也有可能是由6*8=48个像素组成的。但是我们不用去管,因为LCD1602内置了字库了。

(2)带ASCII码字库,不能显示中文。当我们想让LCD1602显示某个ASCII码字符时,只需要将这个字符对应的ASCII码发给LCD1602内部的控制器,控制器就会去查字库得到字模,然后将字模发给内部的驱动器去驱动LCD做显示。

(3)用途:工业应用。

2.2 原理图和接线引脚

这里写图片描述

(1)引脚分为:数据接口(8)+控制接口(3)+VO(1)+电源地(4)。

(2)并行接口:串行就是数据线只有1根,同时只能传输1个bit位,如果要传送多个bit位必须分时传输;并行就是数据线有多根,每一根可以传输1个bit位,所以同时可以传输多个bit位。譬如LCD1602有8根数据线,所以一次同时传输8个bit位。

(3)背光亮度调节。

(4)接线确认。

2.3 数据手册

(1)概念:LCM和LCD,其实lcm就是lcd module(LCD模组)。

(2)主要技术参数解析。

(3)引脚定义(结合原理图来对照分析)。

这里写图片描述

(4)控制器接口说明(注意控制器型号)。

RS=1时,D0-D7上传输的是数据
RS=0时,D0-D7上传输的是命令
RW=1时,表示我们要读
RW=0时,表示我们要写
E=1时,表示使能 enable
E=0时,表示禁止(禁能) disable

3 LCD1602控制器的低层时序

3.1 关键点

(1)时序走控制接口引脚。

(2)指令码、状态字、数据,这三个走数据接口。

(3)注意是并行的。

3.2 读状态时序分析

(1)低层时序描述。
这里写图片描述
(2)官方示例程序。

(3)状态字的解析方法。
这里写图片描述

3.3 写指令时序分析

(1)低层时序描述。

(2)官方示例程序。

(3)指令码的解析方法。

3.4 读写数据

(1)读数据。

(2)写数据。

(3)RAM空间。RAM地址范围(芯片范围是0-39每行,但是实际只用了0-15每行),数据是什么数据:要显示的字符的ASCII码编码值。

这里写图片描述

3.5 指令说明

00001000 0x08 关闭显示
00001100 0x0C 打开显示不显示光标
00001111 0x0F 打开显示并且显示光标并且光标闪烁
00000110 0x06 地址指针自动加1,整体屏幕不移动
0x80+(0x00-0x0F) 第一行设置地址指针指令
0x80+(0x40-0x4F) 第二行设置地址指针指令
0x01 显示清屏
0x02 回车

这里写图片描述

这里写图片描述

4 代码实践

1602.h

#ifndef __1602_H__
#define __1602_H__



// 只需要声明高层时序即可,而低层时序是不需要声明的。
// 因为我们在头文件中声明这个函数,目的是为了让别的文件去包含这个头文件
// 从而可以调用这个头文件中声明的函数,所以我们只需要声明1602.c中将来
// 会被外部.c文件调用的那些函数即可。而1602.c中自己使用的内部函数将来也
// 不会被外部.c文件调用,因此就不用声明了

void InitLcd1602();
void LcdSetCursor(unsigned char x,unsigned char y);
void LcdShowStr(unsigned char x,unsigned char y,unsigned char *str);


#endif

l602.c

#include <reg51.h>

// 对LCD1602的底层以及高层时序做封装

// IO接口定义
#define LCD1602_DB  P0      //data bus 数据总线
// 控制总线
sbit LCD1602_RS = P2^6;
sbit LCD1602_RW = P2^5;
sbit LCD1602_EN = P2^7; 


/************ 低层时序 ********************************/
void Read_Busy()           //忙检测函数,判断bit7是0,允许执行;1禁止
{
    unsigned char sta;      //
    LCD1602_DB = 0xff;
    LCD1602_RS = 0;
    LCD1602_RW = 1;
    do
    {
        LCD1602_EN = 1;
        sta = LCD1602_DB;
        LCD1602_EN = 0;    //使能,用完就拉低,释放总线
    }while(sta & 0x80);
}

void Lcd1602_Write_Cmd(unsigned char cmd)     //写命令
{
    Read_Busy();
    LCD1602_RS = 0;
    LCD1602_RW = 0; 
    LCD1602_DB = cmd;
    LCD1602_EN = 1;
    LCD1602_EN = 0;    
}

void Lcd1602_Write_Data(unsigned char dat)   //写数据
{
      Read_Busy();
      LCD1602_RS = 1;
      LCD1602_RW = 0;
      LCD1602_DB = dat;
      LCD1602_EN = 1;
      LCD1602_EN = 0;
}

/************* 高层时序 ******************************/
// 本函数用来设置当前光标位置,其实就是设置当前正在编辑的位置,
// 其实就是内部的数据地址指针,其实就是RAM显存的偏移量
// x范围是0-15,y=0表示上面一行,y=1表示下面一行
void LcdSetCursor(unsigned char x,unsigned char y)  //坐标显示
{
    unsigned char addr;
    if(y == 0)
        addr = 0x00 + x;
    else
        addr = 0x40 + x;

    Lcd1602_Write_Cmd(addr|0x80);
}

// 函数功能是:从坐标(x,y)开始显示字符串str
// 注意这个函数不能跨行显示,因为显存地址是不连续的
// 其实我们可以封装出一个能够折行显示的函数的
void LcdShowStr(unsigned char x,unsigned char y,unsigned char *str)     //显示字符串
{
    LcdSetCursor(x,y);      //当前字符的坐标
    while(*str != '\0')
    {
        Lcd1602_Write_Data(*str++);
    }
}

// 初始化LCD,使之能够开始正常工作
void InitLcd1602()              //1602初始化
{
    Lcd1602_Write_Cmd(0x38);    //打开,5*8,8位数据
    //Lcd1602_Write_Cmd(0x0c);  // 打开显示并且无光标
    Lcd1602_Write_Cmd(0x0f);    // 打开显示并且光标闪烁
    Lcd1602_Write_Cmd(0x06);
    Lcd1602_Write_Cmd(0x01);    //清屏   
}

main.c

#include "1602.h"



void main(void)
{
    InitLcd1602();
    //LcdShowStr(0, 0, "www.zhulaoshi.org");
    LcdShowStr(0, 0, "zhulaoshi");
    //LcdShowStr(0, 1, "angdajiangtang");
}

5 LCD12864介绍

5.1 何为LCD12864

(1)128p*64p,注意不是字符而是pixel。

(2)没有内置字库,用户需要提供字模给LCD12864内部的控制器。

(3)常见外观有2类(网上找图看)。

(4)可以显示文字(英文、中文或其他文字)和图片(点阵图)。

5.2 原理图和数据手册和接线

(1)接线确认。

(2)原理图(开发板底板、屏幕转接板)。

这里写图片描述

这里写图片描述

(3)数据手册(LCD12864、ST7565)。

这里写图片描述

5.3 编程接口

(1)并行接口。

(2)控制总线+数据总线。

(3)控制总线的定义总结。

6 LCD12864低层时序分析

6.1 学习方法

(1)找准数据手册中关键信息点,用来查而不是挨个看。

(2)数据手册对照官方示例代码来参照对比。

(3)要结合各部分原理图、各部分数据手册、示例代码来综合分析。

(4)必要时要做笔记。

6.2 ST7565低层时序分析

(1)写指令。

/*******************************************************************************
* 函 数 名         : LCD12864_WriteCmd
* 函数功能         : 写入一个命令到12864
* 输    入         : cmd
* 输    出         : 无
*******************************************************************************/

void LcdSt7565_WriteCmd(cmd)
{
    LCD12864_CS = 0;       //chip select,打开片选
    LCD12864_RD = 1;       //disable read,读失能   
    LCD12864_RS = 0;       //select command,选择命令
    LCD12864_RW = 0;       //select write,选择写模式
    _nop_();
    _nop_();

    DATA_PORT = cmd; //put command,放置命令
    _nop_();
    _nop_();

    LCD12864_RW = 1;       //command writing ,写入命令
}

(2)写数据。


/*******************************************************************************
* 函 数 名         : LcdSt7565_WriteData
* 函数功能         : 写入一个数据到12864
* 输    入         : dat
* 输    出         : 无
*******************************************************************************/

void LcdSt7565_WriteData(dat)
{   
    LCD12864_CS = 0;       //chip select,打开片选
    LCD12864_RD = 1;       //disable read,读失能   
    LCD12864_RS = 1;       //select data,选择数据
    LCD12864_RW = 0;       //select write,选择写模式
    _nop_();
    _nop_();

    DATA_PORT = dat;       //put data,放置数据
    _nop_();
    _nop_();

    LCD12864_RW = 1;       //data writing,写数据 
}

6.3 总结

(1)随着产品变复杂,资料也会变复杂。

(2)资料会有不完善,甚至错误的。

(3)思路要始终清晰,大脑必须有一定复杂度。

7 ST7565的指令集

7.1 高层时序分析

(1)指令式交互系统。

(2)指令表是关键。

这里写图片描述

7.2 指令系统学习方法

(1)沿着数据手册顺序分析。

(2)沿着示例代码按需分析。

7.3 逐个分析

(1)1号指令:Display ON/OFF,
10101111 0xAF on
10101110 0xAE off

(2)2号指令:显示行号设置
01000000+(0-63)
0x40+(0-63) 表示要将内容显示在第0-63行

(3)3号指令:设置page address
10110000+(0-7)
0xB0+(0-7) 表示设置page address到0-8

(4)4号指令:设置column address
一个完整指令是分为2条相连的指令合起来的。必须连发2个
指令1:00010000+高4位 0x10+高4位
指令2:00000000+低4位 0x00+低4位

(8)设置ADC:
0xA0 normal, columu address 从左往右的
0xA1 reverse, column address 从右往左的

7.4 LCD初始化函数

(1)第一类指令:时序需要的。

(2)第二类指令:硬件特性设置需要的(譬如屏幕亮度、对比度之类的)。

(3)第三类指令:显示参数相关的:A1/A0 C8/C0 0x40+(0-63)。

/*******************************************************************************
* 函 数 名         : LCD12864_Init
* 函数功能         : 初始化12864
* 输    入         : 无
* 输    出         : 无
* 说    明         : LCD12864的命令指令可以查看例程文件夹下的《ST7565p数据手册》
*                  * 的第51页的位置。
*******************************************************************************/

void Lcd12864_Init()
{
    uchar i;
    LCD12864_RSET = 0;
    for (i=0; i<100; i++);
    LCD12864_CS = 0;
    LCD12864_RSET = 1;

    //----------------Start Initial Sequence-------//
    //------程序初始化设置,具体命令可以看文件夹下---//

    //--软件初始化--//
    LcdSt7565_WriteCmd(0xE2);  //reset
    for (i=0; i<100; i++);     //延时一下

    //--表格第8个命令,0xA0段(左右)方向选择正常方向(0xA1为反方向)--//
    // 0xA0对应0-127,0xA1对应4-131
    LcdSt7565_WriteCmd(0xA0);  //ADC select segment direction 

    //--表格第15个命令,0xC8普通(上下)方向选择选择反向,0xC0为正常方向--// 
    LcdSt7565_WriteCmd(0xC8);  //Common direction 

    //--表格第9个命令,0xA6为设置字体为黑色,背景为白色---//
    //--0xA7为设置字体为白色,背景为黑色---//
    LcdSt7565_WriteCmd(0xA6);  //reverse display

    //--表格第10个命令,0xA4像素正常显示,0xA5像素全开--//
    LcdSt7565_WriteCmd(0xA4);  //normal display

    //--表格第11个命令,0xA3偏压为1/7,0xA2偏压为1/9--//
    LcdSt7565_WriteCmd(0xA2);  //bias set 1/9

    //--表格第19个命令,这个是个双字节的命令,0xF800选择增压为4X;--//
    //--0xF801,选择增压为5X,其实效果差不多--//  
    LcdSt7565_WriteCmd(0xF8);  //Boost ratio set
    LcdSt7565_WriteCmd(0x01);  //x4

    //--表格第18个命令,这个是个双字节命令,高字节为0X81,低字节可以--//
    //--选择从0x00到0X3F。用来设置背景光对比度。---/
    LcdSt7565_WriteCmd(0x81);  //V0 a set
    LcdSt7565_WriteCmd(0x23);

    //--表格第17个命令,选择调节电阻率--//
    LcdSt7565_WriteCmd(0x25);  //Ra/Rb set

    //--表格第16个命令,电源设置。--//
    LcdSt7565_WriteCmd(0x2F);
    for (i=0; i<100; i++);

    //--表格第2个命令,设置显示开始位置--//
    LcdSt7565_WriteCmd(0x40);  //start line

    //--表格第1个命令,开启显示--//
    LcdSt7565_WriteCmd(0xAF);  // display on
    for (i=0; i<100; i++);

}

7.5 清屏操作

/*******************************************************************************
* 函 数 名         : LCD12864_ClearScreen
* 函数功能         : 清屏12864
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/

void Lcd12864_ClearScreen(void)
{
    uchar i, j;

    for(i=0; i<8; i++)
    {
        //--表格第3个命令,设置Y的坐标--//
        //--Y轴有64个,一个坐标8位,也就是有8个坐标--//
        //所以一般我们使用的也就是从0xB0到0x07,就够了--//    
        LcdSt7565_WriteCmd(0xB0+i); 

        //--表格第4个命令,设置X坐标--//
        //--当你的段初始化为0xA1时,X坐标从0x10,0x04到0x18,0x04,一共128位--//
        //--当你的段初始化为0xA0时,X坐标从0x10,0x00到0x18,0x00,一共128位--//
        //--在写入数据之后X坐标的坐标是会自动加1的,我们初始化使用0xA0所以--//
        //--我们的X坐标从0x10,0x00开始---//
        LcdSt7565_WriteCmd(0x10); 
        LcdSt7565_WriteCmd(0x00);                              

        //--X轴有128位,就一共刷128次,X坐标会自动加1,所以我们不用再设置坐标--//
        for(j=0; j<128; j++)
        {
            LcdSt7565_WriteData(0x00);  //如果设置背景为白色时,清屏选择0XFF
        }
    }
}

8 LCD12864显示文字

8.1 文字显示的原理分析

(1)字模。

(2)像素&显存的对应关系。

(3)显示函数:将字模丢到正确的显存中去。

8.2 字模的获取

(1)芯片自带字库。

(2)网上下载字库。

(3)字模生成软件自助生成。

8.3 代码实战显示6*8 ASCII码

(1)先弄好低层时序和清屏函数。

(2)网上找6*8的ASCII码字库。

(3)写代码去显示。

8.4 完成代码

// 在屏幕的(x, y)坐标处,显示c这个字符
// (x, y)表示像素点的坐标值,所以x范围是0-127;y的范围是0-63
// 注意,因为显示文字是以整页为单位的,为了简单起见必须页对齐显示
// 因此给的y值必须是页首地址,就是0 8 16 24 等数值
void ascii_display(unsigned char x, unsigned char y, unsigned char c)
{
    unsigned char i = 0;
    unsigned char x1, x2;
 /*
    LcdSt7565_WriteCmd(0xB0); 
    // x坐标,只要在范围内别超出就可以了
    LcdSt7565_WriteCmd(0x10); 
    LcdSt7565_WriteCmd(0x04);


    for (i=0; i<6; i++)
   {
        LcdSt7565_WriteData(0xff); 
   }
*/

   // 第一步,设置显示的x和y坐标
   // y坐标,其实就是page address
    LcdSt7565_WriteCmd(0xB0 + y / 8); 
    // x坐标,只要在范围内别超出就可以了
    x1 = (x >> 4) & 0x0f;
    x2 = x & 0x0f;
    LcdSt7565_WriteCmd(0x10 + x1); 
    LcdSt7565_WriteCmd(0x00 + x2);


   // 第二步,找到c对应的字模
   // ASCII_6_8[c-20][0]     字模的第一个字节

   // 第三步,将字模丢到显存中去
   for (i=0; i<6; i++)
   {
        LcdSt7565_WriteData(ASCII_6_8[c-0x20][i]); 
   }

}

8.5 测试调试

(1)看显示效果。

(2)换不同字符去显示。

(3)换不同位置去显示。

8.6 思考

(1)其他大小尺寸的字模如何显示。

(2)取模方式对显示函数的影响。

8.7 遗留问题

(1)初始化和字模不匹配,造成字是反的。

(2)初始化不对,造成x坐标是从右往左的。

解决遗留问题:修改初始化代码从左向右显示

8.8 思考:超过8*8的字符如何显示

(1)常见汉字字模大小是16*16。

(2)去哪里找汉字字模。

8.9 写汉字字模显示函数

void hanzi_display(unsigned char x, unsigned char y, unsigned char zimo[])
{
    unsigned char i = 0;
    unsigned char x1, x2;

    // 先显示上面一半
    LcdSt7565_WriteCmd(0xB0 + y / 8); 
    // x坐标,只要在范围内别超出就可以了
    x1 = (x >> 4) & 0x0f;
    x2 = x & 0x0f;
    LcdSt7565_WriteCmd(0x10 + x1); 
    LcdSt7565_WriteCmd(0x00 + x2);

    for (i=0; i<16; i++)
    {
        LcdSt7565_WriteData(zimo[i]); 
    }

    // 再显示下面一半
    LcdSt7565_WriteCmd(0xB0 + y / 8 + 1); 
    // x坐标,只要在范围内别超出就可以了
    x1 = (x >> 4) & 0x0f;
    x2 = x & 0x0f;
    LcdSt7565_WriteCmd(0x10 + x1); 
    LcdSt7565_WriteCmd(0x00 + x2);

    for (i=16; i<32; i++)
    {
        LcdSt7565_WriteData(zimo[i]); 
    }
}

9 LCD12864显示图片

(1)思路分析。

(2)图片数据获取。

(3)写显示函数。

(4)调试。

// 在屏幕上显示一个图片,从屏幕左上角开始显示
void pic_display(unsigned char pic[])
{
    uchar i, j;
    uint k = 0;

    for(i=0; i<8; i++)
    {   
        LcdSt7565_WriteCmd(0xB0+i); 

        LcdSt7565_WriteCmd(0x10); 
        LcdSt7565_WriteCmd(0x00);                              

        //--X轴有128位,就一共刷128次,X坐标会自动加1,所以我们不用再设置坐标--//
        for(j=0; j<128; j++)
        {
            LcdSt7565_WriteData(pic[k++]);  //如果设置背景为白色时,清屏选择0XFF
        }
    }




}

10 代码

st7565.h

#ifndef __ST7565_H
#define __ST7565_H

#include<reg51.h>
#include<intrins.h>


//---重定义关键词---//
#ifndef uchar
#define uchar unsigned char
#endif

#ifndef uint 
#define uint unsigned int
#endif

//--定时使用的IO口--//
#define DATA_PORT   P0
sbit LCD12864_CS    = P3^2;
sbit LCD12864_RSET  = P3^3;
sbit LCD12864_RS    = P2^6;
sbit LCD12864_RW    = P2^7;
sbit LCD12864_RD    = P2^5;

//--定义全局函数--//
void LcdSt7565_WriteCmd(cmd);
void LcdSt7565_WriteData(dat);
void Lcd12864_Init();
void Lcd12864_ClearScreen(void);


void ascii_display(unsigned char x, unsigned char y, unsigned char c);
void hanzi_display(unsigned char x, unsigned char y, unsigned char zimo[]);
void pic_display(unsigned char pic[]);

#endif

st7565p.c

#include "st7565p.h"
#include "Font6_8.h"        // 网上下载的6*8的ASCII码字符表


/*******************************************************************************
* 函 数 名         : LCD12864_WriteCmd
* 函数功能         : 写入一个命令到12864
* 输    入         : cmd
* 输    出         : 无
*******************************************************************************/

void LcdSt7565_WriteCmd(cmd)
{
    LCD12864_CS = 0;       //chip select,打开片选
    LCD12864_RD = 1;       //disable read,读失能   
    LCD12864_RS = 0;       //select command,选择命令
    LCD12864_RW = 0;       //select write,选择写模式
    _nop_();
    _nop_();

    DATA_PORT = cmd; //put command,放置命令
    _nop_();
    _nop_();

    LCD12864_RW = 1;       //command writing ,写入命令
}

/*******************************************************************************
* 函 数 名         : LcdSt7565_WriteData
* 函数功能         : 写入一个数据到12864
* 输    入         : dat
* 输    出         : 无
*******************************************************************************/

void LcdSt7565_WriteData(dat)
{   
    LCD12864_CS = 0;       //chip select,打开片选
    LCD12864_RD = 1;       //disable read,读失能   
    LCD12864_RS = 1;       //select data,选择数据
    LCD12864_RW = 0;       //select write,选择写模式
    _nop_();
    _nop_();

    DATA_PORT = dat;       //put data,放置数据
    _nop_();
    _nop_();

    LCD12864_RW = 1;       //data writing,写数据 
}
/*******************************************************************************
* 函 数 名         : LCD12864_Init
* 函数功能         : 初始化12864
* 输    入         : 无
* 输    出         : 无
* 说    明         : LCD12864的命令指令可以查看例程文件夹下的《ST7565p数据手册》
*                  * 的第51页的位置。
*******************************************************************************/

void Lcd12864_Init()
{
    uchar i;
    LCD12864_RSET = 0;
    for (i=0; i<100; i++);
    LCD12864_CS = 0;
    LCD12864_RSET = 1;

    //----------------Start Initial Sequence-------//
    //------程序初始化设置,具体命令可以看文件夹下---//

    //--软件初始化--//
    LcdSt7565_WriteCmd(0xE2);  //reset
    for (i=0; i<100; i++);     //延时一下

    //--表格第8个命令,0xA0段(左右)方向选择正常方向(0xA1为反方向)--//
    // 0xA0对应0-127,0xA1对应4-131
    LcdSt7565_WriteCmd(0xA0);  //ADC select segment direction 

    //--表格第15个命令,0xC8普通(上下)方向选择选择反向,0xC0为正常方向--// 
    LcdSt7565_WriteCmd(0xC8);  //Common direction 

    //--表格第9个命令,0xA6为设置字体为黑色,背景为白色---//
    //--0xA7为设置字体为白色,背景为黑色---//
    LcdSt7565_WriteCmd(0xA6);  //reverse display

    //--表格第10个命令,0xA4像素正常显示,0xA5像素全开--//
    LcdSt7565_WriteCmd(0xA4);  //normal display

    //--表格第11个命令,0xA3偏压为1/7,0xA2偏压为1/9--//
    LcdSt7565_WriteCmd(0xA2);  //bias set 1/9

    //--表格第19个命令,这个是个双字节的命令,0xF800选择增压为4X;--//
    //--0xF801,选择增压为5X,其实效果差不多--//  
    LcdSt7565_WriteCmd(0xF8);  //Boost ratio set
    LcdSt7565_WriteCmd(0x01);  //x4

    //--表格第18个命令,这个是个双字节命令,高字节为0X81,低字节可以--//
    //--选择从0x00到0X3F。用来设置背景光对比度。---/
    LcdSt7565_WriteCmd(0x81);  //V0 a set
    LcdSt7565_WriteCmd(0x23);

    //--表格第17个命令,选择调节电阻率--//
    LcdSt7565_WriteCmd(0x25);  //Ra/Rb set

    //--表格第16个命令,电源设置。--//
    LcdSt7565_WriteCmd(0x2F);
    for (i=0; i<100; i++);

    //--表格第2个命令,设置显示开始位置--//
    LcdSt7565_WriteCmd(0x40);  //start line

    //--表格第1个命令,开启显示--//
    LcdSt7565_WriteCmd(0xAF);  // display on
    for (i=0; i<100; i++);

}

/*******************************************************************************
* 函 数 名         : LCD12864_ClearScreen
* 函数功能         : 清屏12864
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/

void Lcd12864_ClearScreen(void)
{
    uchar i, j;

    for(i=0; i<8; i++)
    {
        //--表格第3个命令,设置Y的坐标--//
        //--Y轴有64个,一个坐标8位,也就是有8个坐标--//
        //所以一般我们使用的也就是从0xB0到0x07,就够了--//    
        LcdSt7565_WriteCmd(0xB0+i); 

        //--表格第4个命令,设置X坐标--//
        //--当你的段初始化为0xA1时,X坐标从0x10,0x04到0x18,0x04,一共128位--//
        //--当你的段初始化为0xA0时,X坐标从0x10,0x00到0x18,0x00,一共128位--//
        //--在写入数据之后X坐标的坐标是会自动加1的,我们初始化使用0xA0所以--//
        //--我们的X坐标从0x10,0x00开始---//
        LcdSt7565_WriteCmd(0x10); 
        LcdSt7565_WriteCmd(0x00);                              

        //--X轴有128位,就一共刷128次,X坐标会自动加1,所以我们不用再设置坐标--//
        for(j=0; j<128; j++)
        {
            LcdSt7565_WriteData(0x00);  //如果设置背景为白色时,清屏选择0XFF
        }
    }
}

// 在屏幕的(x, y)坐标处,显示c这个字符
// (x, y)表示像素点的坐标值,所以x范围是0-127;y的范围是0-63
// 注意,因为显示文字是以整页为单位的,为了简单起见必须页对齐显示
// 因此给的y值必须是页首地址,就是0 8 16 24 等数值
void ascii_display(unsigned char x, unsigned char y, unsigned char c)
{
    unsigned char i = 0;
    unsigned char x1, x2;
 /*
    LcdSt7565_WriteCmd(0xB0); 
    // x坐标,只要在范围内别超出就可以了
    LcdSt7565_WriteCmd(0x10); 
    LcdSt7565_WriteCmd(0x04);


    for (i=0; i<6; i++)
   {
        LcdSt7565_WriteData(0xff); 
   }
*/

   // 第一步,设置显示的x和y坐标
   // y坐标,其实就是page address
    LcdSt7565_WriteCmd(0xB0 + y / 8); 
    // x坐标,只要在范围内别超出就可以了
    x1 = (x >> 4) & 0x0f;
    x2 = x & 0x0f;
    LcdSt7565_WriteCmd(0x10 + x1); 
    LcdSt7565_WriteCmd(0x00 + x2);


   // 第二步,找到c对应的字模
   // ASCII_6_8[c-20][0]     字模的第一个字节

   // 第三步,将字模丢到显存中去
   for (i=0; i<6; i++)
   {
        LcdSt7565_WriteData(ASCII_6_8[c-0x20][i]); 
   }

}

/*
void string_display(unsigned char x, unsigned char y, unsigned char str[])
{

}
*/


void hanzi_display(unsigned char x, unsigned char y, unsigned char zimo[])
{
    unsigned char i = 0;
    unsigned char x1, x2;

    // 先显示上面一半
    LcdSt7565_WriteCmd(0xB0 + y / 8); 
    // x坐标,只要在范围内别超出就可以了
    x1 = (x >> 4) & 0x0f;
    x2 = x & 0x0f;
    LcdSt7565_WriteCmd(0x10 + x1); 
    LcdSt7565_WriteCmd(0x00 + x2);

    for (i=0; i<16; i++)
    {
        LcdSt7565_WriteData(zimo[i]); 
    }

    // 再显示下面一半
    LcdSt7565_WriteCmd(0xB0 + y / 8 + 1); 
    // x坐标,只要在范围内别超出就可以了
    x1 = (x >> 4) & 0x0f;
    x2 = x & 0x0f;
    LcdSt7565_WriteCmd(0x10 + x1); 
    LcdSt7565_WriteCmd(0x00 + x2);

    for (i=16; i<32; i++)
    {
        LcdSt7565_WriteData(zimo[i]); 
    }
}

// 在屏幕上显示一个图片,从屏幕左上角开始显示
void pic_display(unsigned char pic[])
{
    uchar i, j;
    uint k = 0;

    for(i=0; i<8; i++)
    {   
        LcdSt7565_WriteCmd(0xB0+i); 

        LcdSt7565_WriteCmd(0x10); 
        LcdSt7565_WriteCmd(0x00);                              

        //--X轴有128位,就一共刷128次,X坐标会自动加1,所以我们不用再设置坐标--//
        for(j=0; j<128; j++)
        {
            LcdSt7565_WriteData(pic[k++]);  //如果设置背景为白色时,清屏选择0XFF
        }
    }




}





zimo.h

#ifndef __ZIMO_H__
#define __ZIMO_H__


/*
unsigned char code zimo_zhu[] = 
{0x80,0xA0,0x90,0x8E,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0x88,0x88,0x80,0x80,0x00,
0x20,0x20,0x10,0x08,0x04,0x02,0x01,0xFF,0x01,0x02,0x04,0x08,0x10,0x20,0x20,0x00,};


unsigned char code zimo_you[] = 
{0x04,0x04,0x04,0x84,0xE4,0x3C,0x27,0x24,0x24,0x24,0x24,0xE4,0x04,0x04,0x04,0x00,
0x04,0x02,0x01,0x00,0xFF,0x09,0x09,0x09,0x09,0x49,0x89,0x7F,0x00,0x00,0x00,0x00,};

unsigned char code zimo_peng[] = 
{0x00,0xFE,0x22,0xFE,0x00,0xFE,0x22,0xFE,0x00,0xFC,0x16,0x25,0x84,0xFC,0x00,0x00,
0x60,0x1F,0x22,0xBF,0x40,0x3F,0x82,0xFF,0x00,0x13,0x12,0x12,0x52,0x82,0x7E,0x00,};
*/

unsigned char code zimo_zhuyoupeng[3][32] = 
{
// 朱
{0x80,0xA0,0x90,0x8E,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0x88,0x88,0x80,0x80,0x00,
0x20,0x20,0x10,0x08,0x04,0x02,0x01,0xFF,0x01,0x02,0x04,0x08,0x10,0x20,0x20,0x00,},
// 有
{0x04,0x04,0x04,0x84,0xE4,0x3C,0x27,0x24,0x24,0x24,0x24,0xE4,0x04,0x04,0x04,0x00,
0x04,0x02,0x01,0x00,0xFF,0x09,0x09,0x09,0x09,0x49,0x89,0x7F,0x00,0x00,0x00,0x00,},
// 鹏
{0x00,0xFE,0x22,0xFE,0x00,0xFE,0x22,0xFE,0x00,0xFC,0x16,0x25,0x84,0xFC,0x00,0x00,
0x60,0x1F,0x22,0xBF,0x40,0x3F,0x82,0xFF,0x00,0x13,0x12,0x12,0x52,0x82,0x7E,0x00,},
};




#endif

pic.h

#ifndef __PICTURE_H__
#define __PICTURE_H__


unsigned char code pic[] = 
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC8,0xD8,
0xF8,0x78,0x78,0x18,0x18,0x38,0x38,0x3E,0x3C,0x1C,0x38,0x70,0x70,0x60,0xC0,0x60,
0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x40,0xC0,0xC0,0xC0,0x80,0x80,0x80,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0xFC,0x78,0x30,0xA0,0xE0,0x60,
0x60,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,
0xE0,0xE0,0xC0,0xC0,0x80,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xC0,0xE2,0xFE,0x9C,0xB0,0x30,0xE0,0x60,0x60,0x60,0x20,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xF9,0x1D,
0x0F,0x07,0x07,0x00,0x00,0x00,0x00,0x60,0x60,0xA0,0xB0,0xF0,0xF0,0xD0,0x78,0x10,
0x00,0x00,0x02,0x02,0x02,0x02,0x1A,0x1B,0x1B,0x02,0x80,0x80,0x01,0x01,0x03,0x03,
0x06,0x1E,0x3C,0x70,0xE0,0xE0,0x80,0x00,0x00,0x00,0x01,0x03,0x07,0x0E,0x3F,0x7E,
0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x0F,0x05,0x05,0x3F,
0x2F,0x3F,0x37,0x35,0x33,0x31,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x03,0x03,0x0F,0x1E,0x3C,0x70,0xC0,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x7F,0xF0,0x80,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x04,
0x04,0x00,0x04,0x76,0x76,0x3E,0xBE,0x8A,0x83,0x94,0xDC,0x4C,0x08,0x00,0x00,0x00,
0xC0,0xC0,0x60,0xF0,0xB0,0xB7,0xBF,0x90,0x90,0x10,0x10,0x10,0x90,0x90,0xF0,0x70,
0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x12,0x12,0x12,
0x12,0xFA,0xFE,0x16,0x16,0x16,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0xC1,0x43,
0x63,0x66,0x3E,0x18,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x1D,0x7E,0xF6,0xC3,0x01,0x01,0x01,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0xE0,0xE1,
0xE1,0xE1,0xE1,0xE0,0xE0,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x18,0x18,0x1C,0x1C,0x1C,0x1E,0x1E,0x9A,0x8A,0x8B,0x8D,0x8D,0xCC,0xCC,0x44,
0x44,0x46,0x06,0x06,0x06,0x02,0x0E,0x3E,0xB0,0x80,0xC0,0xC0,0xC0,0x60,0x70,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xF8,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x09,0x0F,0x0E,
0x0E,0x0F,0x1E,0x0E,0x0E,0x1E,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x10,0x10,0x18,0x18,0x18,0x18,0x1C,0x1C,0x1C,0x0C,0x0C,0x8C,0x8C,0x84,0x86,0xC6,
0xC6,0x46,0x46,0x63,0x63,0x23,0x23,0x31,0x31,0x11,0x11,0x18,0x18,0x0C,0x0C,0x04,
0x04,0x06,0x06,0x02,0x03,0x03,0x01,0x81,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x1F,0x0C,0x0C,0x0C,0x04,
0x04,0x04,0x04,0x04,0x0C,0x8C,0xFC,0x70,0x30,0x00,0x00,0x3E,0xBE,0xC0,0x7F,0x1F,
0x00,0x7E,0x02,0xFF,0xFF,0x22,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x04,0x04,0x00,0x00,0x00,0x00,0x02,0x02,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0xC0,0x70,0x78,0x18,0x0E,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0xC0,0xC0,0xC0,0xC0,0xE0,0xE0,
0xF0,0xF0,0xD8,0xD8,0xC8,0xC8,0xEC,0xE4,0xE4,0x66,0x66,0x66,0x67,0x7F,0x7F,0xE0,
0xC0,0xC0,0xD8,0xFC,0xFF,0x73,0x01,0x20,0x70,0x70,0x30,0x30,0x30,0x30,0x30,0x30,
0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x10,0x10,0x30,0x30,0x30,
0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xB8,0xDE,0xC6,
0xC3,0xC3,0x61,0x20,0x20,0x30,0x10,0x18,0x18,0x0C,0x0C,0x7C,0x7C,0x5E,0xDE,0xC6,
0x06,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x06,0x06,0x06,0x00,0x00,0x00,
};










#endif

Font6_8.h

/*
 * Font6_8.h
 *
 *  Created on: 2012-2-5
 *      Author: Administrator
 */

#ifndef FONT6_8_H_
#define FONT6_8_H_

unsigned char code ASCII_6_8[][6] =
{
 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // 20
,{0x00, 0x00, 0x00, 0x5f, 0x00, 0x00} // 21 !
,{0x00, 0x00, 0x07, 0x00, 0x07, 0x00} // 22 "
,{0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14} // 23 #
,{0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12} // 24 $
,{0x00, 0x23, 0x13, 0x08, 0x64, 0x62} // 25 %
,{0x00, 0x36, 0x49, 0x55, 0x22, 0x50} // 26 &
,{0x00, 0x00, 0x05, 0x03, 0x00, 0x00} // 27 '
,{0x00, 0x00, 0x1c, 0x22, 0x41, 0x00} // 28 (
,{0x00, 0x00, 0x41, 0x22, 0x1c, 0x00} // 29 )
,{0x00, 0x14, 0x08, 0x3e, 0x08, 0x14} // 2a *
,{0x00, 0x08, 0x08, 0x3e, 0x08, 0x08} // 2b +
,{0x00, 0x00, 0x50, 0x30, 0x00, 0x00} // 2c ,
,{0x00, 0x08, 0x08, 0x08, 0x08, 0x08} // 2d -
,{0x00, 0x00, 0x60, 0x60, 0x00, 0x00} // 2e .
,{0x00, 0x20, 0x10, 0x08, 0x04, 0x02} // 2f /
,{0x00, 0x3e, 0x51, 0x49, 0x45, 0x3e} // 30 0
,{0x00, 0x00, 0x42, 0x7f, 0x40, 0x00} // 31 1
,{0x00, 0x42, 0x61, 0x51, 0x49, 0x46} // 32 2
,{0x00, 0x21, 0x41, 0x45, 0x4b, 0x31} // 33 3
,{0x00, 0x18, 0x14, 0x12, 0x7f, 0x10} // 34 4
,{0x00, 0x27, 0x45, 0x45, 0x45, 0x39} // 35 5
,{0x00, 0x3c, 0x4a, 0x49, 0x49, 0x30} // 36 6
,{0x00, 0x01, 0x71, 0x09, 0x05, 0x03} // 37 7
,{0x00, 0x36, 0x49, 0x49, 0x49, 0x36} // 38 8
,{0x00, 0x06, 0x49, 0x49, 0x29, 0x1e} // 39 9
,{0x00, 0x00, 0x36, 0x36, 0x00, 0x00} // 3a :
,{0x00, 0x00, 0x56, 0x36, 0x00, 0x00} // 3b ;
,{0x00, 0x08, 0x14, 0x22, 0x41, 0x00} // 3c <
,{0x00, 0x14, 0x14, 0x14, 0x14, 0x14} // 3d =
,{0x00, 0x00, 0x41, 0x22, 0x14, 0x08} // 3e >
,{0x00, 0x02, 0x01, 0x51, 0x09, 0x06} // 3f ?
,{0x00, 0x32, 0x49, 0x79, 0x41, 0x3e} // 40 @
,{0x00, 0x7e, 0x11, 0x11, 0x11, 0x7e} // 41 A
,{0x00, 0x7f, 0x49, 0x49, 0x49, 0x36} // 42 B
,{0x00, 0x3e, 0x41, 0x41, 0x41, 0x22} // 43 C
,{0x00, 0x7f, 0x41, 0x41, 0x22, 0x1c} // 44 D
,{0x00, 0x7f, 0x49, 0x49, 0x49, 0x41} // 45 E
,{0x00, 0x7f, 0x09, 0x09, 0x09, 0x01} // 46 F
,{0x00, 0x3e, 0x41, 0x49, 0x49, 0x7a} // 47 G
,{0x00, 0x7f, 0x08, 0x08, 0x08, 0x7f} // 48 H
,{0x00, 0x00, 0x41, 0x7f, 0x41, 0x00} // 49 I
,{0x00, 0x20, 0x40, 0x41, 0x3f, 0x01} // 4a J
,{0x00, 0x7f, 0x08, 0x14, 0x22, 0x41} // 4b K
,{0x00, 0x7f, 0x40, 0x40, 0x40, 0x40} // 4c L
,{0x00, 0x7f, 0x02, 0x0c, 0x02, 0x7f} // 4d M
,{0x00, 0x7f, 0x04, 0x08, 0x10, 0x7f} // 4e N
,{0x00, 0x3e, 0x41, 0x41, 0x41, 0x3e} // 4f O
,{0x00, 0x7f, 0x09, 0x09, 0x09, 0x06} // 50 P
,{0x00, 0x3e, 0x41, 0x51, 0x21, 0x5e} // 51 Q
,{0x00, 0x7f, 0x09, 0x19, 0x29, 0x46} // 52 R
,{0x00, 0x46, 0x49, 0x49, 0x49, 0x31} // 53 S
,{0x00, 0x01, 0x01, 0x7f, 0x01, 0x01} // 54 T
,{0x00, 0x3f, 0x40, 0x40, 0x40, 0x3f} // 55 U
,{0x00, 0x1f, 0x20, 0x40, 0x20, 0x1f} // 56 V
,{0x00, 0x3f, 0x40, 0x38, 0x40, 0x3f} // 57 W
,{0x00, 0x63, 0x14, 0x08, 0x14, 0x63} // 58 X
,{0x00, 0x07, 0x08, 0x70, 0x08, 0x07} // 59 Y
,{0x00, 0x61, 0x51, 0x49, 0x45, 0x43} // 5a Z
,{0x00, 0x00, 0x7f, 0x41, 0x41, 0x00} // 5b [
,{0x00, 0x02, 0x04, 0x08, 0x10, 0x20} // 5c \ //
,{0x00, 0x00, 0x41, 0x41, 0x7f, 0x00} // 5d ]
,{0x00, 0x04, 0x02, 0x01, 0x02, 0x04} // 5e ^
,{0x00, 0x40, 0x40, 0x40, 0x40, 0x40} // 5f _
,{0x00, 0x00, 0x01, 0x02, 0x04, 0x00} // 60 `
,{0x00, 0x20, 0x54, 0x54, 0x54, 0x78} // 61 a
,{0x00, 0x7f, 0x48, 0x44, 0x44, 0x38} // 62 b
,{0x00, 0x38, 0x44, 0x44, 0x44, 0x20} // 63 c
,{0x00, 0x38, 0x44, 0x44, 0x48, 0x7f} // 64 d
,{0x00, 0x38, 0x54, 0x54, 0x54, 0x18} // 65 e
,{0x00, 0x08, 0x7e, 0x09, 0x01, 0x02} // 66 f
,{0x00, 0x0c, 0x52, 0x52, 0x52, 0x3e} // 67 g
,{0x00, 0x7f, 0x08, 0x04, 0x04, 0x78} // 68 h
,{0x00, 0x00, 0x44, 0x7d, 0x40, 0x00} // 69 i
,{0x00, 0x20, 0x40, 0x44, 0x3d, 0x00} // 6a j
,{0x00, 0x7f, 0x10, 0x28, 0x44, 0x00} // 6b k
,{0x00, 0x00, 0x41, 0x7f, 0x40, 0x00} // 6c l
,{0x00, 0x7c, 0x04, 0x18, 0x04, 0x78} // 6d m
,{0x00, 0x7c, 0x08, 0x04, 0x04, 0x78} // 6e n
,{0x00, 0x38, 0x44, 0x44, 0x44, 0x38} // 6f o
,{0x00, 0x7c, 0x14, 0x14, 0x14, 0x08} // 70 p
,{0x00, 0x08, 0x14, 0x14, 0x18, 0x7c} // 71 q
,{0x00, 0x7c, 0x08, 0x04, 0x04, 0x08} // 72 r
,{0x00, 0x48, 0x54, 0x54, 0x54, 0x20} // 73 s
,{0x00, 0x04, 0x3f, 0x44, 0x40, 0x20} // 74 t
,{0x00, 0x3c, 0x40, 0x40, 0x20, 0x7c} // 75 u
,{0x00, 0x1c, 0x20, 0x40, 0x20, 0x1c} // 76 v
,{0x00, 0x3c, 0x40, 0x30, 0x40, 0x3c} // 77 w
,{0x00, 0x44, 0x28, 0x10, 0x28, 0x44} // 78 x
,{0x00, 0x0c, 0x50, 0x50, 0x50, 0x3c} // 79 y
,{0x00, 0x44, 0x64, 0x54, 0x4c, 0x44} // 7a z
,{0x00, 0x00, 0x08, 0x36, 0x41, 0x00} // 7b {
,{0x00, 0x00, 0x00, 0x7f, 0x00, 0x00} // 7c |
,{0x00, 0x00, 0x41, 0x36, 0x08, 0x00} // 7d }
,{0x00, 0x10, 0x08, 0x08, 0x10, 0x08} // 7e ~
,{0x00, 0x78, 0x46, 0x41, 0x46, 0x78} // 7f (delete)
};
/*
static const char sign[][6] =
{
 {0x00, 0x08, 0x08, 0x2a, 0x1c, 0x08} // 00 ->
,{0x00, 0x08, 0x1c, 0x2a, 0x08, 0x08} // 01 <-
,{0x00, 0x04, 0x02, 0x7f, 0x02, 0x04} // 02 ↑
,{0x00, 0x10, 0x20, 0x7f, 0x20, 0x10} // 03 ↓
,{0x00, 0x15, 0x16, 0x7c, 0x16, 0x15} // 04 ¥
,{0x00, 0x03, 0x3b, 0x44, 0x44, 0x44} // 05 ℃
,{0x00, 0x03, 0x03, 0x7c, 0x14, 0x14} // 06 ℉
,{0x00, 0x44, 0x28, 0x10, 0x28, 0x44} // 07 ×
,{0x00, 0x08, 0x08, 0x2a, 0x08, 0x08} // 08 ÷
,{0x00, 0x38, 0x44, 0x48, 0x30, 0x2c} // 09 α
,{0x00, 0xf8, 0x54, 0x54, 0x54, 0x28} // 0a β
,{0x00, 0x28, 0x54, 0x54, 0x44, 0x20} // 0b ε
,{0x00, 0x3e, 0x49, 0x09, 0x09, 0x06} // 0c ρ
,{0x00, 0x38, 0x44, 0x4c, 0x54, 0x24} // 0d σ
,{0x00, 0x40, 0x3f, 0x08, 0x08, 0x1f} // 0e μ
,{0x00, 0x1f, 0x08, 0x08, 0x3f, 0x40} // 0f η
,{0x00, 0x3c, 0x4a, 0x4a, 0x4a, 0x3c} // 10 θ
,{0x00, 0x58, 0x64, 0x04, 0x64, 0x58} // 11 Ω
,{0x00, 0x44, 0x3c, 0x04, 0x7c, 0x44} // 12 π
,{0x00, 0x30, 0x28, 0x10, 0x28, 0x18} // 13 ∞
,{0x00, 0x30, 0x28, 0x24, 0x28, 0x30} // 14 △
,{0x00, 0x08, 0x1c, 0x08, 0x08, 0x0e} // 15 (Enter)
};

*/

#endif /* FONT6_8_H_ */

main.c

#include "st7565p.h"
#include "zimo.h"
#include "pic.h"




void main(void)
{
    Lcd12864_Init();
    Lcd12864_ClearScreen();

//  ascii_display(40, 8, '%');

/*
    hanzi_display(0, 0, zimo_zhu);
    hanzi_display(16, 0, zimo_you);
    hanzi_display(32, 0, zimo_peng);
*/
/*
    hanzi_display(16*0, 16, zimo_zhuyoupeng[0]);
    hanzi_display(16*1, 16, zimo_zhuyoupeng[1]);
    hanzi_display(16*2, 16, zimo_zhuyoupeng[2]);
*/

    pic_display(pic);


    while (1);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LCD1602和12864显示器 的相关文章

  • LCD1602液晶显示模块学习笔记

    LCD1602液晶显示模块 一 初识LCD6021 1 实物图1 2 引脚图1 3 引脚功能说明 二 显示位置三 显示内容四 指令集五 工作时序5 1 写操作时序5 2 读操作时序 六 编程思路6 1 写数据6 2 写指令6 3 初始化6
  • 在12864液晶上显示任何图像

    一 xff0c 所需软件 xff1a Any to Icon 作用 xff1a 用来把随意彩图 xff0c 转化成黑白2色图 windows画图软件 作用 xff1a 用来编辑DIY2色图片 xff0c 并可改属性改成128X64像素 字模
  • LCD1602和LCD12864

    1602 字符型 xff08 字符型的模组 xff09 只能显示数字与字符 不可以显示汉字 12864 点阵型 xff08 图形型的模组 xff09 可根据需求任意显示字符 数字 汉字 图形 1602 为16字乘2行 12864 为128列
  • LCD1602液晶显示屏的入门级应用(一)

    嵌入式小白 xff0c 今天用到1602 xff0c 被CGRAM DDRAM CGROM搞得乱七八糟 xff0c 特此记录一下 xff0c 供大家参考 首先 xff0c 1602液晶显示屏除了电源 地以外 xff0c 有3个控制引脚 RS
  • STC12C5A60S2_LCD1602驱动

    文章目录 LCD1602 HLCD1602 cmain c LCD1602 H 代码如下 xff1a span class token macro property span class token directive hash span
  • 12864液晶显示原理(C程序)

    内容包括液晶屏常识 xff0c 12864液晶显示原理 xff0c 点阵型LCD文字与图形软硬件设计实例 紫色文字是超链接 xff0c 点击自动跳转至相关博文 持续更新 xff0c 原创不易 xff01 目录 xff1a 一 12864液晶
  • 正常12864模块,文字乱码问题及其解决方式

    正常12864模块 xff0c 文字乱码问题及其解决方式 先确定代码的正确性如是否有初始化函数 xff0c 是否按照了时序图去编写了代码 输出函数是否正确 如果以上没问题 xff0c 那应该就是下面这种情况了 文字的乱码问题确实和选的首地址
  • LCD1602和12864显示器-第1季第17部分-朱有鹏-专题视频课程

    LCD1602和12864显示器 第1季第17部分 3539人已学习 课程介绍 本课程是 朱有鹏老师单片机完全学习系列课程 第1季第17个课程 xff0c 主要讲解LCD1602和LCD12864这两种单片机常用LCD显示器的显示原理 以及
  • 基于STM32的12864液晶理解

    前言 字符型液晶显示模块是一种专门用于显示字母 数字 符号等点阵式 LCD xff0c 目前常用 161 xff0c 162 xff0c 202 和 402 行等的模块 上面指的是以字符为单位 xff0c 如161 xff0c 也就是1行1
  • LCD1602按下复位后乱码的问题

    1602按下后会有乱码的问题 xff0c 其实根本上是硬件引起的 某些最小系统板的复位电路没做好 xff0c 按下复位键后 xff0c 就会产生乱码 但是出现这种现象 xff0c 是可以用软件后期修正的 由于LCD复位后默认是8线输入 xf
  • STM32F407的LCD1602液晶显示程序

    LCD1602 H ifndef LCD1602 H define LCD1602 H include sys h include stm32f4xx h unsigned char message 20 unsigned char mes
  • Arduino--LCD1602(IIC)

    xff08 1 xff09 简介 前篇文章介绍了LCD1602的四位数据线控制方法 xff1a https blog csdn net u011816009 article details 106573622 但是该方法还是需要较多的IO口
  • STM32驱动lcd1602,并口8位 6800时序

    STM32驱动lcd1602 xff0c 并口8位 6800时序 一 LCD1602 xff08 3 3V硬件版本 xff09 简介 1 1 引脚 引脚 xff0c lcd1602采用标准接口 xff0c 6800时序8位并行数据传输 第
  • LCD1602温度显示程序设计流程

    博主福利 xff1a 100G 43 电子设计学习资源包 xff01 http mp weixin qq com mp homepage biz 61 MzU3OTczMzk5Mg 61 61 amp hid 61 7 amp sn 61
  • 基于51单片机的红外解码器

    1 简介 本红外解码器是以MCS 51系列AT89C512片机为核心 将红外传感器接收的信号解析出来 LCD1602显示屏将解码数据显示出来 2 总体原理图 硬件组成 单片机最小系统 LCD1602显示屏 IR红外接收器 系统电源 3 程序
  • 电子闹钟设计

    摘要 本设计是以89c51单片机作为控制核心的闹铃系统 本文大致可以分三个章节 第一章讲用单片机制作电子闹钟带来的优势 还有电子闹钟在未来的电子产品中的趋势以及本次设计所要实现的课题目标 第二章讲一些设计思路和硬件组成 第三讲程序代码 最后
  • Arduino基础入门篇31—LCD1602液晶显示

    LCD1602也叫1602字符型液晶 是一种专门用来显示字母 数字 符号的点阵型液晶模块 能同时显示16X2即32个字符 本篇我们来认识LCD1602 驱动它显示 Hello World 1 LCD1602介绍 对于单片机爱好者和电子爱好者
  • LCD1602芯片的使用——简单易懂

    题目 想在LCD1602上显示两行如下字样 huaianxinxi wantin 想完成上面的显示必须掌握LCD1602芯片的基本知识 将在程序下面附上LCD1602芯片的基本知识 供大家参考 我实现的比较简单 没有什么花哨的显示 大家首先
  • 2021年电赛模块化程序总结

    文章目录 1 ADC0804 2 LCD1602 3 AD9854 1 ADC0804 集成A D转换器品种繁多 选用时应综合考虑各种因素选取集成芯片 一般逐次比较型A D转换器用的比较多 ADC0804就是这类单片集成A D转换器 ADC
  • stm32cubeide驱动LCD1602显示屏

    STM32驱动LCD1602 硬件连接关系 STM32CUBEIDE设置 代码 项目设置 最后运行 硬件连接关系 LCD1602 STM32 VCC VCC GND GND VO VCC 滑动变阻 RS PB1 RW PB2 BOOT1 E

随机推荐