LCD12864显示测试.docx

上传人:b****5 文档编号:7291446 上传时间:2023-01-22 格式:DOCX 页数:13 大小:49.42KB
下载 相关 举报
LCD12864显示测试.docx_第1页
第1页 / 共13页
LCD12864显示测试.docx_第2页
第2页 / 共13页
LCD12864显示测试.docx_第3页
第3页 / 共13页
LCD12864显示测试.docx_第4页
第4页 / 共13页
LCD12864显示测试.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

LCD12864显示测试.docx

《LCD12864显示测试.docx》由会员分享,可在线阅读,更多相关《LCD12864显示测试.docx(13页珍藏版)》请在冰豆网上搜索。

LCD12864显示测试.docx

LCD12864显示测试

LCD12864显示测试--------

--------  主函数-------

//==================================

//-----LCD显示测试---------

//----------------------------------

#include

#include

#include

#include

#include

//----------------------------------

voidmain()

{

lcd12864_init();  //LCD初始化

clear_lcd(1,1);   //LCD清全屏

while

(1)

{

  //dispall_left();    //北京加油

  //dispall_right();

  displeft_char(0,0);

  dispright_char(0,1);

}

}

//=========================================

LCD12864显示驱动程序

//=========================================

//

//-------【LCD12864显示驱动程序】------------

//

//----【作者】聂金波  【DATE】07/07/08-----

//----    niejinbo999@   ---------

//=========================================

#include

#defineucharunsignedchar

#defineuintunsignedint

//--------  【定义端口】--------------

//---(根据实际电路修改相应参数)---

#defineDAT_PORTP1//数据端口

sbitcs1=P2^6;      //片选1,左半面

sbitcs2=P2^7;      //片选2,右半面

sbitrs=P2^2;       //写指令/数据选择

sbitrw=P2^1;       //读写选择

sbiten=P2^0;       //使能端

sbitbusy=P1^7;     //检测忙位

//--------  【函数声明】--------------

//-----基本函数-------

voidwritecom_l(uchar);     //左半平面写指令

voidwritecom_r(uchar);     //右半平面写指令

voidwritedat_l(uchar);     //左半平面写数据

voidwritedat_r(uchar);     //右半平面写数据

voidlcd12864_init();       //初始化函数

voidclear_lcd(uchar,uchar);//清屏函数

//-------------------整屏显示128X64大小图形

voiddispall_left();    

voiddispall_right();

voiddisp_left(uchar);    //在主函数中调用    

voiddisp_right(uchar);    //在主函数中调用

//------------------------

voiddispleft_char(uchar,uchar);//左半屏任意位置显示一汉字

voiddispright_char(uchar,uchar);//右半屏任意位置显示一汉字

//------------------------------------------

//**************************************************************

//==============================================

//----  【整屏显示128X64大小图形】-------

//----   在主函数调用下面两个函数,修改数组tab_pic,

//----   即可显示不同内容

//----   disp_right(uchar)\voiddisp_left(uchar)

//==============================================

//------  【左半屏全屏显示】  --------

voiddispall_left()

{

uchari;

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

{

writecom_l(0xb8+i);

disp_left(i);

}

}

//-------------------------------------

//------   【右半屏全屏显示】  ------

voiddispall_right()

{

uchari;

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

{

writecom_r(0xb8+i);

disp_right(8+i);

}

}

//------------------------------------------

//------------------------------------------

voiddisp_left(ucharrow1)  //显示数组row1行数据

{

  uchari,a;    

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

  {

   writecom_l(0x40+i);    //Y地址加一行

   a=tab_pic[row1][i];       //tab_pic[16][64]

   writedat_l(a);

  }

}

//--------------------------------------------

voiddisp_right(ucharrow2)//显示数组row2行数据

{  

uchari,a;    

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

  {

   writecom_r(0x40+i);  

   a=tab_pic[row2][i];     //tab_pic[16][64]

   writedat_r(a);

  }

}

//====================================================

//----【整屏显示128X64大小图形】END--------------

//====================================================

//**********************************************************************

//=====================================================

//------【在任意位置显示16X16汉字】------

//------在主函数调用下面这两个函数,修改数组tab_char1[]

