华南农业大学单片机课程设计简易计算器.docx
- 文档编号:27253163
- 上传时间:2023-06-28
- 格式:DOCX
- 页数:17
- 大小:107.41KB
华南农业大学单片机课程设计简易计算器.docx
《华南农业大学单片机课程设计简易计算器.docx》由会员分享,可在线阅读,更多相关《华南农业大学单片机课程设计简易计算器.docx(17页珍藏版)》请在冰豆网上搜索。
华南农业大学单片机课程设计简易计算器
华南农业大学单片机课程设计-简易计算器
单片机课程设计报告
简易计算器
姓名:
班级:
学号:
指导老师:
日期:
华南农业大学工程学院
摘要:
本设计是基于51系列的单片机进行的十进制计算器系统设计,可以完成计算器的键盘输入,进行加、减、乘、除3位无符号数字的简单四则运算,并在LED上相应的显示结果。
设计过程在硬件与软件方面进行同步设计。
硬件方面从功能考虑,首先选择内部存储资源丰富的AT89C51单片机,输入采用4×4矩阵键盘。
显示采用3位7段共阴极LED动态显示。
软件方面从分析计算器功能、流程图设计,再到程序的编写进行系统设计。
编程语言方面从程序总体设计以及高效性和功能性对C语言和汇编语言进行比较分析,针对计算器四则运算算法特别是乘法和除法运算的实现。
关键字:
单片机、简易计算器、汇编语言、功能模块
一、系统设计要求
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显示器上。
三、系统软件设计
设计总体流程图,分模块编写程序
N
N
N
键盘扫描流程图:
程序源代码:
Z8279EQU212H
D8279EQU210H
LEDMODEQU00000000B;左边输入,八位显示,外部译码八位显示
DATASEGMENT
DATA1DB0,0,0,0,0;第一个数据(作为被减数)
DATA2DB0,0,0,0,0;第二个数据(作为减数)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,ES:
DATA
START:
PUSHCS
POPDS
PUSHCS
POPES
MOVDX,Z8279
MOVAL,LEDMOD
OUTDX,AL
;---------------------------------------------------------
MOVDX,Z8279;清FIFORAM寄存器
MOVAL,0D1H
OUTDX,AL
KAISHI:
MOVSI,OFFSETDATA1
MOVBX,10
Q1:
MOVBYTEPTR[SI+BX-1],'0';数据区清零
DECBX
JNZQ1
CALLSHURU;读取第一个字符;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV[SI],AL;存入第一个字符
MOVBX,1
CALLDISPL
CALLSHURU;输入第二个字符;;;;;;;;;;;;;;;;;;;;;;;
CMPAL,'0'
JBT1
MOVBL,BYTEPTR[SI]
MOVBYTEPTR[SI],AL
MOVBYTEPTR[SI+1],BL
MOVBX,2
CALLDISPL
CALLSHURU
T1:
PUSHAX;存入运算符
MOVDX,Z8279
MOVAL,0D1H
OUTDX,AL
WAIIT6:
INAL,DX
MOVBL,AL
ANDAL,80H
CMPAL,80H
JEWAIIT6
CALLSHURU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOVSI,OFFSETDATA2
MOVBYTEPTR[SI],AL;输入第三个字符
MOVBX,1
CALLDISPL
CALLSHURU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CMPAL,'='
JZT99;计算跳转
MOVBL,BYTEPTR[SI];输入第四个字符
MOVBYTEPTR[SI],AL
MOVBYTEPTR[SI+1],BL
MOVBX,2
CALLDISPL
CALLSHURU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
T99:
JMPJISUAN
;--------------------------------------------------------------
SHURUPROC;输入函数
MOVDX,Z8279
MOVAL,0C2H
OUTDX,AL;置空FIFO寄存器
WAIIT:
NOP
INAL,DX
MOVBL,AL
ANDAL,80H
CMPAL,80H
JEWAIIT;FIFO正在清除期间则跳转等待
MOVAL,BL
ANDAL,0FH
CMPAL,00H
JEWAIIT;无键按下则等待
MOVAL,40H;写读FIFORAM命令字
OUTDX,AL
MOVDX,D8279;读入FIFORAM内容
INAL,DX
NOP
CMPAL,11
JNZT101
MOVDX,Z8279
MOVAL,0D1H
OUTDX,AL;置空FIFO寄存器
WAIIT1:
INAL,DX
MOVBL,AL
ANDAL,80H
CMPAL,80H
JEWAIIT1
JMPKAISHI
T101:
LEABX,LEE
XLAT
RET
SHURUENDP
DISPLPROC;显示子功能
PUSHBX
MOVDX,Z8279
MOVAL,0D1H
OUTDX,AL;置空FIFO寄存器
WAIIT4:
INAL,DX
MOVBL,AL
ANDAL,80H
CMPAL,80H
JEWAIIT4
POPBX
MOVAL,40H
OUTDX,AL
MOVDX,D8279
MOVAL,[SI+4]
CMPAL,'E'
JNZDSI8
MOVAL,79H
OUTDX,AL
JMPDSI9
DSI8:
MOVAL,[SI+BX-1]
CMPAL,'0'
JADSI0
DECBX
JNZDSI8
MOVAL,3FH;显示0
OUTDX,AL
RET
DSI0:
MOVCX,BX
MOVBX,0
DSI2:
MOVAL,[SI+BX]
SUBAL,30H
PUSHBX
LEABX,TABLE
XLAT
OUTDX,AL
POPBX
CMPBX,1
JNZT119
OUTDX,AL
OUTDX,AL
T119:
INCBX
CMPCX,BX
JZT103
JMPDSI2
T103:
MOVAL,[SI+4]
CMPAL,'-'
JNZDSI9
MOVAL,40H
OUTDX,AL;显示-号
DSI9:
RET
DISPLENDP
;计算区...................................................................................................
JISUAN:
MOVSI,OFFSETDATA1
MOVDI,OFFSETDATA2
SUBBYTEPTR[SI],30H
SUBBYTEPTR[DI],30H
SUBBYTEPTR[SI+1],30H
SUBBYTEPTR[DI+1],30H
MOVDL,10
MOVAL,BYTEPTR[SI+1]
MULDL
ADDAL,[SI]
MOVBL,AL
MOVAL,[DI+1]
MULDL
ADDAL,[DI]
XCHGAL,BL;AL被减数,BL减数
POPCX;弹出运算符
CMPCL,'+'
JZJIA
CMPCL,'-'
JZJIAN
CMPCL,'*'
JZCHENG
JMPCHU
CHU:
AAD
CMPBL,0
JNZT20
MOVSI,OFFSETDATA1
MOVBYTEPTR[SI+4],'E';除数为零
MOVBX,5
CALLDISPL
JMPKAISHI
T20:
DIVBL
MOVAH,0;余数置0
JMPXIANSHI
JIA:
ADDAL,BL
JMPXIANSHI
JIAN:
CMPAL,BL
JNBN1
XCHGAL,BL
MOVBYTEPTR[SI+4],'-'
N1:
SUBAL,BL
JMPXIANSHI
CHENG:
MULBL
JMPXIANSHI
XIANSHI:
MOVCX,1000
MOVDX,0
DIVCX
ADDAX,30H
MOV[SI+3],AL
MOVAX,DX
MOVCL,100
DIVCL
ADDAL,30H
MOV[SI+2],AL
MOVAL,AH
MOVAH,0
MOVCL,10
DIVCL
ADDAL,30H
ADDAH,30H
MOV[SI+1],AL
MOV[SI],AH
MOVBX,5;显示结果
CALLDISPL
JMPKAISHI
LEE:
DB37H,34H,31H,30H
DB00H,00H,00H,00H
DB38H,35H,32H,00H
DB00H,00H,00H,00H
DB00H,00H,00H,00H
DB00H,00H,00H,00H
DB00H,00H,00H,00H
DB00H,00H,00H,00H
DB39H,36H,33H,'='
DB00H,00H,00H,00H
DB'+','-','*','/'
DB00H,00H,00H,00H
DB00H,00H,00H,00H
DB00H,00H,00H,00H
DB00H,00H,00H,00H
DB00H,00H,00H,00H
TABLE:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
CODEENDS
ENDSTART
四、系统测试:
1.首先赋予显示缓冲初始值‘0000’,并把数据存储单元清零。
2.主程序调用键盘扫描子程序,判断键值,是数字第一次直接赋予23H单元,如是第二次输入数字,则把第一次值乘十后与第二次值相加,结果存储到23H单元,并R4计数2次,表示已输入两位,扫描键值时就不再赋值和显示。
等待运算符号的按下,按下等于号就直接计算并显示,如加减就R5加一并把R4清零,表示可以输入下一操作数,与第一次相同,并等待等于键按下。
清零键则不管在任何情况下都清零,相当于软复位。
3.在扫描完键盘后,调用数据显示转换子程序把值转换为七段码。
4.调用数码管动态显示子程序,显示数值,重新循环。
五、总结:
首先,接到这个课程设计,我们头脑都是一片空白,无从下手,后悔当初的课,没认真听讲,不懂的没有及时解决,造成不知所措的局面。
通过这次课程设计,让我们深深的意识到我们单片机学的不够扎实,不会的很多,当然这次的课程设计做计算器程序用的是汇编语言,不是上学期学过的c语言,所以很难适应。
一开始真的很着急,毫无头绪,后来找了很多资料,也参考了同学的程序,其中每一个子程序模块都认真去读,去分析,化为己用,最重要的按键扫描和显示程序,还有包括加减乘除的运算程序。
尽管大家都知道汇编编这个程序也很困难,但还是互相学习,到处找资料看,问同学,所以我们组的软件主程序才能编译成功,系统才能调试出结果。
这次课程设计让我们互相分工、协调工作的能力得到了提高,更加重要的是我们增进了对单片机的了解,也更深入地运用了汇编语言。
最后的一点就是我们学会一个道理:
笨鸟先飞,勤能补拙。
致谢
本论文是在姜晟老师、邓小玲老师的亲切教导和悉心指导下完成的。
在论文的写作过程中,虽然花了一定的心血,但由于前期的作业做了一定的铺垫,所以完成的还是比较顺利的。
也感谢这篇论文所涉及到的各位学者,本文引用了数位学者的研究文献,如果没有他们的文献,我们组也很难将本次文献检索课题完成。
最后,再一次对感谢一路以来关心,帮助过我的老师和同学!
参考文献
王卫星单片机原理与应用开发技术中国水利水电出版社
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 华南 农业大学 单片机 课程设计 简易 计算器