1、 目录目录3摘要4第一章 绪论51.1 硬件环境分析51.2 实验箱简介5第二章 课程设计目的及课题分析62.1 课程设计目的62.2课题分析6第三章 实现原理73.1 点阵LCD的显示原理73.2 取模73.3功能扩展部分9第四章 PROTEUS硬件仿真104.1 硬件模拟软件介绍104.2程序流程图12附录13心得体会23参考文献24 摘要 单片机具有控制功能强、集成度高、体积小、低电压低能耗等特点,并且具有优异的性能价格比自20世纪70年代问世以来,受到人们的广泛关注。几十年间单片机的发展十分迅猛,在控制领域独占鳌头,在我国单片机已广泛应用于工业自动化控制自动控制智能仪表。家用电气电力电
2、子机电一体化设备等各个方面,而51单片机是各单片机中最为理想和最为典型具有代表性的一种。本次课程设计通过对它的学习应用以单片机为核心辅以必要的电路,设计一个简易的液晶显示控制装置。它是由直流电源供电通过LCD显示出来。实验中系统设计所需硬件都已集成于LAB6000实验箱上。本文详细介绍了基于单片机和lab6000实验箱的液晶显示实验,并利用伟福仿真软件实现了程序的编译和连接,还利用proteus仿真软件对硬件电路进行了绘制和仿真。也使用了wave6000,并用 80C51汇编语言进行编程;该系统可以完成汉字字模的显示。本文系统的从总体设计思路、汉字取模的原理、液晶显示的原理、电路绘制和仿真和最
3、好的上箱实验几个方面介绍了本次液晶显示实验。基本掌握了电路仿真和绘制的仿真程序,了解了一些简单的硬件知识,对课本所学的理论知识有了更加深入的了解,对以后的学习也更有针对性。关键字:单片机 伟福仿真 lab2000 proteus仿真软件 第一章 绪 论1.1 单片机液晶显示系统设计课题背景单片机液晶显示系统主要是指单片机以及由单片机驱动的点阵式液晶显示屏所组成的一个显示系统。液晶显示器与CRT(阴极射线管)、LED (发光二级管)或等离子显示器相比是一种低功耗的平面显示器件。它在车内广告、在型智能广告、可视电话、仪表盘、空调、洗衣机和其它低功耗电子产品中得到广泛应用。现代工业控制和一些智能化仪
4、器仪表中,越来越多的场所需要用点阵图形显示器显示汉字。由于物探仪器的多功能化、智能化、并且普遍采用人机对话的交互方式,需要能够显示更丰富信息和通用性较强的显示器,便于开发和应用,并要求其体积小、重量轻、功耗小。图形点阵式LCD不仅可以显示字符、数字,还可以显示各种图形、曲线及汉字,并且可以实现屏幕画面滚动、分区开窗口、反转、闪烁、位操作等功能,可以显示用户自定义的任意符号以及曲线、图形等,是信息处理、信息输出的重要手段之一,具有广泛的应用前景。1.2 开发单片机液晶显示系统的意义液晶显示器(LCD)具有功耗低、体积小、重量轻、超薄等许多其它显示器无法相比的优点。近几年来被广泛用于单片机控制的智
5、能仪器、仪表和低功耗电子产品中。液晶显示器分为字符型LCD显示模块和点阵型LCD显示模块。点阵型液晶可显示用户自定义的任意符号和图形,并可卷动显示,它作为便携式单片机系统人机交互界面的重要组成部分被广泛应用于实时检测和显示的仪器仪表中。支持汉字显示的点阵型液晶在现代单片机应用系统中是一种十分常用的显示设备,汉字BP机、手机上的显示屏就是点阵型LCD。点阵型LCD是现代单片机应用系统中最常用的人机交互界面之一。第二章 课程设计目的及课题分析理解2.1 课程设计目的1.熟练掌握C51系统仿真开发系统的应用。2加强单片机的综合运用能力、提高单片机的软件编程和调试能力,为以后的学习和开发工作打下良好基
6、础。3掌握的液晶的工作原理以及应用设计。4掌握小系统开发设计的流程以及设计思路。2.2课题的分析理解本文围绕设计以单片机作为LCD液晶显示系统控制器为主线,基于单片机8051,采用的液晶显示控制器的芯片是SED1520,主要实现中文显示、滚屏以及左右移动功能。同时也对部分芯片和外围电路进行了介绍和设计,并附以系统结构框图加以说明,着重介绍了本系统应用的各硬件接口技术和各个接口模块的功能及工作过程,并详细阐述了程序的各个模块。本系统是以单片机的汇编语言来进行软件设计,指令的执行速度快,节省存储空间。为了便于扩展和更改,软件的设计采用模块化结构,使程序设计的逻辑关系更加简洁明了。使硬件在软件的控制
7、下协调运作。其次阐述了部分程序的流程图和实现过程。本文撰写的主导思想是软、硬件相结合,以硬件为基础,来进行各功能模块的编写。最后对我所开发的用单片机实现LCD液晶显示器控制原理的设计思想和软、硬件调试作了详细的论述。 第三章 基本原理31点阵LCD的显示原理 在数字电路中,所有的数据都是以0和1保存的,对LCD控制器进行不同的数据操作,可以得到不同的结果。对于显示英文操作,由于英文字母种类很少,只需要8位(一字节)即可。而对于中文,常用却有6000以上,于是我们的DOS前辈想了一个办法,就是将ASCII表的高128个很少用到的数值以两个为一组来表示汉字,即汉字的内码。而剩下的低128位则留给英
8、文字符使用,即英文的内码。3.2 取模在编写软件代码之前必须要先掌握汉字取模的方法。要得到上表中的文字,我们可以借助取模软件来完成。目前点阵LCD的取模软件有很多,我们以本开发板配套的取 在文字输入区中输入文字,我们以输入一个“燕”字为例,了解其取模过程。步骤:1、 打开字模软件后点开设置按钮,选好相应的功能。2、在在文字输入区输入汉字“燕”。3、点击右下角生成字模按钮,得到汉字“燕”的显示代码。经过以上步骤后一个汉字就取模成功了,在程序中只要调用这段代码就可显示出汉字“燕”了,其它汉字也用同样的方法。3.3功能扩展部分 源程序是静态显示六个汉字“文远力珺钊钊”通过每个字的扫描,变成动态的显示
9、。在频幕上可实现文字循环向下滚动显示。 第四章 Proteus硬件仿真4.1 硬件模拟软件介绍 Proteus是英国Labcenter electronics公司出版的EDA工具软件。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计
10、软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年又增加了Cortex和DSP系列处理器,并持续增加其他系列处理器模型。在编译方面,它也支持IAR、Keil和MPLAB等多种编译器。 运行界面如下图: 通过此软件画出硬件电路的连线图如下:4.2程序流程图 附录一、静态显示程序代码:二、动态显示程序代码:CWADD1 EQU 08000H ;写指令代码地址(E1)DWADD1 EQU 08001H ;写显示数据地址(E1)CRADD1 EQU 08002H ;读
11、状态字地址(E1)DRADD1 EQU 08003H ;读显示数据地址(E1)CWADD2 EQU 08004H ;写指令代码地址(E2)DWADD2 EQU 08005H ;写显示数进地址(E2)CRADD2 EQU 08006H ;读状态字地址(E2)DRADD2 EQU 08007H ;读显示数据地址(E2)PD1 EQU 3DH ;122/2 分成左右两半屏 122x32COLUMN EQU 30HPAGE_ EQU 31H ;页地址寄存器 D1,DO:页地址CODE_ EQU 32H ;字符代码寄存器COUNT EQU 33H ;计数器DIR equ 34hdtp1 equ 35hd
12、tp2 equ 36hdtp3 equ 37hCTEMP EQU 38HCOM EQU 20H ;指令寄存器DAT EQU 21H ;数据寄存器 ORG 0 jmp main mov dptr, #0f002h mov a,#56h movx dptr,a mov a,#0 movx a,dptr JMP MAIN;-; 初始化程序INIT: MOV COM, #0E2H ;复位 LCALL PRO LCALL PR3 MOV COM, #0A4H ;关闭休闭状态 LCALL PRO LCALL PR3 MOV COM, #0A9H ;设置 132占空比 LCALL PRO LCALL PR3
13、 MOV COM, #0A0H ;正向排序设置 LCALL PRO LCALL PR3 MOV COM, #0C0H ;设置显示起始行为第一行 LCALL PRO LCALL PR3 MOV COM, #0AFH ;开显示设置 LCALL PRO LCALL PR3 RET;-; 清屏CLEAR: MOV R4,#00H ;页面地址暂存器设置CLEAR1: MOV A,R4 ;取页地址值 ORL A,#0B8H ;或页面地址设置代码 MOV COM,A ;页面地址设置 LCALL PRO LCALL PR3 MOV COM,#00H ;列地址设置为0 LCALL PRO LCALL PR3 M
14、OV R3,#50H ;一页清 80个字节CLEAR2: MOV DAT,#00H ;显示数据为0 LCALL PR1 LCALL PR4 DJNZ R3,CLEAR2 ;页内字节清零循环 INC R4 ;页地址暂存器加一 CJNE R4,#04H,CLEAR1;RAM区清零循环 RET;-;1写指令代码子程序(E1)PRO: PUSH DPL PUSH DPH MOV DPTR,#CRADD1 ;设置读状态字地址PR01: MOVX A,DPTR ;读状态字 JB ACC.7,PR01 ;判忙标志为句0,否再读 MOV DPTR,#CWADD1 ;设置写指令代码地址 MOV A,COM ;取
15、指令代码 MOVX DPTR,A ;写指令代码 POP DPH POP DPL RET;-;2.写显示数据子程序(E1)PR1: PUSH DPL PUSH DPH MOV DPTR,#CRADD1 ;设置读状态字地址PR11: MOVX A,DPTR ;读状态宇 JB ACC.7,PR11 ;判忙标志为0,否再读 MOV DPTR,#DWADD1 ;设置写显示数据地址 MOV A,DAT ;取数据 MOVX DPTR,A ;写数据 POP DPH POP DPL RET;-;3.读显示数据子程序(E1)PR2: PUSH DPL PUSH DPH MOV DPTR,#CRADD1 ;设置读状
16、态字地址PR21: MOVX A,DPTR ;读状态字 JB ACC.7,PR21 ;判忙标志为0否,否再读 MOV DPTR,#DRADD1 ;设置读显示数据地址 MOVX A,DPTR ;读数据 MOV DAT,A ;存数据 POP DPH POP DPL RET;-;4.写指令代码子程序(E2)PR3: PUSH DPL PUSH DPH MOV DPTR,#CRADD2 ;设置读状态字地址PR31: MOVX A,DPTR ;读状态字 JB ACC.7,PR31 ;判忙陈志为0否,否再读 MOV DPTR,#CWADD2 ;设置写指令代码地址 MOV A,COM ;取指令代码 MOVX
17、 DPTR,A ;写指令代码 POP DPH POP DPL RET;-; 5.写显示数据子程序(E2)PR4: PUSH DPL PUSH DPH MOV DPTR,#CRADD2 ;设置读状态字地址PR41: MOVX A,DPTR ;读状态字 JB ACC.7,PR41 ;判忙标志为0否,否再读 MOV DPTR, #DWADD2 ;设置写显示数据地址 MOV A,DAT ;取数据 MOVX DPTR,A ;写数据 POP DPH POP DPL RET;-; 6.读显示数据子程序(E2)PR5: PUSH DPL PUSH DPH MOV DPTR,#CRADD2 ;设置读状态字地址P
18、R51: MOVX A,DPTR ;读状态字 JB ACC.7,PR51 ;判忙标志为0,否再读 MOV DPTR,#DRADD2 ;设置写显示数据地址 MOVX A,DPTR ;读数据 MOV DAT,A ;存数据 POP DPH POP DPL RET; 中文显示子程序CCW_PR: MOV DPTR,#CCTAB ;确定字符字模块首地址 MOV A,CODE_ ;取代码 MOV B,#20H ;字模块宽度为 32个字节 MUL AB ;代码32 ADD A,DPL ;字符字模块首地址 MOV DPL,A ;字模库首地址代码32 MOV A,B ADDC A,DPH MOV DPH,A P
19、USH COLUMN ;列地址入栈 PUSH COLUMN ;列地址入栈 MOV CODE_,#00H ;代码寄存器借用为间址寄存器CCW_1: MOV COUNT,#10H ;计数器设置为 16 MOV A,PAGE_ ;读页地址寄存器 ANL A,#03H ;取页地址有效值 ORL A,#0B8H ;或页地址设置代码 MOV COM,A ;设置页地址 LCALL PRo LCALL PR3 POP COLUMN ;取列地址值 MOV A,COLUMN ;读列地址寄存器 CLR C SUBB A,#PD1 ;列地址-模块参数 JC CCW_2 ;0为左半屏显示区域(E1) MOV COLUM
20、N,A ;0为右半屏显示区域(E2) MOV A,PAGE_ SETB ACC.3 ;设置区域标志位。 MOV PAGE_,A ;0为E1,1为E2CCW_2: MOV COM,COLUMN ;设置列地址值 MOV A,PAGE_ ;判区域标志以确定设置哪个控制器 JNB ACC.3,CCW_3 LCALL PR3 ;区域E2 LJMP CCW_4CCW_3: LCALL PRO ;区域E1CCW_4: MOV A,CODE_ ;取间址寄存器值 MOVC A,A+DPTR ;取汉字字模数据 MOV DAT,A ;写数据 MOV A,PAGE_ JNB ACC.3,CCW_5 LCALL PR4
21、 ;区域E2 LJMP CCW_6CCW_5: LCALL PR1 ;区域E1CCW_6: INC CODE_ ;间址寄存器加一 INC COLUMN ;列地址寄存器加一 MOV A,COLUMN ;判列地址是否超出区域范围、 CJNE A,#PD1,CCW_7CCW_7: JC CCW_8 ;未超出则继续 MOV A,PAGE_ ;超出则判是否在区域E2 JB ACC.3,CCW_8 ;在区域E2则退出 SETB ACC.3 ;在区域E1则修改成区域E2 MOV PAGE_,A MOV COM,#00H ;设置区域E2列地址为0 LCALL PR3CCW_8: DJNZ COUNT,CCW_
22、4 ;当页循环 MOV A,PAGE_ ;读页地址寄存器 JB ACC.7,CCW_9 ;判完成标志D7位,1则完成退出 INC A ;否则页地址加一 SETB ACC.7 ;置完成位为1 CLR ACC.3 MOV PAGE_,A MOV CODE_,#10H ;间址寄存器设置为 16 LJMP CCW_1 ;大循环CCW_9: RET;-;中文字符库CCTAB:DB 08H,08H,08H,08H,78H,88H,09H,0EH;DB 08H,88H,78H,08H,08H,08H,08H,00H;DB 40H,40H,40H,20H,20H,11H,0AH,04H;DB 0AH,11H,
23、10H,20H,60H,20H,20H,00H;文,0DB 40H,42H,4CH,0C4H,20H,22H,22H,0E2H;DB 22H,22H,0E2H,22H,22H,20H,20H,00H;DB 00H,40H,20H,1FH,20H,48H,44H,43H;DB 40H,40H,47H,48H,48H,48H,4EH,00H;远,1DB 00H,10H,10H,10H,10H,10H,10H,0FFH;DB 10H,10H,10H,10H,10H,0F0H,00H,00H;DB 00H,00H,80H,40H,20H,18H,06H,01H;DB 00H,00H,40H,80H,4
24、0H,3FH,00H,00H;力,2DB 22H,22H,0FEH,22H,22H,10H,92H,92H;DB 0F2H,9EH,92H,92H,0FEH,10H,10H,00H;DB 08H,08H,47H,24H,14H,08H,04H,0FFH;DB 44H,44H,44H,44H,44H,0FCH,00H,00H;珺,3DB 80H,40H,30H,2FH,0E4H,24H,24H,04H;DB 00H,00H,0F8H,00H,00H,0FFH,00H,00H;DB 00H,01H,01H,01H,0FFH,41H,21H,01H;DB 00H,00H,0FH,40H,80H,7F
25、H,00H,00H;钊,4DB 80H,40H,30H,2FH,0E4H,24H,24H,04H;DB 00H,00H,0F8H,00H,00H,0FFH,00H,00H;DB 00H,01H,01H,01H,0FFH,41H,21H,01H;DB 00H,00H,0FH,40H,80H,7FH,00H,00H;钊,5;-.; 中文演示显示程序段MAIN: LCALL INIT LCALL CLEAR MOV CTEMP,#0 MOV DIR,#0AAA: MOV PAGE_,#02H MOV COLUMN,CTEMP MOV CODE_,#00H LCALL CCW_PR MOV PAGE_
26、,#02H MOV A,CTEMP ADD A,#10H MOV COLUMN,A MOV CODE_,#01H LCALL CCW_PR MOV PAGE_,#02H MOV A,CTEMP ADD A,#20H MOV COLUMN,A MOV CODE_,#02H LCALL CCW_PR MOV PAGE_,#02H MOV A,CTEMP ADD A,#30H;顺次向后显示,30H表示显示在第四个位置 MOV COLUMN,A MOV CODE_,#03H ;取对应的字模03H代表中文字库表中的第四组数据在此对应8 LCALL CCW_PR MOV PAGE_,#02H MOV A,
27、CTEMP ADD A,#40H MOV COLUMN,A MOV CODE_,#04H LCALL CCW_PR MOV PAGE_,#02H MOV A,CTEMP ADD A,#50H MOV COLUMN,A MOV CODE_,#04H LCALL CCW_PR LJMPS_DOWN;选用此句可实现文字循环向下滚动显示 ;LJMP S_UP ;选用此句可实现文字循环向上滚动显示 ;LJMP LEFT ;选用此句可实现文字循环向左滚动显示 ;SJMP $;选用此句文字呈现静态显示 LCALL DELAY ;若删去上述跳转直接执行以下程序可实现 文字循环向右滚动显示 LCALL DELA
28、Y LCALL DELAY MOV A, DIR CJNE A,#0, LEFT INC CTEMP MOV A,CTEMP CJNE A,#58, AAA MOV DIR,#1 LJMP AAA LEFT: DEC CTEMP MOV A,CTEMP CJNE A,#0, AAA MOV DIR,#0 LJMP AAA ;LCALL S_LEFT ;LCALL S_UP SJMP $; 示例五 滚动演示程序段; 定时间隔地有规律地修改显示起始行地址,将产生显示画面平滑向上或向下滚动的效; 果。示例程序如下:S_UP: MOV R7,#00H ;向上改动程序S_UPI: MOV A,#0C0H
29、 ;显示起始行设置代码 ORL A,R7 MOV COM,A LCALL PRO LCALL PR3 LCALL DELAY ;调延时子程序 INC R7 CJNE R7,#20H,S_UPI LJMP S_UP;-S_DOWN: MOV R7,#1FH ;向下滚动程序 MOV COM,#0C0H ;显示起始行设置代码 LCALL PRo LCALL PR3 LCALL DELAY ;调延时子程序S_DOWN1: MOV A,#0C0H ;显示起始行设置代码 ORL A,R7 MOV COM,A LCALL PRO LCALL PR3 LCALL DELAY DJNZ R7,S_DOWN1 L
30、JMP S_DOWN;-DELAY: MOV R6,#060H ;延时子程序 MOV R5,#00HDELAY1: NOP DJNZ R5,DELAY1 DJNZ R6,DELAY1 RET心得体会设计中遇到许多的问题让自己困惑,也不知道何从下手,在求教于人后,终于理解自己的弱项,最基本的当然是逻辑性要强,然而还要调试的技巧和耐性。在开发中会经常遇到结果并不是要的结果,即使自己的程序已经正确,这就是:在编程中遇到了数据存储时用整形可以,却不能使用数组。这个问题也让我想到是否是编译器的缺陷或是c语言虽然高级却不能操作硬件,所以我改选用汇编语言,的确,这次设计所用的变量很多,编程时确定不知变量的意
31、义,这就让我理解到注释的重要性,在编写完程序后我也给每个函数和变量添加了解释,不仅给读程序的人一种便捷,也给优化,程序模块一种捷径。设计中就是将功能相似的函数放在同一个头文件中,这样只需调用函数就行了。我想:在我们中缺的不是编程能力,大家都能,而是能够将程序模块化,能够做到互不影响却能互相利用。参考文献1.单片机原理及应用技术张淑清,国防工业出版社(教材)2.过程控制系统及仪表 邵裕森 编(教材)3.单片机及应用 李大友 高等教育出版社 (教材)4.机械量测量机械工业出版社(教材)燕山大学课程设计评审意见表指导教师评语:成绩: 指导教师: 2014年 7月4 日答辩小组评语: 成绩: 评阅人: 2014年 7月4 日课程设计总成绩:答辩小组成员签字: 张淑清 赵彦涛 程淑红 2014年 7月4 日24