收藏 分享(赏)

单片机LCD12864显示系统课程设计.doc

上传人:精品资料 文档编号:8783286 上传时间:2019-07-11 格式:DOC 页数:24 大小:326.50KB
下载 相关 举报
单片机LCD12864显示系统课程设计.doc_第1页
第1页 / 共24页
单片机LCD12864显示系统课程设计.doc_第2页
第2页 / 共24页
单片机LCD12864显示系统课程设计.doc_第3页
第3页 / 共24页
单片机LCD12864显示系统课程设计.doc_第4页
第4页 / 共24页
单片机LCD12864显示系统课程设计.doc_第5页
第5页 / 共24页
点击查看更多>>
资源描述

1、华东交通大学单片机课程设计1目录一、概述 2二、系统总体方案及硬件设计 22.1 系统框图 .32.2 单片机最小系统 42.3 显示电路 62.4 按键控制电路 6三、系统软件设计 93.1 软件设计概述 .93.2 汉字显示 103.3 上下移屏 103.4 左右移屏 .11四、 课程设计体会 13五、参考文献 .13六、 附录 .146.1 总电路图 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6.2 总程序 . . . . . . .

2、 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .华东交通大学单片机课程设计2一、概述随着社会的发展,趣来趣多的地方需要应用显示功能,各种数字显示仪器中的显示、广告牌、数码产品等,传统的数码管显示已经远远不能满足各行各业的需求。基于单片机的 LCD 显示是一种用单片机来控制的一种显示系统,它不仅能显示种各数字、字母、还能显示各种字体的汉字以及一些简单的图象,使用起来极为方便,只要通过对单片机写入一定的程序来控制 LCD 的显示即可完成,根据程序的不同而产生不同不效果以满足各

3、种不同需求。本文围绕设计以单片机作为 LCD 液晶显示系统控制器为主线,基于单片机 AT89S51,采用的液晶显示控制器的芯片是 SED1520,主要实现由按键控制的中文显示、图片显示、滚屏以及左右移动功能。同时也对部分芯片和外围电路进行了介绍和设计,并附以系统结构框图加以说明,着重介绍了本系统应用的各硬件接口技术和各个接口模块的功能及工作过程,并详细阐述了程序的各个模块。本系统是以单片机的 C 语言来进行软件设计,指令的执行速度快,可读性强。为了便于扩展和更改,软件的设计采用模块化结构,使程序设计的逻辑关系更加简洁明了。使硬件在软件的控制下协调运作。其次阐述了部分程序的流程图和实现过程。本文

4、撰写的主导思想是软、硬件相结合,以硬件为基础,来进行各功能模块的编写。最后对我所开发的用单片机实现 LCD 液晶显示器控制原理的设计思想和软、硬件调试作了详细的论述。二、 系统总体方案及硬件设计2.1 系统框图华东交通大学单片机课程设计3本系统由电源部分、单片机最小系统部分、LCD12864 显示电路部分、按键控制部分组成。其中,单片机最小系统部分包括晶振电路、复位电路。2.2 单片机最小系统2.2.1、AT89S52 单片机89S51 各引脚功能介绍:1. VCC:2. 89S51 电源正端输入,接+5V。3. VSS:4. 电源地端。5. XTAL1:6. 单芯片系统时钟的反相放大器输入端

5、。7. XTAL2:8. 系统时钟的反相放大器输出端,一般在设计上只要在 XTAL1 和 XTAL2 上接上一只石英振荡晶体系统就可以动作了,此外可以在两引脚与地之间加入一 20PF 的小电容,可以使系统更稳定,避免噪声干扰而死机。9. RESET:10. 89S51 的重置引脚,高电平动作,当要对晶片重置时,只要对此引脚电平提升至高电平并保持两个机器周期以上的时间,AT89S51 便能完成系统重置的各项动作,使得内部特殊功能寄存器之内容均被设成已知状态,并且至地址AT89S51 华东交通大学单片机课程设计40000H 处开始读入程序代码而执行程序。11. EA/Vpp:12. “EA“为英文

