您的位置:首页 > 其它

【12864】 LCD12864无字库显示汉字【仿真+程序+注意事项】

2016-04-09 17:26 405 查看
一、硬件部分

1.1 整体电路






1.2 原件列表








二、软件部分

2.1 程序架构








2.2 主程序

#include <includes.h>
void main()

{

    lcd_init();         //初始化

    lcd_clear(0);         //清屏

    lcd_set_line(0);       //设置起始行为0

    display(1,2,2*16,jiao);         //交

    display(1,2,3*16,liu);           //流

    display(2,2,4*16,shi);          //使

    display(2,2,5*16,yong);       //用

    while(1);

}

2.3 LCD12864驱动程序

#include <lcd.h>

#include <intrins.h>

#define lcd_databus P2         //LCD的8位数据总线

/****************读“忙”函数**************************/

/*******数据口的最高位DB7==1,则busy*****************/

void lcd_r_busy()

{

    P2=0x00;

    RS=0;

    RW=1;

    EN=1;

    while(P2&0x80);   

    EN=0; 

}

/****************LCD写命令函数********************/

void lcd_w_cmd(uchar value)

{

    lcd_r_busy();        //每次读写操作前都要忙判断

    RS=0;

    RW=0;

    lcd_databus=value;

    EN=1;                //下降沿锁存写入的数据/命令

    _nop_();

    _nop_();

    EN=0;

}

/****************LCD写数据************************/

void lcd_w_data(uchar value)

{

    lcd_r_busy();

    RS=1;

    RW=0;

    lcd_databus=value;

    EN=1;                //下降沿锁存写入的数据/命令

    _nop_();

    _nop_();

    EN=0;

}

/***************页设置:显示在哪一页******************/

/*************共8页,一页是8行像素点*****************/

void lcd_set_page(uchar page)

{

    page=0xb8 | page;     //页的首地址为0xb8:page或上0xb8=选择page页

    lcd_w_cmd(page);

}

/************行设置:起始在哪一行********************/

/**********每页共8行,一般从0行开始******************/

void lcd_set_line(uchar sline)

{

    sline=0xc0 | sline;   //起始行地址为0xc0:sline或上0xc0=选择行

    lcd_w_cmd(sline);

}

/*************起始列设置+像素点选择********************/ 

/***********每半片共64列,列值不得大于63***************/

void lcd_set_column(uchar column)

{

    column=0x3f & column;   //与上列的最大值63:0x3f  可得所选列值<63

    column=0x40 | column;   //得列的首地址

    lcd_w_cmd(column);

}

/*************设置显示的开关********************/ 

/**********0为关闭显示;1为 开启显示************/

void lcd_on_off(uchar set)

{

    set=0x3e | set;        //=0011 111x----0x3e为关闭显示;0x3f为开启显示

    lcd_w_cmd(set);

}

/*************选择左右半屏显示********************/ 

/********0-全屏显示;1-左;2-右********************/ 

/************cs片选端低电平有效********************/ 

void lcd_cs(uchar sel)

{

    switch(sel)

    {

        case 0:CS1=0; CS2=0; break;     //全屏显示

        case 1:CS1=0; CS2=1; break;     //左显示

        case 2:CS1=1; CS2=0; break;     //右显示

        default:break;

    }

}

/*************清屏:选择半屏********************/

/********0-清全屏;1-清左;2-清右***************/ 

void lcd_clear(uchar sel)

{

    uchar i,j;

    lcd_cs(sel);

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

    {

        lcd_set_page(i);

        lcd_set_column(0);

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

        {

            lcd_w_data(0x00);   //每列全部写0,列地址指针自动+1

        }

    }



/****************LCD的初始化********************/

void lcd_init()

{

    lcd_r_busy();

    lcd_cs(0);

    lcd_on_off(0);  //关显示

    lcd_cs(0);

    lcd_on_off(1);  //开显示

    lcd_cs(0);

    lcd_clear(0);   //清全屏

    lcd_set_line(0);    //起始行设为0

}

/****************16*16像素的汉字显示程序********************/

void display(uchar cs, uchar page, uchar column, uchar *p)

{

    uchar i;

    lcd_cs(cs);

    lcd_set_page(page);             //要在本页写上半个汉字8*16

    lcd_set_column(column);         //选择起始列

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

    {

        lcd_w_data(p[i]);           //按列输入上半个汉字的编码8*16

    }

    lcd_set_page(page+1);           //要在下一页写下半个汉字8*16

    lcd_set_column(column);         //选择起始列

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

    {

        lcd_w_data(p[i+16]);           /*按列输入下半个汉字的编码8*16  */

    }

}

2.4 字库文件

#ifndef _ZIKU_H_

#define _ZIKU_H_

//  交

const uchar code jiao[]={

0x08,0x08,0x88,0x68,0x08,0x08,0x09,0x0E,0x08,0x08,0x88,0x28,0x48,0x88,0x08,0x00,

0x80,0x81,0x40,0x40,0x21,0x22,0x14,0x08,0x14,0x22,0x41,0x40,0x80,0x81,0x80,0x00,

};

//  流

const uchar code liu[]={

0x10,0x60,0x02,0x8C,0x00,0x44,0x64,0x54,0x4D,0x46,0x44,0x54,0x64,0xC4,0x04,0x00,

0x04,0x04,0x7E,0x01,0x80,0x40,0x3E,0x00,0x00,0xFE,0
4000
x00,0x00,0x7E,0x80,0xE0,0x00,

};

//  使

const uchar code shi[]={

0x80,0x60,0xF8,0x07,0x04,0xE4,0x24,0x24,0x24,0xFF,0x24,0x24,0x24,0xE4,0x04,0x00,

0x00,0x00,0xFF,0x00,0x80,0x81,0x45,0x29,0x11,0x2F,0x41,0x41,0x81,0x81,0x80,0x00,

};

//  用

const uchar code yong[]={

0x00,0x00,0xFE,0x22,0x22,0x22,0x22,0xFE,0x22,0x22,0x22,0x22,0xFE,0x00,0x00,0x00,

0x80,0x60,0x1F,0x02,0x02,0x02,0x02,0x7F,0x02,0x02,0x42,0x82,0x7F,0x00,0x00,0x00,

};

#endif

三、仿真结果






内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息