单片机课程设计报告.docx

上传人:b****3 文档编号:3944674 上传时间:2023-05-06 格式:DOCX 页数:26 大小:315.25KB
下载 相关 举报
单片机课程设计报告.docx_第1页
第1页 / 共26页
单片机课程设计报告.docx_第2页
第2页 / 共26页
单片机课程设计报告.docx_第3页
第3页 / 共26页
单片机课程设计报告.docx_第4页
第4页 / 共26页
单片机课程设计报告.docx_第5页
第5页 / 共26页
单片机课程设计报告.docx_第6页
第6页 / 共26页
单片机课程设计报告.docx_第7页
第7页 / 共26页
单片机课程设计报告.docx_第8页
第8页 / 共26页
单片机课程设计报告.docx_第9页
第9页 / 共26页
单片机课程设计报告.docx_第10页
第10页 / 共26页
单片机课程设计报告.docx_第11页
第11页 / 共26页
单片机课程设计报告.docx_第12页
第12页 / 共26页
单片机课程设计报告.docx_第13页
第13页 / 共26页
单片机课程设计报告.docx_第14页
第14页 / 共26页
单片机课程设计报告.docx_第15页
第15页 / 共26页
单片机课程设计报告.docx_第16页
第16页 / 共26页
单片机课程设计报告.docx_第17页
第17页 / 共26页
单片机课程设计报告.docx_第18页
第18页 / 共26页
单片机课程设计报告.docx_第19页
第19页 / 共26页
单片机课程设计报告.docx_第20页
第20页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

单片机课程设计报告.docx

《单片机课程设计报告.docx》由会员分享,可在线阅读,更多相关《单片机课程设计报告.docx(26页珍藏版)》请在冰点文库上搜索。

单片机课程设计报告.docx

单片机课程设计报告

 

单片机课程设计报告

 

班级:

计算机112班

姓名:

指导老师:

 

江西理工大学信息工程学院

2014/6/13

目录

一、引言1

二、设计要求2

三、题目分析2

四、硬件设计3

4.1关于AT89C513

4.1.1特性概述3

4.1.2管脚说明4

4.24×4矩阵键盘7

4.2.1矩阵式键盘介绍7

4.2.2键盘扫描原理8

4.3LED数码管9

4.4硬件连接11

五、软件设计12

5.1Keil12

5.2Proteus13

5.3程序流程图15

5.4源代码15

六、仿真结果19

心得体会22

参考文献22

题目:

4×4矩阵键盘

一、引言

随着21世纪的到来,资源危机接踵而至。

快速席卷整个国家,这一状况还将随着时间的推移和社会的发展而更加严重。

国家提倡资源节约型社会,资源危机已成为全球性的突出问题,利用科技手段缓解这一危机,将是人类主要的出路。

电子信息行业是人类社会的高科技行业之一,是设施现代化的基础,也是人类通往科技巅峰的直通路。

电子行业的发展从长远来看很重要,但最主要的还是科技问题。

国家设施的现代化的根本出路在于全面提高科技水平,现代的社会经营模式由传统模式向现代化、高科技模式转变,由粗放型向集约型方向转变,必须要求科技有一个大的发展,进行一次新的技术革命。

矩阵式键盘提高效率进行按键操作管理有效方法,它可以提高系统准确性,有利于资源的节约,降低对操作者本身素质的要求。

是它能准确、实时、高效地显示按键信息,以提高工作效率和资源利用率。

随着计算机技术和电子科技的迅猛发展,计算机和电子产品的价格日益降低,可靠性日益提高。

本文旨在设计一套能对按键信息进行自动实时显示的系

统。

矩阵式键盘乃是当今使用最为广泛的键盘模式,该系统以N个端口连接控制N*N个按键,即时在LED数码管上。

单片机控制的据这是键盘显示系统,该系统可以对不同的按键进行实时显示,其核心是单片机和键盘矩阵电路部分,主要对按键与显示电路的关系、矩阵式技术及设备系统的硬件、软件等各个部分进行实现。

