PICFA简单计算器设计报告汇编语言四位无符号整数加减乘除

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程设计报告

课程名称:单片机原理与接口技术课程设计设计题目:简单计算器

院系:机电工程学院

班级:2010级电气工程及其自动化专业姓名:

学号:

指导教师:史丽萍,闫广明,张波,

张扬,王冠然

设计时间:2013年12月

一、设计方案描述与论证

我们所设计的是一个简单计算器,它具有四位数以内的整数加减乘除运算。可以在输入错误的时候退格,也可以初始化。在初始化的状态下可以进行关机以减少耗能。显示使用的数码管扫描显示的方法来显示数字,所以我们每一次运算前我们都需要将个位、十位、百位和千位相结合。我们使用的是4×4的键盘,检测的时候是进行键盘扫描来完成确定哪一个键被摁下,然后是否释放。键盘被摁下后,先判断是什么键。如果是数字键,则进行数的输入,首先先把百位的数值赋给千位,十位赋给百位,个位赋给十位,然后把摁下键的对应数赋给个位。如果是算法键,则将对应的算法寄存地址赋上相应算法的值,并且在下一次输入数字时把十位、百位和千位清零以完成下一次的赋值,而这一次的值将转换为一个数储存在相应的地址中。当按下的是退格键,则将十位赋值给个位,百位赋值给十位,千位赋值给百位然后千位清零。当按下的是等号键的时候,将前一次储存的数取出与这一次的数进行相应的运算然后将得到的二进制数拆分为个位、十位、百位和千位然后扫描显示就可以。复位键是使用的中断,当个位、十位、百位和千位都不为零的时候按下将会初始化计算器的所有数据,如果个位、十位、百位和千位均为零这进入休眠状态等待下一次中断的唤醒。

二、硬件设计部分

我们使用的是PIC16F877A单片机,使用四位的八段数码管,4×4的键盘和一个独立的中断键。八段数码管我们使用的是共基极的接法,所以当给出低电平的时候导通,给出高电平的时候关断。我们以RD端口来控制段选,分别以RB0控制a、RB1控制b、RB2控制c、RB3控制d、RB4控制e、RB5控制f、RB6控制g和RB7控制dp。以RD1、RD2、RD3和RD4端口分别控制位选的千位、百位、十位和个位。

键盘我们使用RC端口扫描的方法来实现4×4的键盘。其中RC0、RC1、RC2和RC3端口分别设置为输出,RC4、RC5、RC6和RC7端口设置为输入。两组端口分别接入键盘的行和列。RC4、RC5、RC6和RC7端口再通过10K的电阻接VCC以实现为高电平。键盘扫描的时候,首先RC0、RC1、RC2和RC3端口均输入为低电平0,判断RC4、RC5、RC6和RC7端口是否全为高电平1,如果是则无按键被按下。如果不全为高电平1则证明有按键被按下。这时需要依次将RC0、RC1、RC2和RC3端口置低电平0,检测RC4、RC5、RC6和RC7端口何时有一个变为低电平0,这时可以对应出哪一个按键被按下。

中断键是单独接出的,外接电容增加其稳定性,减少被摁下是的抖动。

三、软件设计部分

主程序流程图键盘扫描子程序流程图

第0、1、2、3、4、5、6、第7号键

8、9、A号键子程序

第C、D、E、F键子程序按键释放子程序流程图

加法子程序流程图减法子程序流程图

乘法子程序流程图除法子程序流程图

十进制转换二进制程序流程图二进制转换十进制程序流程图

睡眠子程序流程图中断子程序流程图

源程序:

;********************************************************************** ; * ; Filename: xxx.asm * ; Date: * ; File Version: *

; * ; Author: * ; Company: * ; * ; * ;********************************************************************** ; * ; Files required: *

; * ; *

; *

;**********************************************************************

; *

; Notes: *

; *

; *

; *

; *

;**********************************************************************

list p=16f877A ; list directive to define processor

#include ; processor specific variable definitions

__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_OFF & _HS_OSC & _LVP_OFF & _DEBUG_ON & _CPD_OFF

;***** V ARIABLE DEFINITIONS

w_temp EQU 0x71 ; variable used for context saving

status_temp EQU 0x72 ; variable used for context saving

GE EQU 0x40

SHI EQU 0x41

BAI EQU 0x42

QIAN EQU 0x43

S1H EQU 0x44

S1L EQU 0x45

S2H EQU 0x46

S2L EQU 0x47

R1H EQU 0x48

R1L EQU 0x49

M1H EQU 0x4A

M1L EQU 0x4B

M2H EQU 0x4C

相关文档
最新文档