单片机计算器模拟研究设计方案.docx

上传人:b****2 文档编号:24415059 上传时间:2023-05-27 格式:DOCX 页数:30 大小:419.80KB
下载 相关 举报
单片机计算器模拟研究设计方案.docx_第1页
第1页 / 共30页
单片机计算器模拟研究设计方案.docx_第2页
第2页 / 共30页
单片机计算器模拟研究设计方案.docx_第3页
第3页 / 共30页
单片机计算器模拟研究设计方案.docx_第4页
第4页 / 共30页
单片机计算器模拟研究设计方案.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

单片机计算器模拟研究设计方案.docx

《单片机计算器模拟研究设计方案.docx》由会员分享,可在线阅读,更多相关《单片机计算器模拟研究设计方案.docx(30页珍藏版)》请在冰豆网上搜索。

单片机计算器模拟研究设计方案.docx

单片机计算器模拟研究设计方案

课程设计说明书

 

课程名称单片机原理及应用

设计课题数字计算器设计

专业

班级

姓名

 

年月日

课程设计任务书

系专业

学生姓名班级学号

课程名称

设计题目51系单片机数字计算器的设计

课程设计内容与要求:

1.   扩展4*4键盘,其中10个数字,5个功能键,1个清零

2 .   使用五位数码管接口电路

3.   完成十进制的四则运算(加、减、乘、除);

4.   实现低于三位小于255数字的连续运算;

5.   使用keil软件编写程序;

6.   最后用ptoteus仿真;

 

设计(论文)开始日期年月日指导教师

设计(论文)完成日期年月日指导教师

年月日

课程设计评语第1页

系专业

学生姓名班级学号课程名称

设计题目51系单片机数字计算器

 

课程设计篇幅:

图纸张

说明书页

指导教师评语:

 

年月日指导教师

答辩委员会评语:

 

成绩评定项目

满分

得分

平时成绩

20分

设计(论文)图纸及说明书成绩

50分

答辩成绩

30分

合计

评定成绩

答辩委员会主任

年月日

洛阳理工学院

摘要……………………………………………………01

引言……………………………………………………01

第一章设计任务和要求………………………………02

1.1设计要求

1.2设计方案的确定

第二章单片机简要原理………………………………02

2.1AT89C51介绍

2.2芯片74LS164介绍

第三章硬件设计………………………………………07

3.1键盘电路的设计

3.2显示电路的设计

3.3其他电路设计

3.4总原理图

第四章软件设计………………………………………11

4.1主程序的设计

4.2显示、读键模块的设计

4.3其他内容说明

4.4源程序代码

第五章调试与仿真……………………………………23

5.1KeilC51单片机软件开发系统

5.2proteus的操作

总结……………………………………………………25

心得体会…………………………………………………26

参考文献…………………………………………………27

摘要

本设计是基于51系列的单片机进行的简易计算器系统设计,可以完成计算器的键盘输入,进行加、减、乘、除3位无符号数字的简单四则运算,并在LED上相应的显示结果。

设计过程在硬件与软件方面进行同步设计。

硬件选择AT89C51单片机和74ls164,输入用4×4矩阵键盘。

显示用5位7段共阴极LED静态显示。

软件从分析计算器功能、流程图设计,再到程序的编写进行系统设计。

选用编译效率最高的Keil软件用汇编语言进行编程,并用proteus仿真。

关键词:

单片机计算器AT89C51芯片74LS164

引言

 简易计算器的原理与设计是单片机课程设计课题中的一个。

在完成理论学习和必要的实验后,我们掌握了单片机的基本原理以及编程和各种基本功能的应用,但对单片机的硬件实际应用和单片机完整程序设计还不清楚,实际动手能力不够,因此对该课程进行一次课程设计是有必要的。

单片机课程设计既巩固了课本学到的理论,还学到了单片机硬件电路和程序设计,简易计算器课程设计通过自己动手用计算机电路设计软件,编写和调试,最后仿真,来加深对单片机的认识,充分发挥我们的个人创新和动手能力,并提高我们对单片机的兴趣,同时学习查阅资料、参考资料的方法。

第一章设计任务和要求

1.1设计要求

本次课程设计,我选择的课题是单片机数字计算器硬软件设计,设计任务为:

1.   扩展4*4键盘,其中10个数字,5个功能键,1个清零

2 .   使用五位数码管接口电路

3.   完成十进制的四则运算(加、减、乘、除);

4.   实现低于三位小于255数字的连续运算;

5.   使用keil软件编写程序;

6.   最后用ptoteus仿真;

1.2设计方案的确定

按照1.1的设计要求,本课题需要使用数码管显示和扩展4*4键盘,由于实验箱的硬件电路已经固定,故选择串行静态显示和用P1口扩展4*4键盘,扩展的4*4键盘定义十个数字键,六个功能键,使用串行静态显示显示运算结果。

