站点首页  |   产品中心  |  视频软件  |  项目开发  |  学习单片机  |  购物指南  |  发货信息  |  进入淘宝店  |  联系我们  |

您现在位于: 云龙电子 → 源码下载

 

12864点阵液晶显示实验

-------------------------------------------------------------------------------------------------------------------------------------

[实验要求]

   利用128X64 点阵液晶显示屏显示图片,字符,汉字,实现其基本显示功能。

[实验目的]

   掌握128X64 点阵液晶显示的原理。

注意:关于液晶的操作说明请用户查看光盘元件资料下的YM12864J液晶资料。

[硬件电路]

[源代码]

//TX-1B实验板12864液晶测试程序

//测试驱动液晶的程序. 在指定的位置显示汉字

#include <reg51.h>

#define uchar unsigned char

#define uint  unsigned int

unsigned char code lcd_lattice16_16[];  //几个函数声明

unsigned char code lcd_letter_8_16[];

void display_8_16(uchar,uchar,uchar);

void displaycoslight(uchar);

unsigned char code lcd_lattice_coslight[15][320];

sbit CS1=P3^0;        //液晶左半屏选择

sbit CS2=P3^1;        //液晶右半屏选择

sbit RS=P3^5;         //写数据或命令选择

sbit E=P3^4;          //液晶使能 

bit dot_not;           //反白标志

void wrst_le(uchar date)    //写左部分状态字

{

  CS1=1;

  CS2=0;

  RS=0;

  E=1;

  P0=date;

  E=0;

}

void wrst_ri(uchar date)    //写右部分状态字

{

  CS1=0;

  CS2=1;

  RS=0;

  E=1;

  P0=date;

  E=0;

}

void wrda_le(uchar date)    //写左部分数据

{

  CS1=1;

  CS2=0;

  RS=1;

  E=1;

  P0=date;

  E=0;

}

void wrda_ri(uchar date)    //写右部分数据

{

  CS1=0;

  CS2=1;

  RS=1;

  E=1;

  P0=date;

  E=0;

}

void lcdinit()           //初始化

{

 wrst_le(0x3f);

 wrst_ri(0x3f);          /*display on*/

}

void displaycls(uchar background)     //1清白屏,0清成黑屏

{

 uchar i;

 uchar j;

 lcdinit();

 wrst_le(0xc0);

 wrst_ri(0xc0) ;      //设置显示起始行

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

  {

     wrst_le(0xb8|i); //设置页地址

     wrst_le(0x40|0); //设置列地址

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

     {

        if (background==0)

        {

             wrda_le(0xff);//清成白屏

        }

        else

        {

              wrda_le(0);//清成黑屏

        }

     }

  }

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

  {

      wrst_ri(0xb8|i);//设置页地址

      wrst_ri(0x40|0);//设置列地址

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

      {

          if (background==0)

          {

               wrda_ri(0xff);//清成白屏

           }

           else

           {

                wrda_ri(0);//清成黑屏

           }

      }

   }

}

void displayword(uchar lcdrow,uchar lcdline,uchar wordnumber)

{            //在指定的列和行显示一个汉字

 uchar i;

 uint j;

 if(lcdline<64)

 {

        lcdinit();

        wrst_le(0xc0);

        wrst_le(0xb8|lcdrow);             //设置页地址

        wrst_le(0x40|lcdline);            //设置列地址

        j=(wordnumber-1)*32;

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

        {

                 if(dot_not==1) wrda_le(~lcd_lattice16_16[i+j]);

                else wrda_le(lcd_lattice16_16[i+j]);

                if(i==15)

                {

                        lcdinit();

                        wrst_le(0xb8|(lcdrow+1)); //设置页地址

                        wrst_le(0x40|lcdline);   //设置列地址

                 }

         }

 }

 else

 {

        lcdinit();

        wrst_ri(0xc0);                  //设置显示起始行

        wrst_ri(0xb8|lcdrow);            //设置页地址

        wrst_ri(0x40|(lcdline-64));        //设置列地址

        j=(wordnumber-1)*32;

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

        {

                if(dot_not==1)wrda_ri(~lcd_lattice16_16[i+j]);

                else       wrda_ri(lcd_lattice16_16[i+j]);

                if(i==15)

                 {

                        wrst_ri(0xb8|(lcdrow+1)); //设置页地址

                        wrst_ri(0x40|(lcdline-64));//设置列地址

                  }

        }

 }

}