4*4矩阵式键盘采用89C51单片机为核心,主要由矩阵式键盘电路、译码电路、显示电路等组成,软件选用汇编语言编程。

单片机将检测到的按键信号转换成数字量,显示于LED显示器上。

该系统灵活性强,易于操作,可靠性高,将会有更广阔的开发前景。

二、设计要求

(1)设计4×4矩阵键盘,共16个键;

(2)每个键位具有一个固定的键码,用十六进制表示为0H~FH;

(3)当按下一个键时用数码管显示其对应的键码。

三、题目分析

矩阵式键盘是当今使用最为广泛的键盘模式,该系统以N个端口连接控制N*N个按键,并通过单片机,显示在LED数码管上。

单片机控制键盘显示系统,可以对不同的按键进行实时显示,其核心是单片机、键盘矩阵电路和数码管显示电路。

4*4矩阵式键盘以AT89C51单片机为核心,主要由矩阵式键盘电路、显示电路等组成,软件选用C语言编程。

单片机将检测到的按键信号转换成数字量,显示于LED显示器上。

该系统灵活性强,易于操作,可靠性高,广泛应用于各种场合。

每个按键有它的行值和列值 ,行值和列值的组合就是识别这个按键的编码。

矩阵的行线和列线分别通过两并行接口和CPU通信。

每个按键的状态同样需变成数字量“0”和“1”,开关的一端(列线)通过电阻接VCC,而接地是通过程序输出数字“0”实现的。

键盘处理程序的任务是:

确定有无键按下,判断哪一个键按下,键的功能是什么;还要消除按键在闭合或断开时的抖动。

两个并行口中,一个输出扫描码,使按键逐行动态接地,另一个并行口输入按键状态,由行扫描值和回馈信号共同形成键编码而识别按键,通过软件查表,查出该键的功能。

四、硬件设计

系统模块图

4.1关于AT89C51

4.1.1特性概述

AT89C51是一种带4K字节FLASH存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低电压、高性能CMOS8位微处理器,俗称单片机。

AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

图1AT89C51管脚图

 

AT89C51其具有以下特性:

(1)与MCS-51兼容

(2)4K字节可编程FLASH存储器

(3)寿命:

1000写/擦循环

(4)数据保留时间:

10年

(5)全静态工作:

0Hz-24MHz

(6)三级程序存储器锁定

(7)128×8位内部RAM

(8)32可编程I/O线

(9)两个16位定时器/计数器

(10)5个中断源

(11)可编程串行通道

(12)低功耗的闲置和掉电模式

(13)片内振荡器和时钟电路

AT89C51提供以下标准功能:

4k字节Flash闪速存储器,128字节内部RAM,32个I/O接口,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。

同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。

空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。

掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。

4.1.2管脚说明

(1)VCC:

供电电压

(2)GND:

接地

(3)P0口:

P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。

当P0口的管脚第一次写1时,被定义为高阻输入。

P0能够用于外部程序数据存储器,它可以被定义为数据/地址的低八位。

在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须接上拉电阻。

(4)P1口:

P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。

P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。

在FLASH编程和校验时,P1口作为低八位地址接收。

(5)P2口:

P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。

并因此作为输入时,P2口的管脚被外部拉低,将输出电流。

这是由于内部上拉的缘故。

P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。

在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。

P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

(6)P3口:

P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。

当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。

作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。

P3口也可作为AT89C51的一些特殊功能口,如下表所示:

P3.0RXD(串行输入口)

P3.1TXD(串行输出口)

P3.2/INT0(外部中断0)

P3.3/INT1(外部中断1)

P3.4T0(记时器0外部输入)

P3.5T1(记时器1外部输入)

P3.6/WR(外部数据存储器写选通)

P3.7/RD(外部数据存储器读选通)

P3口同时为闪烁编程和编程校验接收一些控制信号。

RST:

复位输入。

当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