主程序进行初始化,采用定时器0进行查键,每次按键后调用显示子程序。

第二章单片机简要原理

在该课程设计中,主要用到一个AT89c51芯片和串接的五个74LS164芯片。

作为该设计的主要部分。

下面将对这两个芯片原理及功能做已详细介绍和说明。

2.1AT89c51介绍

图2—1

芯片AT89C51的外形结构和引脚图如2—1所示。

AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

1.主要特性:

8051CPU与MCS-51兼容

4K字节可编程FLASH存储器(寿命:

1000写/擦循环)

全静态工作:

0Hz-24KHz

三级程序存储器保密锁定

128*8位内部RAM

32条可编程I/O线

两个16位定时器/计数器

5个中断源

可编程串行通道

低功耗的闲置和掉电模式

片内振荡器和时钟电路

2.管脚说明

VCC:

供电电压(图中未画出)

GND:

接地。

P0口:

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

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

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

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

P1口:

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

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

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

P2口:

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

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

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

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

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

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

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脚两个机器周期的高电平时间。

ALE/PROG:

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

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

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

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

然而要注意的是:

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

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

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

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

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

/PSEN:

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

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

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

/EA/VPP:

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

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

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

XTAL1:

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

XTAL2:

来自反向振荡器的输出引脚。

2.2芯片74LS164介绍

74LS164是一个串入并出的8位移位寄存器,他常用于单片机系统中,下面结束一下这个元件的基本知识。

74LS164外部结构和引脚如图2—2所示:

图2—274LS164引脚图

1.主要特性:

·串行输入带锁存

·时钟输入,串行输入带缓冲

·异步清除

·最高时钟频率可高达36Mhz

·功耗:

10mW/bit

·74系列工作温度:

0Cto70C

·Vcc最高电压:

7V

·输入最高电压:

7V

·最大输出驱动能力:

高电平:

-0.4mA;低电平:

8mA

2.引脚功能:

在单片机系统中,如果并行口的IO资源不够,而串行口又没有其他的作用,那么我们可以用74LS164来扩展并行IO口,节约单片机资源。

74LS164是一个串行输入并行输出的移位寄存器。

并带有清除端。

其中,Q0—Q7并行输出端;A,B串行输入端;MR清除端,为0时,输出清零。

;CP时钟输入端。

第三章硬件设计

简易数字计算器系统硬件设计主要包括:

键盘电路,显示电路以及其他辅助电路。

下面分别进行设计。

3.1键盘电路的设计

键盘可分为两类:

编码键盘和非编码键盘。

编码键盘是较多按键(20个以上)和专用驱动芯片的组合,当按下某个按键时,它能够处理按键抖动、连击等问题,直接输出按键的编码,无需系统软件干预。

通用计算机使用的标准键盘就是编码键盘。

在智能仪器中,使用并行接口芯片8279或串行接口芯片HD7279均可以组成编码键盘,同时还可以兼顾数码管的显示驱动,其相关的接口电路和接口软件均可在芯片资料中得到。

当系统功能比较复杂,按键数量很多时,采用编码键盘可以简化软件设计。

但大多数智能仪器和电子产品的按键数目都不太多(20个以内),为了降低成本和简化电路通常采用非编码键盘。

非编码键盘的接口电路有设计者根据需要自行决定,按键信息通过接口软件来获取。

本课题需要的是16个按键,故选择用非编码键盘,为了减少所占用的端口,由P1口采用4*4矩阵式键盘。

具体电路连接如图3—1所示

图3—14*4键盘输入

3.2显示电路的设计

当系统需要显示少量数据时,采用LED数码管进行显示是一种经济实用的方法。

数码管显示有静态显示和动态显示两种方法。

为了减少端口的使用,故选择静态显示,并采用共阴极接法电路如图3—2所示图3—2五位数码管显示

LED数码管显示块是由发光二极管显示字段的显示器件。

在单片机应用中通常使用七段LED。

这种显示块有共阴极和共阳极两种。

3.3其他电路设计

1.复位、时钟电路设计

当使用内部振荡电路时,XTAL1.XTAL2引脚外接石英晶体和微调电容,如图3—3.1所示,图中C2.C3大小一般为30PF。

还加了复位/备用电源引脚的接线方法,任何单片机在工作之前都要进行复位,以便CPU以及其他功能部件都处于一个确定的初始化状态,并从这个状态开始工作,也就是程序开始执行之前,单片机做好准备工作。

如何进行复位呢?

只用在单片机的RST引脚上保持两个

3—3.1时钟电路3—3.2复位电路

机器周期(24个时钟周期)的高电平即可对单片机实现复位操作(如图3—3.2)。