//------displeft_char(uchar,uchar)/dispright_char(uchar,uchar)

//------

//=====================================================

//------左半屏任意位置显示一汉字------

//------x取0、1、2、3;y取值:

0-7;

voiddispleft_char(ucharx,uchary)  

{

uchari,j,a;

writecom_l(0xb8+x);

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

  {

   if(i>=16)

    {j=1;}  

   else

    {j=0;}  

   writecom_l(0xb8+x+j);  

   if(j==0)                        //上半个字

    {writecom_l(0x40+y*16+i);}

   else                            //下半个字

    {writecom_l(0x40+y*16+(i-16));}

   a=tab_char1[i];

   writedat_l(a);

}

}

//-----------------------------------------------

//-------右半屏任意位置显示一汉字------

voiddispright_char(ucharx,uchary)

{

uchari,j,a;

writecom_r(0xb8+x);

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

  {

   if(i>=16)

    {j=1;}  

   else

    {j=0;}

   writecom_r(0xb8+x+j);

   if(j==0)                       //上半个字

    {writecom_r(0x40+y*16+i);}

   else                           //下半个字

    {writecom_r(0x40+y*16+(i-16));}

   a=tab_char2[i];

   writedat_r(a);

}

}

//=====================================================

//******************************************************************

//=====================================================

//-------------【初始化函数】---------------

voidlcd12864_init()

{

writecom_l(0x3e);      //关左边显示

writecom_r(0x3e);      //关右边显示

writecom_l(0x3f);      //开左边显示

writecom_r(0x3f);      //开右边显示

writecom_l(0xc0);      //从第一行开始显示

writecom_r(0xc0);      //从第一行开始显示

writecom_l(0xb8);      //从第一页开始显示

writecom_r(0xb8);      //从第一页开始显示

writecom_l(0x40);      //设置初始Y地址为0

writecom_l(0x40);      //设置初始Y地址为0

}

//--------------------------------------------

//-------------【清屏函数】---------------

//【说明】0、0:

不清屏;1、0:

清左屏

//       1、0:

清右屏;1、1:

清全屏

voidclear_lcd(ucharleft,ucharright)//清屏函数

{

ucharaa,bb;

if(left)    //left为1,清左屏

  {

    for(aa=0xb8;aa<=0xbf;aa++)

     {

      writecom_l(aa);

      for(bb=0x40;bb<=0x7f;bb++)

       {

        writecom_l(bb);

        writedat_l(0x00);

       }

     }

  }

if(right)    //right为1,清右屏

  {

    for(aa=0xb8;aa<=0xbf;aa++)

     {

      writecom_r(aa);

      for(bb=0x40;bb<=0x7f;bb++)

       {

        writecom_r(bb);

        writedat_r(0x00);

       }

     }

  }

}

//--------------------------------------------

//-------------【左半平面写指令】-----------

voidwritecom_l(ucharcom)     //左半平面写指令

{

loop1:

cs1=0;         //选中左片选

cs2=1;

rs=0;           //写指令

rw=1;           //读

DAT_PORT=0xff;

en=1;           //开使能

_nop_();

_nop_();        //稍作延时

en=0;

if(busy)

  {gotoloop1;}  //如果忙,跳转loop1

else            //不忙,则继续

  {

   rw=0;         //写

   DAT_PORT=com;

   en=1;         //开使能       

   en=0;

  }

}

//-----------------------------------------------

//-------------【右半平面写指令】------------

voidwritecom_r(ucharcom)     //右半平面写指令

{

loop1:

cs1=1;        

cs2=0;          //选中右片选

rs=0;           //写指令

rw=1;           //读

DAT_PORT=0xff;

en=1;           //开使能

_nop_();

_nop_();        //稍作延时

en=0;

if(busy)

  {gotoloop1;}  //如果忙,跳转loop1

else            //不忙,则继续

  {

   rw=0;         //写

   DAT_PORT=com;

   en=1;         //开使能       

   en=0;

  }

}

//--------------------------------------------

//-----------【左半平面写数据】-----------

voidwritedat_l(uchardat)     //左半平面写数据