(7)ALE/PROG:

当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的低位字节。

在FLASH编程期间,此引脚用于输入编程脉冲。

在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。

因此它可用作对外部输出的脉冲或用于定时目的。

然而要注意的是:

每当用作外部数据存储器时,将跳过一个ALE脉冲。

如想禁止ALE的输出可在SFR8EH地址上置0。

此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。

另外,该引脚被略微拉高。

如果微处理器在外部执行状态ALE禁止,置位无效。

(8)PSEN:

外部程序存储器的选通信号。

在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。

但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。

(9)/EA/VPP:

当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。

注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。

在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。

(10)XTAL1:

反向振荡放大器的输入及内部时钟工作电路的输入。

XTAL2:

来自反向振荡器的输出。

振荡器特性:

  XTAL1和XTAL2分别为反向放大器的输入和输出。

该反向放大器可以配置为片内振荡器。

石晶陶瓷振荡均可采用。

如采用外部时钟源驱动器件,XTAL2应不接。

有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。

4.24×4矩阵键盘

4.2.1矩阵式键盘介绍

矩阵式键盘(或者叫行列式键盘)常应用在按键数量比较多的系统之中。

这种键盘由行线和列线组成,按键设置在行、列结构的交叉点上,行、列线分别接在按键开关的两端。

行列式键盘可分为非编码键盘和编码键盘两大类。

编码键盘内部设有键盘编码器,被按下键的键号由键盘编码器直接给出,同时具有防抖和解决重键的功能。

非编码键盘通常采用软件的方法,逐行逐列检查键盘状态,当有键按下时,通过计算或查表的方法获取该键的键值,通常,计算机通过程序控制对键盘扫描,从而获取键值,根据计算机扫描的方法可以分为定时扫描法和中断扫描法两种。

矩阵式键盘模式以N个端口连接控制N*N个按键,实时在LED数码管上显示按键信息。

显示按键信息,既降低了成本,又提高了精确度,省下了很多的I/O端口为他用,相反,独立式按键虽编程简单,但占用I/O口资源较多,不适合在按键较多的场合应用。

并且在实际应用中经常要用到输入数字、字母、符号等操作功能,如电子密码锁、电话机键盘、计算器按键等,至少都需要12到16个按键,在这种情况下如果用独立式按键的话,显然太浪费I/O端口资源,为了解决这一问题,我们使用矩阵式键盘。

本系统中的4*4矩阵式键盘结构简单,按键数较少,采用非编码式键盘,当有键按下时,由单片机通过程序扫描确定键值,并将获得的键值通过LED数码管显示出来,4*4矩阵式键盘结构及键值分布如下图:

 

 

 

4.2.2键盘扫描原理

(1)行扫描法

矩阵式键盘采用行列式结构,按键设置在行列的交点上。

当口线数量为8时,可以将根定义为行线,根定义为列线,形成4×4键盘可以配置1个按键。

矩阵式键盘的行线通过电阻接+5V。

当键盘上没有键闭合时,所有行线与列线是断开的,行线均呈高电平当键盘上某一键闭合时,该键对应的行线与列线短接,此时行线的状态将由被短接的列线的低电平所决定。

·判断有无键按下。

将列线设置为输出口,输出全0然后读行线状态,若行线均为高电平,则没有按键按下,若不全为高电平则有按键按下。

·判断按下哪个键。

先设置列线C0为低电平其余列线为高电平,读行线状态,如行线状态不全为1,则说明所按键在该列,否则不在该列其余类推。

·获得相应键号。

根据行号和列号算出按下键的键号:

键号=行首号+列号,行首号为行数乘以行号。

(2)线反转法

线反转法按键识别的根据是键号与键值的对应关系。

对于某一个按下的值,如2号键,首先使列线输出全0读行线,结果为E0H;然后使行线输出全0,读列线,结果为0BH。

两次读的结果拼成一个字节,即EBH该值为EBH。

4.3LED数码管

LED(发光二级管)显示器件是计算机控制控制系统中的廉价输出设备,它由多个发光二极管组成,能显示许多种字符。

由于制作材料不同,LED可以发出红、黄、篮、紫等各种单色光,一个发光二级管正常发光时的电流大约为10mA,本系统中使用的是七段共阴极LED数码管。

 

 

4*4键盘共有16个键,对其编号0~9,A~F,所以用一个7段数码管静态显示即可满足即时显示按键信息的要求。

所谓静态显示,就是当显示器件显示某个字符时,相应的显示段(发光二级管)恒定地导通或截止,直到显示另一个字符为止。

这种显示方式显示一个字符时,只需要微处理器送一次代码,因此占用机时少,而且显示稳定可靠,其缺点是,使用元器件相对较多,且线路比较复杂,相对而言成本较高,比较适合显示位数较少的情况。

表1.共阴极7段LED显示器件所能显示的部分字符与7段控制显示代码的对应关系

显示字符

控制显示代码(十六进制)

显示字符

控制显示代码(十六进制)

1

06

A

77

2

5B

B

7C

3

4F

C

39

4

66

D

5E

5

6D

E

79

6

7D

F

71

7

07

H

76

8

7F

P

73

9

6F

-

40

0

3F

不显示

00

4.4硬件连接

(1)      把“单片机系统“区域中的P3.0-P3.7端口用8芯排线连接到“4X4行列式键盘”区域中的C1-C4 R1-R4端口上;

(2)      把“单片机系统”区域中的P0.0/AD0-P0.7/AD7端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个a-h端口上;要求:

P0.0/AD0对应着a,P0.1/AD1对应着b,……,P0.7/AD7对应着h。

 

硬件连接图

五、软件设计

5.1Keil

KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。

用过汇编语言后再使用C来开发,体会更加深刻。

KeilC51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面,并将这些部分组合在一起。

其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。

KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。

在开发大型软件时更能体现高级语言的优势。

KeilC51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。

另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。

在开发大型软件时更能体现高级语言的优势。

C51工具包的整体结构,uVision与Ishell分别是C51forWindows和forDos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。

开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。

然后分别由C51及C51编译器编译生成目标文件(.OBJ)。

目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。

ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。

使用独立的Keil仿真器时的注意事项有:

仿真器标配11.0592MHz的晶振,但用户可以在仿真器上的晶振插孔中换插其他频率的晶振。

仿真器上的复位按钮只复位仿真芯片,不复位目标系统。

仿真芯片的31脚(/EA)已接至高电平,所以仿真时只能使用片内ROM,不能使用片外ROM;但仿真器外引插针中的31脚并不与仿真芯片的31脚相连,故该仿真器仍可插入到扩展有外部ROM(其CPU的/EA引脚接至低电平)的目标系统中使用。

5.2Proteus

Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。

是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年又增加了Cortex和DSP系列处理器,并持续增加其他系列处理器模型。

在编译方面,它也支持IAR、Keil和MPLAB等多种编译器。

它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。

它是目前最好的仿真单片机及外围器件的工具。

虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。

广泛应用于各个领域。

Proteus为用户提供了丰富的资源,主要有:

1.Proteus可提供的仿真元器件资源:

仿真数字和模拟、交流和直流等数千种元器件,有30多个元件库。

2.Proteus可提供的仿真仪表资源:

示波器、逻辑分析仪、虚拟终端、SPI调试器、I2C调试器、信号发生器、模式发生器、交直流电压表、交直流电流表。

理论上同一种仪器可以在一个电路中随意的调用。

3.除了现实存在的仪器外,Proteus还提供了一个图形显示功能,可以将线路上变化的信号,以图形的方式实时地显示出来,其作用与示波器相似,但功能更多。

这些虚拟仪器仪表具有理想的参数指标,例如极高的输入阻抗、极低的输出阻抗。

这些都尽可能减少了仪器对测量结果的影响。

4.Proteus可提供的调试手段Proteus提供了比较丰富的测试信号用于电路的测试。

