资源描述
单片机课程设计汇报
简易计算器
姓 名:
班 级:
学 号:
指导老师:
日 期:
华南农业大学工程学院
摘要:本设计是基于51系列单片机进行十进制计算器系统设计,能够完成计算器键盘输入,进行加、减、乘、除3位无符号数字简单四则运算,并在LED上对应显示结果。
设计过程在硬件和软件方面进行同时设计。硬件方面从功效考虑,首先选择内部存放资源丰富AT89C51单片机,输入采取4×4矩阵键盘。显示采取3位7段共阴极LED动态显示。软件方面从分析计算器功效、步骤图设计,再到程序编写进行系统设计。编程语言方面从程序总体设计和高效性和功效性对C语言和汇编语言进行比较分析,针对计算器四则运算算法尤其是乘法和除法运算实现。
关键字:单片机、简易计算器、汇编语言、功效模块
目 录
一、系统设计要求 4
1.1基础要求 4
1.2发挥部分 4
二、 系统硬件设计和实现 4
3.1系统硬件基础组成部分 4
3.2关键单元电路设计 5
三、 系统软件设计 6
四、 系统测试 14
五、 总结 14
致 谢 15
参考文件 15
一、系统设计要求
1.1基础要求
在课程设计时,三人一组,老师在动员大会上关键指明设计思绪,启发学生独立设计思绪。
功效要求关键以下:(1)键盘输入;(2)数值显示;(3)加、减运算(此次只要求加减);(4)对错误控制及提醒。
在十进制加减法计算中:输入范围为(1~99),该程序输入两个定点数,每个2位,输出3位;A为加,B为减,C为等于,输出为3位计算结果。数据输入采取规范化输入,即必需输入2个数才算完成一个运算数输入,两个运算数之间输入运算符A或B,输入完成按C显示计算结果。
1.2发挥部分
能够选择扩张更多功效,如乘法,除法,三角函数等,使这简易计算器功效更全方面。
二、 系统硬件设计和实现
2.1系统硬件基础组成部分
8086CPU,单片机试验箱键盘模块(0-9,a-f),LED数码管等。
单片机最小系统就是支持主芯片正常工作最小电路部分,包含主控芯片、复位电路和晶振电路。
主控芯片选择74LS164芯片,因其含有良好性能及稳定性,价格廉价应用方便。
晶振选择11.0592MHz,晶振旁电容选择22pF。
采取按键复位电路,电阻分别选择560Ω和10K,电容选择10μF。
1、键盘接口电路
计算器所需按键有:
数字键:“0”“1”“2”“3”“4”“5”“6”“7”“8”“9”
功效键:“A(+)”“B(—)”“C(*)”“D(/)”“E(=)”
键盘累计15个按键,其中15个按键采取到,采取4*4矩阵键盘,键盘行和列之间全部有公共端相连,四行和四列8个公共端分别接P1.0~P1.7,这么扫描P1口就能够完成对矩阵键盘扫描,经过对16个按键进行编码,从而得到键盘口地址,对比P1口扫描结果和各按键地址,我们就能够得到是哪个键按下,从而完成键盘扫描功效。
2、数码管显示电路
采取6位数码管对计算数据和结果显示,这里选择共阳数码管,利用NPN三极管对数码管进行驱动,为了节省I/O资源,采取动态显示方法来显示计算数据及结果,动态扫描。
为了实现数码管动态显示,P2口输出显示值,经过P2口二进制代码送到数码管进行显示。
P3.0~P3.5用来作为位选端,控制哪几位数码管进行显示。比如当P3.2为高电平时,其它位全给0,具体在软件中会有说明。此时就将扫描数据送给指定数码管显示。
2.2关键单元电路设计
设计思绪是:首先利用程序不停扫描键盘是不是有输入,假如没有就一直扫描,假如有就停止扫描,完成输入,利用汇编程序查对输入键数值,经过调用子程序完成数据储存或是加减运算。运算完成后将运算结果储存并显示到LED显示器上。
三、 系统软件设计
设计总体步骤图,分模块编写程序
开始
输入六个数字或符号
R1*10+R2=R2
R4*10+R5=R4
R2+R4
R3是加号?
N
R2-R4
R3是减号?
N
R2*R4
R3是乘号?
R2/R4
N
显示结果
结束
键盘扫描步骤图:
开始
初始化地址参数
输出列扫描信号
列扫描信号移位
读入行信号
该列有键输入?
四列扫描完?
返回
根据行列计算键值
查表得键码
等候按键释放
返回
否
是
是
否
程序源代码:
Z8279 EQU 212H
D8279 EQU 210H
LEDMOD EQU 00000000B ;左边输入,八位显示,外部译码八位显示
DATA SEGMENT
DATA1 DB 0,0,0,0,0 ;第一个数据(作为被减数)
DATA2 DB 0,0,0,0,0 ;第二个数据(作为减数)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA
START:
PUSH CS
POP DS
PUSH CS
POP ES
MOV DX,Z8279
MOV AL,LEDMOD
OUT DX,AL
;---------------------------------------------------------
MOV DX,Z8279 ;清FIFO RAM寄存器
MOV AL,0D1H
OUT DX,AL
KAISHI: MOV SI,OFFSET DATA1
MOV BX,10
Q1: MOV BYTE PTR[SI+BX-1],'0';数据区清零
DEC BX
JNZ Q1
CALL SHURU ;读取第一个字符;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV [SI],AL ;存入第一个字符
MOV BX,1
CALL DISPL
CALL SHURU ;输入第二个字符 ;;;;;;;;;;;;;;;;;;;;;;;
CMP AL,'0'
JB T1
MOV BL,BYTE PTR[SI]
MOV BYTE PTR[SI],AL
MOV BYTE PTR[SI+1],BL
MOV BX,2
CALL DISPL
CALL SHURU
T1: PUSH AX ;存入运算符
MOV DX,Z8279
MOV AL,0D1H
OUT DX,AL
WAIIT6:
IN AL,DX
MOV BL,AL
AND AL,80H
CMP AL,80H
JE WAIIT6
CALL SHURU ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV SI,OFFSET DATA2
MOV BYTE PTR[SI],AL ;输入第三个字符
MOV BX,1
CALL DISPL
CALL SHURU ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CMP AL,'='
JZ T99 ;计算跳转
MOV BL,BYTE PTR[SI] ;输入第四个字符
MOV BYTE PTR[SI],AL
MOV BYTE PTR[SI+1],BL
MOV BX,2
CALL DISPL
CALL SHURU ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
T99: JMP JISUAN
;--------------------------------------------------------------
SHURU PROC ;输入函数
MOV DX,Z8279
MOV AL,0C2H
OUT DX,AL ;置空FIFO寄存器
WAIIT:
NOP
IN AL,DX
MOV BL,AL
AND AL,80H
CMP AL,80H
JE WAIIT ;FIFO正在清除期间则跳转等候
MOV AL,BL
AND AL,0FH
CMP AL,00H
JE WAIIT ;无键按下则等候
MOV AL,40H ;写 读FIFO RAM命令字
OUT DX,AL
MOV DX,D8279 ;读入FIFO RAM内容
IN AL,DX
NOP
CMP AL,11
JNZ T101
MOV DX,Z8279
MOV AL,0D1H
OUT DX,AL ;置空FIFO寄存器
WAIIT1:
IN AL,DX
MOV BL,AL
AND AL,80H
CMP AL,80H
JE WAIIT1
JMP KAISHI
T101: LEA BX,LEE
XLAT
RET
SHURU ENDP
DISPL PROC ;显示子功效
PUSH BX
MOV DX,Z8279
MOV AL,0D1H
OUT DX,AL ;置空FIFO寄存器
WAIIT4:
IN AL,DX
MOV BL,AL
AND AL,80H
CMP AL,80H
JE WAIIT4
POP BX
MOV AL,40H
OUT DX,AL
MOV DX,D8279
MOV AL,[SI+4]
CMP AL,'E'
JNZ DSI8
MOV AL,79H
OUT DX,AL
JMP DSI9
DSI8: MOV AL,[SI+BX-1]
CMP AL,'0'
JA DSI0
DEC BX
JNZ DSI8
MOV AL,3FH ;显示0
OUT DX,AL
RET
DSI0: MOV CX,BX
MOV BX,0
DSI2: MOV AL,[SI+BX]
SUB AL,30H
PUSH BX
LEA BX,TABLE
XLAT
OUT DX,AL
POP BX
CMP BX,1
JNZ T119
OUT DX,AL
OUT DX,AL
T119: INC BX
CMP CX,BX
JZ T103
JMP DSI2
T103:
MOV AL,[SI+4]
CMP AL,'-'
JNZ DSI9
MOV AL,40H
OUT DX,AL;显示-号
DSI9: RET
DISPL ENDP
;计算区...................................................................................................
JISUAN:
MOV SI,OFFSET DATA1
MOV DI,OFFSET DATA2
SUB BYTE PTR[SI],30H
SUB BYTE PTR[DI],30H
SUB BYTE PTR[SI+1],30H
SUB BYTE PTR[DI+1],30H
MOV DL,10
MOV AL,BYTE PTR[SI+1]
MUL DL
ADD AL,[SI]
MOV BL,AL
MOV AL,[DI+1]
MUL DL
ADD AL,[DI]
XCHG AL,BL ;AL被减数,BL减数
POP CX ;弹出运算符
CMP CL,'+'
JZ JIA
CMP CL,'-'
JZ JIAN
CMP CL,'*'
JZ CHENG
JMP CHU
CHU: AAD
CMP BL,0
JNZ T20
MOV SI,OFFSET DATA1
MOV BYTE PTR[SI+4],'E' ;除数为零
MOV BX,5
CALL DISPL
JMP KAISHI
T20:DIV BL
MOV AH,0 ;余数置0
JMP XIANSHI
JIA: ADD AL,BL
JMP XIANSHI
JIAN: CMP AL,BL
JNB N1
XCHG AL,BL
MOV BYTE PTR[SI+4],'-'
N1:SUB AL,BL
JMP XIANSHI
CHENG: MUL BL
JMP XIANSHI
XIANSHI: MOV CX,1000
MOV DX,0
DIV CX
ADD AX,30H
MOV [SI+3],AL
MOV AX,DX
MOV CL,100
DIV CL
ADD AL,30H
MOV [SI+2],AL
MOV AL,AH
MOV AH,0
MOV CL,10
DIV CL
ADD AL,30H
ADD AH,30H
MOV [SI+1],AL
MOV [SI],AH
MOV BX,5 ;显示结果
CALL DISPL
JMP KAISHI
LEE: DB 37H,34H,31H,30H
DB 00H,00H,00H,00H
DB 38H,35H,32H,00H
DB 00H,00H,00H,00H
DB 00H,00H,00H,00H
DB 00H,00H,00H,00H
DB 00H,00H,00H,00H
DB 00H,00H,00H,00H
DB 39H,36H,33H,'='
DB 00H,00H,00H,00H
DB '+','-','*','/'
DB 00H,00H,00H,00H
DB 00H,00H,00H,00H
DB 00H,00H,00H,00H
DB 00H,00H,00H,00H
DB 00H,00H,00H,00H
TABLE:
DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
CODE ENDS
END START
四、 系统测试:
1.首先给予显示缓冲初始值‘00 00’,并把数据存放单元清零。
2.主程序调用键盘扫描子程序,判定键值,是数字第一次直接给予23H单元,如是第二次输入数字,则把第一次值乘十后和第二次值相加,结果存放到23H单元,并R4计数2次,表示已输入两位,扫描键值时就不再赋值和显示。等候运算符号按下,按下等于号就直接计算并显示,如加减就R5加一并把R4清零,表示能够输入下一操作数,和第一次相同,并等候等于键按下。清零键则不管在任何情况下全部清零,相当于软复位。
3.在扫描完键盘后,调用数据显示转换子程序把值转换为七段码。
4.调用数码管动态显示子程序,显示数值,重新循环。
五、总结:
首先,接到这个课程设计,我们头脑全部是一片空白,无从下手,后悔当初课,没认真听讲,不懂没有立即处理,造成不知所措局面。经过这次课程设计,让我们深深意识到我们单片机学不够扎实,不会很多,当然这次课程设计做计算器程序用是汇编语言,不是上学期学过c语言,所以极难适应。一开始真很着急,毫无头绪,以后找了很多资料,也参考了同学程序,其中每一个子程序模块全部认真去读,去分析,化为己用,最关键按键扫描和显示程序,还有包含加减乘除运算程序。尽管大家全部知道汇编编这个程序也很困难,但还是相互学习,四处找资料看,问同学,所以我们组软件主程序才能编译成功,系统才能调试出结果。
这次课程设计让我们相互分工、协调工作能力得到了提升,愈加关键是我们促进了对单片机了解,也更深入地利用了汇编语言。最终一点就是我们学会一个道理:笨鸟先飞,勤能补拙。
致 谢
本论文是在姜晟老师、邓小玲老师亲切教导和悉心指导下完成。在论文写作过程中,即使花了一定心血,但因为前期作业做了一定铺垫,所以完成还是比较顺利。也感谢这篇论文所包含到各位学者,本文引用了数位学者研究文件,假如没有她们文件,我们组也极难将此次文件检索课题完成。
最终,再一次对感谢一路以来关心,帮助过我老师和同学!
参考文件
王卫星 单片机原理和应用开发技术 中国水利水电出版社
展开阅读全文