本程序只适用于KM系列汉字液晶模块,对于其它厂家的请先核对接口定义再使用。
以下是KM12232F/KM12864-12/KM12864-19等的串行模式的C51范例。
#include //添加你自己的包含文件
#include //添加你自己的包含文件
typedef unsigned char uchar;
typedef unsigned int uint;
sbit _PS = P3^4; /* 串口模式 仅适用于12864-12/12864-19 */
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;
}
void sendDAT(uchar dat)/*写显示数据;也可以写一个单字节字符*/
{
_CS = 1;
sendBYTE(0xfa);
sendBYTE(dat & 0xf0);
sendBYTE((dat<<4)&0xf0);
_CS = 0;
}
void display(uchar x_add,uchar dat,uchar dat1)
/*写汉字到LCD屏指定位置*/
/*x_add 显示RAM地址*/
/*dat/dat1 显示汉字编码*/
{
sendCMD(x_add);
sendDAT(dat);
sendDAT(dat1);
}
void initlcm(void)/*初始化LCM*/
{
_PS = 0; /*Serial Mode*/
delay();
sendCMD(0x30);/*功能设置:一次送8位数据,基本指令集*/
sendCMD(0x04);/*点设定:显示字符/光标从左到右移位,DDRAM地址加一*/
sendCMD(0x0f);/*显示设定:开显示,显示光标,当前显示位反白闪动*/
sendCMD(0x01);/*清DDRAM*/
sendCMD(0x02);/*DDRAM地址归位*/
}
void main(void)
{
initlcm();
sendCMD(0x80);/*DDRAM*/
sendDAT(0x4c);/*L*/
sendDAT(0x43);/*C*/
sendDAT(0x44);/*D*/
sendDAT(0x20);/**/
display(0x82,0xd4,0xda);/*在*/
display(0x83,0xcf,0xdf);/*线*/
}
硬件电路图如下: