#include "reg51.h"
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
#define Port P1
sbit RS="P2"^0;
sbit RW="P2"^1;
sbit E="P2"^2;
uchar Read();
uchar code str0[]={"Come on China!"}; /*定义数组*/
uchar code str1[]={"I Love You!"};
/*延时子函数*/
void delay(uint k)
{
uint i,j;
for(i=0;i {
for(j=0;j<60;j++)
{;}
}
}
/*写状态函数*/
void WriteCommand(uchar WLCD,uchar Busy)
{
if(Busy) Read(); //若Busy为1,则调用Read子函数进行忙检测
Port="WLCD"; //将变量WLCD中的指令传送至P1口
RS="0"; //选中指令寄存器
RW="0"; //写模式
E="1"; //置E端为高电平,写使能
_nop_(); //延时一段时间
_nop_();
_nop_();
E="0"; //置E端为低电平
delay(200);
}
/*写数据子函数*/
void WriteData(uchar WDLCD)
{
Read();
Port="WDLCD";
RS="1";
RW="0";
E="1"; //置E端为高电平,读使能
_nop_();
_nop_();
_nop_();
E="0";
delay(200);
}
/*读状态子函数*/
uchar Read(void)
{
Port="0xff";
RS="0";
RW="1";
E="0";_nop_();
E="1";
while(Port&0x80); /*检测忙信号,当P1口内容与80H相与后不为0时,程序原地踏步*/
return(Port);
}
void RESET()
{
WriteCommand(0x30,0);
WriteCommand(0x38,1); //设置工作方式,8位数据传送,2行显示,检测忙信号
WriteCommand(0x0c,1); //设置状态模式,显示屏打开,光标不显示、不闪烁、检测忙信号
WriteCommand(0x01,1); //清屏,检测忙信号
WriteCommand(0x06,1); //输入方式设置,显示光标右移设置,检测忙信号
}
/*显示指定坐标的一个字符子函数*/
void DisplayOnechar(uchar x,uchar y,uchar Data)
{
y&=0x01; //y的变化范围0~1
x&=0x0f; //x的变化范围0~15
if(y) x|=0x40; //若y为1,地址码+0x40
x|=0x80; //指令码为地址码+0x80
WriteCommand(x,0); //将指令x写入LCD,忽略忙信号检测
WriteData(Data); //再将数据Data写入LCD
}
//显示指定坐标的一串字符子函数
void DisplayChar(uchar x,uchar y,uchar code *Data)
{
uchar Length="0";
y&=0x1;
x&=0xf;
while((x<0xf)&(Data[Length]!='\0')) //x<15时进入while语句循环
{
DisplayOnechar(x,y,Data[Length]); //显示单个字符
Length++; //数据指针递增
x++; //x轴坐标递增
//delay(500);
}
}
void main()
{
delay(10);
RESET();
DisplayChar(0,0,str0);
DisplayChar(0,1,str1);
while(1);
}
tengjingshu_112148725 2009-3-18 22:56