12864点阵型液晶显示控制设计.doc
本文介绍以AT89S51单片机为控制核心,以LCD128*64液晶作为显示的模块。该模块硬件结构简单、功能齐全,工作稳定,可完成目前绝大部分设备的显示工作。12864是一种图形点阵液晶显示器,它主要由行驱动器/列驱动器及128×64全点阵液晶显示器组成。可完成图形显示,也可以显示8×4个(16×16点阵)汉字。关键字:单片机 LCD128*64 液晶显示模块 目 录1 课程设计目的12 课程设计题目描述和要求13 课程设计报告内容13.1 系统软、硬件功能设定(分工方案)13.2 系统硬件电路介绍13.3 LCD显示基本原理33.4 系统软件介绍43.5系统软件流程53.6 液晶显示模块指令系统53.7系统硬件电路框图63.8原理图及基本结构73.9 128 64点阵型液晶 C语言程序(可以显示指定点)124实物图22总 结23致 谢24参考文献251 课程设计目的通过电路结构选择、控制方式选择、参数计算、器件选型、硬件制作及软件编程调试等训练切实培养学生综合应用知识、正确分析问题、解决问题的能力,特别是实际动手和创新能力,将自动化专业知识进行整合,融会贯通。2 课程设计题目描述和要求设计题目:LCD显示器显示界面的设计信息时代各种信息最终都是要通过信息显示来实现人、机交换,而信息的显示依赖于各种显示器件的应用,由于液晶显示器(LCD)具有低工作电压、微功耗、显示灵活、成本低等特点,因此在电子计算器、智能化仪器仪表、手机、掌上电脑等等领域应用极为广泛。(1)了解128X64液晶显示器的基本结构、电路特性、软件特性、接口应用技术等;(2)在(1)基础上能根据实际工作需要,进行液晶显示界面的任意开发;如:要求每位同学在液晶(LCD)上显示自己的学号(数字)、姓名(中文)等; (3)撰写课程设计说明书。说明书中要求有主程序流程图、关键子程序流程图及应用系统硬件电路图;(4)总结调试过程中出现的问题及解决办法。3 课程设计报告内容3.1 系统软、硬件功能设定(分工方案)系统软件使用keil,89C51单片机,硬件则选用12864液晶显示器3.2 系统硬件电路介绍一 概述 带中文字库的128X64是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64, 内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。可以显示8×4行16×16点阵的汉字. 也可完成图形显示.低电压低功耗是其又一显著特点。由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。二 基本特性(1)低电源电压(VDD:+3.0-+5.5V)(2)显示分辨率:128×64点 (3)内置汉字字库,提供8192个16×16点阵汉字(简繁体可选) (4)内置 128个16×8点阵字符 (5)2MHZ时钟频率 (6)显示方式:STN、半透、正显 (7)驱动方式:1/32DUTY,1/5BIAS (8)视角方向:6点(9)背光方式:侧部高亮白色LED,功耗仅为普通LED的1/51/10 (10)通讯方式:串行、并口可选 (11)内置DC-DC转换电路,无需外加负压 (12)无需片选信号,简化软件设计(13)工作温度: 0 - +55 ,存储温度: -20 - +60三、模块接口说明管脚号管脚名称电平管脚功能描述1VSS0V电源地2VCC3.0+5V电源正3V0-对比度(亮度)调整4RS(CS)H/LRS=“H”,表示DB7DB0为显示数据RS=“L”,表示DB7DB0为显示指令数据5R/W(SID)H/LR/W=“H”,E=“H”,数据被读到DB7DB0R/W=“L”,E=“HL”, DB7DB0的数据被写到IR或DR6E(SCLK)H/L使能信号7DB0H/L三态数据线8DB1H/L三态数据线9DB2H/L三态数据线10DB3H/L三态数据线11DB4H/L三态数据线12DB5H/L三态数据线13DB6H/L三态数据线14DB7H/L三态数据线15PSBH/LH:8位或4位并口方式,L:串口方式(见注释1)16NC-空脚17/RESETH/L复位端,低电平有效(见注释2)18VOUT-LCD驱动电压输出端19AVDD背光源正端(+5V)(见注释3)20KVSS背光源负端(见注释3)3.3 LCD显示基本原理FYD12864-0402B是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64, 内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。可以显示8×4行16×16点阵的汉字. 也可完成图形显示.低电压低功耗是其又一显著特点。由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。3.4 系统软件介绍 MCS-51系列单片机是美国Intel公司在1980年推出的高性能8位单片机,它包含51和52 两个子系列。 对于51子系列,主要有8031、8051、8751 三种机型,它们的指令系统与芯片引脚完全兼容,仅片内程序存储器有所不同,8031芯片不带ROM,8051芯片带4KROM,8751芯片带4KEPROM。51子系列的主要特点为:8位CPU。片内带振荡器,频率范围1212MHZ。片内带128字节的数据存储器。片内带4K的程序存储器。片外程序存储器的寻址空间为64K字节。片外数据存储器的寻址空间为64K字节。128个用户位寻址空间。 21个字节特殊功能寄存器。4个8位的并行I/O接口:P0、P1、P2、P3。2个16位定时器/计数器2个优先级别的5个中断源。1个可编程全双工的串行I/O接口,可多机通信。111条指令,含乘法指令和除法指令。片内采用单总线结构。有较强的位处理能力。采用单一+5V电源。 对于52子系列,有8032、8052、8752 三种机型。52子系列与51子系列相比大部分相同,不同之处在于:片内数据存储器增至256字节;8032芯片不带ROM,8052芯片带8KROM,8752芯片带8KEPROM;有3个16位定时器/计数器;6个中断源。3.5系统软件流程3.6 液晶显示模块指令系统常用的基本指令介绍如下:(1)显示开/关指令当DB0=1 时,LCD 显示RAM 中的内容;DB0=0 ,时关闭显示。(2)起始行ROW 设置指令(3)页PAGE 设置指令(4)列地址Y ADDRESS 设置指令设置了页地址和列地址,就唯一确定了显示RAM 中的一个单元,这样MPU 就可以用读写指令,读出该单元中的内容或向该单元写进一个字节数据。(5)写数据指令(6)读状态指令(7)读数据指令读写数据指令每执行完一次读写操作列地址就自动增一,必须注意的是进行读操作之前必须有一次空读操作,紧接着再读才会读出所要读的单元中的数据。3.7系统硬件电路框图 3.8原理图及基本结构带中文字库的128X64是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64, 内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。可以显示8×4行16×16点阵的汉字. 也可完成图形显示.低电压低功耗是其又一显著特点。由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。基本特性: 低电源电压(VDD:+3.0-+5.5V) 显示分辨率:128×64点 内置汉字字库,提供8192个16×16点阵汉字(简繁体可选) 内置 128个16×8点阵字符 2MHZ时钟频率 显示方式:STN、半透、正显 驱动方式:1/32DUTY,1/5BIAS 视角方向:6点 背光方式:侧部高亮白色LED,功耗仅为普通LED的1/51/10 通讯方式:串行、并口可选 内置DC-DC转换电路,无需外加负压 无需片选信号,简化软件设计 工作温度: 0 - +55 ,存储温度: -20 - +60 模块接口说明*注释1:如在实际应用中仅使用串口通讯模式,可将PSB接固定低电平,也可以将模块上的J8和“GND”用焊锡短接。*注释2:模块内部接有上电复位电路,因此在不需要经常复位的场合可将该端悬空。*注释3:如背光和模块共用一个电源,可以将模块上的JA、JK用焊锡短接。并行接口管脚号管脚名称电平管脚功能描述1VSS0V电源地2VCC3.0+5V电源正3V0-对比度(亮度)调整4RS(CS)H/LRS=“H”,表示DB7DB0为显示数据RS=“L”,表示DB7DB0为显示指令数据5R/W(SID)H/LR/W=“H”,E=“H”,数据被读到DB7DB0R/W=“L”,E=“HL”, DB7DB0的数据被写到IR或DR6E(SCLK)H/L使能信号7DB0H/L三态数据线8DB1H/L三态数据线9DB2H/L三态数据线10DB3H/L三态数据线11DB4H/L三态数据线12DB5H/L三态数据线13DB6H/L三态数据线14DB7H/L三态数据线15PSBH/LH:8位或4位并口方式,L:串口方式(见注释1)16NC-空脚17/RESETH/L复位端,低电平有效(见注释2)18VOUT-LCD驱动电压输出端19AVDD背光源正端(+5V)(见注释3)20KVSS背光源负端(见注释3)在使用12864LCD前先必须了解以下功能器件才能进行编程。12864内部功能器件及相关功能如下:1. 指令寄存器(IR)IR是用于寄存指令码,与数据寄存器数据相对应。当D/I=0时,在E信号下降沿的作用下,指令码写入IR。2数据寄存器(DR)DR是用于寄存数据的,与指令寄存器寄存指令相对应。当D/I=1时,在下降沿作用下,图形显示数据写入DR,或在E信号高电平作用下由DR读到DB7DB0数据总线。DR和DDRAM之间的数据传输是模块内部自动执行的。3忙标志:BFBF标志提供内部工作情况。BF=1表示模块在内部操作,此时模块不接受外部指令和数据。BF=0时,模块为准备状态,随时可接受外部指令和数据。利用STATUS READ指令,可以将BF读到DB7总线,从检验模块之工作状态。4显示控制触发器DFF此触发器是用于模块屏幕显示开和关的控制。DFF=1为开显示(DISPLAY OFF),DDRAM的内容就显示在屏幕上,DFF=0为关显示(DISPLAY OFF)。DDF的状态是指令DISPLAY ON/OFF和RST信号控制的。5XY地址计数器XY地址计数器是一个9位计数器。高3位是X地址计数器,低6位为Y地址计数器,XY地址计数器实际上是作为DDRAM的地址指针,X地址计数器为DDRAM的页指针,Y地址计数器为DDRAM的Y地址指针。X地址计数器是没有记数功能的,只能用指令设置。Y地址计数器具有循环记数功能,各显示数据写入后,Y地址自动加1,Y地址指针从0到63。6显示数据RAM(DDRAM)DDRAM是存储图形显示数据的。数据为1表示显示选择,数据为0表示显示非选择。DDRAM与地址和显示位置的关系见DDRAM地址表。7Z地址计数器Z地址计数器是一个6位计数器,此计数器具备循环记数功能,它是用于显示行扫描同步。当一行扫描完成,此地址计数器自动加1,指向下一行扫描数据,RST复位后Z地址计数器为0。3.9 128 64点阵型液晶 C语言程序(可以显示指定点)#include <reg51.h> #include <intrins.h> typedef unsigned char uchar; typedef unsigned int uint; sbit cd = P20; /*通道选择,=1为指令通道,=0为数据通道*/ sbit ce = P27; /*低电平有效,T6963C片选信号*/ sbit fs = P35; /*字体选择*/ sbit rst = P23; /*复位信号,低电平有效*/ sbit rd = P37; /*读操作,低电平有效*/ sbit wr = P36; /*写操作,低电平有效*/ sbit test2 = P32; sbit test3 = P33; sbit test4 = P34; sbit sta0 = P00; sbit sta1 = P01; sbit sta2 = P02; sbit sta3 = P03; sbit sta4 = P04; sbit sta5 = P05; sbit sta6 = P06; sbit sta7 = P07; sfr lcdbus=0x80; /*数据总线,P0口,DB0-DB7*/ bit d1500ms_flag = 0; uint data i; uchar data time0_number; uchar code han0 = 0x80,0x81,0x82,0x83; uchar code han1 = 0x84,0x85,0x86,0x87; uchar code han2 = 0x88,0x89,0x8a,0x8b; uchar code han3 = 0x8c,0x8d,0x8e,0x8f; uchar code han4 = 0x90,0x91,0x92,0x93; uchar code han5 = 0x94,0x95,0x96,0x97; uchar code han6 = 0x98,0x99,0x9a,0x9b; uchar code han7 = 0x9c,0x9d,0x9e,0x9f; uchar code han8 = 0xa0,0xa1,0xa2,0xa3; uchar code han9 = 0xa4,0xa5,0xa6,0xa7; uchar code han10 = 0xa8,0xa9,0xaa,0xab; uchar code han11 = 0xac,0xad,0xae,0xaf; uchar code han12 = 0xb0,0xb1,0xb2,0xb3; uchar code han13 = 0xb4,0xb5,0xb6,0xb7; uchar code han14 = 0xb8,0xb9,0xba,0xbb; uchar code han15 = 0xbc,0xbd,0xbe,0xbf; uchar code han16 = 0xc0,0xc1,0xc2,0xc3; uchar code han17 = 0xc4,0xc5,0xc6,0xc7; uchar code han18 = 0xc8,0xc9,0xca,0xcb; uchar code han19 = 0xcc,0xcd,0xce,0xcf; uchar code han20 = 0xd0,0xd1,0xd2,0xd3; uchar code han21 = 0xd4,0xd5,0xd6,0xd7; uchar code TAB = /*80*/ 0x00,0x00,0x00,0x00,0xfc,0x8d,0x69,0x3a, 0x00,0x00,0x80,0xc0,0x8c,0xf4,0x4c,0x58, 0x38,0x6c,0xc1,0x03,0x1e,0x00,0x00,0x00, 0xe0,0xb0,0x9c,0x0f,0x07,0x00,0x00,0x00,/*欢0*/ /*84*/ 0x00,0x00,0x00,0x67,0x7e,0x04,0xf4,0x16, 0x00,0x00,0x00,0xc8,0x7c,0x6c,0x6c,0xe8, 0x17,0xff,0x83,0x00,0x00,0x00,0x00,0x00, 0x70,0x60,0xff,0x7f,0x0c,0x00,0x00,0x00,/*迎1*/ /*88*/ 0x00,0x00,0x00,0x38,0xf7,0xf0,0x33,0x32, 0x00,0x00,0x60,0x60,0xfe,0x64,0xfc,0x6c, 0x33,0x33,0x30,0x31,0x3f,0x00,0x00,0x00, 0xfc,0xc0,0xf0,0x9f,0x07,0x02,0x00,0x00,/*使2*/ /*8c*/ 0x00,0x00,0x08,0x0f,0x0c,0x0c,0x0f,0x0c, 0x00,0x00,0x02,0xff,0x63,0x63,0xff,0x63, 0x0f,0x18,0x18,0x38,0xf0,0x00,0x00,0x00, 0xff,0x63,0x63,0x63,0x63,0x43,0x00,0x00,/*用3*/ /*90*/ 0x00,0x00,0x40,0xff,0xc7,0x44,0x5b,0x46, 0x00,0x00,0x00,0xfe,0x66,0xe6,0x86,0xe6, 0x7a,0x41,0x47,0x40,0x7f,0x00,0x00,0x00, 0x3e,0x86,0x86,0x06,0xfe,0x04,0x00,0x00,/*图4*/ /*94*/ 0x00,0x00,0x00,0x7f,0x33,0x33,0xff,0xff, 0x00,0x00,0x00,0xc7,0x1c,0x00,0xc7,0xcc, 0x1b,0x1b,0x33,0xf3,0xc3,0x00,0x00,0x00, 0x30,0x01,0x07,0x1c,0xf8,0x00,0x00,0x00,/*形5*/ /*98*/ 0x00,0x00,0x01,0x01,0x01,0x19,0x1f,0x18, 0x00,0x00,0x80,0xf0,0xfc,0x80,0xfc,0x0c, 0x1f,0x08,0x12,0x76,0xc4,0x00,0x00,0x00, 0xf8,0x08,0x4c,0x67,0x23,0x01,0x00,0x00,/*点6*/ /*9c*/ 0x00,0x00,0x00,0xfd,0x67,0x68,0x79,0x6f, 0x00,0x00,0x60,0x60,0xff,0xe0,0xb0,0xfc, 0x6d,0x7b,0x67,0x60,0x60,0x40,0x00,0x00, 0xb0,0xfc,0xff,0x30,0x30,0x30,0x00,0x00,/*阵7*/ /*a0*/ 0x00,0x10,0x30,0x70,0xb0,0x10,0x10,0x10, 0x00,0x00,0x18,0x24,0x46,0x42,0x02,0x06, 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xf0, 0x06,0x0c,0x00,0x08,0x10,0x60,0x22,0x7e,/*12 8*/ /*a4*/ 0x00,0x00,0x38,0x62,0x42,0x42,0x62,0x36, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x63, 0x18,0x1c,0x26,0x46,0x42,0x42,0x43,0x3e, 0x32,0x34,0x18,0x08,0x1c,0x24,0x26,0x47,/*8x 9*/ /*a8*/ 0x00,0x00,0x06,0x08,0x10,0x20,0x20,0x60, 0x00,0x00,0x00,0x04,0x0c,0x14,0x14,0x24, 0x5e,0x62,0x42,0x43,0x43,0x42,0x62,0x3c, 0x24,0x44,0x44,0x7f,0x04,0x04,0x04,0x04,/*64 10*/ /*ac*/ 0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55, 0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55, 0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55, 0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,/*.11*/ /*b0*/ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,/*全黑12*/ /*b4*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*全白13*/ /*b8*/ 0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*上边14*/ /*bc*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,/*下边15*/ /*c0*/ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*左边16*/ /*c4*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,/*右边17*/ /*c8*/ 0xff,0x80,0x80,0x80,0x80,0x80,0x80,0x80, 0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*左上18*/ /*cc*/ 0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xff,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,/*右上19*/ /*d0*/ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,/*左下20*/ /*d4*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0xff /*右下21*/ ; void r_st(uchar w); void wdata(bit cd_flag,uchar d); /*数据写操作*/ void dmod(uchar x0,uchar x1,uchar c); void smod(uchar x1,uchar c); void nmod(uchar c); /* 使用寄存0 组 */ #pragma REGISTERBANK(0) void soft_10ms() register int i; for(i=0;i<711;i+); /* 初始化 */ void initcomm(void) IE=0; P0=0xff; P1=0xff; P2=0xff; P3=0xff; TMOD=0x11; TH0 = 0; TL0 = 0; TR0 = 1; ET0 = 1; EA = 1; /* 初始化 lcd240128 */ void initlcd(void) dmod(0x00,0x00,0x40); /*文本显示区域首地址*/ dmod(0x1e,0x00,0x41); /*文本显示宽度和一行显示字节数*/ dmod(0x00,0x08,0x42); /*图形显示区域首地址*/ dmod(0x1e,0x00,0x43); /*图形显示宽度,一行显示所占字节*/ dmod(0x03,0x00,0x22); /*cgram首地址 00011 100000000 000 = 1c00h*/ nmod(0xa7); /*光标形状设置*/ nmod(0x80); /*显示方式:逻辑“或”合成*/ nmod(0x9c); /*显示开关设置,开文本和图形显示*/ /* lcd 清0*/ void clear(void) dmod(0x00,0x00,0x24); /*显示存储器首地址*/ nmod(0xb0); /*自动写方式*/ for (i = 0;i<=0x2000;i+) r_st(3); /*等待自动写状态*/ wdata(0,0); nmod(0xb2); /*自动写结束*/ /* 读状态字 cd_flag = 1 读命令通到。 = 0 读数据通到。 w = 0 指令读,写状态, 返回1 准备好 返回0 忙。 w = 1 数据读,写状态, 返回1 准备好 返回0 忙。 w = 2 数据自动读状态, 返回1 准备好 返回0 忙。 w = 3 数据自动写状态, 返回1 准备好 返回0 忙。 w = 5 控制运行检测可能性,返回1 准备好 返回0 忙。 w = 6 屏读/栲贝出错状态, 返回1 正确 返回0 出错。 w = 7 闪烁状态检测, 返回1 正常显示 返回0 关显示。 */ void r_st (uchar w) uchar data i = 0;