#include "drive_1602.h" #include // 标准头文件 #include "stdio.h" #include "string.h" #define lcddata P1 sbit rs=P2^7; sbit en=P2^6; void delay_1ms(unsigned int xms)//延时函数,有参函数 { unsigned char i, j; while(xms--) { _nop_(); _nop_(); _nop_(); i = 11; j = 190; do { while (--j); } while (--i); } } //****液晶写入指令函数****// void Write_1602_com(unsigned char com) { // rw=0; rs=0;//数据/指令选择置为指令 lcddata=com;//送入数据 delay_1ms(1); en=1;//拉高使能端,为制造有效的下降沿做准备 delay_1ms(1); en=0;//en由高变低,产生下降沿,液晶执行命令 } //***液晶写入数据函数****// void Write_1602_date(unsigned char date) { // rw=0; rs=1;//数据/指令选择置为数据 lcddata=date;//送入数据 delay_1ms(1); en=1; //en置高电平,为制造下降沿做准备 delay_1ms(1); en=0; //en由高变低,产生下降沿,液晶执行命令 } /************ 写字符数据函数 ***************** //功能:在lcd1602指定位置上显示字符; //参数 //p: 指向待显示数据指针 //x: X坐标 //y: Y坐标 //************ *********** *****************/ void WriteLcd1602_String(char x,char y,char *p) { char i=0; if(y == 0) { Write_1602_com(0x80 + x); } else { Write_1602_com(0xC0 + x); } while(*p != 0) { Write_1602_date(*p); p++; } } //***液晶初始化函数****// void lcd1602_init() { Write_1602_com(0x38);//设置液晶工作模式,意思:16*2行显示,5*7点阵,8位数据 delay_1ms(1); Write_1602_com(0x0c);//开显示不显示光标 delay_1ms(1); Write_1602_com(0x06);//整屏不移动,光标自动右移 delay_1ms(1); Write_1602_com(0x01);//清显示 delay_1ms(1); Write_1602_com(0x80); delay_1ms(1); } void LCD1602_Write_address(unsigned char x,unsigned char y) { x&=0x0f; //列地址限制在0-15间 y&=0x01; //行地址限制在0-1间 if(y==0) //如果是第一行 Write_1602_com(x|0x80); //将列地址写入 else //如果是第二行 Write_1602_com((x+0x40)|0x80); //将列地址写入 } void LCD1602_Disp(unsigned char x,unsigned char y,unsigned char buf) { LCD1602_Write_address(x,y); //先将地址信息写入 Write_1602_date(buf); //再写入要显示的数据 }