您的当前位置:首页单片机数字计算器软硬件设计说明书概要

单片机数字计算器软硬件设计说明书概要

2022-10-02 来源:乌哈旅游


设计题目:单片机数字计算器硬软件设计

摘要

本设计是基于51系列的单片机进行的数字计算器系统设计,

可以完成计算器的键盘输入,进行加、减、乘、除3位无符号数字的简单四则运算,并在LED上相应的显示结果。

设计过程在硬件与软件方面进行同步设计。硬件方面从功能考虑,首先选择内部存储资源丰富的AT89C51单片机,输入采用4×4矩阵键盘。显示采用5位7段共阴极LED静态显示。软件方面从分析计算器功能、流程图设计,再到程序的编写进行系统设计。编程语言方面从程序总体设计以及高效性和功能性对C语言和汇编语言进行比较分析,针对计算器四则运算算法特别是乘法和除法运算的实现,最终选用全球编译效率最高的KEIL公司的μVision3软件,采用汇编语言进行编程,并用proteus仿真。

引言

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

单片机课程设计既要让学生巩固课本学到的理论,还要让学生学习单片机硬件电路设计和用户程序设计,使所学的知识更深一层的理解,数字计算器原理与硬软件的课程设计主要是通过学生独立设计方案并自己动手用计算机电路设计软件,编写和调试,最后仿真用户程序,来加深对单片机的认识,充分发挥学生的个人创新能力,并提高学生对单片机的兴趣,同时学习查阅资料、参考资料的方法。

关键词:单片机 计算器 AT89c51芯片 74LS164

1

目录

摘 要 …………………………………………01 引 言 …………………………………………01

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

1.1 设计要求 1.2 设计方案的确定

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

2.1 AT89c51介绍 2.2 芯片74LS164介绍

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

3.1 键盘电路的设计 3.2 显示电路的设计 3.3 其他电路设计

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

4.1 主程序的设计

4.2 显示、读键模块的设计 4.3 其他内容说明 4.4 源程序代码

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

5.1 Keil C51单片机软件开发系统 5.2 proteus的操作

第六章 总 结……………………………………24

心得体会…………………………………………25 参考文献…………………………………………26

2

第一章 设计任务和要求

1.1 设计要求

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

1. 扩展4*4键盘,其中10个数字,5个功能键,1个清零 2 . 使用五位数码管接口电路

3. 完成十进制的四则运算(加、减、乘、除); 4. 实现低于三位小于255数字的连续运算; 5. 使用keil C软件编写程序; 6. 最后用ptoteus仿真; 7. 具有较强的抗干扰能力;

8. 体积小、功耗低,便于嵌入其他系统。

1.2 设计方案的确定

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

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

第二章 单片机简要原理

在该课程设计中,主要用到一个AT89c51芯片和串接的五个74LS164芯片。作为该设计的主要部分。下面将对这两个芯片原

3

理及功能做已详细介绍和说明。

2.1

AT89c51介绍

芯片AT89c51的外形结构和引脚图如2—1所示。AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

1. 主要特性:

8051 CPU与MCS-51 兼容

4

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”时,它利用内部上拉优势,当对外部八位地址数

5

据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。 P3口也可作为AT89C51的一些特殊功能口,如下表所示:

口管脚 备选功能

P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 /INT0(外部中断0) P3.3 /INT1(外部中断1) P3.4 T0(记时器0外部输入) P3.5 T1(记时器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有效。但在访

6

问外部数据存储器时,这两次有效的/PSEN信号将不出现。 /EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。

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

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

2.2 芯片74LS164介绍

74LS164是一个串入并出的8位移位寄存器,他常用于单片机系统中,下面结束一下这个元件的基本知识。74LS164外部结构和引脚如图2—2所示:

图2—2 74LS164引脚图

1. 主要特性:

 串行输入带锁存

 时钟输入,串行输入带缓冲  异步清除

 最高时钟频率可高达36Mhz  功耗:10mW/bit

 74系列工作温度: 0C to 70C  Vcc最高电压:7V  输入最高电压:7V

 最大输出驱动能力:高电平:-0.4mA ; 低电平:8mA

7

2. 引脚功能:

在单片机系统中, 如果并行口的IO资源不够,而串行口又没有其他的作用, 那么我们可以用74LS164来扩展并行IO口,节约单片机资源。74LS164是一个串行输入并行输出的移位寄存器。并带有清除端。

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

第三章 硬件设计

简易数字计算器系统硬件设计主要包括:键盘电路,显示电路以及其他辅助电路。下面分别进行设计。

3.1 键盘电路的设计

键盘可分为两类:编码键盘和非编码键盘。编码键盘是较多按键(20个以上)和专用驱动芯片的组合,当按下某个按键时,它能够处理按键抖动、连击等问题,直接输出按键的编码,无需系统软件干预。通用计算机使用的标准键盘就是编码键盘。在智能仪器中,使用并行接口芯片8279或串行接口芯片HD7279均可以组成编码键盘,同时还可以兼顾数码管的显示驱动,其相关的接口电路和接口软件均可在芯片资料中得到。当系统功能比较复杂,按键数量很多时,采用编码键盘可以简化软件设计。但大多数智能仪器和电子产品的按键数目都不太多(20个以内),为了降低成本和简化电路通常采用非编码键盘。非编码键盘的接口电路有设计者根据需要自行决定,按键信息通过接口软件来获取。 本课题需要的是16个按键,故选择用非编码键盘,为了减少所占用的端口,由P1口采用4*4矩阵式键盘。具体电路连接如图3—1所示

8

图3—1 4*4键盘输入

3.2 显示电路的设计

当系统需要显示少量数据时,采用LED数码管进行显示是一种经济实用的方法。数码管显示有静态显示和动态显示两种方法。为了减少端口的使用,故选择静态显示。 电路如下图3—2所示:

图3—2 五位数码管显示

LED数码管显示块是由发光二极管显示字段的显示器件。在单片机应用中通常使用七段LED。这种显示块有共阴极和共阳极两种,如图是它的管脚配置 ,本设计采用的是共阴极接法 。

9

3.3其他电路设计

1. 复位、时钟电路设计

MCS-51单片机芯片内部有一个用于构成振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是此放大器的输入端和输出端。

当使用内部振荡电路时,XTAL1.XTAL2引脚外接石英晶体和微调电容,如图3—3所示,图中C2.C3大小一般为30PF。还加了复位/备用电源引脚的接线方法,任何单片机在工作之前都要进行复位,以便CPU以及其他功能部件都处于一个确定的初始化状态,并从这个状态开始工作,也就是程序开始执行之前,单片机做好准备工作。如何进行复位呢?只用在单片机的RST引脚上保持两个机器周期(24个时钟周期)的高电平即可对单片机实现复位操作。

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

图3.3复位电路和时钟电路

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

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

所谓静态显示,就是每一个显示器,都要占用单独的具有封锁功能的I/O接口用于笔画字段形代码,单片机只要把显示的字形

10

代码发送到接口电路,直到要显示新的数据时,再发送新的字形

码,因此,使用这种方法单片机中CPU的开销小,可以提高单独

锁存的I/O接口电路很多,这里以常用的串并转化电路74LS164为例介绍一种常用静态显示电路。

TXD RXD 74ls164Q1..Q8 74ls164Q1..Q8 74ls164Q1..Q8 74ls164Q1..Q8 74ls164Q1..Q8 89C51 H….A H….A H….A H….A H….A 图3.4 五位数码管静态显示接法

如图3.4所示,5片74LS164首尾相串,而时钟端接在一起,这样,当输入8个脉冲时,从单片机RXD端输出的数据就进入到第一个74LS164中了,当第二个8个脉冲到来时,这个数据就进入了第二个片74LS164,新的数据则进入了第一个74LS164。这样,当第五个脉冲完成后,首次送出的数据被送入到最左面的74LS164中,其他数据依次出现在第一、第二、第三、第四片74LS164中。入口:把要显示的数分别放在显示缓冲区60H-64H共五个单元中,并且分别对应五个数码管LED1-LED4。出口:蒋预置在显示缓冲区中的五个数组成相应的现实字形码,然后输出到显示器中显示。

第四章 软件设计

在数字计算器的软件规划要求下,简易计算器的程序

主要包括以下功能模块:(1) 主模块,为系统的初始化。(2) 显示与读键模块,分为显示子程序,判键程序段、运算操作子程序等部分;

11

4.1 主程序的设计

开始 初始化参数 LED显示 功能键 否 按键输入? 是 读取键值 是功能键 根据上次功能键和输入的数据计算结果 保存结果和功能键 是数字键 分析键是清零键 数字键 输入数值 清零键 状态清零 结果送显示缓存 等待数值输入 数值送显示缓存 图4—1 主程序流程图

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

12

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

简易计算器所显示的数值最大位三位。要显示数值,先判断数值大小和位数,如果是超过三位或大于255,将不显示数字。可重新输入数字,再次计算。 (2)运算程序的设计

首先初始化参数,送LED低位显示“0”,高位不显示。然后扫描键盘看是否有键输入,若有,读取键码。判断键码是数字键、清零键还是功能键,是数值键则送LED显示并保存数值,是清零键则做清零处理,是功能键则又判断是“=”还是运算键,若是“=”则计算最后结果并送LED显示,若是运算键则保存相对运算程序的首地址。

4.2 显示、读键模块的设计

1. LED显示程序设计

LED显示器由七段发光二极管组成,排列成8字形状,因此也称为七段LED显示器。为了显示数字或符号,要为LED显示器提供代码,即字形代码。七段发光二极管,再加上一个小数点位,共计8段,因此提供的字形代码的长度正好是一个字节。简易计算器用到的数字0~9的共阴极字形代码如下表:

显示字段码 g f e d c b a 型 0 1 2 3 4 5 6 7 8 9 0 0 1 1 1 1 1 0 1 1 1 0 0 0 1 1 1 0 1 1 1 0 1 0 0 0 1 0 1 0 1 0 1 1 0 1 1 0 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 0 1 1 0 1 1 1 1 1 3fh 06h 5bh 4fh 66h 6dh 7dh 07h 7fh 6fh 13

2.读键子程序设计

为了实现键盘的数据输入功能和命令处理功能,每个键都有其处理子程序,为此每个键都对应一个码——键码。为了得到被按键的键码,现使用行扫描法识别按键。其程序框图如图4—2: 开始 初始化地址参数 输出列扫描信号 列扫描信号移位 读入行信号 是 该列有输入? 否 按照行列计算键值 否 4列扫描完? 查表得键码 是 返回

开始 开始

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

等待按键释放 4.3 其他内容说明

14

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

读键程序使用的是反转法读键,不管键盘矩阵的规模大小,均进行两次读键。第一次所有行线均输出低电平,从所有读入键盘信息(列信息);第二次所有列线均输出低电平,从所有行线读入键盘信息(行信息)。将两次读键信息进行组合就可以得到按键的特征编码,然后通过查表得到按键的顺序编码。将各特征编码按希望的顺序排成一张表,然后用当前读得的特征码来查表。当表中有该特征码时,它的位置就是对应的顺序编码;当表中没有该特征码时,说明这是一个没有定义的键码,与没有按键(0FFH)同等看待。

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

首先对数字键的程序段进行相应的设计,如果运算键(+、-,*,/)响应标志不为一,则将输入的数字送入第一个操作数

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

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

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

2.软件的可靠性设计

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

(1) 为防止程序跑飞,软件中设置了软件陷阱 (2) 为防止键盘抖动造成按键错误,采取了软件防 (3) 为了保证结果的正确性,结果溢出时显示错误代码0

15

4.4 源程序代码

DBUF EQU 30H TEMP EQU 40H

YJ EQU 50H ;结果存放 YJ1 EQU 51H ;中间结果存放 GONG EQU 52H ;功能键存放 DIN BIT CLK START: MLOOP: WAIT: NEXT1: NEXT2: NEXT3: NEXT4: NEXT5: NEXT6: NEXT7: 0B0H BIT 0B1H ORG 00H

MOV R3,#0 MOV GONG,#0 MOV 30H,#10H MOV 31H,#10H MOV 32H,#10H MOV 33H,#10H MOV 34H,#10H CALL DISP ;PANCALL TESTKEY JZ WAIT CALL GETKEY ; INC R3 CJNE A,#0,NEXT1 ; LJMP E1 ;CJNE A,#1,NEXT2 LJMP E1

CJNE A,#2,NEXT3 LJMP E1

CJNE A,#3,NEXT4 LJMP E1

CJNE A,#4,NEXT5 LJMP E1

CJNE A,#5,NEXT6 LJMP E1

CJNE A,#6,NEXT7 LJMP E1

CJNE A,#7,NEXT8

16

;P3.0 ;P3.1 ;初始化显示为空 调显示子程序;判断有无按键 读键 ;按键个数 判断是否数字键 转数字键处理

NEXT8: NEXT9: NEXT10: LJMP E1

CJNE A,#8,NEXT9 LJMP E1

CJNE A,#9,NEXT10 LJMP E1 CJNE A,#10,NEXT11 ;判断是否功能键 LJMP E2 ;转功能键处理 NEXT11: NEXT12: NEXT13: NEXT14: NEXT15:

E1: N1: N2: N3: E11: E12: CJNE A,#11,NEXT12 LJMP E2 CJNE A,#12, NEXT13 LJMP E2 CJNE A,#13,NEXT14 LJMP E2 CJNE A,#14,NEXT15 LJMP E2 LJMP E3 ;CJNE R3,#1,N1 ; LJMP E11 ;CJNE R3,#2,N2 LJMP E12 ;CJNE R3,#3,N3 LJMP E13 ;LJMP E3 ;MOV R4,A ; MOV 34H,A ; MOV 33H,#10H MOV 32H,#10H LJMP MLOOP ;MOV R7,A ; MOV B,#10 MOV A,R4 MUL AB ADD A,R7 MOV R4,A MOV 32H,#10H MOV 33H,34H MOV 34H,R7

17

判断是否清除键 判断第几次按键 为第一个数字 为第二个数字 为第三个数字 第四个数字转溢出输入值暂存R4 输入值送显示缓存 等待再次输入 个位数暂存R7 十位数 输入值存R4 输入值送显示缓存 ; ; ;

E13: LJMP MLOOP MOV R7,A MOV B,#10 MOV A,R4 MUL AB JB OV,E3 ;输入溢出 ADD A,R7 JB MOV R4,A MOV 32H,33H MOV 33H,34H MOV 34H,R7 LJMP E3: MOV R3,#0 MOV R4,#0 MOV YJ,#0 MOV GONG,#0 MOV 30H,#10H ; MOV 31H,#10H MOV 32H,#10H MOV 33H,#10H MOV LJMP E2: MOV 34H,#10H MOV 33H,#10H MOV 32H,#10H MOV R0,GONG ; MOV GONG,A MOV A,R0 CJNE LJMP N21: CJNE LJMP N22: CJNE LJMP CHENG N23: CJNE LJMP CY,E3 ; MLOOP 34H,#10H MLOOP A,#10,N21 ;JIA ;A,#11,N22 JIAN ;A,#12,N23 A,#13,N24 CHU ;18

输入溢出 输入值送显示缓存 按键次数清零 输入值清零 计算结果清零 ;功能键设为零 显示清空 与上次功能键交换判断功能键 “+” “-” “*” “/”

; ; ; ; ;

N24: N25: N4: FIRST: CJNE A,#0,N25 LJMP FIRST ;首次按功能键 LJMP DEN ;“=” LJMP E3 MOV YJ,R4 ;输入值送结果 MOV R3,#0 ;按键次数清零 LJMP DISP1 ;结果处理 JIA: MOV ADD JB MOV YJ,A MOV R3,#0 LJMP JIAN: MOV SUBB JB MOV YJ,A MOV R3,#0 LJMP CHENG: MOV MOV B,A MOV A,R4 MUL AB JB MOV YJ,A LJMP CHU: MOV MOV B,A MOV A,YJ DIV MOV YJ,A MOV R3,#0 LJMP DEN: MOV LJMP DISP1: MOV MOV A,YJ A,R4 CY,N4 DISP1 A,YJ A,R4 CY,N4 DISP1 A,YJ ;OV,N4 DISP1 A,R4 AB DISP1 R3,#0 DISP1 B,#10 A,YJ 19

上次结果送累加器 上次结果加输入值 溢出 存本次结果 按键次数清零 上次结果减输入值 负数溢出 上次结果乘输入值溢出 上次结果除输入值 结果送累加器

;;;;;;; ; ;;

DIV MOV MOV MOV MOV JZ MOV MOV DIV MOV MOV MOV MOV JZ MOV DISP11: LJMP DISP: MOV MOV MOV DP10: MOV MOV MOVC MOV INC DEC DJNZ MOV MOV DP12: MOV MOV DP13: RLC MOV CLR SETB DJNZ INC DJNZ AB

YJ1,A A,B 34H,A A,YJ1

DISP11

B,#10 A,YJ1 AB YJ1,A A,B

33H,A A,YJ1

DISP11 32H,A MLOOP

R0,#DBUF

R1,#TEMP+4 R2,#5

DPTR,#SEGTAB A,@R0 A,@A+DPTR @R1,A R0 R1

R2,DP10 R0,#TEMP R1,#5 R2,#8 A,@R0 A DIN,C CLK CLK R2,DP13 R0

R1,DP12

20

;结果除10 ;暂存“商” ;取个位数

;个位数送显示缓存 ;结果是否为一位数

;十位送显示缓存 ;结果是否为二位数 ;百位数送显示缓存 ;显示子程序

RET SEGTAB:

DB DB DB 3FH,06H,5BH,4FH,66H,6DH ;段码定义

7DH,07H,7FH,6FH,77H,7CH 39H,5EH,79H,71H,00H,40H TESTKEY: MOV MOV CPL ANL RET KEYTABLE: DB DB DB DB GETKEY: MOV ACALL MOV MOV CJNE LJMP K12: MOV MOV MOV CJNE MOV MOV CJNE MOV MOV CJNE MOV MOV CJNE LJMP

P1,#0FH A,P1

A

A,#0FH

;

0DEH,0EDH,0DDH,0BDH 0EBH,0DBH,0BBH,0E7H 0D7H,0B7H,07EH,07DH 07BH,077H,0BEH,0EEH

;R6,#10 DELAY P1,#0FH A,P1

A,0FH,K12 MLOOP B,A

P1,#0EFH A,P1

A,#0EFH,K13 P1,#0DFH A,P1

A,#0DFH,K13 P1,#0BFH A,P1

A,#0BFH,K13 P1,#07FH A,P1

A,#07FH,K13 MLOOP

21

;读入键状态

高四位不用

;键码定义 读键子程序 K13: ANL ORL MOV MOV MOV MOV K14: MOV MOVC CJNE MOV K15: MOV CJNE MOV ACALL MOV RET K16: INC DJNZ AJMP DELAY: MOV DLOOP: DJNZ DJNZ RET END

A,#0F0H

A,B B,A R1,#16 R2,#0

DPTR,#KEYTABLE A,R2

A,@A+DPTR A,B,K16 P1,#0FH A,P1

A,#0FH,K15 R6,#10 DELAY A,R2 R2 R1,K14 MLOOP

R7,#80 R7,DLOOP R6,DLOOP

22

延时子程序

;

第五章 调试与仿真

下面用KEIL uVision与 porteus仿真软件介绍数字计算器的仿真与调试。

5.1 Keil C51单片机软件开发系统

1. 系统的整体结构

C51工具包的整体结构中,其中uVision与Ishell分别是C51 for Windows和for Dos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。然后分别由C51及A51编译器编译生成目标文件(.OBJ)。目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。

2. 采用KEIL 开发的89c51单片机应用程序步骤:

(1) 在uVision 集成开发环境中创建新项目(Project),扩展文件名为.UV2,并为该项目选定合适的单片机CPU器件(本设计采用ATMEL 公司下的AT89C51)

(2)用uVision 的文本编辑器编写源文件,可以是汇编文件(.ASM),也可以使C语言文件(扩展名.C),并将该文件添加到项目中去。一个项目文件可以包含多个文件,除了源程序文件外,还可以是库文件、头文件或文本说明文件。

(3)通过uVision 2 的相关选择项,配置编译环境、连接定位器以及Debug调试器的功能。

(4)对项目中的源文件进行编译连接,生成绝对目标代码和可选的HEX文件,如果出现编译连接错误则返回到第2步,修改源文件中的错误后重构整个项目。 (5)对没有语法错误的程序进行仿真调试,调试成功后将HEX文件写入到单片机应用系统的ROM中。

5.2 proteus的操作

1.硬件电路图的接法操作

(1).放置选择(删除)元器件 (2).移动元器件 (3).缩放视图 (4).连接导线

23

(5).仿真,调试

2. 单片机系统PROTEUS设计与仿真过程

Proteus强大的单片机系统设计与仿真功能,使它可成为单片机系统应用开发和改进手段之一。全部过程都是在计算机上通过Proteus来完成的。其过程一般也可分为三步:

(1)在ISIS平台上进行单片机系统电路设计、选择元器件、接插件、连接电路和电气检测等。简称Proteus电路设计。

(2)在Keil平台上进行单片机系统程序设计、编辑、汇编编译、代码级调试,最后生成目标代码文件(*.hex)。简称Proteus源程序设计和生成目标代码文件。

(3)在ISIS平台上将目标代码文件加载到单片机系统中,并实现单片机系统的实时交互、协同仿真。它在相当程度上反映了实际单片机系统的运行情况。简称Proteus仿真。

第六章 总 结

基于单片机的设计至今为止已经进入了令人鼓舞的阶段,在进行了两周时间的摸索与设计,使我不仅仅对于单片机软件与硬件的常用设计与功能有所认识,还使我对于一项设计研究的制作过程所需要的详细步骤和具体实现方法有了进一步的掌握。由于我们的初步尝试,当中的缺点是无可非议地存在着。

当然在这次宝贵的设计活动中,经验才是对于我们最大的收获,而且还增强了自身对未知问题以及对知识的深化认识的能力,但是,仅仅是完成了作品还是不可以自我满足的,我们要认真的思考设计过程中遇到的问题,多查资料,将理论与实际相结合思考,并在以后的学习中更要加倍注意犯过的错误。

总之,这次设计从软件编写调试到软硬件联机调试,发现了自己的许多不足,在以后的学习中,我将一定回注意。

24

心得体会

课程设计是培养学生综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。因此作为自动化专业的学生来说掌握单片机的开发技术是十分重要的。

我的题目是数字计算器硬软件的设计,对于我们这些工科学生来说,这是一次考验。怎么才能找到课堂所学与实际应用的最佳结合点?怎样让自己的业余更接近专业?怎样让自己的计划更具有序性,而不会忙无一用?这都是我们所要考虑和努力的。这次课程设计我学到很多很多的东西,学会了怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪。不仅巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识,掌握了一种系统的研究方法,可以进行一些简单的编程。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。 同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,对单片机汇编语言掌握得不够好。这次课程设计通过自己的努力,同学的帮助,还有老师的辛勤指导下,最终顺利完成了。

最后,对我们的***老师和***老师,表示感谢!谢谢他们两周来对我的帮助。同时,对帮助我的所有同学和各位指导老师表示衷心的感谢!

25

参考文献

1. 周航慈. 《单片机应用程序设计技术》(修订板). 2. 周航慈. 《单片机程序设计基础(修订板)》. 3. 张志良编著.《单片机原理与控制技术》.第2版. 机械工业出版社

4. 杨志忠编著.《模拟电子技术》第1版. 高等教育出版社出版

5. 蒋力培 《单片微机系统 实用教程》 第1版 机械工业出版社

26

因篇幅问题不能全部显示,请点此查看更多更全内容