#include "reg51.h" //包含头文件//接入lcd12864后会显示左移右移上移下移
#define uchar unsigned char
#define uint unsigned int
sbit RS=P2^5; //命令/数据选择
sbit RW=P2^4; //读写口
sbit E=P2^3; //锁存控制
sbit RES = P2^0; //复位
sbit PSB = P2^2; //串并选择
//**************************************************************************************************
//延时函数
//**************************************************************************************************
delay(uint time) //int型数据为16位,所以最大值为65535
{
uint i,j; //定义变量i,j,用于循环语句
for(i=0;i<time;i++) //for循环,循环50*time次
for(j=0;j<100;j++); //for循环,循环50次
}
//**************************************************************************************************
//查忙
//**************************************************************************************************
checkbusy()
{
RS=0; //命令/数据选择,为0时选择命令
RW=1; //读/写选择,为1时选择读
E=1; //使能
while((P0&0x80)==0x80); //查忙标志位,等待标志位为0,即表示写入完毕
E=0; //关闭读写
}
//**************************************************************************************************
//向LCD写一命令
//**************************************************************************************************
wcode(uchar cmdcode)
{
checkbusy(); //查忙
RS=0; //命令/数据选择,为0时选择命令
RW=0; //读/写选择,为0时选择写
E=1; //使能
P0=cmdcode; //送入命令
delay(10); //等待写入
E=0; //关闭读写
}
//**************************************************************************************************
//向LCD写一数据
//**************************************************************************************************
wdata(uchar dispdata)
{
checkbusy(); //查忙
RS=1; //命令/数据选择,为1时选择数据
RW=0; //读/写选择,为0时选择写
E=1; //使能
P0=dispdata; //送入数据
delay(10); //等待写入
E=0; //关闭读写
}
//**************************************************************************************************
//LCD 初始化
//**************************************************************************************************
InitLCD()
{
PSB=1; //设置为8BIT并口工作模式
RES=0; //复位
delay(10); //延时
RES=1; //关复位
wcode(0x30); //选择基本指令集
wcode(0x0c); //开显示(无游标、不反白)
wcode(0x01); //清除显示,并且设定地址指针为00H
wcode(0x06); //指定在资料的读取及写入时,设定游标的移动方向及指定显示的移位
}
//**************************************************************************************************
//任意位置显示字符串
//**************************************************************************************************
void dis(uchar x,uchar y,uchar code *s)
{ //x为横坐标,y位纵坐标,*s表示指针,为数据的首地址
switch(y) //选择纵坐标
{
case 0: wcode(0x80+x);break; //第1行
case 1: wcode(0x90+x);break; //第2行
case 2: wcode(0x88+x);break; //第3行
case 3: wcode(0x98+x);break; //第4行
default:break;
}
while(*s>0) //写入数据,直到数据为空
{
wdata(*s); //写数据
delay(10); //等待写入
s++; //下一字符
}
}
//**************************************************************************************************
//主函数
//**************************************************************************************************
main()
{
InitLCD(); //初始化液晶
//进入死循环,防止看门狗复位
while(1)
{
dis(0,0,"单片机竞赛不打鸟"); //显示第1行
delay(5000);
wcode(0x01);
dis(0x01,0,"单片机竞赛不打");
delay(5000);
wcode(0x01);
dis(0x02,0,"单片机竞赛不");
delay(5000);
wcode(0x01);
dis(0x03,0,"单片机竞赛");
delay(5000);
wcode(0x01);
dis(0x04,0,"单片机竞");
delay(5000);
wcode(0x01);
dis(0x05,0,"单片机");
delay(5000);
wcode(0x01);
dis(0x06,0,"单片");
delay(5000);
wcode(0x01);
dis(0x07,0,"单");
delay(5000);
wcode(0x01);
dis(0,0,"单片机竞赛不打鸟"); //显示第1行
delay(5000);
break;
}
while(1)
{
dis(0x07,0,"单"); //显示第1行
delay(5000);
wcode(0x01);
dis(0x06,0,"单片"); //显示第1行
delay(5000);
wcode(0x01);
dis(0x05,0,"单片机"); //显示第1行
delay(5000);
wcode(0x01);
dis(0x04,0,"单片机竞"); //显示第1行
delay(5000);
wcode(0x01);
dis(0x03,0,"单片机竞赛"); //显示第1行
delay(5000);
wcode(0x01);
dis(0x02,0,"单片机竞赛不"); //显示第1行
delay(5000);
wcode(0x01);
dis(0x01,0,"单片机竞赛不打"); //显示第1行
delay(5000);
wcode(0x01);
dis(0,0,"单片机竞赛不打鸟"); //显示第1行
delay(5000);
wcode(0x01);
dis(0,0,"单片机竞赛不打鸟"); //显示第1行
delay(5000);
break;
}
while(1)
{
dis(0,0,"单片机竞赛不打鸟"); //显示第1行
delay(5000);
wcode(0x01);
dis(0,1,"单片机竞赛不打鸟"); //显示第1行
delay(5000);
wcode(0x01);
dis(0,2,"单片机竞赛不打鸟"); //显示第1行
delay(5000);
wcode(0x01);
dis(0,3,"单片机竞赛不打鸟"); //显示第1行
delay(5000);
wcode(0x01);
dis(0,2,"单片机竞赛不打鸟"); //显示第1行
delay(5000);
wcode(0x01);
dis(0,1,"单片机竞赛不打鸟"); //显示第1行
delay(5000);
wcode(0x01);
} //保持显示一段时间
// wcode(0x01); //清屏
}