6、“External Access“的缩写,表示存取外部程序代码之意,低电平动作,也就是说当此引脚接低电平后,系统会取用外部的程序代码(存于外部 EPROM 中)来执行程序。因此在 8031 及 8032 中,EA 引脚必须接低电平,因为其内部无程序存储器空间。如果是使用 8751 内部程序空间时,此引脚要接成高电平。此外,在将程序代码烧录至 8751 内部 EPROM 时,可以利用此引脚来输入 21V 的烧录高压(Vpp) 。13. ALE/PROG:14. 端口 3 的管脚设置:15. P3.0:RXD,串行通信输入。16. P3.1:TXD,串行通信输出。17. P3.2:INT0,外部中

7、断 0 输入。18. P3.3:INT1,外部中断 1 输入。19. P3.4:T0,计时计数器 0 输入。20. P3.5:T1,计时计数器 1 输入。21. P3.6:WR:外部数据存储器的写入信号。22. P3.7:RD,外部数据存储器的读取信号。2.2.2 复位电路电路图如下:上电自动复位是通过外部复位电路的电容充电来实现的。只要 Vcc 的上升时间不超过 1ms,就可以实现自动上电复位。图 2.1 单片机复位电路2.2.3、时钟电路时钟是单片机的心脏,单片机各功能部件的运行都是以时钟频率为基准,有条不紊的一拍一拍地工作。因此,时钟频率直接影响单片机的速度,时钟电华东交通大学单片机课程

8、设计5路的质量也直接影响单片机系统的稳定性。常用的时钟电路有两种方式:一种是内部时钟方式,另一种为外部时钟方式。本文用的是内部时钟方式。电路图如下:图 2.2 晶振电路2.2.4LCD12864 显示电路管脚名称及功能:管脚号 管脚名称 电平 管脚功能描述1 VSS 0V 电源地2 VCC 3.0+5V 电源正3 V0 - 对比度(亮度)调整4 RS(CS) H/LRS=“H”,表示 DB7DB0 为显示数据RS=“L”,表示 DB7DB0 为显示指令数据5 R/W(SID) H/LR/W=“H”,E=“H”,数据被读到 DB7DB0R/W=“L”,E=“HL”, DB7DB0 的数据被写到

9、IR 或 DR6 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)华东交通大学单片机课程设计618 VOUT - LCD 驱动电压输出端19 A VDD 背光源正端(+5V)(见注释 3)20 K VSS

10、背光源负端(见注释 3)电气参数:项目 符号 最小 典型 最大 单位电源电压 VDD-VSS 4.75 5.0 5.25Ta=0 -11.0 -11.5 -12.0Ta=25 -10.5 -11.0 -11.5液晶驱动电压 VDD-VADJTa=50 -10.0 -10.5 -11.0VIH 0.8 VDD - VDD+0.3输入信号电压VIL 0 - 0.2 VDDVLCM 工作电流IDD - 3 8背光驱动电流 ILED - 60 80液晶驱动电流 IEEmA基本指令系统:模块控制芯片提供两套控制命令,基本指令和扩充指令如下:指 指令码 功 能令RSR/WD7D6D5D4D3D2D1D0

11、华东交通大学单片机课程设计7清除显示0 0 0 0 0 0 0 0 0 1 将 DDRAM 填满“20H“,并且设定 DDRAM 的地址计数器(AC)到“00H“地址归位0 0 0 0 0 0 0 0 1 X 设定 DDRAM 的地址计数器(AC)到“00H“,并且将游标移到开头原点位置;这个指令不改变 DDRAM 的内容显示状态开/关0 0 0 0 0 0 1 D C BD=1: 整体显示 ONC=1: 游标 ON B=1:游标位置反白允许进入点设定0 0 0 0 0 0 0 1 I/DS指定在数据的读取与写入时,设定游标的移动方向及指定显示的移位游标或显示移位控制0 0 0 0 0 1 S

