2022 06月23日
作者: 显示行家
  • 浏览: 9
  • 收藏:0
  • 点赞:1
液晶显示(六)-----128x64图形点阵驱动IC-KS0107&KS0108应用

    KS0107是三星公司前期推出的64路COM驱动IC,配合KS0108(64路SEG驱动IC)可以实现128x32/128x64/192x128图形点阵显示。目前市面已有AIP31107/AIP31108/UCI0107/UCI0108可替代使用。

一、基本特性

    KS0107支持64路行(COM)输出,最大可扩展到128路,须与KS0108配合使用;

    KS0108支持64路列(SEG)输出,最大可级联方式扩展到512列,须与KS0107配合使用;

    IC工作电压5.0V;(替代型号可适用2.7-5.0V)

    VLCD电压可达17.0V,需要外部升压;

    8位并口通讯(8080/6800);(KS0108与MCU接口)

    指令简单;(7条指令即可完成显示设置,仅对KS0108设置)

    封装类型:QFP100  COB(裸片)

二、KS0107/KS0108应用方式

    2.1 128x32点阵:1xKS0107+2xKS0108,1/32duty,VLCD=7.0V;

    2.2 128x64点阵:1xKS0107+2xKS0108,1/64duty,VLCD=9.0V;

    2.3 128x128点阵:2xKS0107+4xKS0108,1/128duty,VLCD>=13.0V;

    2.4 128x480点阵:2xKS0107+16xKS0108,1/128duty ,VLCD>=13.0V;

    这里要注意,KS0107必须跟KS0108配对使用,也就是说,1颗KS0107最大能搭配8个KS0108(512列);使用到2个KS0108时,必须分成2组配对使用,LCD采用分屏方式设计COM和SEG走线。应用最多的是128x32和128x64点阵,这2种应用成熟,成本低廉。后面2种现在已经用其它方案替代了,以后会介绍。

三、KS0108指令表

    KS0108的指令很少(共7条指令),应用非常方便。

指令表.png

四、KS0108数据传送格式

    KS0108支持8位并口通讯,按照指令表MCU直接发送指令或显示数据即可。

五、KS0108显存对应关系(见图)

显存对应关系.png

    KS0108内置64x64bit显存区,刚好对应显示屏的4096个显示像素点;KS0108显存的行地址是按页存储的,分8页,每页8bit,所以使用KS0108在做图形取模时要注意取模方向从上向下,低位在前。

六、应用实例

    G12864这款模组较多应用于3D打印机、点钞机、保险箱(柜)及一些仪表设备。

七、原理图参考(以128x64应用)

    原理图1.png


原理图2.png

八、实例程序

/*********************************************************************/
/*   TEST PROGRAMME KS0108&KS0107 OR EQUIVALENT FOR G12864 */
/*********************************************************************/
#include
#define  Pdata  P1
#define  TT   1
#define  ET   1

/*********************************************************************/
 //   INTERFACE DEFINE  6800
/*********************************************************************/
sbit    RS     =  P2^7;    /* RS=1 display RAM data;  RS=0 instruction data */
sbit    RW   =  P2^6;   /* RW=1; READ;  RW=0, WRITE  */
sbit    E       =  P2^5;
sbit    _RST =  P2^2;   /*RST=0,device been initialized;  -_RST=1;NORMAL*/
sbit    _CS1 =  P2^4;   /*CS1低有效*/
sbit    _CS2 =  P2^3;   /*CS2低有效*/
unsigned char code ba[8]={0x00,0x00,0x00,0x36,0x49,0x49,0x49,0x36};    //定义8字模
unsigned char code bmp[1024];   
 /****************delay****************************/
void delay(int i)
{  while(i--);}

void delay1s(void)
{  
   int i,j;
   for(i=0;i<200;i++)
   for(j=0;j<200;j++);
}
/****************busy check***********************/
unsigned char readdata(bit rs)
   {  
      unsigned char readdat;
      RS   =   rs;
      RW =   1;
      E     =   0;                   //使能信号,6800用
      Pdata  =   0xff;
      delay(TT);
      E  =   1;
     delay(TT);
     readdat=   Pdata;
     E  =   0;
     return(readdat);
   }

void checkbusy()                       //判忙,非必须
   {  
      unsigned char readdat;
      do 
      {      
         readdat=readdata(0);     //仅当第4,7位为0时才可操作 
         readdat=readdat&0x90;
   }
        while(!(readdat==0x00));   
 }

void writedata(bit rs,unsigned char data1)         //写指令/数据,RS=0指令 RS=1 数据
   { 
      RS   =  rs;
      RW =  0;
      E =  0; 
     Pdata =  data1;
     delay(TT);
     E   =   1; 
     delay(TT);
     E   =   0;
}
/**************write instruction ic1*****************/
void writelcm(bit rs,unsigned char data1,unsigned char nu)        //nu表示选择哪个KS0108
  {
     switch(nu)
{
    case 1: _CS1 = (ET); break;
    case 2: _CS2 = (ET); break;
    default:                      return;
    }
    checkbusy();
    writedata(rs,data1);

switch(nu)
{
    case 1: _CS1  =  !(ET); break;
    case 2: _CS2  =  !(ET); break;
    default:                      return;
}     
  }
/****************initiallization*******/
init()
 { 
      _RST =  0;
     delay(100);
     _RST =  1;
     _CS1 =  !(ET);                  /*CS1=0,选择KS0108
     _CS2 =  !(ET);                  /*CS2=0,   选择KS0108

     writelcm(0,0x40,1);          /* set IC display address 0,Y direction*/      
     writelcm(0,0x40,2);

     writelcm(0,0xb8,1);          /* set IC page=0 */    
     writelcm(0,0xb8,2);

     writelcm(0,0xc0,1);          /* set IC start line */ 
     writelcm(0,0xc0,2);

     writelcm(0,0x3f,1);          /* set IC display on */
     writelcm(0,0x3f,2);
  }
/***********************************************************************************/
void display1(unsigned char data1,unsigned char data2,unsigned char cs)
  {  
     unsigned char i,j;
     for (i=0;i<8;i++)
    { 
     writelcm(0,i+0xb8,cs);
     writelcm(0,0x40,cs); 
     for(j=0;j<32;j++)
     {writelcm(1,data1,cs);
      writelcm(1,data2,cs);}                               //写显示数据
    } 
  }
/*************************************************************************************/
void display8(unsigned char *p)
  {  unsigned char i,j,k;
     unsigned char *q;

     for (i=0;i<8;i++)
    { writelcm(0,i+0xb8,1);
      writelcm(0,0x40,1); 
      for(j=0;j<8;j++)                          //8页
      {q=p;
       for(k=0;k<8;k++)                     //每页写8个字
       writelcm(1,*q++,1);
      delay(1000);
       }
    }
 
    for (i=0;i<8;i++)
   { 
      writelcm(0,i+0xb8,2);
      writelcm(0,0x40,2); 
      for(j=0;j<8;j++)
      {
       q=p;
       for(k=0;k<8;k++)
       writelcm(1,*q++,2);
       delay(1000);
      }
    }  
  }
/****************************************************************************************/
void displaybmp12864(unsigned char *p)                                      //显示图片
  {  unsigned char i,j;
     for (i=0;i<8;i++)
{ writelcm(0,i+0xb8,1);
   writelcm(0,0x40,1); 
   for(j=0;j<64;j++)
   writelcm(1,*p++,1);

   writelcm(0,i+0xb8,2);
   writelcm(0,0x40,2); 
   for(j=0;j<64;j++)
   writelcm(1,*p++,2);
} 
  }
    
/*****************main***********************/
main()
{while(1)
  {
  init();
  displaybmp12864(bmp);
  delay1s();
  delay1s();
  display1(0xff,0xff,1);
  display1(0xff,0xff,2);
  delay1s();
  delay1s();
  display1(0x55,0xaa,1);                                       //行列测试
  display1(0x55,0xaa,2);
  delay1s();
  delay1s();
  display1(0xaa,0x55,1);
  display1(0xaa,0x55,2);
  display1(0xaa,0x55,3);
  delay1s();
  delay1s();
  display1(0x55,0x55,1);
  display1(0x55,0x55,2);
  delay1s();
  delay1s();
  display1(0xaa,0xaa,1);
  display1(0xaa,0xaa,2);
  delay1s();
  delay1s();
  display1(0xff,0x00,1);
  display1(0xff,0x00,2);
  delay1s();
  delay1s();
  display1(0x00,0xff,1);
  display1(0x00,0xff,2);
  delay1s();
  delay1s();
  display1(0x00,0x00,1);
  display1(0x00,0x00,2);
  delay1s();
  display8(ba); 
  delay(20000);    
   }

 }
/***************************************************************************************/
/*****************图片大小=128x64/8=1024KB****************************************/
/***************************************************************************************/
 unsigned char code bmp[1024]=
{};                                                                                   //此处受字符限制,图片数据省略

九、显示效果(显示图片与例程不同)

12864046-1.jpg


  

发表评论

评论列表


没有评论

筛选

文章分类

热门文章

投稿及奖励(必看)

2022-03-18  浏览:50405次

企业网址

2022-03-22  浏览:50365次

2021年秋招经历

2022-03-15  浏览:289次

浅谈学习单片机的前景

2022-03-15  浏览:251次

怎样才能学好单片机

2022-03-28  浏览:247次