16X2字符型液晶显示模块.docx
- 文档编号:6867185
- 上传时间:2023-01-11
- 格式:DOCX
- 页数:10
- 大小:455.57KB
16X2字符型液晶显示模块.docx
《16X2字符型液晶显示模块.docx》由会员分享,可在线阅读,更多相关《16X2字符型液晶显示模块.docx(10页珍藏版)》请在冰豆网上搜索。
16X2字符型液晶显示模块
16X2字符型液晶显示模块
液晶显示器以其微功耗、体积小、显示内容丰富、超薄轻巧的诸多优点,在袖珍式仪表和低功耗应用系统中得到越来越广泛的应用。
这里介绍的字符型液晶模块是一种用5x7点阵图形来显示字符的液晶显示器,根据显示的容量可以分为1行16个字、2行16个字、2行20个字等等,这里以常用的2行16个字的1602液晶模块来介绍它的编程方法。
标准型16X2液晶显示字符模块,邮购价格29元一个
1602采用标准的16脚接口,其中:
第1脚:
VSS为地电源
第2脚:
VDD接5V正电源
第3脚:
V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度
第4脚:
RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
第5脚:
RW为读写信号线,高电平时进行读操作,低电平时进行写操作。
当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。
第6脚:
E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
第7~14脚:
D0~D7为8位双向数据线。
第15~16脚:
空脚
1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如表1所示,这些字符有:
阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”
1602液晶模块内部的控制器共有11条控制指令,如表2所示,
它的读写操作、屏幕和光标的操作都是通过指令编程来实现的。
(说明:
1为高电平、0为低电平)
指令1:
清显示,指令码01H,光标复位到地址00H位置
指令2:
光标复位,光标返回到地址00H
指令3:
光标和显示模式设置I/D:
光标移动方向,高电平右移,低电平左移S:
屏幕上所有文字是否左移或者右移。
高电平表示有效,低电平则无效
指令4:
显示开关控制。
D:
控制整体显示的开与关,高电平表示开显示,低电平表示关显示C:
控制光标的开与关,高电平表示有光标,低电平表示无光标B:
控制光标是否闪烁,高电平闪烁,低电平不闪烁
指令5:
光标或显示移位S/C:
高电平时移动显示的文字,低电平时移动光标
指令6:
功能设置命令DL:
高电平时为4位总线,低电平时为8位总线N:
低电平时为单行显示,高电平时双行显示F:
低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符(有些模块是DL:
高电平时为8位总线,低电平时为4位总线)
指令7:
字符发生器RAM地址设置
指令8:
DDRAM地址设置
指令9:
读忙信号和光标地址BF:
为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。
指令10:
写数据
指令11:
读数据
DM-162液晶显示模块可以和单片机AT89C51直接接口,电路如图1所示。
液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。
要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,表3是DM-162的内部显示地址.
比如第二行第一个字符的地址是40H,那么是否直接写入40H就可以将光标定位在第二行第一个字符的位置呢?
这样不行,因为写入显示地址时要求最高位D7恒定为高电平1所以实际写入的数据应该是01000000B(40H)+10000000B(80H)=11000000B(C0H)
以下是在液晶模块的第二行第一个字符的位置显示字母“A”的程序:
ORG0000H
RSEQUP3.7;确定具体硬件的连接方式
RWEQUP3.6;确定具体硬件的连接方式
EEQUP3.5;确定具体硬件的连接方式
MOVP1,#00000001B;清屏并光标复位
ACALLENABLE;调用写入命令子程序
MOVP1,#00111000B;设置显示模式:
8位2行5x7点阵
ACALLENABLE;调用写入命令子程序
MOVP1,#00001111B;显示器开、光标开、光标允许闪烁
ACALLENABLE;调用写入命令子程序
MOVP1,#00000110B;文字不动,光标自动右移
ACALLENABLE;调用写入命令子程序
MOVP1,#0C0H;写入显示起始地址(第二行第一个位置)
ACALLENABLE;调用写入命令子程序
MOVP1,#01000001B;字母A的代码
SETBRS;RS=1
CLRRW;RW=0;准备写入数据
CLRE;E=0;执行显示命令
ACALLDELAY;判断液晶模块是否忙?
SETBE;E=1;显示完成,程序停车
AJMP$
ENABLE:
CLRRS;写入控制命令的子程序
CLRRW
CLRE
ACALLDELAY
SETBE
RET
DELAY:
MOVP1,#0FFH;判断液晶显示器是否忙的子程序
CLRRS
SETBRW
CLRE
NOP
SETBE
JBP1.7,DELAY;如果P1.7为高电平表示忙就循环等待
RET
END
程序在开始时对液晶模块功能进行了初始化设置,约定了显示格式。
注意显示字符时光标是自动右移的,无需人工干预,每次输入指令都先调用判断液晶模块是否忙的子程序DELAY,然后输入显示位置的地址0C0H,最后输入要显示的字符A的代码41H。
1602字符液晶驱动函数库
关键词:
1602字符液晶驱动函数库
/**************************************************************************
THE1602CHARLCDLIB
COPYRIGHT(c) 2005BYJJJ.
-- ALLRIGHTSRESERVED --
FileName:
LCD.h
Author:
JiangJianJun
Created:
2005/4/3
Modified:
NO
Revision:
1.0
***************************************************************************/
#ifndefLCD_CHAR_1602_2005_4_9
#defineLCD_CHAR_1602_2005_4_9
#include
#include
//PortDefinitions**********************************************************
sbitLcdRs =P3^0;
sbitLcdRw =P3^1;
sbitLcdEn =P3^2;
sfr DBPort =0xA0; //P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口
sbitLcdLight =DBPort^4;
voidDelay1ms(unsignedintcount)
{
unsignedinti,j;
for(i=0;i for(j=0;j<120;j++); } //内部等待函数************************************************************************** unsignedcharLCD_Wait(void) { LcdRs=0; LcdRw=1; _nop_(); LcdEn=1; _nop_(); while(DBPort&0x80); //或do{ACC=DBPort;}while(ACC_7==1); LcdEn=0; Delay1ms (1); returnACC; } //向LCD写入命令或数据************************************************************ #defineLCD_COMMAND 0x00 //Command #defineLCD_DATA 0x01 //Data #defineLCD_CLEAR_SCREEN 0x01 //清屏 #defineLCD_HOMING 0x02 //光标返回原点 voidLCD_Write(unsignedcharstyle,unsignedcharinput) { LcdRs=style; LcdRw=0; _nop_(); LcdEn=1; _nop_(); DBPort=input; _nop_(); LcdEn=0; _nop_(); LCD_Wait(); } //设置显示模式************************************************************ #defineLCD_SHOW 0x04 //显示开 #defineLCD_HIDE 0x00 //显示关 #defineLCD_CURSOR 0x02 //显示光标 #defineLCD_NO_CURSOR 0x00 //无光标 #defineLCD_FLASH 0x01 //光标闪动 #defineLCD_NO_FLASH 0x00 //光标不闪动 voidLCD_SetDisplay(unsignedcharDisplayMode) { LCD_Write(LCD_COMMAND,0x08|DisplayMode); } //设置输入模式************************************************************ #defineLCD_AC_UP 0x02 #defineLCD_AC_DOWN 0x00 //default #defineLCD_MOVE 0x01 //画面可平移 #defineLCD_NO_MOVE 0x00 //default voidLCD_SetInput(unsignedcharInputMode) { LCD_Write(LCD_COMMAND,0x04|InputMode); } //移动光标或屏幕************************************************************ #defineLCD_CURSOR 0x02 #defineLCD_SCREEN 0x08 #defineLCD_LEFT 0x00 #defineLCD_RIGHT 0x04 voidLCD_Move(unsignedcharobject,unsignedchardirection) { if(object==LCD_CURSOR) LCD_Write(LCD_COMMAND,0x10|direction); if(object==LCD_SCREEN) LCD_Write(LCD_COMMAND,0x18|direction); } //初始化LCD************************************************************ voidLCD_Initial() { LcdEn=0; Delay1ms(80); LCD_Write(LCD_COMMAND,0x38); //8位数据端口,2行显示,5*7点阵 Delay1ms(10); LCD_Write(LCD_COMMAND,0x38); Delay1ms(10); LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR); //开启显示,无光标 LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); //清屏 LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); //AC递增,画面不动 } //************************************************************************ voidGotoXY(unsignedcharx,unsignedchary) { if(y==0) LCD_Write(LCD_COMMAND,0x80|x); if(y==1) LCD_Write(LCD_COMMAND,0x80|(x-0x40)); } voidPrint(unsignedchar*str) { while(*str! ='\0') { LCD_Write(LCD_DATA,*str); str++; } } voidLCD_LoadChar(unsignedcharuser[8],unsignedcharplace) { unsignedchari; LCD_Write(LCD_COMMAND,0x40|(place*8)); for(i=0;i<8;i++) LCD_Write(LCD_DATA,user[i]); } //************************************************************************ #endif
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 16 X2 字符 液晶显示 模块