#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar tab1[]="welcome to"; //第一行显示数组
uchar tab2[]="lab 217 ^_^"; //第二行显示数组
sbit RS=P3^0; //P3.0接RS:数据和指令选择控制端
sbit RW=P3^1; //P3.1接RW:读写控制线
sbit E=P3^2; //P3.2接E:数据读写操作控制位
void write_com(uchar com); //写地址函数声明
void write_data(uchar date); //写数据函数声明
void init();
void delay_ms(uint z) //延时函数
{
uint x,y;
for(x=z;x>0;x--) //延时z毫秒
for(y=110;y>0;y--); //循环空语句100-120次,延时1毫秒
}
void write_com(uchar com) //写入地址
{
RS=0; //RS=0:命令/状态
P1=com; //com:地址
delay_ms(5); //产生一个脉冲,将数据写入液晶屏
E=1; //写入1602
delay_ms(5);
E=0;
}
void write_data(uchar date) //写入数据
{
RS=1; //RS=1:数据
P1=date; //data:数据
delay_ms(5); //产生一个脉冲,将数据写入液晶屏
E=1;
delay_ms(5);
E=0;
}
void init() //初始化液晶屏
{
RS=0;
RW=0; //只写
write_com(0x38); //设置数据位数8位,2行显示,5*7点阵字符
write_com(0x0e); //开显示,不显示光标,光标位字符不闪烁
write_com(0x06); //光标增量方式右移,显示字符不移动
write_com(0x01); //清屏
write_com(0x80+2); //第一行的首地址,从第一行的第四个位置开始显示
}
void main()
{
uchar num;
init(); //调用初始化液晶屏函数
while(1)
{
for(num=0;num<11;num++) //显示名字
{
write_data(tab1[num]); //调用写数据函数
delay_ms(100);
}
write_com(0x80+0x40+2); //第二行地址写入,从第二行的第三个位置开始显示
for(num=0;num<11;num++) //显示学号
{
write_data(tab2[num]); //调用写数据函数
delay_ms(100);
}
while(1);
}
}