LCD1602和12864液晶显.ppt
《LCD1602和12864液晶显.ppt》由会员分享,可在线阅读,更多相关《LCD1602和12864液晶显.ppt(89页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、课题四课题四液晶显示液晶显示任务一任务一 1602液晶显示液晶显示任务二任务二12864液晶显示液晶显示课题目标课题目标本课题的任务是用单片机实现液晶显示,本课题的任务是用单片机实现液晶显示,演示效果如图演示效果如图5-1所示。通过编程,学会在所示。通过编程,学会在单片机上实现液晶显示控制方法,以及不单片机上实现液晶显示控制方法,以及不同数据显示的程序编写方法。同数据显示的程序编写方法。图5-1 液晶显示效果图任务一任务一1602液晶显示方式液晶显示方式 本任务就是将单片机与1602液晶接成图5-2所示电路图,编程实现。用液晶显示出”I LIKE MCU”“WWW.CQWU.EDU.CN”图5
2、-2 液晶显示电路图一、液晶显示原理一、液晶显示原理1、液晶显示器及其特点、液晶显示器及其特点液晶显示器以其微功耗、体积小、显示内容丰富、液晶显示器以其微功耗、体积小、显示内容丰富、超薄轻巧的诸多优点,没有电磁辐射、寿命长等超薄轻巧的诸多优点,没有电磁辐射、寿命长等优点,在袖珍式仪表和低功耗应用系统中得到越优点,在袖珍式仪表和低功耗应用系统中得到越来越广泛的应用。来越广泛的应用。这里介绍的字符型液晶模块是一种用这里介绍的字符型液晶模块是一种用5x7点阵图点阵图形来显示字符的液晶显示器,根据显示的容量可形来显示字符的液晶显示器,根据显示的容量可以分为以分为1行行16个字、个字、2行行16个字、个
3、字、2行行20个字等等,个字等等,这里以常用的这里以常用的2行行16个字的个字的1602液晶模块来介绍液晶模块来介绍它的编程方法。它的编程方法。2、液晶引脚定义、液晶引脚定义表5-1 LCD1602引脚功能引脚功能 w3 3、字符代码与显示字符关系、字符代码与显示字符关系w 16021602液晶模块内部的字符发生存储器(液晶模块内部的字符发生存储器(CGROM)CGROM)已已经存储了经存储了160160个不同的点阵字符图形,如表个不同的点阵字符图形,如表5-25-2所示,所示,这些字符有:阿拉伯数字、英文字母的大小写、常用这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每
4、一个字符都有一个固定的的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母代码,比如大写的英文字母“A”A”的代码是的代码是01000001B01000001B(41H41H),显示时模块把地址),显示时模块把地址41H41H中的点阵字中的点阵字符图形显示出来,我们就能看到字母符图形显示出来,我们就能看到字母“A”A”。表5-2 字符发生存储器字符代码与显示字符关系4、LCD1602指令表 1602液晶模块内部的控制器共有11条控制指令,如表5-3所示。表5-3 1602指令表液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此
5、指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,表5-4是DM-1602的内部显示地址。表5-4 1602地址表比如第二行第一个字符的地址是40H,那么是否直接写入40H就可以将光标定位在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位D7恒定为高电平1所以实际写入的数据应该是01000000B(40H)+10000000B(80H)=11000000B(C0H)二、时序图二、时序图1 1、16021602基本操作时序基本操作时序2 2、写操作时序、写操作时序 图5-5 操作时序图 3、时序时间表表5-5 时序表 初始化 通过初始化设置堆栈栈底为60H
6、,调用LCD初始化子程序完成对LCD的初始化设置。字符显示 完成对LCD初始化后,调用LCD字符显示子程序显示第一行字符和第二行字符。主程序设计流程图如图6.5所示。【项目实践】3 3程序设计程序设计 (1)主程序设计 主程序主要完成硬件初始化、子程序调用等功能。初始化堆栈指针调用LCD初始化子程序调用字符显示子程序显示第二行字符调用字符显示子程序显示第一行字符开始图6.5 主程序流程图 (2)写入显示数据到LCD子程序模块设计 当LCD1602的寄存器选择信号RS为1时,选择数据寄存器;当LCD1602的读写选择线R/W为0时,进行写操作;当LCD1602的使能信号E至高电平后再过两个时钟周
7、期至低电平,产生一个下降沿信号,往LCD写入显示数据。写入显示数据到LCD子程序设计流程图如图6.6所示。当RS1时,选择数据寄存器读/写标志位R/W0时,进行写操作LCD使能信号E至高电平后再过两个时钟周期至低电平,产生一个下降沿信号,往LCD写入显示数据子程序返回把显示数据送至P0口(LCD数据线DB7DB0)开始图6.6 写入显示数据到LCD子程序流程图 (3)写入指令数据到LCD子程序模块设计 当LCD1602的寄存器选择信号RS为0时,选择指令寄存器;当LCD1602的读写选择线R/W为0时,进行写操作;当LCD1602的使能信号E至高电平后再过两个时钟周期至低电平,产生一个下降沿信
8、号,往LCD写入指令代码。写入指令数据到LCD子程序设计流程图如图6.7所示。RS0时,选择指令寄存器读/写标志位R/W0时,进行写操作LCD使能信号E至高电平后再过两个时钟周期至低电平,产生一个下降沿信号,往LCD写入指令代码,LCD执行命令调用延时子程序DELAY子程序返回把指令数据送至P0口(LCD数据线DB7DB0)开始图6.7 写入指令数据到LCD子程序流程图 (4)字符显示子程序模块设计 设置LCD的DDRAM地址,调用写入指令到LCD子程序设置DDRAM地址指针;然后设置显示数据个数R7,设置显示数据索引值R6,将显示数据表地址送入DPTR中,用查表指令查表取得显示数据,调用写入
9、显示数据到LCD子程序,使数据显示在LCD上;显示数据个数R7减1,显示数据索引值R6加1,按照上面的步骤显示下一个数据,直到显示数据个数R7为0,所有字符均显示在LCD上。字符显示子程序设计流程图如图6.8所示。图6.8 字符显示子程序流程图【项目实践】(5)LCD初始化子程序模块设计 1602字符型LCD的初始化过程为:延时15ms,写指令38H(不检测忙信号);延时5ms,写指令38H(不检测忙信号);延时5ms,写指令38H(不检测忙信号);以后每次写指令、读/写数据操作均需要检测忙信号;写指令38H:显示模式设置;写指令08H:显示关闭;写指令01H:显示清屏;写指令06H:显示光标
10、移动设置;写指令0CH:显示开及光标设置。根据它的初始化过程,LCD初始化子程序设计流程图如 图6.9所示。【项目实践】功能设置命令调用写入指令到LCD子程序设定工作方式设置显示状态调用写入指令到LCD子程序调用写入指令到LCD子程序清屏调用写入指令到LCD子程序子程序返回设置输入方式调用写入指令到LCD子程序开始图6.9 LCD初始化子程序流程图【项目实践】(6)延时子程序模块设计延时子程序模块设计请参考项目1。4 4汇编源程序汇编源程序*;项目名称:字符型LCD接口实验;功能:在1602字符型液晶第一行显示:I LIKE MCU;在第二行显示:;作者:;日期:*;1602LCD信号接口定义
11、E BIT P2.2 ;LCD使能信号RW BIT P2.1 ;读/写选择信号R/W:0为写入数据;1为读出数据RS BIT P2.0 ;数据/命令选择信号R/S:0为指令;1为数据【项目实践】LCDPORT EQU P1 ;液晶的数据线DB7DB0 CMD_BYTE EQU 30H ;写命令入口参数 DAT_BYTE EQU 31H ;写显示数据入口参数;主程序 ORG 0000H AJMP MAIN ORG 0050HMAIN:MOV SP,#60H ;设置堆栈指针 LCALL INITLCD ;调用LCD初始化子程序 LCALL DISPMSG1 ;调用液晶字符显示程序 LCALL DI
12、SPMSG2 ;调用液晶字符显示程序 SJMP$;LCD1602要用到的一些子程序;函数功能:写入指令到LCD1602子程序;入口参数CMD_BYTE;出口参数:【项目实践】WRITE_CMD:CLR RS ;当RS=0,RW=0时,写指令 CLR RW MOV A,CMD_BYTE;把写命令入口参数CMD_BYTE传给A MOV LCDPORT,A;LCDPORT为液晶数据线DB7DB0 SETB E ;打开液晶使能信号E NOP NOP CLR E ;关闭液晶使能信号E LCALL DELAY ;调用延时子程序 RET;函数功能:写入显示数据到LCD1602子程序;入口参数:DAT_BYT
13、E;出口参数:WRITE_DAT:SETB RS ;当RS=1,RW=0时,写入数据到LCD CLR RW MOV A,DAT_BYTE;把写数据入口参数DAT_BYTE传给A MOV LCDPORT,A;LCDPORT为液晶数据线DB7DB0【项目实践】SETB E ;打开液晶使能信号E NOP NOP CLR E ;关闭液晶使能信号E LCALL DELAY ;调用延时子程序 RET;函数功能:写入显示数据到LCD1602子程序;入口参数:DAT_BYTE;出口参数:WRITE_DAT:SETB RS ;当RS=1,RW=0时,写入数据到LCD CLR RW MOV A,DAT_BYTE;
14、把写数据入口参数DAT_BYTE传给A MOV LCDPORT,A ;LCDPORT为液晶数据线DB7DB0 SETB E ;打开LCD使能信号E NOP NOP CLR E ;关闭LCD使能信号E LCALL DELAY ;调用延时子程序 RET ;函数功能:LCD显示初始化子程序;入口参数:;出口参数:INITLCD:MOV CMD_BYTE,#30H LCALL WRITE_CMD ;调用写命令子程序 MOV CMD_BYTE,#30H LCALL WRITE_CMD ;调用写命令子程序 MOV CMD_BYTE,#30H LCALL WRITE_CMD ;调用写命令子程序 MOV CM
15、D_BYTE,#38H;设定工作方式 LCALL WRITE_CMD ;调用写命令子程序 MOV CMD_BYTE,#0CH;显示状态设置 LCALL WRITE_CMD ;调用写命令子程序 MOV CMD_BYTE,#01H ;RS=0,RW=0时,DB7DB0=01H为清屏 LCALL WRITE_CMD ;调用写命令子程序 MOV CMD_BYTE,#06H;输入方式设置 LCALL WRITE_CMD ;调用写命令子程序 RET【项目实践】;函数功能:液晶字符显示程序1;在第一行显示表格TB1的内容DISPMSG1:MOV CMD_BYTE,#80H ;设置DDRAM的地址 LCALL
16、 WRITE_CMD ;调用写命令子程序 MOV R7,#10 ;R7为显示数据个数 MOV R6,#00H ;R6表头地址 MOV DPTR,#TAB1DISPMSG1_1:MOV A,R6 MOVC A,A+DPTR ;查表 MOV DAT_BYTE,A;从A把数据传给写数据入口参数DAT_BYTE LCALL WRITE_DAT ;调用写数据子程序 INC R6 ;下一个数据的地址 DJNZ R7,DISPMSG1_1;判断是否显示完毕 RET【项目实践】;函数功能:液晶字符显示程序2;在第二行显示表格TB2的内容DISPMSG2:MOV CMD_BYTE,#0C0H;设置DDRAM的地
17、址 LCALL WRITE_CMD ;调用写命令子程序 MOV R7,#0fH MOV R6,#00H MOV DPTR,#TAB2DISPMSG2_1:MOV A,R6 MOVC A,A+DPTR MOV DAT_BYTE,A LCALL WRITE_DAT ;调用写数据子程序 INC R6 DJNZ R7,DISPMSG2_1 RET;函数功能:延时子程序;入口参数:;出口参数:DELAY:MOV R5,#0A0HDELAY1:NOP DJNZ R5,DELAY1 RET ORG 0200H;要显示的内容TAB1:DB I LIKE MCU TAB2:DB “END三、C语言程序#incl
18、ude#define uchar unsigned char#define uint unsigned int sbit lcden=P22;sbit lcdrs=P20;sbit lcdrw=P21;uchar num;uchar code table=I LIKE MCU!;uchar code table1=;void delay(uint z)uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void write_com(uchar com)lcdrs=0;P1=com;delay(5);lcden=1;delay(5);lcden=0;void init
19、()lcden=0;write_com(0 x38);write_com(0 x0c);write_com(0 x0f);write_com(0 x06);write_com(0 x01);write_com(0 x80);void write_data(uchar date)lcdrs=1;P1=date;delay(5);lcden=1;delay(5);lcden=0;void main()lcdrw=0;init ();for(num=0;num11;num+)write_data(tablenum);write_com(0 x80+0 x40);for(num=0;num15;num
20、+)write_data(table1num);delay(20);while(1);思考:1.如何用1602显示日期和时间。C语言程序:#include/51头文件#define uchar unsigned char#define uint unsigned int/变量宏定义uchar count,s1num,shi2=0,fen2=0,shi3=10,fen3=10;/全局变量uchar shi,fen,miao,shi1,fen1,led_1,led_2;/时间变量sbit rs=P20;/数据,命令选择端(H/L)sbit rw=P21;/读,写选择端(H/L)sbit e=P22
21、;/使能信号/*uchar code table=2010-10-28 DATE;uchar code table1=00:00:00 TIME;/数据字符表void delay(uint z)/延时 uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void write_com(uchar com)/写液晶指令 rs=0;e=0;P1=com;delay(5);e=1;delay(5);e=0;void write_date(uchar date)/送液晶数据 rs=1;e=0;P1=date;delay(5);e=1;delay(5);e=0;void ini
22、t()/初始化液晶设定定时器初值 uchar num;rs=0;rw=0;e=0;/锁存关闭 write_com(0 x38);delay(5);write_com(0 x0c);delay(5);write_com(0 x06);delay(5);write_com(0 x01);write_com(0 x80);/第一行开始写 for(num=0;num15;num+)write_date(tablenum);delay(20);write_com(0 x80+0 x40);/第二行前一部分,也就是时间开始写 for(num=0;num0;x-)for(y=110;y0;y-);void
23、write_com(uchar com)/写液晶指令 rs=0;e=0;P1=com;delay(5);e=1;delay(5);e=0;voidwrite_date(uchardate)/送液晶数据送液晶数据rs=1;e=0;P1=date;delay(5);e=1;delay(5);e=0;voidinit()/初始化液晶设定定时器初值初始化液晶设定定时器初值ucharnum;rs=0;rw=0;e=0;/锁存关闭锁存关闭write_com(0 x38);delay(5);write_com(0 x0c);delay(5);write_com(0 x06);delay(5);write_c
24、om(0 x01);write_com(0 x80);/第一行开始写第一行开始写for(num=0;num15;num+)write_date(tablenum);delay(20);write_com(0 x80+0 x40);/第二行前一部分,也就是时间开始写 for(num=0;num13;num+)write_date(table1num);delay(20);TMOD=0 x01;/定时器0的方式1 TH0=(65536-50000)/256;/求模 TL0=(65536-50000)%256;/取余 EA=1;/开总中断 ET0=1;/开定时器中断 TR0=1;/启动定时器void
25、 write_sfm(uchar add,uchar date)/地址数据变量 uchar sh,ge;sh=date/10;ge=date%10;write_com(0 x80+0 x40+add);write_date(0 x30+sh);write_date(0 x30+ge);void main()/主函数init();while(1)write_sfm(0,shi);/时针位置 write_sfm(3,fen);/分针位置 write_sfm(6,miao);/秒针位置 key();void timer0()interrupt 1/定时器0中断服程序 TH0=(65536-50000
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- LCD1602 12864 液晶
限制150内