为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

基于单片机的LCD显示系统设计_课程设计论文

2018-09-22 42页 doc 1MB 58阅读

用户头像 个人认证

北溟愚鱼

暂无简介

举报
基于单片机的LCD显示系统设计_课程设计论文 课程设计(论文) 题 目 名 称 基于单片机的LCD显示系统设计 课 程 名 称 单片机原理及在电气测控学科中的应用 学 生 姓 名 陈璟 学 号 0941201216 系 、专 业 电气工程系、09电气测控类 指 导 教 师 陈源 ...
基于单片机的LCD显示系统设计_课程设计论文
课程(论文) 题 目 名 称 基于单片机的LCD显示系统设计 课 程 名 称 单片机原理及在电气测控学科中的应用 学 生 姓 名 陈璟 学 号 0941201216 系 、专 业 电气工程系、09电气测控类 指 导 教 师 陈源 2011年6月30日 邵阳学院课程设计(论文)任务书 年级专业 电气工程系 学生姓名 陈璟 学 号 0941201216 题目名称 基于单片机的LCD显示系统设计 设计时间 2011年6月20日—2011年7月1日 课程名称 单片机原理及在电气测控学科中的应用 课程编号 121200105 设计地点 数字控制与PLC实验室(305) 1、 课程设计(论文)目的 课程设计是在校学生素质教育的重要环节,是理论与实践相结合的桥梁和纽带。单片机课程设计,要求学生更多的完成软硬结合的动手实践,解决目前学生课程设计过程中普遍存在的缺乏动手能力的现象. 《单片机课程设计》是继《电子技术》、和《单片机原理与应用》课程之后开出的实践环节课程,其目的和任务是训练学生综合运用已学课程“电子技术基础”、“单片机原理及应用”的基本知识,独立进行单片机应用技术和开发工作,掌握单片机程序设计、调试和应用电路设计、分析及调试检测。 二、已知技术参数和条件 设计要求掌握单片机的基本原理;掌握具有一定功能电路的设计;掌握程序设计的方法。 1、51系列单片机 2、 12864LCD 3、 按键 三、任务和要求 设计LCD显示系统,要求如下: 1、 设计12864LCD与单片机的显示接口电路。 2、 至少设置两个按键,按下不同的按键,显示不同的内容,要求所显示内容为汉字。 在此基础上请任意发挥。 注:1.此由指导教师填写,经系、教研室审批,指导教师、学生签字后生效; 2.此表1式3份,学生、指导教师、教研室各1份。 四、参考资料和现有基础条件(包括实验室、主要仪器设备等) 1、李华.MCS-51系列单片机实用接口技术(第2版).北京航空航天大学出版社,2001 2、单片机实验与实践教程,北京航空航天大学出版社,何立民等2004年7月 3、求是科技.单片机典型模块设计实例导航(第2版).人民邮电出版社,2008 4、THKSCM-1型单片机实验系统实验指导书、KEIL 软件,WAVE 软件 5、数字控制与PLC实验室”THKSCM-1型单片机实验系统”。 5、 进度安排 2010年6月20日-21日:收集和课程设计有关的资料,熟悉课题任务何要求 2010年6月22日:总体方案设计 2010年6月23日-24日:硬件电路设计 2010年6月25日-26日:软件设计 2010年6月27日-29日:系统调试改进 2010年6月30日:整理书写设计说明书 2010年7月1日:答辩并考核 六、教研室审批意见 教研室主任(签字): 年 月 日 七|、主管教学主任意见 主管主任(签字): 年 月 日 八、备注 指导教师(签字): 学生(签字): 邵阳学院课程设计(论文)评阅表 学生姓名 陈璟 学 号 0941201216 系 电气工程系 专业班级 电本三班 题目名称 基于单片机的LCD显示系统设计 课程名称 单片机原理及在电气测控学科中的运用 一、学生自我总结 在这将近一个月的不断学习中,我知道了更多关于AT89C52的知识。在老师的指导和同学们的帮助下,我完成了这次的单片机课程设计——基于单片机89C52的LCD显示系统设计。在此次课程设计中,我接触到了以前从未接触过的知识,也是在书本上学不到的知识。在不断地探索和追求中,我发现知识是无穷无尽的。通过这次课程设计,我知道了实际操作的重要性,在以后的学习中生活我会更加注意实际操作。 学生签名: 年 月 日 二、指导教师评定 评分项目 平时成绩 论文 答辩 综合成绩 权 重 30 40 30 老师填写等级: 优、良、中、及格、不及格 单项成绩 指导教师评语: 指导教师(签名): 年 月 日 注:1、本表是学生课程设计(论文)成绩评定的依据,装订在设计说明书(或论文)的“任务书”页后面; 2、表中的“评分项目”及“权重”根据各系的考核细则和评分确定。 目录 6摘要 7Abstract 8一. 液晶显示 81.1 12864液晶简介 91.2 12864的基本特点 91.3 液晶显示的原理 111.4 12864液晶显示动态指标及术语 161.5 AT89C52相关知识 18二、 方案论证 182.1字模数据的存储 192.2 通信电路 20三,电路与程序设计 203.1 系统硬件电路图 21 3.2 系统软件设计 23四,结果分析 234.1 系统调试 244.2 仿真显示结果 28总结 29参考文献 摘要 本文讲述的是一种基于AT89C52单片机实现控制的LCD液晶显示屏。硬件系统由单片机系统和液晶显示系统组成,PC机进行显示内容的编辑和字模数据的提取;液晶显示系统由主控模块和LCD液晶显示模块接口电路组成,主控模块负责接收单片机字模数据并控制各显示模块工作,显示模块以主控制器为核心,控制LCD液晶显示屏显示。 关键字: AT89C52 12864LCD液晶显示器 Abstract This article designs with develops one kind based on AT89C51 SCM(Single Chip Microcomputer ) control LCD display monitor . This system is composed by on SCM system and LCD display system, and the PC machine carries on the demonstration content the edition and matrix data withdrawing; LCD display system controls the module and certain LCD by the host demonstrated, the host ‘s duty is to receive the SCM matrix data and controls each demonstration module work and controls the LCD display monitor display. Keyword: LCD AT89C51 SCM(Single Chip Microcomputer) 一. 液晶显示 1.1 12864液晶简介 液晶(Liquid Crystal,简称LC)是一种高分子材料,因为其特殊的物理、化学、光学特性,20世纪中叶开始被广泛应用在轻薄型的显示技术上。  人们熟悉的物质状态(又称相)为气、液、固,较为生疏的是电浆和液晶(Liquid Crystal,简称LC)。液晶相要具有特殊形状分子组合始会产生,它们可以流动,又拥有结晶的光学性质。液晶的定义,现在已放宽而囊括了在某一温度范围可以是现液晶相,在较低温度为正常结晶之物质。而液晶的组成物质是一种有机化合物,也就是以碳为中心所构成的化合物。 同时具有两种物质的液晶,是以分子间力量组合的,它们的特殊光学性质,又对电磁场敏感,极有实用价值。 1.2 12864的基本特点 液晶显示(LCD)具有功耗低、体积小、重量轻、超薄等许多其它显示器无法比拟的优点,近几年来被广泛用于单片机控制的智能仪器、仪表和低功耗电子产品中。LCD 可分为段位式LCD、字符式LCD 和点阵式LCD。其中,段位式LCD 和字符式LCD 只能用于字符和数字的简单显示,不能满足图形曲线和汉字显示的要求;而点阵式LCD 不仅可以显示字符、数字,还可以显示各种图形、曲线及汉字,并且可以实现屏幕上下左右滚动,动画功能,分区开窗口,反转,闪烁等功能,用途十分广泛。 1.3 液晶显示的原理 液晶显示材料最常见的用途是电子表和计算器的显示板,为什么会显示数字呢?原来这种液态光电显示材料,利用液晶的电光效应把电信号转换成字符、图像等可见信号。液晶在正常情况下,其分子排列很有秩序,显得清澈透明,一旦加上直流电场后,分子的排列被打乱,一部分液晶变得不透明,颜色加深,因而能显示数字和图象。 12864LCD是一种图形点阵液晶显示器,它主要由行驱动器/列驱动器及128×64全点阵液晶显示器组成。可完成图形显示,也可以显示8×4个(16×16点阵)汉字。 主要技术参数和性能: 1.电源:VDD:+5V; 模块内自带-10V负压,用于LCD的驱动电压。 2.显示内容:128(列)×64(行)点 3.全屏幕点阵 4.七种指令 5.与CPU接口采用8位数据总线并行输入输出和8条控制线 6.占空比1/64 7.工作温度:-10℃∽+50℃,存储温度:-20℃∽+70 模块主要硬件构成说明 图 1-1 结构框图 IC3为行驱动器。IC1,IC2为列驱动器。IC1,IC2,IC3含有以下主要功能器件。了解如下器件有利于对LCD模块之编程。 1. 指令寄存器(IR) IR是用于寄存指令码,与数据寄存器数据相对应。当D/I=0时,在E信号下降沿的作用下,指令码写入IR。 2.数据寄存器(DR) DR是用于寄存数据的,与指令寄存器寄存指令相对应。当D/I=1时,在下降沿作用下,图形显示数据写入DR,或在E信号高电平作用下由DR读到DB7∽DB0数据总线。DR和DDRAM之间的数据传输是模块内部自动执行的。 3.忙标志:BF BF标志提供内部工作情况。BF=1表示模块在内部操作,此时模块不接受外部指令和数据。BF=0时,模块为准备状态,随时可接受外部指令和数据。 利用STATUS READ指令,可以将BF读到DB7总线,从检验模块之工作状态。 4.显示控制触发器DFF 此触发器是用于模块屏幕显示开和关的控制。DFF=1为开显示(DISPLAY OFF),DDRAM的内容就显示在屏幕上,DFF=0为关显示(DISPLAY OFF)。 DDF的状态是指令DISPLAY ON/OFF和RST信号控制的。 5.XY地址计数器 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地址表(见第6页)。 7.Z地址计数器 Z地址计数器是一个6位计数器,此计数器具备循环记数功能,它是用于显示行扫描同步。当一行扫描完成,此地址计数器自动加1,指向下一行扫描数据,RST复位后Z地址计数器为0。 Z地址计数器可以用指令DISPLAY START LINE预置。因此,显示屏幕的起始行就由此指令控制,即DDRAM的数据从哪一行开始显示在屏幕的第一行。此模块的DDRAM共64行,屏幕可以循环滚动显示64行。 1.4 12864液晶显示动态指标及术语 并行接口模块说明: 表1-1 管脚号 管脚名称 电平 管脚功能描述 1 VSS 0V 电源地 2 VCC 3.0+5V 电源正 3 V0 - 对比度(亮度)调整 4 RS(CS) H/L RS=“H”,表示DB7——DB0为显示数据 RS=“L”,表示DB7——DB0为显示指令数据 5 R/W(SID) H/L R/W=“H”,E=“H”,数据被读到DB7——DB0 R/W=“L”,E=“H→L”, DB7——DB0的数据被写到IR或DR 6 E(SCLK) H/L 使能信号 7 DB0 H/L 三态数据线 8 DB1 H/L 三态数据线 9 DB2 H/L 三态数据线 10 DB3 H/L 三态数据线 11 DB4 H/L 三态数据线 12 DB5 H/L 三态数据线 13 DB6 H/L 三态数据线 14 DB7 H/L 三态数据线 15 PSB H/L H:8位或4位并口方式,L:串口方式(见注释1) 16 NC - 空脚 17 /RESET H/L 复位端,低电平有效(见注释2) 18 VOUT - LCD驱动电压输出端 19 A VDD 背光源正端(+5V)(见注释3) 20 K VSS 背光源负端(见注释3) *注释1:如在实际应用中仅使用并口通讯模式,可将PSB接固定高电平,也可以将模块上的J8和“VCC”用焊锡短接。 *注释2:模块内部接有上电复位电路,因此在不需要经常复位的场合可将该端悬空。    *注释3:如背光和模块共用一个电源,可以将模块上的JA、JK用焊锡短接。 指令说明 指令表 表 1-2 指 指 令 码 功能 令 W/R D/I DD7 DD6 DD5 DD4 DD3 DD2 DD1 D0 显示ON/OFF 0 0 00 00 01 01 01 11 11 1/0 控制显示器的开关,不影响DDRAM中数据和内部状态 显示起始行 0 0 11 11 显示起始行 (0····63) 指定显示屏从DDRAM中哪一行开始显示数据 设置X地址 0 0 11 00 11 11 11 X:0···7 设置DDRAM中的页地址(X地址) 设置Y地址 0 0 00 11 Y地址(0···63) 设置地址(Y地址) 读 状 态 1 0 B U S Y U 00 OON/ OFF R S T S R S T 00 00 00 0 读取状态 RST 1:复位0:正常 ON/OFF 1:显示开 0:显示关 BUSY 0:READY 1:IN OPERATION 写显示数据 0 1 显示数据 将数据线上的数据DB7∽DB0写入DDRAM 读显示数据 1 1 显示数据 将DDRAM上的数据读入数据线DB7∽DB0 1.显示开关控制(DISPLAY ON/OFF) 代码 R/W D/I DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 形式 0 0 0 0 1 1 1 1 1 D D=1:开显示(DISPLAY ON)意即显示器可以进行各种显示操作 D=0:关显示(DISPLAY OFF)意即不能对显示器可以进行各种显示操作 2.设置显示起始行 代码 R/W D/I DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 形式 0 0 1 1 A5 A4 A3 A2 A1 A0 前面在Z地址计数器一节已经描述了显示起始行是由Z地址计数器控 制的。 A5∽A0的6位地址自动送入Z地址计数器,起始行的地址可以是0∽ 63的任意一行。 例如: 选择A5∽A0是62,则起始行与DDRAM行的对应关系如下: DDRAM 行:62 63 0 1 2 3·····················28 29屏幕显示行:1 2 3 4 5 6·····················31 32 3.设置页地址 (页地址) 代码 R/W D/I DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 形式 0 0 1 0 1 1 1 A2 A1 A0 所谓页地址就是DDRAM的行地址,8行为一页,模块共64行即8页, A2 ∽A0表示0∽7页。读写数据对地址没有影响,页地址由本指令或RST信号 改变复位后页地址为0。页地址与DDRAM的对应关系见DDRAM地址表。 4.设置Y地址(SET Y ADDRESS)(行地址) 代码 R/W D/I DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 形式 0 0 0 1 A5 A4 A3 A2 A1 A0 此指令的作用是将A5∽A0送入Y地址计数器,作为DDRAM的Y地址指针。 在对DDRAM进行读写操作后,Y地址指针自动加1,指向下一个DDRAM单元。 DDRAM地址表: 表 1-3 CS1=1 CS2=1 Y= 0 1 ··· 62 63 0 1 ··· 62 63 行号 DB0 DB0 DB0 DBO DBO DBO DBO DBO DBO DBO 0 ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ X=0 DB7 DB7 DB7 DB7 DB7 DB7 DB7 DB7 DB7 DB7 7 DB0 DB0 DB0 DB0 DB0 DB0 DB0 DB0 DB0 DB0 8 ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ DB7 DB7 DB7 DB7 DB7 DB7 DB7 DB7 DB7 DB7 55 X=7 DB0 DBO DBO DBO DBO DBO DBO DBO DBO DBO 56 ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ DB7 DB7 DB7 DB7 DB7 DB7 DB7 DB7 DB7 DB7 63 5.读状态(STATUS READ) 代码 R/W D/I DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 形式 0 1 BUSY 0 ON/ OFF RET 0 0 0 0 当R/W=1 D/I=0时,在E信号为“H”的作用下,状态分别输出到数据总线(DB7∽DB0)的相应位。 BF:前面已叙述过(见BF标志位一节)。 ON/OFF:表示DFF触发器的状态(见DFF触发器一节)。 RST:RST=1表示内部正在初始化,此时组件不接受任何指令和数据。 6.写显示数据(WRITE DISPLAY DATE) 代码 R/W D/I DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 形式 0 1 D7 D6 D5 D4 D3 D2 D1 D0 D7∽D0为显示数据,此指令把D7∽D0写入相应的DDRAM单元,Y地指针自动加1。 7.读显示数据(READ DISPLAY DATE) 代码 R/W D/I DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 形式 1 1 D7 D6 D5 D4 D3 D2 D1 D0 此指令把DDRAM的内容D7∽D0读到数据总线DB7∽DB0,Y地址指针自动加1。 读写操作时序 1.读写时序参数表 表 1-4 名 称 符 号 最小值 典型值 最大值 单位 E周期时间 Tcyc 1000 --- --- ns E高电平宽度 Pweh 450 --- --- ns E低电平宽度 Pwel 450 --- --- ns E上升时间 Tr --- --- 25 ns E下降时间 Tf --- --- 25 ns 地址建立时间 Tas 140 --- --- ns 地址保持时间 Tah 10 --- --- ns 数据建立时间 Tdsw 200 --- --- ns 数据延迟时间 Tddr --- --- 320 ns 写数据保持时间 Tdhw 10 --- --- ns 读数据保持时间 Tdhw 20 --- --- ns 1.5 AT89C52相关知识 VCC:供电电压。 GND:接地。 P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程 序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。 P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作 输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻 拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存 储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器 的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。 图 1-2 89C52单片机 P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。 P3口也可作为AT89C51的一些特殊功能口,如下表所示: 口管脚 备选功能 P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 /INT0(外部中断0) P3.3 /INT1(外部中断1) P3.4 T0(记时器0外部输入) P3.5 T1(记时器1外部输入) P3.6 /WR(外部数据存储器写选通) P3.7 /RD(外部数据存储器读选通) P3口同时为闪烁编程和编程校验接收一些控制信号。 RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE 端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器 时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。 PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。 EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时, /EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。 二、 方案论证 此LCD液晶显示控制系统设计的关键是要实现LCD的显示控制。应该先从显示方式的确定入手,接下来设计相应显示方式的电路,要实现显示内容的实时更新,就必须考虑字模数据的存储及通信电路的设计。 2.1字模数据的存储 由于89C51单片机内部程序存储器(ROM)只有4K空间,本设计采用8×16点阵显示一个汉字,每一行需要两个字节数据,一个汉字占16×2=32字节,汉字一共有6000多个,不可能将庞大的汉字字库存入在单片机内部,即使将预先要显示的内容存入ROM中,也不便于实时控制,所以只有考虑扩展外部数据存储器。 方案一:采用标准字库,制作一个专用硬字库。这种方法仿效中文DOS的办法,将一个标准的汉字库装入ROM存储器,再根据汉字的机内码在字库中寻址,找到对应的字模,提取后送到显示器显示。因为采用了和PC机相同的编码(机内码),软件的开发和维护非常简单,基本上与写PC机软件差不多。而对单片机系统自身的要求则相对高多了,16×16点阵的字库需要256K字节,但是一般8位单片机的寻址能力只有64K字节,要进行存储器扩充,除增加很大一部分硬件成本外,还因为要进行存储器分页管理、地址切换,显示速度明显受影响。 方案二:利用Windows自带的字库(即使用软字库)。通过软件编程直接在字库中找到需要显示字符的区位码并读出其字符码,存于一个文本文件中,待所有显示内容的字符码查询完毕后,将存放所有字符码的文本文件通过串行通信发送给单片机,单片机将接收到的数据存放在外部扩展的数据存储器中,数据接收完毕后,单片机就从存储器中依次读出每一个字符的字符码并送到LCD显示屏显示。该方案与方案一相比,虽然通信过程占整个显示周期的比例相对较大,但是硬件电路设计简单,成本较低,减少了单片机查询硬件字库所需要的时间,提高了单片机动态扫描的速度,字符显示的稳定度较高。 从设计成本、显示内容的稳定性、硬件电路设计的简易程度等方面综合考虑,第二种方案明显优于第一方案,所以采用第二种方案解决字模的问题。 2.2 通信电路 并行通信:采用并行传送方式在微机与外部设备之间进行数据传送的接口叫并行接口。主要特点:一是同时并行传送的二进位数就是数据宽度;二是在计算机与外设间采用应答式的联络信号来协调双方的数据操作。传送的数据位1-128位,一般为8位。单片机与外部设备之间也通常采用8位并行I/O接口进行短距离的通信。其传输距离近,传送方式单一,每次传送一个字或一个字节。 图2-1 并行通信方式 三,电路与程序设计 3.1 系统硬件电路图 工作原理:电源电路为单片机以及其他模块提供5V电源。晶振模块为单片机提供时钟标准,使系统各部分能协调工作。复位电路模块为单片机系统提供复位功能。单片机作为主控制器,根据输入信号对系统进行相应的控制。 系统液晶显示内容为汉子和字母加数字,当系统上电后,先按下复位键S,其目的是为了避免后续显示被先前信号或外来信号所干扰。按下key1或者key2时,系统接收到指令使显示器分别显示汉字和字母数字,清除屏幕显示则按复位键S即可。 图 3-1 硬件电路图(未上电) 3.2 系统软件设计 1,功能介绍 当系统启动后,由于显示器上电及程序的初始化,屏幕背光灯亮,随着单片机对程序的读取以及系统对指令的执行,显示器进行检查忙状态,读写数据,设置行列等准备工作,而后先清除屏幕,再随着对键盘的操作显示出文字及数字和字母等内容。最后由复位操作发出命令清除屏幕。 2,图 显示的子程序通过指针从数据库中逐个提取数据送如液晶显示模块的显示RAM进行显示。数据库中的数据为要显示的内容,此汉字字模提取软件不仅可以提取汉字字模的十六进制数据,而且可以提取数字和字母的十六进制数据。 其显示过程是先对显示器进行初始化,接着将其清零,将已计算好的字库内容调用进去,即定入显示数据,再对显示器进行读忙,而后进行读写操作,显示调用内容,最后复位结束。 其显示内容过程先对显示的内容在RAM中位置进行计算,再对内容进行排序显示,而后取出数据显示出来,最后结束。 3,部分程序定义 对LCD12864显示器及AT89C52各接口进行定义 #include #define uchar unsigned char #define uint unsigned int sbit e=P2^0; sbit wr=P2^1; sbit rs=P2^2; sbit cs1=P2^3; sbit cs2=P2^4; sbit key1=P1^0; sbit key2=P1^1; 对LCD12864显示器进行状态检查 void checkstate() { uchar bf; rs=0; wr=1; do{ P0=0x00; bf=0; e=1; delay(0); e=0; bf=P0&0x80; }while(!(bf==0x00)); } 对LCD12864显示器进行初始化 void init12864() { checkstate(); slectscreen(0); setonoff(0); slectscreen(0); setonoff(1); slectscreen(0); clearscreen(0); setstartline(0); } 四,结果分析 4.1 系统调试 LCD液晶显示电路调试显示: 硬件电路设计及软件设计好之后进行各模块的调试,首先调试字符显示部分,单片机的调试使用伟福单片机仿真器。 采用直接查字符码表显示的办法,将要显示汉字的字符码直接写在单片机程序中并输出显示。 计算机与单片机通信电路调试: 将计算机与单片机相连之后调试也就是调试单片机的数据收发功能。 系统整体调试: 将计算机程序通过仿真器传送到89C52单片机内部ROM中,用线将液晶显示系统与计算机并行口连接起来,在LCD显示屏上能够实现要显示的数据。 4.2 仿真显示结果 图4-1 初始状态 图4-2 复位后先按下key1时的显示 图 4-3 复位后先按下key2是的显示 图 4-4 复位后连续按下key1和key2的显示 总结 本系统的设计已经全部完成,基本达到了预期的目的与要求。但是在系统的调试方面还不够健全。汉字的动态显示、显示内容的实时更新等方面做得不够好,但是由于时间仓促、条件有限,设计结果并不是很好,还存在诸如:显示内容的单一,动态显示效果不明显等问题,我准备在今后的工作实践过程中来进一步完善此设计。 一个星期的课程设计主要经历了以下几个过程:广泛查阅资料、文献综述、总体思路的确定、方案的具体化及论证、方案的确定、软件的调试、系统的调试,还包括论文总结,我认为整个过程是一个联系非常紧密的过程,前一过程的结果为后一过程奠定了基础。在整个过程中,本人不仅对LCD控制系统的每一个细节有了比较深入的掌握,而且对关于系统扩展的相关知识有了感性的认识,不仅掌握了大量的专业知识,更学会了系统模块设计的基本思想。 总之,通过这次课程设计,本人在理论知识方面和思想方面对单片机课程都有很大的收获。 参考文献 [1]李朝青.单片机原理及接口技术.(第三版),北京航空航天大学出版社,1999:18-47页 [2]朱清慧 张凤蕊 翟天嵩 王志奎.Proteus 教程——电子线路设计·制版与仿真.[M],清华大学出版社,2008:1-116页 [3]李维祥.单片机原理与应用[M].天津大学出版社,2001:1-96页 [4]钱逸秋.单片机原理与应用[M].电子工业出版社,2002:1-102页 [5]华成英,童诗白.模拟电子技术基础(第四版).高等教育出版社,2006:39-222页 [6]马忠梅,籍顺心,张凯.单片机C语言应用程序设计[M].北京航空航天大学出版社,2003:45-186页 [7]李光飞,李良儿,楼然苗.单片机C语言实例指导[M].北京航空航天大学出版社,2005:1-198页 [8]李维缇,郭强.液晶显示器件应用技术[M].北京邮电学院出版社,1993:35-201页 [9]马建国,孟宪元.电子设计自动化技术基础[M].清华大学出版, 2004:1-213页 [10] 张毅刚,刘杰主.《MCS-51单片机原理及应用》(第一版).哈尔滨工业大学出版社,2004:45-175页 附录1 源程序 #include #define uchar unsigned char #define uint unsigned int sbit e=P2^0; sbit wr=P2^1; sbit rs=P2^2; sbit cs1=P2^3; sbit cs2=P2^4; sbit key1=P1^0; sbit key2=P1^1; void delay(uint z) { while(z--); } //uchar code hanzi1[]={}; uchar code hanzi[]={ /*-- 文字: 单 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x00,0xF8,0x28,0x29,0x2E,0x2A,0xF8,0x28,0x2C,0x2B,0x2A,0xF8,0x00,0x00,0x00, 0x08,0x08,0x0B,0x09,0x09,0x09,0x09,0xFF,0x09,0x09,0x09,0x09,0x0B,0x08,0x08,0x00, /*-- 文字: 片 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x00,0x00,0xFE,0x10,0x10,0x10,0x10,0x10,0x1F,0x10,0x10,0x10,0x18,0x10,0x00, 0x80,0x40,0x30,0x0F,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0xFF,0x00,0x00,0x00,0x00, /*-- 文字: 机 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x08,0x08,0xC8,0xFF,0x48,0x88,0x08,0x00,0xFE,0x02,0x02,0x02,0xFE,0x00,0x00,0x00, 0x04,0x03,0x00,0xFF,0x00,0x41,0x30,0x0C,0x03,0x00,0x00,0x00,0x3F,0x40,0x78,0x00, /*-- 文字: 爱 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x40,0xB2,0x96,0x9A,0x92,0xF6,0x9A,0x93,0x91,0x99,0x97,0x91,0x90,0x30,0x00, 0x40,0x20,0xA0,0x90,0x4C,0x47,0x2A,0x2A,0x12,0x1A,0x26,0x22,0x40,0xC0,0x40,0x00, /*-- 文字: 好 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x10,0x10,0xF0,0x1F,0x10,0xF0,0x80,0x82,0x82,0x82,0xF2,0x8A,0x86,0x82,0x80,0x00, 0x80,0x43,0x22,0x14,0x0C,0x73,0x20,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00, /*-- 文字: 者 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x20,0x24,0x24,0x24,0x24,0xA4,0xBF,0x64,0x24,0x34,0x28,0x26,0x24,0x20,0x00, 0x04,0x04,0x04,0x02,0x02,0xFF,0x49,0x49,0x49,0x49,0x49,0x49,0xFF,0x00,0x00,0x00, /*-- 文字: 电 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x00,0xF8,0x48,0x48,0x48,0x48,0xFF,0x48,0x48,0x48,0x48,0xF8,0x00,0x00,0x00, 0x00,0x00,0x0F,0x04,0x04,0x04,0x04,0x3F,0x44,0x44,0x44,0x44,0x4F,0x40,0x70,0x00, /*-- 文字: 气 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x20,0x10,0x8C,0xA7,0xA4,0xA4,0xA4,0xA4,0xA4,0xA4,0xA4,0x24,0x04,0x04,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x30,0x40,0xF0,0x00, /*-- 文字: 工 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x00,0x02,0x02,0x02,0x02,0x02,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00, 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00, /*-- 文字: 程 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x10,0x12,0xD2,0xFE,0x91,0x11,0x80,0xBF,0xA1,0xA1,0xA1,0xA1,0xBF,0x80,0x00,0x00, 0x04,0x03,0x00,0xFF,0x00,0x41,0x44,0x44,0x44,0x7F,0x44,0x44,0x44,0x44,0x40,0x00, /*-- 文字: 系 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x00,0x02,0x22,0xB2,0xAA,0x66,0x62,0x22,0x11,0x4D,0x81,0x01,0x01,0x00,0x00, 0x00,0x40,0x21,0x13,0x09,0x05,0x41,0x81,0x7F,0x01,0x05,0x09,0x13,0x62,0x00,0x00, /*-- 文字: 电 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x00,0xF8,0x48,0x48,0x48,0x48,0xFF,0x48,0x48,0x48,0x48,0xF8,0x00,0x00,0x00, 0x00,0x00,0x0F,0x04,0x04,0x04,0x04,0x3F,0x44,0x44,0x44,0x44,0x4F,0x40,0x70,0x00, /*-- 文字: 本 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x08,0x08,0x08,0x08,0x08,0xC8,0x38,0xFF,0x18,0x68,0x88,0x08,0x08,0x08,0x08,0x00, 0x08,0x08,0x04,0x02,0x05,0x04,0x04,0x7F,0x04,0x04,0x04,0x03,0x06,0x0C,0x04,0x00, /*-- 文字: 三 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x04,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x04,0x00,0x00, 0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00, /*-- 文字: 班 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x42,0x42,0xFE,0x42,0x42,0xE0,0x00,0xFF,0x00,0x42,0x42,0xFE,0x42,0x42,0x42,0x00, 0x10,0x10,0x0F,0x88,0x49,0x20,0x18,0x07,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x00, /*-- 文字: 陈 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0xFE,0x22,0x52,0x8E,0x00,0xC4,0xB4,0x8C,0xE7,0x84,0x84,0x84,0x84,0x04,0x00, 0x00,0xFF,0x02,0x04,0x23,0x10,0x0C,0x40,0x80,0x7F,0x00,0x02,0x04,0x18,0x30,0x00, /*-- 文字: 璟 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x42,0x42,0xFE,0x42,0x02,0x40,0x5F,0x55,0x55,0x75,0x55,0x55,0x5F,0x40,0x00, 0x00,0x10,0x10,0x0F,0x08,0x44,0x20,0x17,0x45,0x85,0x7D,0x05,0x15,0x27,0x40,0x00, /*-- 文字: --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 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, /*-- 文字: --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 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, /*-- 文字: --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 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, }; uchar code zimu[]={ /*-- 文字: Q --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00, /*-- 文字: Q --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00, /*-- 文字: 4 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00, /*-- 文字: 1 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00, /*-- 文字: 8 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00, /*-- 文字: 8 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00, /*-- 文字: 6 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00, /*-- 文字: 8 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00, /*-- 文字: 9 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00, /*-- 文字: 4 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00, /*-- 文字: 5 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00, /*-- 文字: --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*-- 文字: --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*-- 文字: --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*-- 文字: --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*-- 文字: --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*-- 文字: --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, }; void checkstate()//检查忙状态 { uchar bf; rs=0; wr=1; do{ P0=0x00; bf=0; e=1; delay(0); e=0; bf=P0&0x80; }while(!(bf==0x00)); } void write_com(uchar com)//写指令 { checkstate(); rs=0; wr=0; P0=com; e=1; delay(1); e=0; } void write_date(uchar date)//写数据 { checkstate(); rs=1; wr=0; P0=date; e=1; delay(1); e=0; } void setpage(uchar page)//设置页 { page=page|0xb8; write_com(page); } void setstartline(uchar line)//设置起始行 { line=line|0xc0; write_com(line); } void setcolumn(column)//设置列 { column=column&0x3f; column=column|0x40; write_com(column); } void setonoff(uchar onoff)//开关显示 { onoff=0x3e|onoff; write_com(onoff); } void slectscreen(uchar screen) { switch(screen) { case 0:cs1=0; delay(0); cs2=0; delay(0); break; case 1:cs1=0; delay(0); cs2=1; delay(0); break; case 2:cs1=1; delay(0); cs2=0; delay(0); break; } } void clearscreen(screen)//清除屏幕幕 { uchar i,j; slectscreen(screen); for(i=0;i<8;i++) { setpage(i); setcolumn(0); for(j=0;j<64;j++) { write_date(0x00); } } } void init12864()//初始化 { checkstate(); slectscreen(0); setonoff(0); slectscreen(0); setonoff(1); slectscreen(0); clearscreen(0); setstartline(0); } //显示文字 void displayhanzi(uchar screen,uchar page,uchar column,uchar number) { uchar i; slectscreen(screen); setpage(page); setcolumn(column); for(i=0;i<16;i++) { write_date(hanzi[i+32*number]); } setpage(page+1); setcolumn(column); for(i=0;i<16;i++) { write_date(hanzi[i+32*number+16]); } } //显示字母和数字 void displayzimu(uchar screen,uchar page,uchar column,uchar number) { uchar i; slectscreen(screen); setpage(page); setcolumn(column); for(i=0;i<8;i++) { write_date(zimu[i+16*number]); } setpage(page+1); setcolumn(column); for(i=0;i<8;i++) { write_date(zimu[i+16*number+8]); } } void main() { uchar i; key1=1; key2=1; init12864(); //slectscreen(0); clearscreen(0); setstartline(0); //displayhanzi(1,0,0,0); while(1) { if(key1==0) { if(key1==0) { key1=1; //delay(5); for(i=0;i<4;i++) { displayhanzi(1,0,i*16,i); displayhanzi(2,0,i*16,i+4); displayhanzi(1,2,i*16,i+8); displayhanzi(2,2,i*16,i+12); displayhanzi(1,4,i*16,i+16); //displayhanzi(2,4,i*16,i+5); //displayhanzi(1,6,i*16,i+9); //displayhanzi(2,6,i*16,i+16); } } } if(key2==0) { if(key2==0) { //delay(5); key2=1; for(i=0;i<8;i++) { displayzimu(1,6,i*8,i); displayzimu(2,6,i*8,i+8); } } } } } � EMBED PBrush ��� P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 GND B0 B1 B2 外 B3 部 B4 设 B5 备 B6 B7 GND GND 清 零 初始化 开始 始 图3-4 显示内容流程图 结束 写入数据代码 取数据代码 设置显示RAM地址 文本显示区首地址 计算显示RAM地址 开始 始 定入显示数据 状态读取 写指令(读数)据) 结束 图 3-3显示过程流程图
/
本文档为【基于单片机的LCD显示系统设计_课程设计论文】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索