LCD显示程序
sbit E =P0^2; //LCD12864 E端
sbit PSB =P0^3;
/*********************************************
延时子程序
*********************************************/
void Delay_1ms(uint x)
//#include<reg52.h>
#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端
Write_Cmd(0x06); //游标右移
Delay_1ms(20);
Write_Cmd(0x80); //设定显示的起始地址
Delay_1ms(20);
Write_Cmd(0x01); //清除显示
}
/**********************************************************
程序说明:LCD12864显示头文件
程序调试员:莫剑辉
调试时间:2010-6-7
**********************************************************/
本例程为通过用AT89C52芯片操作LCD12864显示的序,使用的晶振为12M。
/**********************************************************
程序说明:LCD12864显示主程序
程序调试员:莫剑辉
调试时间:2010-6-7
**********************************************************/
while(i)//写入显示数据的大小
{
Write_Data(*(z++));//写入显示数据到LCD12864
i--;
}
}
/*********************************************
LCD12864液晶初始化子程序
*********************************************/
Delay_1ms(20);//延时20乘以120时间
}
/*********************************************
LCD12864液晶命令写入子程序
*********************************************/
void Write_Cmd(uchar cmd)
{
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
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时间
void Write_Data(uchar k)
{
Busy();//测忙
E =1;//0为关闭使能端,1为打开使能端
RS=1;//1为指令,0为数据
RW=0;//1为读,0为写
DATA=k;//输入数据K到DATA
Delay_1ms(20);//延时20乘以120时间
E =0;//0为关闭使能端,1为打开使能端
{
Busy();//测忙
E=1;//0为关闭使能端,1为打开使能端
RS=0;//1为指令,0为数据
RW=0;//1为读,0为写
DATA=cmd;//输入命令cmd到DATA
Delay_1ms(20);//延时20乘以120时间
E=0;//0为关闭使能端,1为打开使能端
Delay_1ms(20);//延时20乘以120时间
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);
E = 0;//0为关闭使能端,1为打开使能端
}
while(busy&0x80); //判断BUSY位是否工作:1为内部在工作,0为正常状态
}
/*********************************************
LCD12864液晶数据写入子程序
*********************************************/
}
/*********************************************
LCD12864液晶数据显示子程序
*********************************************/
void Disp(uchar y,uchar x,uchar i,uchar *z)
#include<reg52.h>
#include"12864.c"
void main()
{
Ini_Lcd();//液晶初始化子程序
Disp(1,0,6,"莫剑辉"); //显示数据到LCD12864子程序
while(1);
}
这里我们通过调用下面的头文件就可以了,这样的做法方便我们以后要用到LCD12864的程序的调用。
{
uint j,i;
for(j=0;j<x;j++)
{
for(i=0;i<120;i++); //延时X乘以120
}
}
/*********************************************
LCD12864液晶测忙子程序(读状态)
*********************************************/