本文为博主 日月同辉,与我共生,csdn原创首发。希望看完后能对你有所帮助,不足之处请指正!一起交流学习,共同进步!
> 发布人:@日月同辉,与我共生_单片机-CSDN博客
> 欢迎你为独创博主日月同辉,与我共生点赞❤❤❤+关注👍+收藏🌹+评论☺。
系列专栏: CSDN-单片机串口通信学习系列🎁
> 我的格言是:“尽最大努力,做最好的自己!💪
要转载,请提前告知!!!
版权声明:本文为CSDN博主「日月同辉,与我共生」的原创文章,CSDN独一份。
LCD1602是一种字符型液晶显示模块,可以显示ASCII码的标准字符和其它的一些内置特殊字符,还可以有8个自定义字符。它属于点阵型液晶显示屏,总共有2行16列,也就是可以同时显示32个字符。每个字符都是由5*7的液晶矩阵显示,总共有1120颗点阵组成。它有16个引脚(带背光),通过控制这些引脚可以实现LCD1602在任何位置显示任何字符。LCD1602内置了CGRAM和CGROM字模库,里面包含了ASCII码表的所有字符和一些特殊字符的字模数据。字模数据就是在5*7的点阵里点亮哪几个点可以显示其相应的字符,再由引脚控制输出在哪个位置上,即可完成显示丰富多样的内容的任务。LCD1602(Liquid Crystal Display)液晶显示屏在各种电子设备中得到广泛应用。
一、移屏操作
LCD1602的移屏操作在生活中的应用并不直接,因为这是一种基于电子设备的操作。它主要被用于一些智能设备或电子设备的显示屏幕上,比如小型仪器、仪表、小型闹钟等。在这些设备中,通过LCD1602的移屏操作,可以实现对设备界面的操作和信息的显示。
然而,我们也可以间接地感受到LCD1602移屏操作在生活中的重要性。例如,在一些智能家居系统中,我们可以通过移动屏幕来查看和控制不同设备的状态,如灯光、空调、电视等。在这些情况下,LCD1602的移屏操作就成为了实现这些功能的关键之一。
此外,在一些需要显示动态信息的场合,比如商场的展示屏幕、广告牌等,LCD1602的移屏操作也可以被用于实现更加丰富和动态的展示效果,提高观众的观看体验。
总的来说,LCD1602的移屏操作虽然可能不直接影响到我们的日常生活,但是在一些智能设备和电子设备中,它却是实现各种功能和操作的重要手段之一。
二、先设置模式后写数据
2.1涉及命令1
//显示模式控制
#define LCD_AC_ADD_MOVE 0x07 //数据读写操作后,AC自动加1,画面平移
#define LCD_AC_ADD 0x06 //数据读写操作后,AC自动加1,画面不平移
#define LCD_AC_RED_MOVE 0x05 //数据读写操作后,AC自动减1,画面平移
#define LCD_AC_RED 0x04 //数据读写操作后,AC自动减1,画面不平移
2.2思路1
先根据命令设置命令,接着选择字符显示的位置,最后写数据。
strlen(str2):用于计算出数组str2的长度。
2.3代码1
unsigned char i;
LCDWriteCmd(LCD_AC_ADD_MOVE);
LCDSetPosition(10,0);
for(i=0;i<strlen(str2);i++)
{
LCDWritedata(str2[i]);
delay(3000);
}
三、先写数据后设置光标画面控制
3.1涉及命令2
//光标移动指令
#define SUR_LEFT 0x10 //光标左移,画面显示不移动
#define SUR_RIGHT 0x14 //光标右移,画面显示不移动
#define LCD_DIS_FRA_LEFT 0x18 //光标不移动,画面显示左移,操作后AC自增
#define LCD_DIS_FRA_RIGHT 0x1C //光标不移动,画面显示右移,操作后AC自减
3.2思路2
先选择字符显示的位置,接着写数据,最后选择光标移动的方式。
strlen(str):用于计算出数组str的长度。
3.3代码2
unsigned char i;
LCDSetPosition(1,1);
for(i=0;i<strlen(str);i++)
{
LCDWritedata(str[i]);
}
LCDWriteCmd(LCD_DIS_FRA_RIGHT);
delay(100);
四、LCD1602模块代码
4.1初始化
void LCDInit()
{
LCDWriteCmd(EDI8_DISTWO_57);//8位数据接口,2行显示,5*7点阵
LCDWriteCmd(LCD_BIS);//显示开,光标关,不闪烁
LCDWriteCmd(SUR_RIGHT);//光标右移,画面显示不移动
}
4.2读忙命令
void LCDReadBF() //读忙检测(读命令)
{
unsigned char i;
unsigned char state;
LCD1602_DB=0XFF;
LCD1602_RS=0;
LCD1602_RW=1;
do
{
LCD1602_E=1;
state=LCD1602_DB;
LCD1602_E=0;
i++;
if(i>200)
break;
}
while(state&0x80); //判断忙不忙
}
4.3写命令/数据
void LCDWriteCmd(unsigned char cmd) //写命令
{
LCDReadBF();
LCD1602_RS=0;
LCD1602_RW=0;
LCD1602_DB=cmd;
LCD1602_E=1;
LCD1602_E=0;
}
void LCDWritedata(unsigned char dat) //写数据
{
LCDReadBF();
LCD1602_RS=1;
LCD1602_RW=0;
LCD1602_DB=dat;
LCD1602_E=1;
LCD1602_E=0;
}
4.4位置函数
void LCDSetPosition(unsigned char x,unsigned char y) //位置函数 y:行 0-1
{ // x:列 0-7
if(y==0)
{
LCDWriteCmd(0x80|x);
}
else
{
LCDWriteCmd(0x80|(x+0x40));
}
}
void LCDShowStr(unsigned char x,unsigned char y,unsigned char *str)
{
LCDSetPosition(x,y);
while(*str!='\0')
{
LCDWritedata(*str++);
}
}
4.5delay.c
#include "delay.h"
/******************************************************************************************
函数名:delay
功能:延时函数
参数:unsigned char xms
返回值:无
******************************************************************************************/
void delay(unsigned char xms)
{
unsigned char i,j;
for(i=xms;i>0;i--)
for(j=124;j>0;j--);
}
下一文将着重LCD1602整数及小数编程,亲爱的读者敬请期待,下一文更精彩!!!
一日不读书,胸臆无佳想。我叫不白吃,喜欢我的,可以支持我,博主名叫@日月同辉,与我共生
@日月同辉,与我共生_单片机基础,单片机串口通信-CSDN博客@日月同辉,与我共生擅长单片机基础,单片机串口通信,等方面的知识,@日月同辉,与我共生关注stm32,c语言,51单片机,proteus,单片机领域.https://blog.csdn.net/LIN___IT?spm=1000.2115.3001.5343