完整word版4X4键盘输入LCD1602输出.docx

上传人:b****7 文档编号:23686422 上传时间:2023-05-19 格式:DOCX 页数:26 大小:200.02KB
下载 相关 举报
完整word版4X4键盘输入LCD1602输出.docx_第1页
第1页 / 共26页
完整word版4X4键盘输入LCD1602输出.docx_第2页
第2页 / 共26页
完整word版4X4键盘输入LCD1602输出.docx_第3页
第3页 / 共26页
完整word版4X4键盘输入LCD1602输出.docx_第4页
第4页 / 共26页
完整word版4X4键盘输入LCD1602输出.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

完整word版4X4键盘输入LCD1602输出.docx

《完整word版4X4键盘输入LCD1602输出.docx》由会员分享,可在线阅读,更多相关《完整word版4X4键盘输入LCD1602输出.docx(26页珍藏版)》请在冰豆网上搜索。

完整word版4X4键盘输入LCD1602输出.docx

完整word版4X4键盘输入LCD1602输出

物理与电信工程学院

专业课程设计报告

2018~2019学年第2学期

4*4矩形键盘输入,lcd1602显示

专业:

班级:

学号:

姓名:

指导教师姓名:

 

年月日

课程设计报告

【课题名称】4*4矩形键盘输入,lcd1602显示

【摘要】键盘输入与液晶显示系统是单片机应用中最常见的一种形式,几乎涉及到人们日常生产和生活中的各个方面.键盘是用于实现单片机应用系统中的数据和命令的输入,液晶显示器LCD能使人直观的获得需要了解的信息.实现人机的交流互动.本次课程设计作为实践教学的一个重要环节,以4*4矩阵键盘按键输入数据,以1602液晶显示.并使用Proteus软件对所设计的电路进行仿真,仿真结果是在1602液晶上显示所按下的键值。

因此,对液晶显示与键盘系统的研究与应用是很有必要的,对于我们今后的学习有着很强的推动作用.

【关键词】Proteus仿真,AT89C51,lcd1602,4*4矩阵键盘

一、引言

AT89C52是一个低电压,高性能CMOS8位单片机,片内含8kbytes的可反复擦写的Flash只读程序存储器和256bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS—51指令系统,片内置通用8位中央处理器和Flash存储单元,AT89C52单片机在电子行业中有着广泛的应用。

[1][2]

AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89C52可以按照常规方法进行编程,也可以在线编程.其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。

AT89C52有PDIP、PQFP/TQFP及PLCC等三种封装形式,以适应不同产品的需求。

lcd1602:

16字×2行的字符型液晶显示器显示模块可以与8位或4位微处理器直接接口,其内置式字符发生器ROM可提供160种符合工业标准的字符,包括全部英文大小写字母,阿拉伯数字,以及32个特殊字符或符号,其内置的RAM可以根据用户需要,由用户自行设计字符或符号,其指令系统为用户提供了方便的操作指令,点阵字符型液晶显示模块采用了+5V单电源供电,功耗低。

二、总体方案设计

单片机的P1口的P30~P3。

7连接4X4矩阵键盘,P00~P0.7连接lcd1602,当4X4矩阵键盘中的某一按键按下时,lcd1602上显示对应的键号。

例口,1号键按下时,数码管显示“1”;2号键按下时,数码管显示“2”等等。

根据矩阵式键盘的特点,进行键盘控制系统的整体研究与设计,LED实时显示按键信息,采用软伴扁程的方法实现按键信息的提职和显示。

电子技术应用方向,单片机应用。

可以实现两位数的输入,及修改.每位可以是1—f的任意位输人。

[2]

我们先读懂了书上的参考程序,掌握了LCD液晶显示器的功能及使用方法。

在此基础上,对源程序进行改编,加工,填入了能满足实验要求的子程序。

通过调用这些子程序,最终使我们的程序实现我们要求的功能。

我们对每个子程序进行了详细的分析和编写,在确定方案之后,我们对每个程序进行了单独的调试,并在综合起来之后进行了系统的仿真,解决意料之外的问题比如LCD的显示,4*4矩阵键盘触碰无反应问题等等,最终实现了基本的操作功能。

三、设计原理分析

AT89C52:

AT89C52为8位通用微处理器,采用工业标准的C51内核,在内部功能及管脚排布上与通用的8xc52相同,其主要用于会聚调整时的功能控制.功能包括对会聚主IC内部寄存器、数据RAM及外部接口等功能部件的初始化,会聚调整控制,会聚测试图控制,红外遥控信号IR的接收解码及与主板CPU通信等.

主要管脚有:

XTAL1(19脚)和XTAL2(18脚)为振荡器输入输出端口,外接12MHz晶振。

RST/Vpd(9脚)为复位输入端口,外接电阻电容组成的复位电路.

VCC(40脚)和VSS(20脚)为供电端口,分别接+5V电源的正负端。

