/*
程序描述:M1602的控制芯片为HD44780
PORT 2.0,2.1,2.2则连接到LCD显示器的控制线,
P0口程序执行时将显示河南科技学院相关信息*/
/*******************************************************/
#include <REG51.H>//头文件
#define uchar unsigned char//宏定义char
sbit RS = P2^2;//命令数据选择脚
sbit RW = P2^1;//读写操作脚
sbit E = P2^0;//使能脚 低电平有效
char code num[]="0123456789";//定义数组
void delay(unsigned int n)//延时函数
{
unsigned int j=0;
for(;n>0;n--)
{
for(j=0;j<125;j++);
}
}
void write_command(uchar command)//写指令函数
{
RW = 0;//写
RS = 0;//指令
E = 1;//拉高电平
P0 = command;//送指令
delay(20);//延时
E = 0;//拉低电平 输出有效
RW = 1;//拉高电平
}
void write_data(uchar date)//
{
RW = 0;//写
RS = 1;//数据
E = 1;//拉高电平
P0 = date;//送数据
delay(20);//延时
E = 0;//使能脚 低电平写入有效
RW = 1;//拉高电平
}
void display_string(uchar *p)//显示地址函数
{
while(*p)//循环这个p
{
write_data(*p);//送数据 为p
p++;//每次p自加一
}
}
void gotoxy(unsigned y,unsigned x)//地址位置定义
{
if(y == 1) // 如果y等于1
write_command(0x80+x);//地址就是0x80加上x
else if(y == 2) //如果y等于1
write_command(0x80+0x40+x);//地址就是0x80+0x40(第二行)加上x
}
void F1602_init(void)//初始化函数
{
write_command(0x38);//两行,每行16字符,每个字符5*7点阵
write_command(0x0C);//开光标及进入光标设置
write_command(0x06C);//设置光标和地址自动加一
}
void F1602_clear()//清屏
{
write_command(0x01);//写指令 0x01 清屏
write_command(0x02);//写指令 0x02 光标回归原点 但内容不变
}
void main (void)//主函数
{
F1602_init();//初始化1602
F1602_clear();//清屏
while(1)//大循环
{
F1602_clear();//清屏(清屏函数带有回归原点函数 所以不用设置地址)
display_string("HeNan Institute");//执行显示地址函数
gotoxy(2,0);//设定地址
display_string("of Sicence and");
delay(3000);
F1602_clear();//清屏
display_string("Techonology");
delay(3000);
F1602_clear();//清屏
display_string("www.hist.edu.cn");
gotoxy(2,0);//设定地址
display_string("13849360082");
delay(3000);
}
}