当主电源Vcc发生掉电或者是电压降低到电平规定值时,VPD上外接的备用电源自动启用,为单片机内部RAM提供电源,以保护片内RAM中的信息不丢失,使系统在恢复上电后能正常运行

2.多位数码管电路显示的驱动电路

单片机应用中只有一位的的数字显示是不常见的,即要同时驱动多个数码管显示,就必须要同时让多个数码管加上各自不同的选片段,这个属于静态显示。

所谓静态显示,就是每一个显示器,都要占用单独的具有封锁功能的I/O接口用于笔画字段形代码,单片机只要把显示的字形代码发送到接口电路,直到要显示新的数据时,再发送新的字形码,因此,使用这种方法单片机中CPU的开销小,可以提高单独锁存的I/O接口电路很多,这里以常用的串并转化电路74LS164为例介绍一种常用静态显示电路。

图3—4五位数码管静态显示框图及接法

如图3—4所示,5片74LS164首尾相串,而时钟端接在一起,这样,当输入8个脉冲时,从单片机RXD端输出的数据就进入到第一个74LS164中了,当第二个8个脉冲到来时,这个数据就进入了第二个片74LS164,新的数据则进入了第一个74LS164。

这样,当第五个脉冲完成后,首次送出的数据被送入到最左面的74LS164中,其他数据依次出现在第一、第二、第三、第四片74LS164中。

入口:

把要显示的数分别放在显示缓冲区60H-64H共五个单元中,并且分别对应五个数码管LED1-LED4。

出口:

蒋预置在显示缓冲区中的五个数组成相应的现实字形码,然后输出到显示器中显示。

3.4总原理图(图3—5)

图3—5总原理图

第四章软件设计

在软件规划要求下,简易计算器的程序主要包括以下功能模块:

(1) 主模块,为系统初始化。