P0~P3为可编程通用I/O脚,其功能用途由软件定义,在本设计中,P0端口(32~39脚)被定义为N1功能控制端口,分别与N1的相应功能管脚相连接,13脚定义为IR输入端,10脚和11脚定义为I2C总线控制端口,分别连接N1的SDAS(18脚)和SCLS(19脚)端口,12脚、27脚及28脚定义为握手信号功能端口,连接主板CPU的相应功能端,用于当前制式的检测及会聚调整状态进入的控制功能。

P0口是一组8位漏极开路型双向I/O口,也即地址/数据总线复用口。

作为输出口用时,每位能吸收电流的

方式驱动8个TTL逻辑门电路,对端口P0写“1”时,可作为高阻抗输入端用。

在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。

在Flash编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。

P1是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。

对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口.作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL).

与AT89C51不同之处是,P1.0和P1.1还可分别作为定时/计数器2的外部计数输入(P1.0/T2)和输入(P1.1/T2EX),

引脚号

功能特性

P1。

0

T2,时钟输出

P1.1

T2EX(定时/计数器2

表2-1P1。

0和P1.1的第二功能

P2是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路.对端口P2写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL).

在访问外部程序存储器或16位地数据存储器(例如执行MOVX@DPTR指令)时,P2口送出高8位地址数据.在访问8位地址的外部数据存储器(如执行MOVX@RI指令)时,P2口输出P2锁存器的内容。

Flash编程或校验时,P2亦接收高位地址和一些控制信号。

P3口是一组带有内部上拉电阻的8位双向I/O口.P3口输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。

对P3口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。

此时,被外部拉低的P3口将用上拉电阻输出电流(IIL)。

P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能,P3口还接收一些用于Flash闪速存储器编程和程序校验的控制信号.[3]

respack:

排阻接在51单片机的P0口,因为P0口内部没有上拉电阻,不能输出高电平,所以要接上拉电阻.排阻就是好多电阻连载一起,他们有一个公共端.1端为公共端接VCC或地,看是上拉还是下拉,其他接要操作的端口。

.

排阻通常都有一个公共端,在封装表面用一个小白点表示.其颜色通常为黑色或黄色。

排阻一般应用在数字电路上,比如:

作为某个并行口的上拉或者下拉电阻用。

使用排阻比用若干只固定电阻更方便。

[3]

Lcd1602:

1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。

它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。

[4]

1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。

[5]

1602采用标准的16脚接口,其中:

第1引脚:

GND为电源地。

第2引脚:

VCC接5V电源正极.

第3引脚:

V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。

第4引脚:

RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。

第5引脚:

RW为读写信号线,高电平

(1)时进行读操作,低电平(0)时进行写操作。

第6引脚:

E(或EN)端为使能(enable)端,高电平

(1)时读取信息,负跳变时执行指令.

第7~14引脚:

D0~D7为8位双向数据端。

第15~16脚:

空脚或背灯电源。

第15引脚背光正极,第16引脚背光负极.

四、具体电路实现

把一个多功能的复杂程序划分为若干简单的,功能单一的程序模块,各程序模块完成明确的任务,实现某个具体功能,再具体需要时调用相应的模块即可。

4、1.矩阵键盘

矩阵键盘又称为行列式键盘,它是用4条I/O线作为行线,4条I/O线作为列线组成的键盘。

在行线和列线的每一个交叉点上,设置一个按键。

这样键盘中按键的个数是4×4个。

这种行列式键盘结构能够有效地提高单片机系统中I/O口的利用率。

图4—1矩阵键盘

4、2.AT89C52

AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89C52可以按照常规方法进行编程,也可以在线编程。

其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本.

图4—2AT89C52引脚图

4、3.LCD1602液晶

1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:

阿拉伯数字、英文字母的大小写、常用的符号等,显示时模块把地址41H中的点阵字符图形显示出来,下图为功能令.

RS

R/W

D7

D6

D5

D4

D3

D2

D1

D0

说明

清显示

0

0

0

0

0

0

0

0

0

1

将DDRAM填满"20H",并且设定DDRAM的地址计数器(AC)到"00H”

归位

0

0

0

0

0

0

0

0

1

*

设定DDRAM的地址计数器(AC)到"00H”,并且将游标移到开头原点位置;这个指令不改变DDRAM的内容

进入模式设置指令

0

0

0

0

0

0

0

1

I/D

S

I/D=1,光标或闪烁向右移动,AC增加1.I/D=0,光标或闪烁向左移动,AC减少1,S整个显示移动

显示开关控制指令

0

0

0

0

0

0

1

D

C

B

[D=1:

整体显示ON],[C=1:

游标ON],[B=1:

游标位置反白允许]

光标或显示移位指令

0

0

0

0

0

1

S/C

R/L

*

光标或显示移位指令可使光标或显示在没有读写数据的情况下,向左或向右移动,指令不改变DDRAM的内容

功能设定

0

0

0

0

1

DL

N

F

*

[DL=0/1:

4/8位数据],[N=0/1,单行/双行显示],[F=0/1,5*8/5*10点阵显示模式]

设置CGRAM地址

0

0

0

1

AC5

AC4

AC3

AC2

AC1

AC0

