LCD1602和12864显示器

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 原理图和接线引脚

LCD1602和12864显示器_第1张图片

(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)引脚定义(结合原理图来对照分析)。

LCD1602和12864显示器_第2张图片

(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)低层时序描述。
LCD1602和12864显示器_第3张图片
(2)官方示例程序。

(3)状态字的解析方法。
LCD1602和12864显示器_第4张图片

3.3 写指令时序分析

(1)低层时序描述。

(2)官方示例程序。

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

3.4 读写数据

(1)读数据。

(2)写数据。

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

LCD1602和12864显示器_第5张图片

3.5 指令说明

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

LCD1602和12864显示器_第6张图片

LCD1602和12864显示器_第7张图片

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 

// 对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)原理图(开发板底板、屏幕转接板)。

LCD1602和12864显示器_第8张图片

LCD1602和12864显示器_第9张图片

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

LCD1602和12864显示器_第10张图片

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)指令表是关键。

LCD1602和12864显示器_第11张图片

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
#include


//---重定义关键词---//
#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);
}

你可能感兴趣的:(51单片机,--------【常见外设】)