点阵式液晶下滚屏设计.docx_第1页
点阵式液晶下滚屏设计.docx_第2页
点阵式液晶下滚屏设计.docx_第3页
点阵式液晶下滚屏设计.docx_第4页
点阵式液晶下滚屏设计.docx_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

沈阳理工大学课程设计专用纸No22成绩评定表学生姓名班级学号专业计算机科学与技术课程设计题目点阵式液晶下滚屏设计评语组长签字:成绩日期20年月日课程设计任务书学 院信息学院专 业计算机科学与技术学生姓名班级学号课程设计题目点阵式液晶下滚屏设计实践教学要求与任务:1 学习Proteus仿真系统下的原理图设计方法和系统仿真调试方法;2 掌握简单的51单片机应用系统的软硬件设计方法;3 学习Keil C51集成开发环境的使用和程序调试方法。具体任务如下:(1)通过检索、查资料和研究学习,设计单片机应用系统原理图;(2)在Keil51集成开发环境下编写8255扩展接口设计应用系统程序;(3)在Proteus仿真环境下进行软硬件系统调试,实现应用系统设计目标;(4)写出课程设计报告。工作计划与进度安排:第1619周:布置课程设计任务;查阅资料;分组设计原理图;编写程序代码。第20周:系统仿真调试,验收,答辩,编写课程设计报告。指导教师:马秀丽 魏长军2013年12月6日专业负责人:2013年12月6日学院教学副院长:2013年12月6日沈阳理工大学目录1点阵式液晶屏工作原理11.1液晶屏显示原理11.2 12864LCD工作原理32实验原理图设计73 程序及流程图设计83.1程序代码83.2程序部分流程图设计134调试过程与运行结果185 心得体会22参考文献221点阵式液晶屏工作原理1.1液晶屏显示原理液晶显示的原理是利用液晶的物理特性,即当通电时导通,排列变的有秩序,使光线容易通过;不通电时排列混乱,阻止光线通过。让液晶如闸门般地阻隔或让光线穿透。从技术上简单地说,液晶面板包含了两片相当精致的无钠玻璃素材,称为Substrates,中间夹著一层液晶。当光束通过这层液晶时,液晶本身会排排站立或扭转呈不规则状,因而阻隔或使光束顺利通过。大多数液晶都属于有机复合物,由长棒状的分子构成。在自然状态下,这些棒状分子的长轴大致平行。将液晶倒入一个经精良加工的开槽平面,液晶分子会顺着槽排列,所以假如那些槽非常平行,则各分子也是完全平行的。通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,目前已经被广泛应用在便携式电脑、数字摄像机、PDA移动通信工具等众多领域。液晶显示的分类方法有很多种,通常可按其显示方式分为段式LCD、字符式LCD、点阵式LCD等。除了黑白显示外,液晶显示器还有多灰度有彩色显示等。如果根据驱动方式来分,可以分为静态驱动(Static)、单纯矩阵驱动(Simple Matrix)和主动矩阵驱动(Active Matrix)三种。点阵图形式液晶由MN个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应1字节的8位,即每行由16字节,共168=128个点组成,屏上6416个显示单元与显示RAM区1024字节相对应,每一字节的内容和显示屏上相应位置的亮暗对应。例如屏的第一行的亮暗由RAM区的 000H00FH的16字节的内容决定,当(000H)=FFH时,则屏幕的左上角显示一条短亮线,长度为8个点;当(3FFH)=FFH时,则屏幕的右下角显示一条短亮线;当(000H)=FFH,(001H)=00H,(002H)=FFH,(00EH)=FFH,(00FH)=00H时,则在屏幕的顶部显示一条由8段亮线和8条暗线组成的虚线。这就是LCD显示的基本原理。 字符的显示 用LCD显示一个字符时比较复杂,因为一个字符由68或88点阵组成,既要找到和显示屏幕上某几个位置对应的显示RAM区的8字节,还要使每字节的不同位为“1”,其它的为“0”,为“1”的点亮,为“0”的不亮。这样一来就组成某个字符。但由于内带字符发生器的控制器来说,显示字符就比较简单了,可以让控制器工作在文本方式,根据在LCD上开始显示的行列号及每行的列数找出显示RAM对应的地址,设立光标,在此送上该字符对应的代码即可。在数字电路中,所有的数据都是以0和1保存的,对LCD控制器进行不同的数据操作,可以得到不同的结果。对于显示英文操作,由于英文字母种类很少,只需要8位(一字节)即可。而对于中文,常用却有6000以上,于是我们的DOS前辈想了一个办法,就是将ASCII表的高128个很少用到的数值以两个为一组来表示汉字,即汉字的内码。而剩下的低128位则留给英文字符使用,即英文的内码。那么,得到了汉字的内码后,还仅是一组数字,那又如何在屏幕上去显示呢?这就涉及到文字的字模,字模虽然也是一组数字,但它的意义却与数字的意义有了根本的变化,它是用数字的各位信息来记载英文或汉字的形状,如英文的A在字模的记载方式如图1.1所示:图1.1 “A”字模图而中文的“你”在字模中的记载却如图1.2所示:图1.2 “你”字模图因而本课设的几个汉字显示代码如下:/*- 文字: 万 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -*/0x04,0x04,0x04,0x04,0x04,0xFC,0x44,0x44,0x44,0x44,0x44,0xC4,0x04,0x04,0x04,0x00,0x80,0x40,0x20,0x18,0x06,0x01,0x00,0x00,0x40,0x80,0x40,0x3F,0x00,0x00,0x00,0x00,/*- 文字: 事 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -*/0x04,0x04,0x74,0x54,0x54,0x54,0x54,0xFF,0x54,0x54,0x54,0x54,0x74,0x04,0x04,0x00,0x04,0x04,0x15,0x15,0x15,0x55,0x95,0x7F,0x15,0x05,0x15,0x15,0x1F,0x04,0x04,0x00,/*- 文字: 如 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -*/0x10,0x10,0xF0,0x1F,0x10,0x10,0xF0,0x00,0x00,0xF8,0x08,0x08,0x08,0xF8,0x00,0x00,0x80,0x41,0x22,0x14,0x08,0x16,0x61,0x00,0x00,0x7F,0x20,0x20,0x20,0x7F,0x00,0x00,/*- 文字: 意 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -*/0x10,0x10,0x12,0xD2,0x56,0x5A,0x52,0x53,0x52,0x5A,0x56,0xD2,0x12,0x10,0x10,0x00,0x40,0x30,0x00,0x77,0x85,0x85,0x8D,0xB5,0x85,0x85,0x85,0xE7,0x00,0x10,0x60,0x00,/*- 文字: 新 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -*/0x40,0x44,0x54,0x65,0xC6,0x64,0x54,0x44,0x00,0xFC,0x44,0x44,0xC4,0x42,0x40,0x00,0x20,0x12,0x4A,0x82,0x7F,0x02,0x0A,0x92,0x60,0x1F,0x00,0x00,0xFF,0x00,0x00,0x00,/*- 文字: 年 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -*/0x00,0x20,0x18,0xC7,0x44,0x44,0x44,0x44,0xFC,0x44,0x44,0x44,0x44,0x04,0x00,0x00,0x04,0x04,0x04,0x07,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x04,0x04,0x00,/*- 文字: 快 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -*/0x00,0xE0,0x00,0xFF,0x10,0x20,0x08,0x08,0x08,0xFF,0x08,0x08,0xF8,0x00,0x00,0x00,0x01,0x00,0x00,0xFF,0x00,0x81,0x41,0x31,0x0D,0x03,0x0D,0x31,0x41,0x81,0x81,0x00,/*- 文字: 乐 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -*/0x00,0x00,0xE0,0x9C,0x84,0x84,0x84,0xF4,0x82,0x82,0x83,0x82,0x80,0x80,0x00,0x00,0x00,0x20,0x10,0x08,0x06,0x40,0x80,0x7F,0x00,0x00,0x02,0x04,0x08,0x30,0x00,0x00,1.2 12864LCD工作原理12864概述:带中文字库的128X64是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为12864, 内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。可以显示84行1616点阵的汉字. 也可完成图形显示.低电压低功耗是其又一显著特点。由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。基本特性:(1) 、低电源电压(VDD:+3.0-+5.5V)(2)、显示分辨率:12864点 (3)、内置汉字字库,提供8192个1616点阵汉字(简繁体可选) (4)、内置 128个168点阵字符 (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控制器接口信号说明:1、RS,R/W的配合选择决定控制界面的4种模式:RSR/W功能说明LLMPU写指令到指令暂存器(IR)LH读出忙标志(BF)及地址记数器(AC)的状态HLMPU写入数据到数据暂存器(DR)HHMPU从数据暂存器(DR)中读出数据表1.12、E信号E状态执行动作结果高低I/O缓冲DR配合/W进行写数据或指令高DRI/O缓冲配合R进行读数据或指令低高无动作表1.2指令说明模块控制芯片提供两套控制命令,基本指令和扩充指令如下:指令表1:(RE=0:基本指令)指令指令码功能RSR/WD7D6D5D4D3D2D1D0清除显示0000000001将DDRAM填满20H,并且设定DDRAM的地址计数器(AC)到00H地址归位000000001X设定DDRAM的地址计数器(AC)到00H,并且将游标移到开头原点位置;这个指令不改变DDRAM 的内容显示状态开/关0000001DCBD=1: 整体显示 ONC=1: 游标ONB=1:游标位置反白允许进入点设定00000001I/DS指定在数据的读取与写入时,设定游标的移动方向及指定显示的移位游标或显示移位控制000001S/CR/LXX设定游标的移动与显示的移位控制位;这个指令不改变DDRAM 的内容功能设定00001DLXREXXDL=0/1:4/8位数据RE=1: 扩充指令操作RE=0: 基本指令操作设定CGRAM地址0001AC5AC4AC3AC2AC1AC0设定CGRAM 地址设定DDRAM地址0010AC5AC4AC3AC2AC1AC0设定DDRAM 地址(显示位址)第一行:80H87H第二行:90H97H读取忙标志和地址01BFAC6AC5AC4AC3AC2AC1AC0读取忙标志(BF)可以确认内部动作是否完成,同时可以读出地址计数器(AC)的值写数据到RAM10数据将数据D7D0写入到内部的RAM (DDRAM/CGRAM/IRAM/GRAM)读出RAM的值11数据从内部RAM读取数据D7D0(DDRAM/CGRAM/IRAM/GRAM)指令表2:(RE=1:扩充指令)指令指令码功能RSR/WD7D6D5D4D3D2D1D0待命模式0000000001进入待命模式,执行其他指令都棵终止待命模式卷动地址开关开启000000001SRSR=1:允许输入垂直卷动地址SR=0:允许输入IRAM和CGRAM地址反白选择00000001R1R0选择2行中的任一行作反白显示,并可决定反白与否。初始值R1R000,第一次设定为反白显示,再次设定变回正常睡眠模式0000001SLXXSL=0:进入睡眠模式SL=1:脱离睡眠模式扩充功能设定00001CLXREG0CL=0/1:4/8位数据RE=1: 扩充指令操作RE=0: 基本指令操作G=1/0:绘图开关设定绘图RAM地址0010AC60AC50AC4AC3AC3AC2AC2AC1AC1AC0AC0设定绘图RAM先设定垂直(列)地址AC6AC5AC0再设定水平(行)地址AC3AC2AC1AC0将以上16位地址连续写入即可备注:当IC1在接受指令前,微处理器必须先确认其内部处于非忙碌状态,即读取BF标志时,BF需为零,方可接受新的指令;如果在送出一个指令前并不检查BF标志,那么在前一个指令和这个指令中间必须延长一段较长的时间,即是等待前一个指令确实执行完成。2实验原理图设计点阵式液晶显示屏与8051单片机管脚连接如下:第1脚:GND接地;第2脚:VCC接5v电源;第3脚:DB7DB0接8051芯片的P0.7P0.0口;第4脚:CS1接8051芯片的P2.3;CS3接8051芯片的P2.4口;第5脚:E端为使能端,当 E 端由高电平跳变成低电平时,液晶模块执行命令。 接8051芯片的P2.0口;第6脚:RS 为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。 接8051芯片的P2.1口;第7脚:R/W 为读写信号线,高电平时进行读操作,低电平时进行写操作。当 RS和 R/W共同为低电平时可以写入指令或者显示地址,当 RS 为低电平 R/W 为高电平时可以读忙信号,当 RS 为高电平 R/W为低电平时可以写入数据。接8051芯片的P2.2口;第8脚:/PES为复位信号,V0为可调;接完图像如下:图2.1电路原理图3 程序及流程图设计3.1程序代码#include #include #define uint unsigned int#define uchar unsigned char#define DATA P0 /LCD12864数据线 sbit RS=P22; / 数据指令 选择 sbit RW=P21; / 读写 选择 sbit EN=P20; / 读写使能 sbit cs1=P24; / 片选1 sbit cs2=P23; / 片选2 /*定义中文字库*/字体取模时的选项设置为:点阵格式为阴码,取模方式为列行式,取模走向为逆向,文字大小为宽x高=16x16 uchar code Hzk=/*- 文字: 万 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -*/0x04,0x04,0x04,0x04,0x04,0xFC,0x44,0x44,0x44,0x44,0x44,0xC4,0x04,0x04,0x04,0x00,0x80,0x40,0x20,0x18,0x06,0x01,0x00,0x00,0x40,0x80,0x40,0x3F,0x00,0x00,0x00,0x00,/*- 文字: 事 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -*/0x04,0x04,0x74,0x54,0x54,0x54,0x54,0xFF,0x54,0x54,0x54,0x54,0x74,0x04,0x04,0x00,0x04,0x04,0x15,0x15,0x15,0x55,0x95,0x7F,0x15,0x05,0x15,0x15,0x1F,0x04,0x04,0x00,/*- 文字: 如 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -*/0x10,0x10,0xF0,0x1F,0x10,0x10,0xF0,0x00,0x00,0xF8,0x08,0x08,0x08,0xF8,0x00,0x00,0x80,0x41,0x22,0x14,0x08,0x16,0x61,0x00,0x00,0x7F,0x20,0x20,0x20,0x7F,0x00,0x00,/*- 文字: 意 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -*/0x10,0x10,0x12,0xD2,0x56,0x5A,0x52,0x53,0x52,0x5A,0x56,0xD2,0x12,0x10,0x10,0x00,0x40,0x30,0x00,0x77,0x85,0x85,0x8D,0xB5,0x85,0x85,0x85,0xE7,0x00,0x10,0x60,0x00,/*- 文字: 新 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -*/0x40,0x44,0x54,0x65,0xC6,0x64,0x54,0x44,0x00,0xFC,0x44,0x44,0xC4,0x42,0x40,0x00,0x20,0x12,0x4A,0x82,0x7F,0x02,0x0A,0x92,0x60,0x1F,0x00,0x00,0xFF,0x00,0x00,0x00,/*- 文字: 年 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -*/0x00,0x20,0x18,0xC7,0x44,0x44,0x44,0x44,0xFC,0x44,0x44,0x44,0x44,0x04,0x00,0x00,0x04,0x04,0x04,0x07,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x04,0x04,0x00,/*- 文字: 快 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -*/0x00,0xE0,0x00,0xFF,0x10,0x20,0x08,0x08,0x08,0xFF,0x08,0x08,0xF8,0x00,0x00,0x00,0x01,0x00,0x00,0xFF,0x00,0x81,0x41,0x31,0x0D,0x03,0x0D,0x31,0x41,0x81,0x81,0x00,/*- 文字: 乐 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -*/0x00,0x00,0xE0,0x9C,0x84,0x84,0x84,0xF4,0x82,0x82,0x83,0x82,0x80,0x80,0x00,0x00,0x00,0x20,0x10,0x08,0x06,0x40,0x80,0x7F,0x00,0x00,0x02,0x04,0x08,0x30,0x00,0x00,;/*状态检查,LCD是否忙*/voidCheckState()uchardat;/状态信息(判断是否忙) RS=0; / 数据指令选择,D/I(RS)=L ,表示 DB7DB0 为显示指令数据 RW=1; /R/W=H ,E=H数据被读到DB7DB0 do DATA=0x00; EN=1;/EN下降源 _nop_(); /一个短延时 dat=DATA; EN=0;dat=0x80 &dat; /仅当第7位为0时才可操作(判别busy信号) while(!(dat=0x00); /*写命令到LCD中*/SendCommandToLCD(uchar com)CheckState();/状态检查,LCD是否忙 RS=0; /向LCD发送命令。RS=0写指令,RS=1写数据 RW=0;/R/W=L ,E=HL数据被写到 IR 或 DR DATA=com; /com :命令 EN=1; _nop_(); _nop_(); EN=0; /EN下降源 /*设置页 0xb8是页的首地址*/voidSetLine(uchar page) page=0xb8|page; /1011 1xxx 0=page=7 设定页地址-X 0-7,8行为一页64/8=8,共8页 SendCommandToLCD(page); /*设定显示开始行,0xc0是行的首地址*/ voidSetStartLine(ucharstartline) startline=0xc0|startline; /1100 0000 SendCommandToLCD(startline); /设置从哪行开始:0-63,一般从0 行开始显示 /*设定列地址-Y 0-63 ,0x40是列的首地址*/ voidSetColumn(uchar column) column=column &0x3f; /column最大值为64,越出 0=column=63 column= 0x40|column; /01xx xxxxSendCommandToLCD(column); /*开关显示,0x3f是开显示,0x3e是关显示*/voidSetOnOff(ucharonoff)onoff=0x3e|onoff; /0011 111x,onoff只能为0或者1 SendCommandToLCD(onoff);/*写显示数据 */voidWriteByte(uchardat)CheckState();/状态检查,LCD是否忙 RS=1; /RS=0写指令,RS=1写数据 RW=0;/R/W=L ,E=HL数据被写到 IR 或 DR DATA=dat;/dat:显示数据 EN=1; _nop_(); _nop_(); EN=0;/EN下降源/*选择屏幕screen: 0-全屏,1-左屏,2-右屏*/voidSelectScreen(uchar screen) switch(screen) case 0: cs1=0;/全屏显示 _nop_(); _nop_(); _nop_(); cs2=0; _nop_(); _nop_(); _nop_(); break; case 1: cs1=0;/左显示屏 _nop_(); _nop_(); _nop_(); cs2=1; _nop_(); _nop_(); _nop_(); break; case 2: cs1=1;/右显示屏 _nop_(); _nop_(); _nop_(); cs2=0; _nop_(); _nop_(); _nop_(); break; /*清屏screen: 0-全屏,1-左屏,2-右*/ voidClearScreen(uchar screen) uchari,j;SelectScreen(screen); for(i=0;i16;i+) /控制页数0-7,共8页 SetLine(i);SetColumn(0); for(j=0;j64;j+) /控制列数0-63,共64列 WriteByte(0x00); /写点内容,列地址自动加1 /*延时程序*/voiddelay(uint z)uinti,j;for(i=0; iz; i+)for(j = 0; j 110; j+);/*初始化LCD*/voidInitLCD() CheckState();SelectScreen(0);SetOnOff(0); /关显示 SelectScreen(0);SetOnOff(1); /开显示 SelectScreen(0); ClearScreen(0);/清屏 SetStartLine(0); /开始行:0 /*显示全角汉字*/ void Display(ucharss,ucharpage,ucharcolumn,uchar number)int i;/选屏参数,pagr选页参数,column选列参数,number选第几汉字输出 SelectScreen(ss);column=column&0x3f;SetLine(page);/写上半页 SetColumn(column); /控制列 for(i=0;i16;i+) /控制16列的数据输出 WriteByte(Hzki+32*number); /i+32*number汉字的前16个数据输出 SetLine(page+1); /写下半页 SetColumn(column); /控制列 for(i=0;i1;i-) /12864有128列,显示开始行从0128切换,因此可以实现循环显示 Se

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论