12、/CR/LX X设定游标的移动与显示的移位控制位;这个指令不改变 DDRAM 的内容功能设定0 0 0 0 1 DLX REX X DL=0/1: 4/8 位数据 RE=1: 扩充指令操作 RE=0: 基本指令操作设定CGRAM地址0 0 0 1 AC5AC4AC3AC2AC1AC0设定 CGRAM 地址设定DDRAM地址0 0 1 0 AC5AC4AC3AC2AC1AC0设定 DDRAM 地址(显示位址)第一行:80H 87H 第二行:90H 97H读取忙标志和地址0 1 BFAC6AC5AC4AC3AC2AC1AC0读取忙标志(BF)可以确认内部动作是否完成,同时可以读出地址计数器 (AC

13、)的值写数据到RAM1 0 数据将数据 D7D0 写入到内部的 RAM (DDRAM/CGRAM/IRAM/GRAM)读出RAM的值1 1 数据从内部 RAM 读取数据 D7D0(DDRAM/CGRAM/IRAM/GRAM)华东交通大学单片机课程设计82.2.5、按键控制电路电路由三个独立按键开关组成,分别与单片机的 I/O 相连,控制调整电路的加、减以及确定。按键的开关状态通过一定的电路转换为高、低电平状态。按键闭合过程在相应的 I/O 端口形成一个负脉冲。闭合和释放过程都要经过一定的过程才能达到稳定,这一过程是处于高、低电平之间的一种不稳定状态,称为抖动。抖动持续时间的常长短与开关的机械特

14、性有关,一般在 5-10ms 之间。为了避免 CPU 多次处理按键的一次闭合,应采用措施消除抖动。本文采用的是独立式按键,直接用 I/O口线构成单个按键电路,每个按键占用一条 I/O 口线,每个按键的工作状态不会产生互相影响。P3.0 口表示下移功能键,当开关闭合时,控制显示屏内容整体向下滚动。 P3.1 口表示上移功能键,当开关闭合时,控制显示屏内容整体向上滚动。P3.2 口表示右移功能键,当开关闭合时,控制显示屏内容整体向右移动。P3.3 口表示左移功能键,当开关闭合时,控制显示屏内容整体向左移动。按键控制电路三、 软件部分3.1、软件系统概论此设计是由单片机控制的 LCD 显示系统,外设

15、四个按钮来控制显示的方式。对于按钮的工作方式可以是中断也可以是查询,在此设计中所选用的顺序结构。用单片机的 P3 口的低 4 来作为 LCD 的显示控制端,即控制 LCD 使能端、读写控制揣、数据指 令选择端及两个选屏端。对于此设计课题,因为要求是用 12864 的显示器来显示汉字,而汉字及字符(如空格等)是需要显示代码的。所以,首先是通过一定的软件如 ZIMO 等来获取你想要显示的汉字的编码代码。有了这款软件,就方便多了,只在要软件中打入你想要显示的汉字或是字符,它就会自动生成代码,使用起来非常方便,而不需要人工去编写相应的代码。开始显示图形检测按键显示相应内容。华东交通大学单片机课程设计9

16、3.2、汉字显示对于此设计课题,因为要求是用 12864 的显示器来显示汉字,而汉字及字符(如空格等)是需要显示代码的。所以,首先是通过一定的软件如 ZIMO 等来获取你想要显示的汉字的编码代码。有了这款软件,就方便多了,只在要软件中打入你想要显示的汉字或是字符,它就会自动生成代码,使用起来非常方便,而不需要人工去编写相应的代码。 由于此 LCD 的显示屏是被分为了两部分的,即左半屏和右半屏,分别由 CS1 和 CS2 来控制,两个半屏的内存都分别由 X 和 Y 两个地址来确定,X 地址共 64 位,而 Y 地址两边各 64 位,一共 128 位,所以有的时候就称其为 12864 显示器。X

17、地址共有 8 个值,从 0 到 7,即每个值有 8 位,每显示一个字符要 2 个 X 值,而 Y 共 128 个值,分为两块即左右两块,分别从 0 到 63,即每个值一位。每显示一个汉字要 16 个 Y 值,每显示一个字符要 8 个 Y 值。所以应该 对两半屏分别编程取显示地址。同时还得用一个显示子程序来显示显示地址中保存的显示代码(汉字代码)。由此 LCD 的显示时序图可知,在显示过程中还需要一定的延时(不同的型号,延时时间是不同的)并且在显示前需将一些特定的控制端置相应的电平,比如说还所有输入之关需先把LCD 总使能端打开,即置 E 端为高电平,然后应再 输入指令代码,对其进行相关的设置。

18、所以还需要一个适当的延时子程序以及输 入数据前的准备程序。除了这些外,还应写一个初始化程序,用来对中断等一些程序所需要的端口进行初始。对于开中断,应打开总中断 EA 以及相应的低级中断 EX0 和 EX1。再者就是两个中断程序,对于这两个中断程序比较简单,只需对要执行相关控制 (即常规显示和滚动显示)所需要的每件进行满足即可。最后就是主函数,它的主要功能就是判断中断是否来临,来临了,然后判断是外部中断 0 还是外部中断 1,然后根据是 0 还是 1 来执行相应的程序,选择相应的显示方式。当四行全显示完了后,中断失效,即不管你是否还按键,都不再会对显示造成影响。显示出来的内容将一直保持。3.3、

19、图片显示显示图片和显示汉字类似,都是先通过字模软件先取模,然后再显示。3.4、上下移动由此可见 12864 的显示起始行为 0xc0,有规律的改变起始行的位置,就可以改实现上下移的效果。代码如下3.5 左右移动华东交通大学单片机课程设计10在本设计中,通过循环改变汉字字符在单片机上显示的左右半屏以及在左右半屏上显示的列位,行位不变,达到了左右移屏的效果。for(i=0;i#include#include#include“source.h“#define uchar unsigned char#define uint unsigned int#define LCD_databus P0 /LCD

20、12864 的 8 位数据口sbit RS=P22; /RS 为 0-命令;1- 数据 sbit RW=P21; /RW 为 1-写;0- 读 sbit EN=P20; /使能端 sbit CS1=P24; /片选 1 低电平有效,控制左半屏 sbit CS2=P23; /片选 1 低电平有效,控制右半屏 sbit KEY1=P30;sbit KEY2=P31;sbit KEY3=P32;sbit KEY4=P33; /三个按键控制口 void display(int unm,int num);void delay(uint i)while(-i);void Read_busy()/读“忙”函

21、数-数据线的最高位 DB71 则 busy华东交通大学单片机课程设计17P0=0x00;RS=0; RW=1; EN=1;while(P0 EN=0;void write_LCD_command(uchar value) /写命令函数 Read_busy(); /对 LCD 的每次读写都要读忙 RS=0; /选择命令 RW=0; /读操作 LCD_databus=value;EN=1; /EN 由 1-0 锁存有效数据 _nop_();_nop_(); EN=0;void write_LCD_data(uchar value)/写数据函数Read_busy();RS=1; /选择数据 RW=0

22、;LCD_databus=value;EN=1; /EN 由 1-0 锁存有效数据 _nop_();_nop_();EN=0;uchar Read_LCD(void) /读数据函数 uchar value;Read_busy();LCD_databus=0xFF; /先进行一次空读操作 RS=1;RW=1;EN=1;_nop_();_nop_();EN=0;华东交通大学单片机课程设计18LCD_databus=0xFF; /读取真正的数据 RS=1;RW=1;EN=1;value=LCD_databus;_nop_();_nop_();EN=0;return value; void Set_p

23、age(uchar page) /设置“页”LCD12864 共 8 页,一页是 8 行点阵点page=0xb8|page; /页的首地址为 0xB8write_LCD_command(page);void Set_line(uchar startline) /设置显示的起始行 startline=0xC0|startline; /起始行地址为 0xC0 write_LCD_command(startline); /设置从哪行开始:共 0-63;一般从 0 行开始显示void Set_column(uchar column) /设置显示的列column=column /列的最大值为 64col

24、umn= 0x40|column; /列的首地址为 0x40 write_LCD_command(column);/规定显示的列的位置 void SetOnOff(uchar onoff) /显示开关函数:0x3E 是关显示,0x3F 是开显示 onoff=0x3e|onoff; /onoff:1-开显示;0-关显示write_LCD_command(onoff);void SelectScreen(uchar screen) /选择屏幕 switch(screen) case 0: CS1=0;CS2=0;break; /全屏 华东交通大学单片机课程设计19case 1: CS1=0;CS2

25、=1;break;/左半屏 case 2: CS1=1;CS2=0;break;/右半屏 default:break; void ClearScreen(uchar screen) /清屏函数 uchar i,j;SelectScreen(screen); /0-全屏;1- 左半屏;2- 右半屏 for(i=0;i3); /计算出该点属于哪个字节 x_bit=y-(x_byte63) /x63 则显示在右半屏 SelectScreen(2);x=x-64;else /显示在左半屏 华东交通大学单片机课程设计20SelectScreen(1); Set_page(x_byte); /设置行地址

26、Set_column(x); /设置列地址Temp_data=Read_LCD(); /先读出没打点前 LCD 中的数据 switch(color)case 0x01 : Temp_data i-) /下滚屏SelectScreen(0);display(i,0);delay(5000);ClearScreen(0);display(0,0); if(KEY2=0) /按键 2 按下,上滚屏 delay(5000);if(KEY2=0)ClearScreen(0);华东交通大学单片机课程设计22while(!KEY2)for(i=0;i0;i-) /下滚屏display(0,i);delay(

27、5000);SelectScreen(0);华东交通大学单片机课程设计23ClearScreen(0);display(0,0);void display(int unm,int num)Set_line(unm);ClearScreen(0); /显示开始行Display_HZ(num+0)/4)%2+1,0,(num+0)%4,yier); /uchar screen,uchar page,uchar column,uchar *p)Display_HZ(num+1)/4)%2+1,0,(num+1)%4,dian);Display_HZ(num+2)/4)%2+1,0,(num+2)%4

28、,hua);Display_HZ(num+3)/4)%2+1,0,(num+3)%4,erban);Display_HZ(num+4)/4)%2+1,0,(num+0)%4,ban);/ClearScreen(0);Display_HZ(num+2)/4)%2+1,2,(num+2)%4,deng);Display_HZ(num+3)/4)%2+1,2,(num+3)%4,xiao);Display_HZ(num+4)/4)%2+1,2,(num+0)%4,mao);Display_HZ(num+3)/4)%2+1,4,(num+3)%4,dan); /uchar screen,uchar p

29、age,uchar column,uchar *p)Display_HZ(num+4)/4)%2+1,4,(num+0)%4,pian);Display_HZ(num+5)/4)%2+1,4,(num+1)%4,ji);Display_HZ(num+6)/4)%2+1,4,(num+2)%4,ke);Display_HZ(num+7)/4)%2+1,4,(num+3)%4,se);Display_HZ(num+6)/4)%2+1,6,(num+2)%4,erling);Display_HZ(num+7)/4)%2+1,6,(num+3)%4,yiwu);void main() init_LCD(); /初始 12864 ClearScreen(0); /清屏Display_picture(BMP);delay(30000);delay(30000);delay(30000);delay(30000);ClearScreen(0);display(0,0); /显示初始界面华东交通大学单片机课程设计24while(1)/ClearScreen(0);/ display(0,0); /显示初始界面key_scan();

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报