1、完整word版4X4键盘输入LCD1602输出物理与电信工程学院专业课程设计报告 2018 2019 学年第2学期44矩形键盘输入,lcd1602显示专 业: 班 级: 学 号: 姓 名: 指导教师姓名: 年 月 日课程设计报告【课题名称】 44矩形键盘输入,lcd1602显示【摘 要】键盘输入与液晶显示系统是单片机应用中最常见的一种形式,几乎涉及到人们日常生产和生活中的各个方面.键盘是用于实现单片机应用系统中的数据和命令的输入,液晶显示器LCD能使人直观的获得需要了解的信息.实现人机的交流互动.本次课程设计作为实践教学的一个重要环节,以4*4矩阵键盘按键输入数据,以1602液晶显示.并使用P
2、roteus软件对所设计的电路进行仿真,仿真结果是在1602液晶上显示所按下的键值。因此,对液晶显示与键盘系统的研究与应用是很有必要的,对于我们今后的学习有着很强的推动作用.【关 键 词】Proteus仿真,AT89C51,lcd1602,44矩阵键盘一、引言AT89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS51指令系统,片内置通用8位中央处理器和Flash存储单元,AT89C52单片机在电子行业中有着广泛的应
3、用。12AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2 个读写口线,AT89C52可以按照常规方法进行编程,也可以在线编程.其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的 Flash存储器可有效地降低开发成本。AT89C52有PDIP、PQFP/TQFP及PLCC等三种封装形式,以适应不同产品的需求。lcd1602: 16字2行的字符型液晶显示器显示模块可以与8位或4位微处理器直接接口,其内置式字符发生器ROM可提供160种符合工业标准的字符,包括全部英文大小写字母,阿拉伯数字,
4、以及32个特殊字符或符号,其 内置的RAM可以根据用户需要,由用户自行设计字符或符号,其指令系统为用户提供了方便的操作指令,点阵字符型液晶显示模块采用了+5V单电源供电,功耗低。二、总体方案设计单片机的P1口的P3 0P3。 7连接4X4矩阵键盘, P0 0P0. 7连接lcd1602,当4X4矩阵键盘中的某一按键按下时,lcd1602上显示对应的键号。例口,1号键按下时,数码管显示“1”;2 号键按下时,数码管显示“2”等等。根据矩阵式键盘的特点,进行键盘控制系统的整体研究与设计, LED 实时显示按键信息,采用软伴扁程的方法实现按键信息的提职和显示。电子技术应用方向,单片机应用。可以实现两
5、位数的输入,及修改.每位可以是1f的任意位输人。2我们先读懂了书上的参考程序,掌握了LCD液晶显示器的功能及使用方法。在此基础上,对源程序进行改编,加工,填入了能满足实验要求的子程序。通过调用这些子程序,最终使我们的程序实现我们要求的功能。我们对每个子程序进行了详细的分析和编写,在确定方案之后,我们对每个程序进行了单独的调试,并在综合起来之后进行了系统的仿真,解决意料之外的问题比如LCD的显示,44矩阵键盘触碰无反应问题等等,最终实现了基本的操作功能。三、设计原理分析AT89C52:AT89C52为8 位通用微处理器,采用工业标准的C51内核,在内部功能及管脚排布上与通用的8xc52 相同,其
6、主要用于会聚调整时的功能控制.功能包括对会聚主IC 内部寄存器、数据RAM及外部接口等功能部件的初始化,会聚调整控制,会聚测试图控制,红外遥控信号IR的接收解码及与主板CPU通信等.主要管脚有:XTAL1(19 脚)和XTAL2(18 脚)为振荡器输入输出端口,外接12MHz 晶振。RST/Vpd(9 脚)为复位输入端口,外接电阻电容组成的复位电路.VCC(40 脚)和VSS(20 脚)为供电端口,分别接+5V电源的正负端。P0P3 为可编程通用I/O 脚,其功能用途由软件定义,在本设计中,P0 端口(3239 脚)被定义为N1 功能控制端口,分别与N1的相应功能管脚相连接,13 脚定义为IR
7、输入端,10 脚和11脚定义为I2C总线控制端口,分别连接N1的SDAS(18脚)和SCLS(19脚)端口,12 脚、27 脚及28 脚定义为握手信号功能端口,连接主板CPU 的相应功能端,用于当前制式的检测及会聚调整状态进入的控制功能。P0 口是一组8 位漏极开路型双向I/O 口, 也即地址/数据总线复用口。作为输出口用时,每位能吸收电流的方式驱动8 个TTL逻辑门电路,对端口P0 写“1”时,可作为高阻抗输入端用。在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8 位)和数据总线复用,在访问期间激活内部上拉电阻。在Flash编程时,P0 口接收指令字节,而在程序校验时,输出指令
8、字节,校验时,要求外接上拉电阻。P1 是一个带内部上拉电阻的8 位双向I/O 口, P1 的输出缓冲级可驱动(吸收或输出电流)4 个TTL 逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口.作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL).与AT89C51 不同之处是,P1.0 和P1.1 还可分别作为定时/计数器2 的外部计数输入(P1.0/T2)和输入(P1.1/T2EX),引脚号功能特性P1。0T2,时钟输出P1.1T2EX(定时/计数器2表2-1 P1。0和P1.1的第二功能P2 是一个带有内部上拉电阻的8 位双向I/
9、O 口,P2 的输出缓冲级可驱动(吸收或输出电流)4 个TTL 逻辑门电路.对端口P2 写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL).在访问外部程序存储器或16 位地数据存储器(例如执行MOVX DPTR 指令)时,P2 口送出高8 位地址数据.在访问8 位地址的外部数据存储器(如执行MOVXRI 指令)时,P2 口输出P2锁存器的内容。Flash编程或校验时,P2亦接收高位地址和一些控制信号。P3 口是一组带有内部上拉电阻的8 位双向I/O 口.P3 口输出缓冲级可驱动(吸收或输出电流)4
10、 个TTL 逻辑门电路。对P3 口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。此时,被外部拉低的P3 口将用上拉电阻输出电流(IIL)。P3 口除了作为一般的I/O 口线外,更重要的用途是它的第二功能,P3 口还接收一些用于Flash闪速存储器编程和程序校验的控制信号.3respack:排阻接在51单片机的P0口,因为P0口内部没有上拉电阻,不能输出高电平,所以要接上拉电阻.排阻就是好多电阻连载一起,他们有一个公共端.1端为公共端接VCC或地,看是上拉还是下拉,其他接要操作的端口。.排阻通常都有一个公共端,在封装表面用一个小白点表示.其颜色通常为黑色或黄色。排阻一般应用在数字电路上,
11、比如:作为某个并行口的上拉或者下拉电阻用。使用排阻比用若干只固定电阻更方便。3Lcd1602:1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。41602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。51602采用标准的16脚接口,其中:第1引脚:GND为电源地。第2引脚:VCC接5V
12、电源正极.第3引脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会 产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。第4引脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。第5引脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。第6引脚:E(或EN)端为使能(enable)端,高电平(1)时读取信息,负跳变时执行指令.第714引脚:D0D7为8位双向数据端。第1516脚:空脚或背灯电源。第15引脚背光正极,第16引脚背光负极.四、具体电路实现把一个多功能的复杂程序划分为若干简单的,功能单一的程
13、序模块,各程序模块完成明确的任务,实现某个具体功能,再具体需要时调用相应的模块即可。4、1.矩阵键盘矩阵键盘又称为行列式键盘,它是用4条I/O线作为行线,4条I/O线作为列线组成的键盘。在行线和列线的每一个交叉点上,设置一个按键。这样键盘中按键的个数是44个。这种行列式键盘结构能够有效地提高单片机系统中I/O口的利用率。图41 矩阵键盘4、2.AT89C52AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2 个读写口线,AT89C52可以按照常规方法进行编程,也可以在线编程。其将通用的微处理器和Flas
14、h存储器结合在一起,特别是可反复擦写的 Flash存储器可有效地降低开发成本.图4 2 AT89C52引脚图4、3.LCD1602液晶1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号等,显示时模块把地址41H中的点阵字符图形显示出来,下图为功能令.RSR/WD7D6D5D4D3D2D1D0说明清显示0000000001将DDRAM填满20H,并且设定DDRAM的地址计数器(AC)到00H”归位000000001*设定DDRAM的地址计数器(AC)到00H”,并且将游标移到开头原点位置;这个指令不改变DD
15、RAM 的内容进入模式设置指令00000001I/DSI/D=1,光标或闪烁向右移动,AC增加1.I/D=0,光标或闪烁向左移动,AC减少1,S整个显示移动显示开关控制指令0000001DCBD=1: 整体显示 ON,C=1: 游标ON,B=1:游标位置反白允许光标或显示移位指令000001S/CR/L*光标或显示移位指令可使光标或显示在没有读写数据的情况下,向左或向右移动,指令不改变DDRAM 的内容功能设定00001DLNF*DL=0/1:4/8位数据,N=0/1,单行/双行显示,F=0/1,5*8/5*10点阵显示模式设置CGRAM地址0001AC5AC4AC3AC2AC1AC0CGRA
16、M地址设置指令设置CGRAM地址指针,设定DDRAM地址0010AC5AC4AC3AC2AC1AC0DDRAM地址设置指令设置DDRAM地址。一行地址范围00H4FH,两行DDRAM地址第一行00H27H,第二行40H67H,加上高2位,一行:80HA7H,二行:C0HE7H读忙标志和地址01BFAC6AC5AC4AC3AC2AC1AC0BF:忙标志位,BF=1,模块正在进行内部操作,此时模块不接受任何外部指令和数据。BF=0,模块可以接受外部的指令和数据;同时可以读出地址计数器(AC)的值。写RAM指令10D7D6D5D4D3D2D1D0将数据D7-D0写入到内部的RAM (DDRAM/CG
17、RAM/IRAM/GRAM),将用户自定义的字符写入CGRAM中,D7D5为000,D4D0为5点的字模数据表4- 1指令码实验流程图如下NY五、总结和体会通过了本次的课程设计,我们成功的将课堂上学习的知识通过软件仿真出来,通过运用课堂上学习到的分析元器件的方法,我们学会了LCD的使用。我们也学会如何使用proteus和keil联合进行单片机系统的程序调试及仿真开发。这些实践大大地加深了我们对单片机使用过程的理解,也让我们对单片机程序的编程更加熟悉。虽然在这个过程中也遇到了一些无法预料到的的困难,但是经过学习和讨论,我们都将其一一克服。总之,经过这次的研究性教学,我们不仅加深了Proteus仿
18、真软件的了解和使用,还学到了许多课本上没有涉及知识,练习了电路原理图的设计和仿真运行,同时对本学期学习的单片机课程进行了一次全面的复习和巩固,收益很大。【参考文献】1赵嘉蔚,张家栋,霍凯,肖燕彩.单片机原理与接口技术。清华大学出版社 2朱大奇,李念强。单片机原理、接口及应用。南京大学出版社3胡汉才。单片机原理及其接口技术(第二版)。清华大学出版社 4张家田。液晶显示器件应用技术.机械工业出版社,5刘法治。常用电子元器件及典型芯片的应用技术。机械工业出版社【附件】实验程序:#include REG51.hdefine uchar unsigned char define uint unsigne
19、d intsbit rs=P24;sbit lcden=P25;sbit setting=P30;uchar location=0;uchar num,NUM1;char KEY;uchar code table= DISPLAY ”;uchar code table1= ;unsigned char code a=0xFE,0xFD,0xFB,0xF7;void delay(uint z) uint x,y; for(x=z;x0;x-) for(y=110;y0;y-);void write_com(uchar com) rs=0; lcden=0; P0=com; delay(5); l
20、cden=1; delay(5); lcden=0; void write_date(uchar date) rs=1; lcden=0; P0=date; delay(5); lcden=1; delay(5); lcden=0; void init() write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01); write_com(0x80); for(num=0;num15;num+) write_date(tablenum); delay(5); write_com(0x80+0x40); for(num=0;
21、num12;num+) write_date(table1num); delay(5); write_com(0x80); write_date( );unsigned char coding(unsigned char m) unsigned char k; switch(m) case (0x18): k=f;break; case (0x28): k=e;break; case (0x48): k=d;break; case (0x88): k=c;break; case (0x14): k=b;break; case (0x24): k=a;break; case (0x44): k=
22、9;break; case (0x84): k=8;break; case (0x12): k=7;break; case (0x22): k=6;break; case (0x42): k=5;break; case (0x82): k=4;break; case (0x11): k=3;break; case (0x21): k=2;break; case (0x41): k=1;break; case (0x81): k=0;break; return(k);/=按键检测并返回按键值=unsigned char keynum(void) unsigned char row,col,i;
23、P1=0xf0; setting = 1; if((P1&0xf0)!=0xf0) delay(20); if(P10xf0)!=0xf0) row=P10xf0; /确定行线 i=0; P1=ai; /精确定位 while(i4) if((P1&0xf0)!=0xf0) col=(P1&0xff); /确定列线 break; /已定位后提前退出 else i+; P1=ai; else return 0; while(P10xf0)!=0xf0); return (row|col); /行线与列线组合后返回 else if(setting = 0) delay(150); if(settin
24、g = 0) if(location =0) write_com(0x0f); /开闪烁 write_com(0x80+0x46); else if(location =1) write_com(0x0f); /开闪烁 write_com(0x80+0x47); else if(location = 2) write_com(0x80+0x47); write_com(0x0c); /开闪烁 location +; if(location=3) location = 0; return 0; else return 0; /无键按下时返回0void main(void) init(); while(1) KEY=keynum(); if(KEY!=0) NUM1=coding(KEY); if(location = 1) write_com(0x80+0x46); write_date(NUM1); write_com(0x80+0x46); else if(location = 2) write_com(0x80+0x47); write_date(NUM1); write_com(0x80+0x47); 仿真图:
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1