一、硬件链接
在元件库中搜索LM016即可找到LCD1602液晶屏。
按下图方式链接单片机和屏幕。
二、软件驱动代码
//屏幕相关引脚接口定义
#define D P0
sbit E=P2^6;
sbit RW=P2^5;
sbit RS=P2^7; //函数声明
void LcdWriteCom(uchar com); /* LCD1602写入8位命令子函数 */
void LcdWriteData(uchar dat) ; /* LCD1602写入8位数据子函数 */
void LcdInit(); /* LCD1602初始化子程序 */
void setAddr(unsigned char line ,unsigned char addr);
void setBuling(unsigned char YorN);
void Show_string1(uchar a[]); /* 第一行从头开始显示 字符 "" 双信号内直接加显示内容即可 */
void Show_string2(uchar a[]); /* 第二行 "" 双信号内直接加显示内容即可 */
void show_string(uchar add,uchar a[]); /* 指定位置显示字符串 注意 算好位置 0~27 40~67 地址值,"显示字符串" */
void show_number(uchar add,uint a); /* show_number(0x加 要显示的地址,变量或数字 */
void show_float(uchar add,float a); /* 显示浮点数 *//* 向1602写命令函数* 参数:com 命令* 返回值 : 无*/
void LcdWriteCom(uchar com)
{E=0;RW=0;RS=0;D=com;delay_us(5);E=1;delay_us(5);E=0;
}
/* 向1602写数据命令* 参数: dat 数据* 返回值: 无*/
void LcdWriteData(uchar dat)
{E=0;RW=0;RS=1;D=dat;delay_us(5);E=1;delay_us(5);E=0;
}/* LCD1602初始化函数*/
void LcdInit()
{LcdWriteCom(0x38);LcdWriteCom(0x0c);//0x0C光标不闪
// LcdWriteCom(0x0d);//0x0D光标闪烁LcdWriteCom(0x06);LcdWriteCom(0x01);LcdWriteCom(0x80);
}
/*设置光标位置 第一行0x00-0xF 第二行0x40-0x4f */
void setAddr(unsigned char line ,unsigned char addr)
{if(line == 1)LcdWriteCom(0x80+addr);if(line == 2)LcdWriteCom(0x80+0x40+addr);}
/*设置光标闪烁*/
void setBuling(unsigned char YorN)
{if(YorN)LcdWriteCom(0x0d);//0x0D光标闪烁else{LcdWriteCom(0x0c);//0x0C光标不闪}
}/* 指定位置显示字符串* 参数 add 地址 第一行 0~27* 第二行 40~67* a[] 字符串 "abc" */
void show_string(uchar add,uchar a[])
{uchar i;LcdWriteCom(0x80+add);for(i=0;a[i]!='\0';i++){LcdWriteData(a[i]);}
}/* 第一行显示字符串*/
void Show_string1(uchar a[])
{uchar i;LcdWriteCom(0x80);for(i=0;a[i]!='\0';i++){LcdWriteData(a[i]);}
}/* 第二行显示字符串*/
void Show_string2(uchar a[])
{uchar i;LcdWriteCom(0x80+0X40);for(i=0;a[i]!='\0';i++){LcdWriteData(a[i]);}
}/* 任意位置显示数字
*/
void show_number(uchar add,uint a)
{char s[10];sprintf(s,"%d",a); show_string(add,(uchar *)s); /* 格式转换 */
}/* 任意位置显示浮点数
*/
void show_float(uchar add,float a)
{char s[10];sprintf(s,"% .1f",a);/* 格式转换 */show_string(add,(uchar *)s);
}
三、示例程序
void main()
{float temp = 6.4;char string[17] = {0};/* LCD1602初始化函数 */LcdInit(); while(1) //程序主逻辑{//将字符串格式化,并存储在数组中,用于显示摄氏度sprintf(string,"T:%.1f C ",temp); Show_string1(string); //显示在LCD第一行}
}