带字库液晶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点阵的图片数据
};
硬件电路图如下:
- 相关文章
- 汉字库液晶KM12864-19B[03-17]
- 内置ST7920控制器带中文字库液晶屏KM12864-12[03-17]
- 内置ST7920控制器带中文字库液晶屏KM12232H01[03-17]
- 汉字库液晶KM12232F[03-17]
- 图形点阵液晶KM19264C[03-17]
- 显示屏:液晶KM24064B,内置控制器T6963C/SAP..[03-17]
- 最新文章
- 汉字库液晶KM12864-19B[03-17]
- 内置ST7920控制器带中文字库液晶屏KM12864-12[03-17]
- 内置ST7920控制器带中文字库液晶屏KM12232H01[03-17]
- 汉字库液晶KM12232F[03-17]
- 图形点阵液晶KM19264C[03-17]
- 显示屏:液晶KM24064B,内置控制器T6963C/SAP..[03-17]