这些测试信号包括模拟信号和数字信号。

在PROTEUS绘制好原理图后,调入已编译好的目标代码文件:

*.HEX,可以在PROTEUS的原理图中看到模拟的实物运行状态和过程。

PROTEUS是单片机课堂教学的先进助手。

PROTEUS不仅可将许多单片机实例功能形象化,也可将许多单片机实例运行过程形象化。

前者可在相当程度上得到实物演示实验的效果,后者则是实物演示实验难以达到的效果。

它的元器件、连接线路等却和传统的单片机实验硬件高度对应。

这在相当程度上替代了传统的单片机实验教学的功能,例:

元器件选择、电路连接、电路检测、电路修改、软件调试、运行结果等。

随着科技的发展,“计算机仿真技术”已成为许多设计部门重要的前期设计手段。

它具有设计灵活,结果、过程的统一的特点。

可使设计时间大为缩短、耗资大为减少,也可降低工程制造的风险。

相信在单片机开发应用中PROTEUS也能茯得愈来愈广泛的应用。

使用Proteus软件进行单片机系统仿真设计,是虚拟仿真技术和计算机多媒体技术相结合的综合运用,有利于培养学生的电路设计能力及仿真软件的操作能力;在单片机课程设计和全国大学生电子设计竞赛中,我们使用Proteus开发环境对学生进行培训,在不需要硬件投入的条件下,学生普遍反映,对单片机的学习比单纯学习书本知识更容易接受,更容易提高。

实践证明,在使用Proteus进行系统仿真开发成功之后再进行实际制作,能极大提高单片机系统设计效率。

因此,Proteus有较高的推广利用价值。

5.3程序流程图

5.4源代码

#include

unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};

unsignedchartemp;

unsignedcharkey;

unsignedchari,j;

voidmain(void)

{

while

(1)

{

P3=0xff;

P3_4=0;

temp=P3;

temp=temp&0x0f;

if(temp!

=0x0f)

{

for(i=50;i>0;i--)

for(j=200;j>0;j--);

temp=P3;

temp=temp&0x0f;

if(temp!

=0x0f)

{

temp=P3;

temp=temp&0x0f;

switch(temp)

{

case0x0e:

key=3;

break;

case0x0d:

key=2;

break;

case0x0b:

key=1;

break;

case0x07:

key=0;

break;

}

temp=P3;

P0=table[key];

temp=temp&0x0f;

while(temp!

=0x0f)

{

temp=P3;

temp=temp&0x0f;

}

}

}

P3=0xff;

P3_5=0;

temp=P3;

temp=temp&0x0f;

if(temp!

=0x0f)

{

for(i=50;i>0;i--)

for(j=200;j>0;j--);

temp=P3;

temp=temp&0x0f;

if(temp!

=0x0f)

{

temp=P3;

temp=temp&0x0f;

switch(temp)

{

case0x0e:

key=7;

break;

case0x0d:

key=6;

break;

case0x0b:

key=5;

break;

case0x07:

key=4;

break;

}

temp=P3;

P0=table[key];

temp=temp&0x0f;

while(temp!

=0x0f)

{

temp=P3;

temp=temp&0x0f;

}

}

}

P3=0xff;

P3_6=0;

temp=P3;

temp=temp&0x0f;

if(temp!

=0x0f)

{

for(i=50;i>0;i--)

for(j=200;j>0;j--);

temp=P3;

temp=temp&0x0f;

if(temp!

=0x0f)

{

temp=P3;

temp=temp&0x0f;

switch(temp)

{

case0x0e:

key=11;

break;

case0x0d:

key=10;

break;

case0x0b:

key=9;

break;

case0x07:

key=8;

break;

}

temp=P3;

P0=table[key];

temp=temp&0x0f;

while(temp!

=0x0f)

{

temp=P3;

temp=temp&0x0f;

}

}

}

P3=0xff;

P3_7=0;

temp=

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

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2