论坛风格切换切换到宽版
  • 2991阅读
  • 11回复

请教个小问题。 [复制链接]

上一主题 下一主题
离线河马漫步
 
发帖
1498
只看楼主 倒序阅读 0楼 发表于: 2008-07-23
液晶屏12864的ks0108的驱动,是不是都没有字库呢?
离线BG4XCR
发帖
33381
只看该作者 1楼 发表于: 2008-07-23
是的。ks0108不能外挂ram。
离线河马漫步
发帖
1498
只看该作者 2楼 发表于: 2008-07-23
晕,今天刚弄了个屏,说是带字库的,打电话给厂家说是ks0108的模块?!
离线kenny21
发帖
472
只看该作者 3楼 发表于: 2008-07-23
12864的确有分带字库和不带字库两种。这两种价格不一样的。不带字库的便宜。
离线河马漫步
发帖
1498
只看该作者 4楼 发表于: 2008-07-23
在经销商那说的是带字库,但是问生产厂说是ks0108的控制芯片,为何呢?pcb后面有一大二小共三个黑色模块,大的是不是就是字库呢?
离线BG4XCR
发帖
33381
只看该作者 5楼 发表于: 2008-07-23
[quote=河马漫步]在经销商那说的是带字库,但是问生产厂说是ks0108的控制芯片,为何呢?pcb后面有一大二小共三个黑色模块,大的是不是就是字库呢?[/quote]
一个是列控制芯片,控制64列,另外两个是行控制芯片,控制126行。没有字库,你被骗了。
离线河马漫步
发帖
1498
只看该作者 6楼 发表于: 2008-07-23
打了三次长途电话,终于搞明白,原来系st7920, 技术部也不可信呀
离线bd7bq
发帖
1491
只看该作者 7楼 发表于: 2008-07-23
st7920带字库了.
离线bellstudio
发帖
2820
只看该作者 8楼 发表于: 2008-07-23
晕。。。这个厂家怎么连自家东西都搞不明白呀
离线河马漫步
发帖
1498
只看该作者 9楼 发表于: 2008-07-23
弄了个程序没点亮 那位大哥有串行的c驱动借使使。
离线bd7bq
发帖
1491
只看该作者 10楼 发表于: 2008-07-23
[quote=河马漫步]弄了个程序没点亮 那位大哥有串行的c驱动借使使。 [/quote]
//***************************************************************************
//连线表: cpu=89c52 systemclock=12mhz                         *
// reset=rc in board                                     *
//***************************************************************************
#include "at89x51.h"
#include <stdlib.h>
#include <intrins.h>
#include <stdio.h>

sbit cs =p0^0;
sbit sid=p0^1;
sbit sck=p0^2;


unsigned char code ac_table[]={
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,     //第一行汉字位置
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,     //第二行汉字位置
0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,     //第三行汉字位置
0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,     //第四行汉字位置
};


//串口发送一个字节
void sendbyte(unsigned char dbyte)
{
  unsigned char i;
  for(i=0;i<8;i++)
  {
      sck = 0;
      dbyte=dbyte<<1;     //左移一位
      sid = cy;         //移出的位给sid
      sck = 1;
      sck = 0;
  }
}

//串口接收一个字节
//仅在读取数据的时候用到
//而读出的数据是一次只能读出4bit的
unsigned char receivebyte(void)
{
  unsigned char i,temp1,temp2;
  temp1=temp2=0;
  for(i=0;i<8;i++)
  {
      temp1=temp1<<1;
      sck = 0;
      sck = 1;        
      sck = 0;
      if(sid) temp1++;
  }
  for(i=0;i<8;i++)
  {
      temp2=temp2<<1;
      sck = 0;
      sck = 1;
      sck = 0;
      if(sid) temp2++;
  }
  return ((0xf0&temp1)+(0x0f&temp2));
}

void checkbusy( void )
{
  do   sendbyte(0xfc);     //11111,rw(1),rs(0),0
  while(0x80&receivebyte());     //bf(.7)=1 busy
}

void writecommand( unsigned char cbyte )
{
  cs = 1;
  checkbusy();
  sendbyte(0xf8);         //11111,rw(0),rs(0),0
  sendbyte(0xf0&cbyte);     //高四位
  sendbyte(0xf0&cbyte<<4);//低四位(先执行<<)
  cs = 0;
}

void writedata( unsigned char dbyte )
{
  cs = 1;
  checkbusy();
  sendbyte(0xfa);         //11111,rw(0),rs(1),0
  sendbyte(0xf0&dbyte);     //高四位
  sendbyte(0xf0&dbyte<<4);//低四位(先执行<<)
  cs = 0;
}

void write_char(unsigned char ddata)
{
     writedata(ddata);
}
/*
unsigned char readdata( void )
{
  checkbusy();
  sendbyte(0xfe);         //11111,rw(1),rs(1),0
  return receivebyte();
}
*/
/*
void delayms(unsigned int ms)
{
  unsigned char us,usn;
  while(ms!=0)         //for 12m
      { usn = 2;
          while(usn!=0)
              {
                  us=0xf5;
                  while (us!=0){us--;};
                  usn--;
              }
          ms--;
      }
}
*/


void lcminit( void )
{
  writecommand(0x30);     //8bitmcu,基本指令集合
  writecommand(0x03);     //ac归0,不改变ddram内容
  writecommand(0x0c);     //显示on,游标off,游标位反白off
  writecommand(0x01);     //清屏,ac归0
  writecommand(0x06);     //写入时,游标右移动
}

//文本区清ram函数
void lcmcleartxt( void )
{
  unsigned char i;
  writecommand(0x30);     //8bitmcu,基本指令集合
  writecommand(0x80);     //ac归起始位
  for(i=0;i<64;i++)
    writedata(0x20);
}

//图形区和文本区显示在两个不同的ram区
//图形区清ram函数
void lcmclearbmp( void )
{
  unsigned char i,j;
  writecommand(0x34);     //8bit扩充指令集,即使是36h也要写两次
  writecommand(0x36);     //绘图on,基本指令集里面36h不能开绘图
  for(i=0;i<32;i++)         //12864实际为256x32
  {
      writecommand(0x80|i);     //行位置
      writecommand(0x80);     //列位置
      for(j=0;j<32;j++)         //256/8=32 byte
          writedata(0);
  }
}

void lcd_set_xy( unsigned char x, unsigned char y )
{
  writecommand(0x30);     //8bitmcu,基本指令集合
  writecommand(ac_table[8*x+y]);     //起始位置
}

void lcd_write_char_string(unsigned char row,unsigned char col,unsigned char *puts)
{
  writecommand(0x30);     //8bitmcu,基本指令集合
  writecommand(ac_table[8*row+col]);     //起始位置
  while(*puts)     //判断字符串是否显示完毕
  {
      writedata(*puts);     //一个汉字要写两次
      puts++;
  }
}
离线河马漫步
发帖
1498
只看该作者 11楼 发表于: 2008-07-24
三克油 :d   下来研究研究 再问那个复位引脚怎么接呢 :confused: