1、长 沙 学 院 单 片 机 原 理 及 应 用 课 程 设 计 说 明 书题目 液晶显示 4*4 矩阵键盘按键号程序设计系(部) 电子与通信工程系专业(班级) 电气 1 班姓名 龙程学号 2011024109指导教师 刘辉、谢明华、王新辉、马凌云起止日期 2014.5.192014.5.30长沙学院课程设计鉴定表姓名 龙程 学号 2011024109 专业 电子信息工程 班级 01设计题目 液晶显示 4*4 矩阵键盘按键号程序设计 指导教师 刘辉、谢明华、王新辉指导教师意见:评定成绩: 教师签名: 日期: 答辩小组意见:评定成绩: 答辩小组长签名: 日期: 教研室意见:最终评定等级: 教研室主
2、任签名: 日期: 说明 课程设计成绩分“优秀” 、 “良好” 、 “中等” 、 “及格” 、 “不及格”五等。单片机技术及应用课程设计任务书系(部):电子与电气工程系 专业:11 级电子一班 指导教师:谢明华、刘辉课题名称 液晶显示 4*4 矩阵键盘按键号程序设计设计内容及要求(1)课题内容:设计一个基于单片机的液晶显示 4*4 矩阵键盘按键号程序功能要求:用 AT89S52 单片机并行口 P1 接 4*4 矩阵键盘,以 P1.0、P1.3 作输入线;以 P1.4、 P1.7 作输出线,按下任意键,都会在在 LCD12864 的第一行上显示每个按键的 0F 序号,同时 12864 的第二行显示
3、本行姓名、班级,第三行显示本人学号。(2)要求:完成该系统的硬件和软件的设计,在 proteus 软件上仿真通过,提交一份课程设计说明书。计工作量1、汇编或 C51 语言程序设计;2、程序调试,在 Proteus 上进行仿真;3、提交一份完整的课程设计说明书,包括封面,中文摘要,目录,正文(正文主要包括:设计原理、程序设计、程序分析、仿真分析、调试过程,调试结果等部分) ,参考文献、设计总结等。起止日期(或时间量) 设计内容(或预期目标) 备注第一天 课题介绍,答疑,收集材料,C51 介绍第二天 设计方案论证,练习编写 C51 程序第三天第六天 程序设计第六天第八天 程序调试、仿真进度安排第九
4、天第十天 系统测试并编写设计说明书教研室意见年 月 日系(部)主管领导意见年 月 日目录前 言 .5一、课程设计目的 .6二、设计内容及原理 .62.1 单片机控制系统原理 .62.2 阵键盘识别显示系统概述 62.3 键盘电路 72.4 12864 显示器 82.5 整体电路图 92.6 仿真结果 9三、实验心得与体会 .10四、实验程序 .10参考文献 .18前 言单片机,全称单片微型计算机(英语:Single-Chip Microcomputer) ,又称微控制器(Microcontroller) ,是把中央处理器、存储器、定时/计数器(Timer/Counter) 、各种输入输出接口等
5、都集成在一块集成电路芯片上的微型计算机。与应用在个人电脑中的通用型微处理器相比,它更强调自供应(不用外接硬件)和节约成本。它的最大优点是体积小,可放在仪表内部,但存储量小,输入输出接口简单,功能较低。由于其发展非常迅速,旧的单片机的定义已不能满足,所以在很多应用场合被称为范围更广的微控制器;从上世纪 80 年代,由当时的 4 位、8 位单片机,发展到现在的 32 位 300M 的高速单片机。现代人类生活中所用的几乎每件有电子器件的产品中都会集成有单片机。手机、电话、计算器、家用电器、电子玩具、掌上电脑以及鼠标等电子产品中都含有单片机。 汽车上一般配备 40 多片单片机,复杂的工业控制系统上甚至
6、可能有数百片单片机在同时工作!单片机的数量不仅远超过 PC 机和其他计算机的总和,甚至比人类的数量还要多。液晶显示器(英语:Liquid Crystal Display,缩写:LCD)为平面薄型的显示设备。它的主要原理是以电流刺激液晶分子产生点、线、面配合背部灯管构成画面。由一定数量的彩色或黑白像素组成,放置于光源或者反射面前方。液晶显示器功耗低,因此倍受工程师青睐,适用于使用电池的电子设备。英国科学家在上世纪制造了第一块液晶显示器即 LCD。而第一台可操作的 LCD 基于动态散射模式(Dynamic Scattering Mode,DSM),是 RCA 公司乔治海尔曼带领的小组开发的。LED
7、 点阵屏通过 LED(发光二极管)组成,以灯珠亮灭来显示文字、图片、动画、视频等,是各部分组件都模块化的显示器件,通常由显示模块、控制系统及电源系统组成。LED 点阵显示屏制作简单,安装方便,被广泛应用于各种公共场合,如汽车报站器、广告屏以及公告牌等。矩阵键盘是单片机外部设备中所使用的排布类似于矩阵的键盘组.。在键盘中按键数量较多时,为了减少 I/O 口的占用,通常将按键排列成矩阵形式,如图 1 所示。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如 P1 口)就可以构成 4*4=16 个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,
8、区别越明显,比如再多加一条线就可以构成 20 键的键盘,而直接用端口线则只能多出一键(9 键) 。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。一、课程设计目的设计一个基于单片机的 4*4 矩阵键盘设计,用 AT89S52 单片机并行口 P1 接 4*4 矩阵键盘,以P1.0、P1.3 作为输入线,以 P1.4、P1.7 作为输出线,在 LCD12864 上的第一行显示每个按键的 0F 序号,同时 12864 的第二行显示本人姓名、班级,第三行显示本人学号。主要内容如下:1.矩阵式键盘的特点,进行键盘控制系统的整体研究与设计;2.ED 实时显示按键信息;3.软件编程的方法实现按键
9、信息的提取和显示。二、设计内容及原理2.1 单片机控制系统原理2.2 阵键盘识别显示系统概述矩阵式键盘模式以 N 个端口连接控制 N*N 个按键,实时在 LED 数码管上显示按键信息。显示按键信息,既降低了成本,又提高了精确度,省下了很多的 I/O 端口为他用,相反,独立式按键虽编程简单,但占用 I/O 口资源较多,不适合在按键较多的场合应用。并且在实际应用中经常要用到输入数字、字母、符号等操作功能,如电子密码锁、电话机键盘、计算器按键等,至少都需要 12 到 16 个按键,在这种情况下如果用独立式按键的话,显然太浪费 I/O 端口资源,为了解决这一问题,我们使用矩阵式键盘。矩阵式键盘简介:矩
10、阵式键盘又称行列键盘,它是用 N 条 I/O 线作为行线,N 条 I/O 线作为列线组成的键盘。在行线和列线的每个交叉点上设置一个按键。这样键盘上按键的个数就为 N*N 个。这种行列式键盘结构能有效地提高单片机系统中 I/O 口的利用率。最常见的键盘布局如图1-1所示。一般由16个按键组成,在单片机中正好可以用一个 P 口实现16个按键功能,这也是在单片机系统中最常用的形式,本设计就采用这个键盘模式。图1 键盘布局2.3 键盘电路AT89C51 单片机的并行口 P1 接 44 矩阵键盘,以 P1.0P1.3 作输入线,以 P1.4P1.7 作输出线;P1 口输出按键信息,在数码管上显示每个按键
11、的“0F”序号。实际电路图连接如图 2 所示。图 2 矩阵式键盘电路2.4 12864 显示器12864 点阵液晶显示模块(LCM)就是由 128*64 个液晶显示点组成的一个 128 列*64 行的阵列。每个显示点对应一位二进制数,1 表示亮,0 表示灭。存储这些点阵信息的 RAM 称为显示数据存储器。要显示某个图形或汉字就是将相应的点阵信息写入到相应的存储单元中。图形或汉字的点阵信息由自己设计,问题的关键就是显示点在液晶屏上的位置(行和列)与其在存储器中的地址之间的关系。由于多数液晶显示模块的驱动电路是由一片行驱动器和两片列驱动器构成,所以 12864 液晶屏实际上是由左右两块独立的64*
12、64 液晶屏拼接而成,每半屏有一个 512*8 bits 显示数据 RAM。左右半屏驱动电路及存储器分别由片选信号 CS1 和 CS2 选择。显示点在 64*64 液晶屏上的位置由行号(line,063)与列号(column,063)确定。512*8 bits RAM 中某个存储单元的地址由页地址(Xpage,07)和列地址(Yaddress,063)确定。每个存储单元存储 8 个液晶点的显示信息。为了使液晶点位置信息与存储地址的对应关系更直观关,将64*64 液晶屏从上至下 8 等分为 8 个显示块,每块包括 8 行*64 列个点阵。每列中的 8 行点阵信息构成一个 8bits 二进制数,存
13、储在一个存储单元中。 (注意:二进制的高低有效位顺序与行号对应关系因不同商家而不同)存放一个显示块的 RAM 区称为存储页。即 64*64 液晶屏的点阵信息存储在 8 个存储页中,每页 64 个字节,每个字节存储一列(8 行)点阵信息。因此存储单元地址包括页地址(Xpage,07)和列地址(Yaddress,063) 。例如点亮 128*64 的屏中(20,30)位置上的液晶点,因列地址 30 小于 64,该点在左半屏第 29 列,所以 CS1 有效;行地址 20 除以 8 取整得 2,取余得 4,该点在 RAM 中页地址为 2,在字节中的序号为 4;所以将二进制数据 00010000(也可能
14、是 00001000,高低顺序取决于制造商)写入Xpage=2,Yaddress=29 的存储单元中即点亮(20,30)上的液晶点。2.5 整体电路图图 3 液晶显示 4*4 矩阵键盘按键号整体电路2.6 仿真结果以下是通过 preteus 仿真后得到的部分结果截图图 4 仿真结果图三、实验心得与体会通过为期两周的单片机课程设计,不仅加深了对单片机理论知识的理解,而且锻炼了我们的动手能力以及创新精神,让我意思到理论和实践结合的重要性。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提
15、高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。而且要对自己有耐心和信心,这样就可以从中找到问题,并且解决问题。把理论知识和实际设计的结合锻炼了我的综合运用所学专业知识的能力,而且通过对整体的掌控,对局部的取舍,以及对细节的斟酌处理,都使得我的能力得到了锻炼,实战经验得到丰富。这次课程设计让我学到许多课堂学不到的东西,独立思考解决问题的能力,出现差错时及时应变的能力,而且通过和同学的交流和合作,增强了团队精神,给了大家一起学习
16、,一起享受学习的机会,让大家都受益匪浅,为以后不管遇到什么问题都能很好的处理打下了良好的基础。本次设计也运用到了 proteus 以及 KEIL 软件,通过实际的操作和不断地学习,加深了对这两个软件的了解,也学到了许多更加复杂的操作和用法,虽然全英文的界面对我这样英语不太好的人来说是挺麻烦的,但是只要肯努力,终究还是能够学好的。这次设计过程中。遇到了许多困难,也很感谢老师和同学的悉心帮助,使得我能顺利完成这次课程设计。四、实验程序#include#includesbit E=P30;sbit RW=P31;sbit DI=P32;sbit CS2=P33;sbit CS1=P34;#defin
17、e uchar unsigned charunsigned char cons,cont;uchar code l=0x00,0x10,0x10,0x10,0x10,0x10,0xFF,0x10,0x10,0xF0,0x10,0x11,0x16,0xD0,0x10,0x10,0x00,0x80,0x40,0x20,0x18,0x06,0x41,0x20,0x10,0x3F,0x44,0x42,0x41,0x40,0x40,0x78,c=0x00,0x24,0x24,0xA4,0xFE,0x23,0x22,0x00,0x3E,0x22,0x22,0x22,0x22,0x22,0x3E,0x00,
18、0x00,0x08,0x06,0x01,0xFF,0x01,0x06,0x40,0x49,0x49,0x49,0x7F,0x49,0x49,0x49,0x41,dian=0x00,0x00,0xF8,0x88,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0x88,0xF8,0x00,0x00,0x00,0x00,0x00,0x1F,0x08,0x08,0x08,0x08,0x7F,0x88,0x88,0x88,0x88,0x9F,0x80,0xF0,0x00,qi=0x20,0x10,0x4C,0x47,0x54,0x54,0x54,0x54,0x54,0x54,0x
19、54,0xD4,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x30,0x40,0xF0,0x00,ban=0x84,0x84,0xFC,0x84,0x84,0x00,0xF8,0x00,0xFF,0x00,0x84,0x84,0xFC,0x84,0x84,0x00,0x10,0x30,0x1F,0x08,0x88,0x42,0x21,0x18,0x07,0x00,0x20,0x20,0x3F,0x20,0x20,0x00;uchar code shuzi1632=0x00,0x
20、E0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*“0“,0*/0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,0x00,0x00,0x00,0x0
21、0,0x00,0x00,0x00,0x00,/*“1“,1*/0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*“2“,2*/0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x20,0x20,
22、0x20,0x11,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*“3“,3*/0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*“4“,4*/0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x00,0x00,0x00,0x
23、00,0x00,0x00,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*“5“,5*/0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*“6“,6*/0x00,0x38,0x08,0x08,0xC8
24、,0x38,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*“7“,7*/0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
25、0x00,/*“8“,8*/0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*“9“,9*/0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x
26、20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*“a“,0*/0x08,0xF8,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*“b“,1*/0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
27、,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*“c“,2*/0x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*“d“,3*/0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0
28、x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*“e“,4*/0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00;/*“f“,5*/uns
29、igned char i;delay()unsigned char i;for(i=0;i20;i+);void keycan(void)for(i=0;i4;i+)switch(i)case 0:P2=0x7f;delay();switch(P2|0xf0)case 0xfe:cont=0;break;case 0xfd:cont=1;break;case 0xfb:cont=2;break;case 0xf7:cont=3;break;default:break;case 1:P2=0xbf;delay();switch(P2|0xf0)case 0xfe:cont=4;break;cas
30、e 0xfd:cont=5;break;case 0xfb:cont=6;break;case 0xf7:cont=7;break;default:break;case 2:P2=0xdf;delay();switch(P2|0xf0)case 0xfe:cont=8;break;case 0xfd:cont=9;break;case 0xfb:cont=10;break;case 0xf7:cont=11;break;default:break;case 3:P2=0xef;delay();switch(P2|0xf0)case 0xfe:cont=12;break;case 0xfd:co
31、nt=13;break;case 0xfb:cont=14;break;case 0xf7:cont=15;break;default:break;default:break;void readbusy(void) /*判断最高位是否为 1,为 0 才读写数据*/P0=0x00;cons=P0;DI=0;RW=1;E=1; while(consE=0; void Select(uchar i)switch(i)case 0:CS1=0;CS2=0;break;case 1:CS1=0;CS2=1;break;case 2:CS1=1;CS2=0;break;default:break;void
32、 xieminling(uchar value) readbusy();/*每次读写都要忙判断 */DI=0;RW=0; P0=value; E=1;_nop_();_nop_();E=0; void Setonoff(uchar onoff)onoff=0x3e|onoff;xieminling(onoff); void xieshuju(uchar dat) readbusy();DI=1;RW=0; P0=dat;E=1; _nop_();_nop_();E=0; void Setpage(uchar page)/*设置页*/ page=0xb8|page; xieminling(pag
33、e); void Setline(uchar line) /*设置列*/ line=0x40|line;xieminling(line); void qingping(uchar screen) /*清屏*/uchar i,j; Select(screen); for(i=0;i8;i+) Setline(0);Setpage(i); for(j=0;j64;j+) xieshuju(0x00); void chushihua(void)Select(0);Setonoff(0);Select(0);Setonoff(1);Select(0); qingping(0);void xianshi
34、(uchar ss,uchar lie,uchar page1,uchar *p)uchar i;Select(ss);Setpage(page1);Setline(lie);for(i=0;i16;i+)xieshuju(pi);Setpage(page1+1);Setline(lie);for(i=0;i16;i+)xieshuju(pi+16);main()xianshi(2,0,2,l);xianshi(2,16*2,2,c);xianshi(1,0,2,dian);xianshi(1,16,2,qi);xianshi(1,16*2,2,shuzi1);xianshi(1,16*3,2
35、,ban);xianshi(2,0,4,shuzi2);xianshi(2,8,4,shuzi0);xianshi(2,16,4,shuzi1);xianshi(2,16+8,4,shuzi1);xianshi(2,16*2,4,shuzi0);xianshi(2,16*2+8,4,shuzi2);xianshi(2,16*3,4,shuzi4);xianshi(1,0,4,shuzi1);xianshi(1,8,4,shuzi0);xianshi(1,8+8,4,shuzi9);while(1)keycan();chushihua();xianshi(2,0,0,shuzicont); 参考文献【1】 、曾屹,彭楚武单片机原理与应用第二版中南大学出版社99-185。【2】 、彭伟单片机 C 语言程序设计实训 100 例电子工业出版社225,340。