void display_8_16(uchar lcdrow,uchar lcdline,uchar datanumber)

{               //在指定的列和行显示一个字符

 uchar i;

 uint j;

if(lcdline<64)

 {

  wrst_ri(0xc0);

  wrst_ri(0xb8|lcdrow);//设置页地址

  wrst_ri(0x40|lcdline);//设置列地址

  j=datanumber;

  j=(16*j);

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

  {

    if(dot_not) {wrda_ri(~lcd_letter_8_16[i+j]);}

    else {wrda_ri(lcd_letter_8_16[i+j]);}

   if(i==7)

    {wrst_ri(0xb8|(lcdrow+1));//设置页地址

     wrst_ri(0x40|lcdline);//设置列地址

     }

  }

 }

 else if(lcdline<122)

 {

  wrst_le(0xc0);//设置显示起始行

  wrst_le(0xb8|lcdrow);//设置页地址

  if(lcdline<121)

   {

     wrda_le(0x40|(lcdline-64));//设置列地址

   }

  j=datanumber*16;

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

  {

     if(dot_not)

    {

    wrda_le(~lcd_letter_8_16[i+j]);

    }

    else {wrda_le(lcd_letter_8_16[i+j]);}

    if(i==7)

    {wrst_le(0xb8|(lcdrow+1));//设置页地址

     wrst_le(0x40|(lcdline-64));//设置列地址

     }

  }

 }

}

 

void displaycoslight(uchar which_bmp) //显示一幅图像函数

{

 uchar i;

 uchar j;

wrst_le(0xc0);

 wrst_ri(0xc0);/*设置显示起始行*/

 for(i=1;i<6;i++)

  {

   wrst_ri(0xb8|i);/*设置页地址*/

   wrst_ri(0x40|32);/*设置列地址*/

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

     {

      wrda_ri(lcd_lattice_coslight[which_bmp][(64*(i-1))+j]);

     }

   wrst_le(0xb8|i);/*设置页地址*/

   wrst_le(0x40|00);/*设置列地址*/

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

     {

      wrda_le(lcd_lattice_coslight[which_bmp][(64*(i-1))+j]);

     }

  }

}

 

 

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

unsigned char code lcd_lattice_coslight[15][320]={

/*--调入了一幅图像:

/*--  宽度x高度=64x40  --*/
//
编码略

};

 

///////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////

unsigned char code lcd_letter_8_16[]=

{

/*--  文字:  0  --  0  --*/

/*--  宋体12;  此字体下对应的点阵为:宽x=8x16   --*/

0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,
0x20,0x20,0x10,0x0F,0x00,//
其余字库略

};

////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////

unsigned char code lcd_lattice16_16[]={

/*--  文字1:    --*/

/*--  宋体12;  此字体下对应的点阵为:宽x=16x16   --*/

0x10,0x08,0xC7,0x12,0x26,0x8A,0x82,0xAA,0xA4,0xA3,
0xA2,0x26,0x2A,0xE2,0x02,0x00,0x00,0x00,0xFF,0x00,0x00,
0x1F,0x12,0x12,0x12,0x12,0x1F,0x40,0x80,0x7F,0x00,0x00
//
其余字库略
};

 

 

void main()

{

     displaycls (1);              //清屏

     displayword(2,16*0,1);       //简易信号发生器

     displayword(2,16*1,2);

     displayword(2,16*2,3);

     displayword(2,16*3,4);

     displayword(2,16*4,5);

     displayword(2,16*5,6);

     displayword(2,16*6,7);

 

     displayword(4,16*1,8);        //我最爱毕业设计

     displayword(4,16*2,9);

     displayword(4,16*3,10);

     displayword(4,16*4,11);

     displayword(4,16*5,12);

     displayword(4,16*6,13);

     displayword(4,16*7,14);

     while(1);

}

 

本站部分软件资料来源于网络,如有涉及版权问题,请及时联系站长删除
yunlongdz@126.com   397596891