CGRAM地址设置指令设置CGRAM地址指针,

设定DDRAM地址

0

0

1

0

AC5

AC4

AC3

AC2

AC1

AC0

DDRAM地址设置指令设置DDRAM地址。

一行地址范围00H~4FH,两行DDRAM地址第一行00H~27H,第二行40H~67H,加上高2位,[一行:

80H-A7H],[二行:

C0H-E7H]

读忙标志和地址

0

1

BF

AC6

AC5

AC4

AC3

AC2

AC1

AC0

BF:

忙标志位,BF=1,模块正在进行内部操作,此时模块不接受任何外部指令和数据。

BF=0,模块可以接受外部的指令和数据;同时可以读出地址计数器(AC)的值。

写RAM指令

1

0

D7

D6

D5

D4

D3

D2

D1

D0

将数据D7-D0写入到内部的RAM(DDRAM/CGRAM/IRAM/GRAM),将用户自定义的字符写入CGRAM中,D7~D5为000,D4~D0为5点的字模数据

表4-1指令码

 

实验流程图如下

 

N

Y

 

 

 

五、总结和体会

通过了本次的课程设计,我们成功的将课堂上学习的知识通过软件仿真出来,通过运用课堂上学习到的分析元器件的方法,我们学会了LCD的使用。

我们也学会如何使用proteus和keil联合进行单片机系统的程序调试及仿真开发。

这些实践大大地加深了我们对单片机使用过程的理解,也让我们对单片机程序的编程更加熟悉。

虽然在这个过程中也遇到了一些无法预料到的的困难,但是经过学习和讨论,我们都将其一一克服。

总之,经过这次的研究性教学,我们不仅加深了Proteus仿真软件的了解和使用,还学到了许多课本上没有涉及知识,练习了电路原理图的设计和仿真运行,同时对本学期学习的单片机课程进行了一次全面的复习和巩固,收益很大。

【参考文献】

[1]赵嘉蔚,张家栋,霍凯,肖燕彩.单片机原理与接口技术。

清华大学出版社

[2]朱大奇,李念强。

单片机原理、接口及应用。

南京大学出版社

[3]胡汉才。

单片机原理及其接口技术(第二版)。

清华大学出版社

[4]张家田。

液晶显示器件应用技术.机械工业出版社,

[5]刘法治。

常用电子元器件及典型芯片的应用技术。

机械工业出版社

【附件】实验程序:

#include〈REG51.h>

#defineucharunsignedchar

#defineuintunsignedint

sbitrs=P2^4;

sbitlcden=P2^5;

sbitsetting=P3^0;

ucharlocation=0;

ucharnum,NUM1;

charKEY;

ucharcodetable[]="DISPLAY”;

ucharcodetable1[]="";

unsignedcharcodea[]={0xFE,0xFD,0xFB,0xF7};

voiddelay(uintz)

{

uintx,y;

for(x=z;x>0;x--)

for(y=110;y>0;y-—);

}

voidwrite_com(ucharcom)

{

rs=0;

lcden=0;

P0=com;

delay(5);

lcden=1;

delay(5);

lcden=0;

}

voidwrite_date(uchardate)

rs=1;

lcden=0;

P0=date;

delay(5);

lcden=1;

delay(5);

lcden=0;

}

voidinit()

write_com(0x38);

write_com(0x0c);

write_com(0x06);

write_com(0x01);

write_com(0x80);

for(num=0;num<15;num++)

write_date(table[num]);

delay(5);

}

write_com(0x80+0x40);

for(num=0;num〈12;num++)

{

write_date(table1[num]);

delay(5);

}

write_com(0x80);

write_date(’');

}

unsignedcharcoding(unsignedcharm)

{

unsignedchark;

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='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);

}

//=====================按键检测并返回按键值==========================

unsignedcharkeynum(void)

{

unsignedcharrow,col,i;

P1=0xf0;

setting=1;

if((P1&0xf0)!

=0xf0)

delay(20);

if((P1&0xf0)!

=0xf0)

{

row=P1^0xf0;//确定行线

i=0;

P1=a[i];//精确定位

while(i<4)

if((P1&0xf0)!

=0xf0)

col=~(P1&0xff);//确定列线

break;//已定位后提前退出

}

else

i++;

P1=a[i];

}

else

{

return0;

}

while((P1&0xf0)!

=0xf0);

return(row|col);//行线与列线组合后返回

elseif(setting==0)

{

delay(150);

if(setting==0)

if(location==0)

write_com(0x0f);//开闪烁

write_com(0x80+0x46);

}

elseif(location==1)

{

write_com(0x0f);//开闪烁

write_com(0x80+0x47);

elseif(location==2)

{

write_com(0x80+0x47);

write_com(0x0c);//开闪烁

location++;

if(location〉=3)

location=0;

}

return0;

}

else

return0;//无键按下时返回0

 

voidmain(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);

}

elseif(location==2)

{

write_com(0x80+0x47);

write_date(NUM1);

write_com(0x80+0x47);

}

}

仿真图:

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

当前位置:首页 > PPT模板 > 可爱清新

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1