lcd1602实现字幕滚动原理_lcd1602滚动显示程序

lcd1602 分为带背光和不带背光两种,基控制器大部分为 hd44780,带背光的比不带背光的厚,是否带背光在应用中并无差别。
字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式lcd,目前常用16*1,16*2,20*2和40*2行等的模块。lcd1602即为1602字符型液晶显示器为例,介绍其用法。一般1602字符型液晶显示器实物如图所示。
lcd1602主要技术参数: 显示容量:16×2个字符
芯片工作电压:4.5—5.5v
工作电流:2.0ma(5.0v)
模块最佳工作电压:5.0v
字符尺寸:2.95×4.35(w×h)mm
引脚功能说明 lcd1602采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表所示:
第1脚:vss为地电源。
第2脚:vdd接5v正电源。
第3脚:vl为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10k的电位器调整对比度。
第4脚:rs为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
第5脚:r/w为读写信号线,高电平时进行读操作,低电平时进行写操作。当rs和r/w共同为低电平时可以写入指令或者显示地址,当rs为低电平r/w为高电平时可以读忙信号,当rs为高电平r/w为低电平时可以写入数据。
第6脚:e端为使能端,当e端由高电平跳变成低电平时,液晶模块执行命令。
第7~14脚:d0~d7为8位双向数据线。
第15脚:背光源正极。
第16脚:背光源负极。
注释:1602为2行16列,屏幕所能显示的地址为00h~0fh(第一行),40h~4fh(第二行),其他地址可以存储待显示的数据。这就给我们的花样显示提供了条件哈:-d
运行时序图
注释:这里的读操作指的是c51读1602的总线数据,rs=0,rw=1的时候,e给高电平则可以读到显示屏的状态,这个功能一般用于读忙,除了初始化之外,每次对1602进行读写操作都要读忙检测,当总线最高为stad7=1则为繁忙,禁止读写操作。
注释:这里指的是c51往1602写数据/命令,通过使能e的高脉冲写入,在e的下降沿就执行写入的命令或者显示写入的数据。
接下来简要介绍下1602的相关指令
常用命令:
0x80+0xdd:dd为地址,这条命令用于设置显示起点坐标
0x0c :开显示,无光标,光标不闪烁 。一般做带键盘输入的才加入光标,如计算器。常用的计量显示不显示光标。
0x06 :写一个数据,地址指针加1,由1602地址表可以看出,实际上就是设置成从左往右写数据而已。
0x38 : 设置显示模式,16x2显示 5x7点阵,8位数据接口。端口不够用时,这个命令也可以换用4位数据接口的。
0x01 :清屏。
电路连接图
接下来写相关子程序:
//写入命令子函数
void lcdwritecom(unsigned char com)
{
lcd_rs=0;
lcd_rw=0;
lcd_gpio=com;
delay1ms(1);
lcd_e=1;
delay1ms(1);
lcd_e=0;
}
//写入数据子函数
void lcdwritedata(unsigned char dat)
{
lcd_rs=1;
lcd_rw=0;
lcd_gpio=dat;
delay1ms(1);
lcd_e=1;
delay1ms(1);
lcd_e=0;
}
//读忙子函数
bit lcd_bz(void)
{
bit bz;
lcd_rs=0;
lcd_rw=1;
lcd_e=1;
delay1ms(10);
p0=0xff; //c51单片机读引脚要先置高电平,原因不赘述,很多资料没有这一步骤,大家格外注意下
bz=(bit)(lcd_gpio&0x80);
lcd_e=0;
return bz;
}
//延时子程序
void delay1ms(unsigned int t)
{
unsigned int i,j; //节约内存起见,建议用uchar,由于后面要做动态显示,为了满足显示效果,这里用了uint
for(i=0;i
{
for(j=0;j《300;j++);
}
}
//初始化显示屏程序
void lcdinit()
{
lcdwritecom(0x38);//显示模式2行16列
lcdwritecom(0x0c);//开显示 无光标 不闪烁
lcdwritecom(0x06);//写一个指针加1
lcdwritecom(0x01);//清屏
lcdwritecom(0x80);//设置(0,0)为起点
}
主程序:
//我们要把第一行做成一个16字符固定显示,第二行做成滚动显示25字符
//这里采用的是1602指针右移的基础命令而不是整屏右移命令
#include
#define lcd_gpio p0
void lcdwritecom(unsigned char); //写入命令子函数声明
void lcdwritedata(unsigned char);//写入数据子函数声明
void lcdinit();//显示屏初始化子函数声明
void delay1ms(unsigned int);//延时函数声明
bit lcd_bz(void);//读忙函数声明
sbit lcd_rw=p2^5;
sbit lcd_rs=p2^6;
sbit lcd_e=p2^7;
unsigned char displaydate1[]=“ i‘m cesar ”;//一共16个字符(包括空格在内)
unsigned char displaydate2[]=“ please add qq775222573 ”;//一共25个字符
void main(void)
{
unsigned char i=0,j=0,n=0;
lcdinit();
lcdwritecom(0x80);//设置坐标为第一行第一个字符
for(i=;i《16;i++)
{
lcdwritedata(displaydate1[ i]);
}
while(1)
{
if(lcd_bz())
continue;//读忙,结束本次循环
lcdwritecom(0x80+0x40);//设置第二行第一个字符起点
for(j=n;j《25+n;j++)//我们没有进行整屏右移,但是我们进行了数组右移o(∩_∩)o~
{
lcdwritedata(displaydate2[j]);
}
n++;//数组的显示起点右移,这样实现了滚动
if(n》=(25-15))//当显示移到最右边时,停顿片刻,返回起点再次循环
{
n=0;
delay1ms(2000);
}
delay1ms(600);
}
}
下载到c51调试结果:

荣耀V9评测:华为荣耀V9对战OPPOR9sPlus,外形设计、硬件和性能配置、实际用户体验三个维度对比哪家强?
北京科兰通讯技术(北京)有限公司3.15日
石墨垫比钢铁还硬?你信不?
加热型的破壁机有害处吗,详解它的优点和缺点
三脚晶振与两脚晶振的区别在哪?
lcd1602实现字幕滚动原理_lcd1602滚动显示程序
MAX2686L,MAX2693L低噪声放大器与集成的LDO
西门子PLC计时器故障分析及解决方法
任正非接受德国媒体采访:西方必须接受其他国家的崛起
海泰方圆成功当选黑龙江省商用密码协会会长单位
康佳电视维修资料[8]
浅析吉利和沃尔沃合并对汽车市场的影响
威马汽车与中国移动子公司中移物联网正式达成战略合作
对于延长储能系统的寿命,PassThru技术的优势是......
魅族Pro7最新消息:魅族Pro7双摄曝光 并有三个版本
基于FM的双音频通信方案
小米重拳出击全新发布多款新品
选购串口服务器的3个标准
基于Proteus软件和AT80C51单片机实现流水灯的仿真设计
超声波模块HC-SR04电路测量原理讲解