{

loop2:

cs1=0;         //选中左片选

cs2=1;    

rs=0;           //写数据

rw=1;           //读

DAT_PORT=0xff;

en=1;           //开使能

_nop_();

_nop_();        //稍作延时

en=0;

if(busy)

  {gotoloop2;}  //如果忙,跳转loop1

else            //不忙,则继续

  {

   rs=1;

   rw=0;         //写

   DAT_PORT=dat;

   en=1;         //开使能       

   en=0;

   cs1=1;        //送完数据关片选

  }

}

//---------------------------------------------------

//---------------【右半平面写数据】---------------

voidwritedat_r(uchardat)     //右半平面写数据

{

loop2:

cs1=1;         //选中左片选

cs2=0;

rs=0;           //写数据

rw=1;           //读

DAT_PORT=0xff;

en=1;           //开使能

_nop_();

_nop_();        //稍作延时

en=0;

if(busy)

  {gotoloop2;}  //如果忙,跳转loop1

else            //不忙,则继续

  {

   rs=1;

   rw=0;         //写

   DAT_PORT=dat;

   en=1;         //开使能       

   en=0;

  }

}

//========================================

数据表格

//======================================

//

//-----【字码表】------

//

//-----【说明】-------------------------

#defineucharunsignedchar

#defineuintunsignedint

//小(0)波

(1)电

(2)子(3)工(4)作(5)室(6)

ucharcodetab_char1[32]={0x00,0x00,0x00,0xC0,0x70,0x20,0x00,0xFF,0x00,0x10,0x20,0xC0,0x80,0x00,0x00,0x00,

0x04,0x02,0x01,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x01,0x07,0x02,0x00};/*"小",0*/

ucharcodetab_char2[32]={0x10,0x60,0x01,0xE6,0x00,0xF8,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0x18,0x08,0x00,

0x04,0x04,0xFF,0x40,0x30,0x8F,0x80,0x41,0x26,0x18,0x18,0x26,0x61,0xC0,0x40,0x00};/*"波",1*/

ucharcodetab_char3[32]={0x00,0x00,0xF8,0x48,0x48,0x48,0x48,0xFF,0x48,0x48,0x48,0x48,0xF8,0x00,0x00,0x00,

0x00,0x00,0x0F,0x04,0x04,0x04,0x04,0x3F,0x44,0x44,0x44,0x44,0x4F,0x40,0x70,0x00};/*"电",2*/

ucharcodetab_char4[32]={0x00,0x00,0x02,0x02,0x02,0x02,0x02,0xE2,0x12,0x0A,0x06,0x02,0x00,0x80,0x00,0x00,

0x01,0x01,0x01,0x01,0x01,0x41,0x81,0x7F,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00};/*"子",3*/

ucharcodetab_char5[32]={0x00,0x00,0x02,0x02,0x02,0x02,0x02,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,

0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00};/*"工",4*/

ucharcodetab_char6[32]={0x80,0x40,0x20,0xF8,0x07,0x22,0x18,0x0C,0xFB,0x48,0x48,0x48,0x68,0x48,0x08,0x00,

0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x04,0x04,0x04,0x04,0x06,0x04,0x00};/*"作",5*/

ucharcodetab_char7[32]={0x00,0x10,0x2C,0x24,0xA4,0x64,0x25,0x26,0x24,0x24,0xA4,0x24,0x34,0x2C,0x04,0x00,

0x40,0x40,0x48,0x49,0x49,0x49,0x49,0x7F,0x49,0x49,0x49,0x4B,0x48,0x40,0x40,0x00};/*"室",6*/

//北京加油

ucharcodetab_pic[16][64]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0xE0,0xF0,0xF8,0xFC,0xFC,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,

0x86,0x86,0x86,0x86,0x8C,0xFC,0xFC,0xFC,0xF8,0xF8,0x78,0x70,0x20,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0xE0,0xFF,0xFD,0xF0,0xF0,0xF0,0xF1,0xF1,0xF1,0xF1,0xF1,0x01,0x01,

0x01,0x01,0xF1,0xF1,0x01,0x01,0x01,0xF8,0xF8,0xF8,0xFC,0xFC,0xFC,0xFE,0xFE,0xFE,

0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1