16x2字符型带背光液晶显示模块20页word文档.docx
- 文档编号:30118697
- 上传时间:2023-08-05
- 格式:DOCX
- 页数:12
- 大小:20.28KB
16x2字符型带背光液晶显示模块20页word文档.docx
《16x2字符型带背光液晶显示模块20页word文档.docx》由会员分享,可在线阅读,更多相关《16x2字符型带背光液晶显示模块20页word文档.docx(12页珍藏版)》请在冰豆网上搜索。
16x2字符型带背光液晶显示模块20页word文档
16x2字符型带背光液晶显示模块
液晶显示器以其微功耗、体积小、显示内容丰富、超薄轻巧的诸多优点,在袖珍式仪表和低功耗应用系统中得到越来越广泛的应用。
这里介绍的字符型液晶模块是一种用5x7点阵图形来显示字符的液晶显示器,根据显示的容量可以分为1行16个字、2行16个字、2行20个字等等,这里以常用的2行16个字的1602液晶模块来介绍它的编程方法。
标准型16X2带背光液晶显示字符模块,邮购价格26元一个
外形尺寸:
PCB外形:
36.4*80毫米液晶屏金属黑框:
34.2*72毫米
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)----直接输入80H+**H即可
以下是在液晶模块的第二行第一个字符的位置显示字母“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。
TO:
无聊的键盘,1602LCD的C程序
//******************************************************************************
// *
// FileName :
实验板1602lcd.c ICCAVRV6.31A编译 *
// Function :
1602字符型LCD的显示(8位数据方式) *
// Date :
2006-12-11 *
// Version :
1.0 *
// *
// Author :
开关电源 hongtusy@163 *
// Company :
电子信息技术咨询网 http:
//itsn *
// *
//***************************描述与记事*****************************************
//实验板的AVR程序,驱动1602LCM(可显示2行,每行16个字符)模块显示实验练习。
//说明:
RS高显示/低指令输入 RW高读/低写 EN高读数据/下降沿写数据
//具体电路可参照使用指南里的说明。
每个字符为5×7或5×8的点阵,共16×2个字符。
//使用器件:
ATMEGA8535,可更换。
使用默认的片内RC振荡器,1MHz。
//接线定义:
PD4,5,6为RS,R/W,EA。
数据位为PC口。
//使用的开关:
SW2-1,2,3.SW1-1,2,3,4,5,6,7,8.SW2-5为背光开关。
SW3-8为系统复位端。
//记事:
//******************************************************************************
#include
#include"macros.h" //可以使用NOP()以及SEI()等指令.
typedefunsignedchar uchar; //宏
typedefunsignedint uint;
/************************************************
函数名:
DelaymS()
功 能:
毫秒级延时函数
输入参数:
延迟时间/系统晶体
输出参数:
做相应的延迟处理
描 述:
/
***********************************************/
voidDelaymS(uinti) //延时函数,参数i为延时时间
{
uintj,k; //双重延时
for(j=0;j
{
for(k=0;k<=50;k++);
}
}
/************************************************
函数名:
init_mcu()
功 能:
单片机初始化函数
输入参数:
/
输出参数:
/
描 述:
相关口方向的设置等
***********************************************/
voidinit_mcu(void)
{
DDRC=0xff; //PC口为推挽1输出,数据位
DDRD=0xff; //PD口为推挽1输出,控制信号
}
/********************************************************
子程序名:
write_data()
功 能:
写入一字节数据
输入参数:
/
输出参数:
/
描 述:
/
********************************************************/
voidwtite_data(ucharh)
{
PORTC=h; //先将数据送出
PORTD|=(1< PORTD&=~(1< PORTD&=~(1< DelaymS (1); PORTD|=(1< } /******************************************************** 子程序名: write_code() 功 能: 写入一字节指令/地址 输入参数: / 输出参数: / 描 述: / ********************************************************/ voidwtite_code(ucharh) { PORTC=h; //先将地址送出 PORTD&=~(1< PORTD&=~(1< PORTD&=~(1< DelaymS (1); PORTD|=(1< } /******************************************************** 子程序名: init_lcd() 功 能: 初始化LCD 输入参数: / 输出参数: / 描 述: / ********************************************************/ voidinit_lcd(void) { wtite_code(0x01); //清除屏幕 wtite_code(0x38); //功能设定,8位数据口/2行/5*7的点阵 wtite_code(0b00001111); //显示幕ON,光标ON,闪烁ON wtite_code(0x06); //模式,加1,显示幕ON。 wtite_code(0b00000011); //光标回到原点 } /******************************************************** 子程序名: display_lcd() 功 能: 刷新显示一屏数据,独立的LCD显示程序,用户将显存内容更新后,只要调用此程序即可更新显示。 输入参数: / 输出参数: / 描 述: 在写一个字符前,先设定显示的位置地址,然后再写数据。 系统可以自动地址加一。 ********************************************************/ voiddisplay_lcd(uchar*p) { uchari; wtite_code(0x80); //第一行起始地址,0b10000000B=0x80. for(i=0;i<16;i++) { wtite_data(p[i]); } wtite_code(0xc0); //第二行起始地址,0b11000000B=0xc0. for(i=16;i<32;i++) { wtite_data(p[i]); } } //*****************主程序********************************** voidmain(void) { uchari; ucharbuf[]=" welcome! itsn! "; DelaymS(100); init_mcu(); //单片机初始化 init_lcd(); //lcd初始化 display_lcd(buf); //刷新显示一屏 buf[0]='i'; //可以任意修改显示的内容 display_lcd(buf); //刷新显示 wtite_code(0xC0); //光标停留在0C2H位置。 第1行光标位置有0x80,0x81...0x8f,第2行光标位置有0xc0,0xc1...0xcf. while (1); } 1602液晶显示模块C语言程序(8位) [2006-11-2514: 16: 00|By: frankle] SMC1602A(16*2)模拟口线接线方式 连接线图: --------------------------------------------------- |LCM-----51 |LCM-----51 |LCM------51 | --------------------------------------------------| |DB0-----P1.0|DB4-----P1.4|RW-------P2.0 | |DB1-----P1.1|DB5-----P1.5|RS-------P2.1 | |DB2-----P1.2|DB6-----P1.6|E--------P2.2 | |DB3-----P1.3|DB7-----P1.7|VLCD接1K电阻到GND| --------------------------------------------------- [注: AT89S51使用12M晶振] =============================================================*/ #defineLCM_RW P2_0//定义引脚 #defineLCM_RS P2_1 #defineLCM_E P2_2 #defineLCM_Data P1 #defineBusy 0x80//用于检测LCM状态字中的Busy标识 #include voidWriteDataLCM(unsignedcharWDLCM); voidWriteCommandLCM(unsignedcharWCLCM,BuysC); unsignedcharReadDataLCM(void); unsignedcharReadStatusLCM(void); voidLCMInit(void); voidDisplayOneChar(unsignedcharX,unsignedcharY,unsignedcharDData); voidDisplayListChar(unsignedcharX,unsignedcharY,unsignedcharcode*DData); voidDelay5Ms(void); voidDelay400Ms(void); unsignedcharcodeuctech[]={"uctech"}; unsignedcharcodenet[]={"uctech.icpcn"}; voidmain(void) { Delay400Ms();//启动等待,等LCM讲入工作状态 LCMInit();//LCM初始化 Delay5Ms();//延时片刻(可不要) DisplayListChar(0,5,uctech); DisplayListChar(0,0,net); ReadDataLCM();//测试用句无意义 while (1); } //写数据 voidWriteDataLCM(unsignedcharWDLCM) { ReadStatusLCM();//检测忙 LCM_Data=WDLCM; LCM_RS=1; LCM_RW=0; LCM_E=0;//若晶振速度太高可以在这后加小的延时 LCM_E=0;//延时 LCM_E=1; } //写指令 voidWriteCommandLCM(unsignedcharWCLCM,BuysC)//BuysC为0时忽略忙检测 { if(BuysC)ReadStatusLCM();//根据需要检测忙 LCM_Data=WCLCM; LCM_RS=0; LCM_RW=0; LCM_E=0; LCM_E=0; LCM_E=1; } //读数据 unsignedcharReadDataLCM(void) { LCM_RS=1; LCM_RW=1; LCM_E=0; LCM_E=0; LCM_E=1; return(LCM_Data); } //读状态 unsignedcharReadStatusLCM(void) { LCM_Data=0xFF; LCM_RS=0; LCM_RW=1; LCM_E=0; LCM_E=0; LCM_E=1; while(LCM_Data&Busy);//检测忙信号 return(LCM_Data); } voidLCMInit(void)//LCM初始化 { LCM_Data=0; WriteCommandLCM(0x38,0);//三次显示模式设置,不检测忙信号 Delay5Ms(); WriteCommandLCM(0x38,0); Delay5Ms(); WriteCommandLCM(0x38,0); Delay5Ms(); WriteCommandLCM(0x38,1);//显示模式设置,开始要求每次检测忙信号 WriteCommandLCM(0x08,1);//关闭显示 WriteCommandLCM(0x01,1);//显示清屏 WriteCommandLCM(0x06,1);//显示光标移动设置 WriteCommandLCM(0x0C,1);//显示开及光标设置 } //按指定位置显示一个字符 voidDisplayOneChar(unsignedcharX,unsignedcharY,unsignedcharDData) { Y&=0x1; X&=0xF;//限制X不能大于15,Y不能大于1 if(Y)X|=0x40;//当要显示第二行时地址码+0x40; X|=0x80;//算出指令码 WriteCommandLCM(X,0);//这里不检测忙信号,发送地址码 WriteDataLCM(DData); } //按指定位置显示一串字符 voidDisplayListChar(unsignedcharX,unsignedcharY,unsignedcharcode*DData) { unsignedcharListLen
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 16 x2 字符 背光 液晶显示 模块 20 word 文档