LCD12864显示程序(精校版本)

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

本例程为通过用A T89C52芯片操作LCD12864显示的程序,使用的晶振为12M。

/**********************************************************

程序说明:LCD12864显示主程序

程序调试员:莫剑辉

调试时间:2010-6-7

**********************************************************/

#include

#include"12864.c"

void main()

{

Ini_Lcd(); //液晶初始化子程序

Disp(1,0,6,"莫剑辉"); //显示数据到LCD12864子程序

while(1);

}

这里我们通过调用下面的头文件就可以了,这样的做法方便我们以后要用到LCD12864的程序的调用。

/**********************************************************

程序说明:LCD12864显示头文件

程序调试员:莫剑辉

调试时间:2010-6-7

**********************************************************/

//#include

#define uchar unsigned char

#define uint unsigned int

#define DATA P2 //数据输出端0~7

sbit RS=P0^0; //LCD12864 RS端

sbit RW=P0^1; //LCD12864 RW端

sbit E =P0^2; //LCD12864 E 端

sbit PSB =P0^3;

/*********************************************

延时子程序

*********************************************/

void Delay_1ms(uint x)

{

uint j,i;

for(j=0;j

{

for(i=0;i<120;i++); //延时X乘以120

}

}

/*********************************************

LCD12864液晶测忙子程序(读状态)

*********************************************/

void Busy()

{

uchar busy;

do

{

E = 0; //0为关闭使能端,1为打开使能端

RS = 0; //1为指令,0为数据

RW = 1; //1为读,0为写

Delay_1ms(20); //延时20乘以120时间

E = 1; //0为关闭使能端,1为打开使能端

busy=P1; //读取P2状态

Delay_1ms(20); //延时20乘以120时间

E = 0; //0为关闭使能端,1为打开使能端

}

while(busy&0x80); //判断BUSY位是否工作:1为内部在工作,0为正常状态}

/*********************************************

LCD12864液晶数据写入子程序

*********************************************/

void Write_Data(uchar k)

{

Busy(); //测忙

E =1; //0为关闭使能端,1为打开使能端

RS=1; //1为指令,0为数据

RW=0; //1为读,0为写

DA TA=k; //输入数据K到DA TA

Delay_1ms(20); //延时20乘以120时间

E =0; //0为关闭使能端,1为打开使能端

Delay_1ms(20); //延时20乘以120时间

}

/*********************************************

LCD12864液晶命令写入子程序

*********************************************/

void Write_Cmd(uchar cmd)

{

Busy(); //测忙

E=1; //0为关闭使能端,1为打开使能端

RS=0; //1为指令,0为数据

RW=0; //1为读,0为写

DA TA=cmd; //输入命令cmd到DATA

Delay_1ms(20); //延时20乘以120时间

E=0; //0为关闭使能端,1为打开使能端

Delay_1ms(20); //延时20乘以120时间

}

/*********************************************

LCD12864液晶数据显示子程序

*********************************************/

void Disp(uchar y,uchar x,uchar i,uchar *z)

{

uchar Address;

if(y==1){Address=0x80+x;} //Y判断第几行,X判断第几列,0x80为液晶行初始地址

if(y==2){Address=0x90+x;}

if(y==3){Address=0x88+x;}

if(y==4){Address=0x98+x;}

Write_Cmd(Address); //写入地址命令到LCD12864

while(i) //写入显示数据的大小

{

Write_Data(*(z++)); //写入显示数据到LCD12864

i--;

}

}

/*********************************************

LCD12864液晶初始化子程序

*********************************************/

void Ini_Lcd(void)

{

PSB=1;

Delay_1ms(20);

Write_Cmd(0x30); //基本指令集

Delay_1ms(20);

Write_Cmd(0x02); // 地址归位

Delay_1ms(20);

Write_Cmd(0x0c); //整体显示打开,游标关闭

Delay_1ms(20);

Write_Cmd(0x06); //游标右移

Delay_1ms(20);

Write_Cmd(0x80); //设定显示的起始地址

Delay_1ms(20);

Write_Cmd(0x01); //清除显示

}

相关文档
最新文档