深圳市炜烨兴电子有限公司|LCD在线|智能串口液晶
注册| 登录| 通行证 生产液晶显示模块哪家强?Wayeah LCM!专业的液晶显示模块研发、生产厂家!

首页 新闻 字符型| 图形型| 定制型| 智能型| 技术应用 留言反馈 联系方式 |

当前位置液晶应用技术 >> 带字库液晶12864-12/12232F等C51驱动程序和电路

带字库液晶12864-12/12232F等C51驱动程序和电路

 

本程序只适用于KM系列汉字液晶模块(KM12232F KM12232H01,KM12864-12,KM12864-19...),对于其它厂家的请先核对接口定义再使用。

以下是KM12232F/KM12232H01/KM12864-12/KM12864-19等的串行模式的C51范例。
#include  //添加你自己的包含文件
#include  //添加你自己的包含文件
typedef unsigned char uchar;
typedef unsigned int uint;

sbit _PS = P3^4; /* 串口模式  仅适用于12864-12/12864-19   KM12232F的PSB在产品出厂时就已经确定了,无法更改*/
sbit _CS = P3^3; /*片选端 高电平有效 */
sbit _SID = P3^1; /*串行数据输入端*/
sbit _CLK = P3^0; /*同步时钟输入端*/

void delay(void)
{
      uchar i,j;
      for (i = 0;i != 0xff;i++)
          for (j = 0;j != 0xff;j++) ;
}
void sendBYTE(uchar dat)/*串行传送一字节数据*/
{
      uchar i;
      for (i=0;i<8;i++)
      {
          _CLK = 0;
          if ((dat & 0x80)!=0)
          _SID = 1;
          else 
          _SID = 0;
          _CLK = 1;
          dat = dat<<1;
      }
}
void sendCMD(uchar dat)/*写控制指令*/
{
      _CS = 1;
      sendBYTE(0xf8);       //串口功能定义:写指令
      sendBYTE(dat & 0xf0);     //写指令高四位
      sendBYTE((dat<<4)&0xf0);  //写指令低四位
      _CS = 0;
/*     P1=dat;        //并行传送
     _CS=0; //  command
     _SID=0; //  R/W
     _CLK=1; //  E=1
     delay(1);
     _CLK=0;*/
}
void sendDAT(uchar dat)/*写显示数据;也可以写一个单字节字符*/
{
      _CS = 1;
      sendBYTE(0xfa);   //串口功能定义:写显示数据
      sendBYTE(dat & 0xf0);  //写数据高四位
      sendBYTE((dat<<4)&0xf0); //写数据低四位
      _CS = 0;
/*     P1=dat;        //并行传送
     _CS=1; //  display data
     _SID=0; //  R/W
     _CLK=1; //  E=1
     delay(1);
     _CLK=0;*/
}
void display(uchar x_add,uchar dat,uchar dat1)
/*写汉字到LCD屏指定位置*/
/*x_add 显示RAM地址*/
/*dat/dat1 显示汉字编码*/
{
      sendCMD(x_add);
      sendDAT(dat);
      sendDAT(dat1);
}
void disSTR(unsigned char addr,unsigned char code *hz)    //更新于2009-07-01
/*写字串到LCD屏指定位置*/
/*不进行地址判定,超出一行8个字的需要判定地址*/
{
 sendCMD(addr);
 while(*hz!='\0')
 {
     sendDAT(*hz++);
     sendDAT(*hz++);
 }
}
void initlcm(void)/*初始化LCM*/
{
      _PS = 0; /*Serial Mode*/
      delay();
      sendCMD(0x30);/*功能设置:一次送8位数据,基本指令集*/
      sendCMD(0x04);/*点设定:显示字符/光标从左到右移位,DDRAM地址加一*/
      sendCMD(0x0f);/*显示设定:开显示,显示光标,当前显示位反白闪动*/
      sendCMD(0x01);/*清DDRAM*/
      sendCMD(0x02);/*DDRAM地址归位*/
}
/* 2011-08-16: 增加图形显示子程序*/
/*显示一张图片128*64点阵*/
void disBMP(unsigned char code *p)
{  
     unsigned char i,j;
     unsigned char XPOS,YPOS;
     sendCMD(0x36);/*设定DL、G和RE    扩展指令集*/
     delay(5);
 
     XPOS=0x80; /*水平地址*/
     YPOS=0x80; /*垂直地址*/
  
      for(i=0;i<32;i++) /*上半屏32行 对于KM12232的屏仅写上半屏,下半屏不用写  */
     {  
           sendCMD(YPOS+i);
           sendCMD(XPOS);
           for(j=0;j<16;j++) /*一行16个字节 16*8=128*/
           sendDAT(*p++);
       }
       XPOS=XPOS+8;  //下半屏地址从88H开始
       for(i=0;i<32;i++) /*下半屏32行*/
      {  
             sendCMD(YPOS+i);
             sendCMD(XPOS);
             for(j=0;j<16;j++) /*一行16个字节 16*8=128*/
             sendDAT(*p++);
       }
       sendCMD(0x30); /*关显示图形*/
}
void main(void)
{
      unsigned char code *BMP_ADDD;
      initlcm();
      sendCMD(0x80);/*DDRAM*/
      sendDAT(0x4c);/*L*/
      sendDAT(0x43);/*C*/
      sendDAT(0x44);/*D*/
      sendDAT(0x20);/**/
      display(0x82,0xd4,0xda);/*在*/
      display(0x83,0xcf,0xdf);/*线*/
      disSTR(0x88,"LCD 在线");  //显示上面一样的内容
      disSTR(0x90,"从90开始显示一串字符");//
     disBMP(BMP_ADD);
      while(1);
}
unsigned char code *BMP_ADDD={
//这里放一幅128*64点阵的图片数据
};

硬件电路图如下:

单片机与KM12232F/KM12864-12的连接图

[来源:深圳市炜烨兴电子有限公司] [作者:yesever] [日期:09-03-17] [热度:]

评论

© 2004-2015 Wayeah LCM All rights reserved.

Powered by: KingCMS 5.1.0.0812

|2009旧版 | 联系方式 | 付款方式 | 淘宝店|