12864液晶屏资料总结

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

12864液晶屏资料总结
一、概述
JM12864M-2汉字图形点阵液晶显示模块,可显示汉字及图形,内置8192个中文汉字(16*16点阵)、128个字符(8*16点阵)及64X256点阵显示RAM(GDRAM)。

外观尺寸:93×70×12.5mm 视域尺寸:73×39mm
二、引脚
三、时序图
1、写资料
2、读出资料
四、指令集
表一:最常用的指令(单独列出,包含于表二)
五、电路图
完整电路图见PCB文件,此处忽略程序存储器部分。

用P1口和液晶屏的数据口相连。

也可以用P0口,但是使用P0口要加上拉电阻,增加了电路的复杂性。

液晶屏的3口为驱动电压的输入端,此处用20K的可调电阻调整3口的电压值。

电路连接完成并通电后,旋转可调电阻的旋钮,直至屏上在没有任何程序驱动时,可以清晰显示一个个小方格为止。

六、厂家提供的程序及其说明
/****************************************
液晶型号:JM12864M-2(字库)
驱动芯片:ST7920
MCU:AT89C51
*****************************************
|P2.0---RS |P1===DB0~DB7
|P2.1---R/W
|P2.2---E
|P2.3---PSB
*****************************************/
#include <at89x51.h>
#include <intrins.h>
sbit Ldi = P2^0;
sbit Lrw = P2^1;
sbit Le = P2^2;
sbit Lpsb = P2^3;
#define Ldata P1
unsigned char code group[] =
{

};
unsigned char code Photo1[32][16] =
{

};
unsigned char code Photo2[32][16] =
{

};
/*********************************************************************************************/ /*函数名:Delay100us () */ /*函数功能:延时*/ /*参数:无*/ /*返回值:无*/ /*********************************************************************************************/ void Delay100us()
{
unsigned char temp;
for(temp=0; temp<255; temp++);
}
/*********************************************************************************************/
/*函数名:DelayMs () */ /*函数功能:延时*/ /*参数:num */ /*返回值:无*/ /*********************************************************************************************/ void DelayMs(unsigned int num)
{
while(num--)
{
unsigned char temp;
for(temp=0; temp<125; temp++);
}
}
/*********************************************************************************************/ /*函数名:Busy () */
/*函数功能:查忙*/
/*参数:无*/ /*返回值:无*/ /*********************************************************************************************/ void Busy()
{
Ldi=0;
Lrw=1;
while(1)
{
Le=1;
if(Ldata<0x80)break; //说明:见指令集中“读取状态字”,判断是否BUSY
Le=0;
}
Le=0;
}
/*********************************************************************************************/ /*函数名:Whitecommand()*/ /*函数功能:写指令*/ /*参数:com */ /*返回值:无*/ /*********************************************************************************************/ void Whitecommand(unsigned char com)
{
Busy();
Ldi = 0;
Lrw = 0;
Le = 1;
Ldata = com; //RS、R/W为0,这种状态下可设置行、列地址和页面地址
Le = 0;
}
/*********************************************************************************************/ /*函数名:Whitedata()*/ /*函数功能:写数据*/ /*参数:dat */ /*返回值:无*/ /*********************************************************************************************/ void Whitedata(unsigned char dat)
{
Busy();
Ldi = 1;
Lrw = 0;
Le = 1;
Ldata = dat; // RS为1、R/W为0,见指令集中“写显示数据”
Le = 0;
}
/*********************************************************************************************/ /*函数名:Init (void) */ /*函数功能:LCD初始化操作*/ /*参数:无*/ /*返回值:无*/ /*********************************************************************************************/ void Init()
{
Lpsb = 1;
Delay100us();
Whitecommand(0x30); //基本指令集动作
Delay100us();
Whitecommand(0x0c); //整体显示开
Delay100us();
Whitecommand(0x01); //清楚显示,清屏
Delay100us();
Whitecommand(0x06); //
}
/*********************************************************************************************/ /*函数名:Whiteword (void) */ /*函数功能:写汉字*/ /*参数:无*/
/*返回值:无*/ /*********************************************************************************************/ void Whiteword()
{
unsigned char temp = 0;
Whitecommand(0x80);
for(;temp<64;)
{
Whitedata(group[temp++]);
_nop_();
}
}
/*********************************************************************************************/ /*函数名:WhitePhoto */ /*函数功能:画图*/ /*参数:unsigned char page, unsigned char Photo[32][16] */ /*返回值:无*/ /*********************************************************************************************/ void WhitePhoto(unsigned char page,unsigned char Photo[32][16])
{
unsigned char row,line;
for(line=0; line<32; line++)
{
Whitecommand(0x80|line); //行地址设置
Whitecommand(0x80|page); //页面地址设置
for(row=0; row<16; row++)
{
Whitedata(Photo[line][row]);
}
}
}
/*********************************************************************************************/ /*函数名:main()*/ /*函数功能:主函数*/ /*参数:无*/ /*返回值:无*/ /*********************************************************************************************/ void main()
{
DelayMs(400);
Init(); //初始化
do
{
Whitecommand(0x30); //基本指令集
Delay100us();
Whitecommand(0x01); //清除显示
Delay100us();
Whiteword(); //显示字段
DelayMs(2000);
Whitecommand(0x01); //清除显示
Delay100us();
Whitecommand(0x32); //选择基本指令集中的动作,绘图显示关
Delay100us();
Whitecommand(0x36); //选择扩充指令集中的动作,绘图显示开
Delay100us();
WhitePhoto(0, Photo1); //显示图片
WhitePhoto(8, Photo2);
DelayMs(2000);
}
while(1);
}
七、自编的程序及说明
#include <reg51.h>
#include <intrins.h>
sbit Ldi = P3^0;
sbit Lrw = P3^1;
sbit Le = P3^2;
#define Ldata P1
int a;
code char STR1[]= "东南大学SEU";
code char STR2[]= "机械工程学院ME";
code char STR3[]= "机械电子系";
code char STR4[]= "张荔050154";
void Delay100us()
{
unsigned char temp;
for(temp=0; temp<255; temp++);
}
void DelayMs(unsigned int num)
{
while(num--)
{
unsigned char temp;
for(temp=0; temp<125; temp++);
}
}
void Busy()
{
Ldi=0;
Lrw=1;
while(1)
{
Le=1;
a=Ldata;
if(Ldata<0x80)break;
Le=0;
}
Le=0;
}
void Whitecommand(unsigned char com) {
Busy();
Ldi = 0;
Lrw = 0;
Le = 1;
Ldata = com;
Le = 0;
}
void Whitedata(unsigned char dat)
{
Busy();
Ldi = 1;
Lrw = 0;
Le = 1;
Ldata = dat;
Le = 0;
}
void Init()
{
Delay100us();
Whitecommand(0x30);
Delay100us();
Whitecommand(0x0c);
Delay100us();
Whitecommand(0x01);
Delay100us();
Whitecommand(0x06);
}
void Whiteword(unsigned char *ptr,unsigned char line) {
unsigned char i,l;
l=0;
switch (line)
{
case 1:Whitecommand(0x80);
break;
case 2:Whitecommand(0x90);
break;
case 3:Whitecommand(0x88);
break;
case 4:Whitecommand(0x98);
}
while ((ptr[l])!='\0')
{l++;}
for (i=0;i<l;i++)
{
Whitedata(ptr[i]);
_nop_();
}
}
void main()
{
Ldata=0;
DelayMs(400);
Init();
do
{
Whitecommand(0x30);
Delay100us();
Whitecommand(0x01);
Delay100us();
Whiteword(STR1,1);
Whiteword(STR2,2);
Whiteword(STR3,3);
Whiteword(STR4,4);
DelayMs(2000);
}
while(1);
}。

相关文档
最新文档