单片机的动手实践篇--51单片机玩转12864

12864液晶的驱动和1602的类似,只不过是多了几个扩展的功能,不如画图功能:

这里讲一下:不要简单的认为12864是y轴64,x为128,那是点阵的分布,不是读写的分布,如正图表示,y轴的32行,从0到31,x轴的16 从0到15,0到7为上半个屏幕,8到15在下半个屏幕,所以绘图的时候,有两个部分要进行书写

单片机的动手实践篇--51单片机玩转12864

在12864上载入任意一幅图:

示例代码:

#include<reg52.h>

#define uint unsigned int

#define uchar unsigned char



sbit lcdrs = P2^4;//数据还是指令的选择端口

sbit lcdwr = P2^5;//读写操作端口

sbit lcden = P2^6;//使能端延时端口

sbit  PSB = P2^1;//串行数据还是并行数据的选择段





//图片的编码,这幅图片的编码是一个哆啦a梦  

unsigned char code pic1[] = { /* 0X10,0X01,0X00,0X80,0X00,0X40, */

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,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,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,

0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,

0X00,0X00,0X00,0X00,0X3F,0XC0,0X0F,0XC0,0X0F,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,

0X00,0X00,0X00,0X07,0XFF,0X00,0X07,0X80,0X03,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,

0X00,0X00,0X00,0X3F,0XFE,0XF7,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X00,0X00,

0X00,0X00,0X00,0XFF,0XFE,0X00,0X01,0X80,0X01,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,

0X00,0X00,0X03,0XFF,0XFE,0X00,0X03,0XFF,0X01,0X0F,0XFE,0X00,0X00,0X00,0X00,0X00,

0X00,0X00,0X0F,0XFF,0X83,0X00,0X07,0XFB,0X86,0X00,0XFF,0X80,0X00,0X00,0X00,0X00,

0X00,0X00,0X1F,0XFE,0X00,0XE0,0X0F,0XFF,0XFC,0X00,0X1F,0XC0,0X00,0X00,0X00,0X00,

0X00,0X00,0X7F,0XF8,0X00,0X3F,0XE3,0XFF,0X00,0X00,0X07,0XF0,0X00,0X00,0X00,0X00,

0X00,0X00,0XFF,0XE0,0X00,0X00,0X00,0X38,0X00,0X00,0X01,0XF8,0X00,0X00,0X00,0X00,

0X00,0X01,0XFF,0XC7,0X7F,0XF0,0X00,0X0C,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,

0X00,0X01,0XFF,0X00,0X00,0X00,0X00,0X04,0X00,0X00,0X00,0X7E,0X00,0X00,0X00,0X00,

0X00,0X03,0XFF,0X00,0X00,0X00,0X00,0X06,0X00,0X03,0XC0,0X3E,0X00,0X00,0X00,0X00,

0X00,0X03,0XFE,0X0F,0XFF,0XF0,0X00,0X02,0X00,0X0C,0X3F,0X9E,0X00,0X00,0X00,0X00,

0X00,0X07,0XFC,0X00,0X00,0X00,0X00,0X02,0X00,0X00,0X00,0X1F,0X00,0X00,0X00,0X00,

0X00,0X07,0XFC,0X00,0X1F,0XC0,0X00,0X02,0X00,0X00,0X00,0X0F,0X00,0X00,0X00,0X00,

0X00,0X07,0XF8,0X03,0XE0,0X00,0X00,0X02,0X00,0X07,0XFE,0X0F,0X00,0X00,0X00,0X00,

0X00,0X07,0XF8,0X1E,0X00,0X00,0X00,0X02,0X00,0X00,0X01,0XC6,0X00,0X00,0X00,0X00,

0X00,0X07,0XF8,0X30,0X00,0X00,0X00,0X02,0X00,0X00,0X00,0X06,0X00,0X00,0X00,0X00,

0X00,0X03,0XFC,0X00,0X00,0X00,0X00,0X02,0X00,0X03,0XFE,0X0E,0X00,0X00,0X00,0X00,

0X00,0X01,0XFC,0X00,0X00,0X00,0X00,0X7F,0XC0,0X00,0X03,0X0C,0X00,0X00,0X00,0X00,

0X00,0X01,0XFE,0X00,0X00,0X00,0X3F,0X80,0X3E,0X00,0X01,0X18,0X00,0X00,0X00,0X00,

0X00,0X00,0XFE,0X00,0X00,0X0F,0XC0,0X00,0X01,0XF0,0X06,0X30,0X00,0X00,0X00,0X00,

0X00,0X00,0X7F,0X00,0X01,0XE0,0X00,0X00,0X00,0X1F,0XF8,0X60,0X00,0X00,0X00,0X00,

0X00,0X00,0X3F,0X80,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0XC0,0X00,0X00,0X00,0X00,

0X00,0X00,0X0F,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0X80,0X00,0X00,0X00,0X00,

0X00,0X00,0X03,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X06,0X00,0X00,0X00,0X00,0X00,

0X00,0X00,0X00,0XFC,0X00,0X00,0X00,0X00,0X00,0X01,0XFC,0X00,0X00,0X00,0X00,0X00,

0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,

0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,

0X00,0X00,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,

0X00,0X00,0X01,0XFF,0XF8,0X00,0X03,0XFF,0XE0,0X1F,0XFF,0XC0,0X00,0X00,0X00,0X00,

0X00,0X00,0X07,0XFF,0XE0,0X00,0X03,0XFF,0XC0,0X07,0XFF,0XE0,0X00,0X00,0X00,0X00,

0X00,0X00,0X0F,0XFF,0XC0,0X00,0X00,0XFF,0X80,0X03,0XFF,0XF0,0X00,0X00,0X00,0X00,

0X00,0X00,0X1F,0XFF,0X80,0X00,0X00,0X00,0X00,0X01,0XFF,0XF8,0X00,0X00,0X00,0X00,

0X00,0X00,0X3F,0XFF,0X80,0X00,0X00,0X00,0X00,0X01,0XFF,0XF8,0X00,0X00,0X00,0X00,

0X00,0X00,0X7F,0XFF,0X80,0X00,0X00,0X00,0X00,0X01,0XFF,0XFC,0X00,0X00,0X00,0X00,

0X00,0X03,0X80,0X3F,0X80,0X0F,0XFF,0XFF,0XFC,0X01,0XFE,0X3E,0X00,0X00,0X00,0X00,

0X00,0X06,0X00,0X0F,0XC0,0X70,0X00,0X00,0X03,0XC1,0XF8,0X07,0X00,0X00,0X00,0X00,

0X00,0X06,0X00,0X07,0XE0,0X30,0X00,0X00,0X00,0X43,0XF8,0X03,0X00,0X00,0X00,0X00,

0X00,0X07,0X00,0X07,0XF0,0X38,0X00,0X00,0X00,0XCF,0XFC,0X03,0X00,0X00,0X00,0X00,

0X00,0X03,0XC0,0X1F,0XFC,0X0F,0X00,0X00,0X03,0X1F,0XFC,0X0E,0X00,0X00,0X00,0X00,

0X00,0X00,0X7F,0XFF,0XFF,0X81,0XF0,0X00,0XFC,0XFF,0XFE,0XF8,0X00,0X00,0X00,0X00,

0X00,0X00,0X00,0X1F,0XFF,0XFE,0X1F,0XFF,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,

0X00,0X00,0X00,0X1F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,

0X00,0X00,0X00,0X1F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,

0X00,0X00,0X00,0X1F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,

0X00,0X00,0X00,0X0F,0XFF,0X07,0XF0,0XFF,0XF0,0X7F,0X8F,0X80,0X00,0X00,0X00,0X00,

0X00,0X00,0X00,0X7F,0XFF,0X83,0XE0,0XFF,0XF8,0X0F,0XBF,0XF8,0X00,0X00,0X00,0X00,

0X00,0X00,0X01,0XDF,0XF8,0X7D,0XFF,0X7F,0X0F,0XFF,0XC7,0XFE,0X00,0X00,0X00,0X00,

0X00,0X00,0X07,0XFF,0XF7,0X00,0X41,0XEF,0XF8,0X02,0X0F,0X78,0X00,0X00,0X00,0X00,

0X00,0X00,0X0F,0XFF,0XCC,0X00,0X40,0X7F,0XE0,0X02,0X01,0XBF,0XE0,0X00,0X00,0X00,

0X00,0X00,0X0F,0XFE,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,

0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X00,0X00,0X00,

0X00,0X00,0X00,0X00,0X07,0XFF,0XFF,0XFF,0XFF,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,0XFF,0X7E,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,

0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,

};



void delay1ms(uint x)//延时函数

{

    uint i,j;

    for(i= x;i>0;i--)

        for(j=110;j>0;j--);

}



void write_cmd(uchar cmd)//写指令函数

{

    lcdrs = 0;

    lcdwr = 0;

    P0 = cmd;

    lcden = 1;

    delay1ms(5);//

    lcden = 0;

}



void write_date(uchar date)//写数据函数

{

    lcdrs = 1;

    lcdwr = 0;

    P0 = date;

    lcden = 1;

    delay1ms(5);//

    lcden = 0;

}



void init_12864()

{

    PSB = 1;//确定是并行传送

    write_cmd(0x30);//基本指令操作

    write_cmd(0x0c);//开显示,关掉光标

    write_cmd(0x01);//清楚lcd的内容

}



void lcd_putpic(unsigned char code *img)//载入图画的函数

{

    uint i,j;

    //显示上半个屏幕的内容

    for(i = 0;i<32;i++)

    {

        write_cmd(0x80+i);//垂直的地址

        write_cmd(0x80);//水平的地址

        for(j=0;j<16;j++)

        {

            write_date(*img);

            img++;

        }

    }

    //显示下半个屏幕的内容    

    for(i = 0;i<32;i++)

    {

        write_cmd(0x80+i);//垂直的内容

        write_cmd(0x88);//水平的地址第三行的内容

        for(j=0;j<16;j++)

        {

            write_date(*img);

            img++;

        }

    }

}



void setpic()//图像显示模式设置函数

{

    write_cmd(0x36);//选择8bit的数据流,图像显示模式

    delay1ms(5);

}



main()

{

    init_12864();//初始化液晶

    setpic();//初始化液晶图片显示

    lcd_putpic(pic1);//载入一幅图片

    delay1ms(5);

    while(1);

}
View Code

以后载入图片只需要将图片用取模的软件,注意图片的大小必须是128x64的尺寸,否则会出现乱码,这是个比较容易犯的错误,希望大家注意

 

你可能感兴趣的:(单片机)