(2 显示与读键模块,分显示子程序,判键程序段、运算操作子程序等部分;

4.1主程序的设计

图4—1主程序流程图

主程序主要是用来进行初始化的,调用其他子程序,清空各个标志位,清空缓存区,读取键码,判断功能,在LED上作出回应,主程序流程图如图4—1所示。

(1)数字送显示缓冲程序设计

简易计算器所显示的数值最大位三位。

要显示数值,先判断数值大小和位数,如果是超过三位或大于255,将不显示数字。

可重新输入数字,再次计算。

(2)运算程序的设计

首先初始化参数,送LED低位显示“0”,高位不显示。

然后扫描键盘看是否有键输入,若有,读取键码。

判断键码是数字键、清零键还是功能键,是数值键则送LED显示并保存数值,是清零键则做清零处理,是功能键则又判断是“=”还是运算键,若是“=”则计算最后结果并送LED显示,若是运算键则保存相对运算程序的首地址。

4.2显示、读键模块的设计

1.LED显示程序设计

LED显示器由七段发光二极管组成,排列成8字形状,因此也称为七段LED显示器。

简易计算器用到的数字0~9的共阴极字形代码如下表:

显示字

g

f

e

d

c

b

a

段码

0

0

1

1

1

1

1

1

3fh

1

0

0

0

0

1

1

0

06h

2

1

0

1

1

0

1

1

5bh

3

1

0

0

1

1

1

1

4fh

4

1

1

0

0

1

1

0

66h

5

1

1

0

1

1

0

1

6dh

6

1

1

1

1

1

0

1

7dh

7

0

0

0

0

1

1

1

07h

8

1

1

1

1

1

1

1

7fh

9

1

1

0

1

1

1

1

6fh

2.读键子程序设计

为了实现键盘的输入功能,每个键都有其处理子程序,为此每个键都对应一个码——键码。

为了得到被按键的键码,使用行扫描法识别按键。

其程序框图如图4—2:

 

图4—2计算键值子程序流程图

4.3其他内容说明

1.定时查键的程序设计

进入定时器0的中断程序后,首先重新付初值,然后调用读键程序,如果有键按下,则判断按键是否与上次按键相同,如果相同则判断按键相应位是否为一,如果不为一,说明这不是持续按键导致的按键相应,并且进行相应的程序。

如果不是则退出中断程序。

读键程序使用的是反转法读键,不管键盘矩阵的规模大小,均进行两次读键。

第一次所有行线均输出低电平,从所有读入键盘信息(列信息);第二次所有列线均输出低电平,从所有行线读入键盘信息(行信息)。

将两次读键信息进行组合就可以得到按键的特征编码,然后通过查表得到按键的顺序编码。

将各特征编码按希望的顺序排成一张表,然后用当前读得的特征码来查表。

当表中有该特征码时,它的位置就是对应的顺序编码;当表中没有该特征码时,说明这是一个没有定义的键码,与没有按键(0FFH)同等看待。

数字键按下则将相应的数字送入缓存区,功能键按下则执行相应的程序。

首先对数字键的程序段进行相应的设计,如果运算键(+、-,*,/)响应标志不为一,则将输入的数字送入第一个操作数缓存区,并且清空所有响应位。

否则送入第二个操作数缓存区。

其次对功能键的程序段进行相应的设计。

如果功能键(+、-,*,/)第一次被按下,则置相应的标志位为一,并且将运算键响应标志位置一,清空第二个操作数的缓存区,为输入操作数做准备,如果是第二次按下则先调用运算操作子程序,执行上次按下的运算键的运算,置相应的标志位为一,并且将运算键响应标志位置一,清空第二个操作数的缓存区,为输入操作数做准备。

如果是’C’键按下,则先判断运算键响应位是否为一,如果不为一,则清空第一个操作数,否则清空第二个操作数。

如果是’=’键按下,则调用运算操作子程序。

2.软件的可靠性设计

提高本仪器的可靠性措施主要有:

(1)  为防止程序跑飞,软件中设置了软件陷阱

(2) 为防止键盘抖动造成按键错误,采取了软件防

(3) 为了保证结果的正确性,结果溢出时显示错误代码0

4.4源程序代码

DBUFEQU30H

TEMPEQU40H

YJEQU50H;结果存放

YJ1EQU51H;中间结果存放

GONGEQU52H;功能键存放

DINBIT0B0H;P3.0

CLKBIT0B1H;P3.1

ORG00H

START:

MOVR3,#0;初始化显示为空

MOVGONG,#0

MOV30H,#10H

MOV31H,#10H

MOV32H,#00H

MOV33H,#10H

MOV34H,#10H

MLOOP:

CALLDISP;PAN调显示子程序

WAIT:

CALLTESTKEY;判断有无按键

JZWAIT

CALLGETKEY;读键

INCR3;按键个数

CJNEA,#0,NEXT1;判断是否数字键

LJMPE1;转数字键处理

NEXT1:

CJNEA,#1,NEXT2

LJMPE1

NEXT2:

CJNEA,#2,NEXT3

LJMPE1

NEXT3:

CJNEA,#3,NEXT4

LJMPE1

NEXT4:

CJNEA,#4,NEXT5

LJMPE1

NEXT5:

CJNEA,#5,NEXT6

LJMPE1

NEXT6:

CJNEA,#6,NEXT7

LJMPE1

NEXT7:

CJNEA,#7,NEXT8

LJMPE1

NEXT8:

CJNEA,#8,NEXT9

LJMPE1

NEXT9:

CJNEA,#9,NEXT10

LJMPE1

NEXT10:

CJNEA,#10,NEXT11;判断是否功能键

LJMPE2;转功能键处理

NEXT11:

CJNEA,#11,NEXT12

LJMPE2

NEXT12:

CJNEA,#12,NEXT13

LJMPE2

NEXT13:

CJNEA,#13,NEXT14

LJMPE2

NEXT14:

CJNEA,#14,NEXT15

LJMPE2

NEXT15:

LJMPE3;判断是否清除键

E1:

CJNER3,#1,N1;判断第几次按键

LJMPE11;为第一个数字

N1:

CJNER3,#2,N2

LJMPE12;为第二个数字

N2:

CJNER3,#3,N3

LJMPE13;为第三个数字

N3:

LJMPE3;第四个数字转溢出

E11:

MOVR4,A;输入值暂存R4

MOV34H,A;输入值送显示缓存

MOV33H,#10H

MOV32H,#10H

LJMPMLOOP;等待再次输入

E12:

MOVR7,A;个位数暂存R7

MOVB,#10

MOVA,R4

MULAB;十位数

ADDA,R7

MOVR4,A;输入值存R4

MOV32H,#10H;输入值送显示缓存

MOV33H,34H

MOV34H,R7

LJMPMLOOP

E13:

MOVR7,A

MOVB,#10

MOVA,R4

MULAB

JBOV,E3;输入溢出

ADDA,R7

JBCY,E3;输入溢出

MOVR4,A

MOV32H,33H;输入值送显示缓存

MOV33H,34H

MOV34H,R7

LJMPMLOOP

E3:

MOVR3,#0;按键次数清零

MOVR4,#0;输入值清零

MOVYJ,#0;计算结果清零

MOVGONG,#0;功能键设为零

MOV30H,#10H;显示清空

MOV31H,#10H

MOV32H,#10H

MOV33H,#10H

MOV34H,#00H

LJMPMLOOP

E2:

MOV34H,#10H

MOV33H,#10H

MOV32H,#10H

MOVR0,GONG;与上次功能键交换

MOVGONG,A

MOVA,R0

CJNEA,#10,N21;判断功能键

LJMPJIA;“+”

N21:

CJNEA,#11,N22

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

当前位置:首页 > 成人教育 > 电大

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

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