#include
#define PORT P2
sbit RS = P3^5;//1602的数据/指令挑选控制线
sbit RW = P3^6;//1602的读写控制线
sbit EN = P3^7;//1602的使能控制线
unsigned char code table[] = “LCD1602 check ok”; //要显现的内容1放入数组tablel
unsigned char code table1[] = “study up”; //要显现的内容2放入数组table1
void DelayXms(unsigned int time)//延时程序,大约1ms
{
unsigned char i;
while(time–)
{
for(i = 0;i < 112;i++)//11.0592MHz晶振
{};
}
}
void LCDWriteCom(unsigned char com) //1602写指令函数
{
RS = 0; //挑选指令寄存器
RW = 0; //挑选写
PORT = com; //把指令字送入PORT
DelayXms(5); //延时一小会儿,让1602预备接纳数据
EN = 1; //使能线电平改变,指令送入1602的8位数据口
EN = 0;
}
void LCDWriteDat(unsigned char dat) //1602写数据函数
{
RS = 1; //挑选数据寄存器
RW = 0; //挑选写
PORT = dat; //把要显现的数据送入PORT
DelayXms(5); //延时一小会儿,让1602预备接纳数据
EN = 1; //使能线电平改变,数据送入1602的8位数据口
EN = 0;
}
void LCDInit() //1602初始化函数
{
LCDWriteCom(0x38); //8位数据,双列,5*7字形
LCDWriteCom(0x0c); //敞开显现屏,关光标,光标不闪耀
LCDWriteCom(0x06); //显现地址递加,即写一个数据后,显现方位右移一位
LCDWriteCom(0x01); //清屏
}
void main() //主函数
{
unsigned char n,m = 0;
LCDInit(); //液晶初始化
LCDWriteCom(0x80); //显现地址设为80H(即00H,)上排第一位
for(m = 0;m < 16;m++) //将table[]中的数据顺次写入1602显现
{
LCDWriteDat(table[m]);
DelayXms(200);
}
LCDWriteCom(0x80+0x44); //从头设定显现地址为0xc4,即下排第5位
for(n = 0;n<8;n++) //将table1[]中的数据顺次写入1602显现
{
LCDWriteDat(table1[n]);
DelayXms(200);
}
while(1); //动态停机
}