简易计算器完整课程设计.docx
《简易计算器完整课程设计.docx》由会员分享,可在线阅读,更多相关《简易计算器完整课程设计.docx(14页珍藏版)》请在冰点文库上搜索。
简易计算器完整课程设计
一、设计要求
1.设计4*4的键盘,其中10个数字键0~9,第十三个键为”+“,第十五个键为”=“
2,实现1位数的简单加运算
二、硬件系统设计
1、LED接口电路
简易计算器需要2位8段码LED显示电路。
用LED显示器,用8255A的A口作为段码(字形代码)数据口,PB0和PB1作为位控制端口。
然后接至各数码显示器的共阴极端。
2、键盘接口电路
简易计算器需要4*4的行列式键盘。
8255A的B口作为输出端,C口作为输出端。
采用的是方式0。
3、计算器逻辑电路图
将LED接口电路和键盘接口电路结合到一起就是简易计算器的逻辑电路图
逻辑电路结构如下:
m1-m4
x0-x3
A0-Dp
Cpu8255键盘
三、软件设计
1、LED显示程序设计
LED显示器由七段发光二极管组成,排列成8字形状,因此也成为七段LED显示器,器排列形状如下图所示:
为了显示数字或符号,要为LED显示器提供代码,即字形代码。
七段发光二极管,再加上一个小数点位,共计8段,因此提供的字形代码的长度正好是一个字节。
简易计算器用到的数字0~9的共阴极字形代码如下表:
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位LED显示的程序框图如下:
2、读键输入程序设计
为了实现键盘的数据输入功能和命令处理功能,每个键都有其处理子程序,为此每个键都对应一个码——键码。
为了得到被按键的键码,现使用行扫描法识别按键。
其程序框图如下:
3、主程序设计
(1)数值送显示缓冲程序设计
简易计算器所显示的数值最大位为一位。
(2)运算主程序设计
首先初始化参数,送LED低位显示“0”,高位不显示。
然后扫描键盘看是否有键输入,若有,读取键码。
判断键码是数字键、还是功能键(“+”“=”),是数值键则送LED显示并保存数值,是功能键则又判断是“=”还是运算键,若是“=”则计算最后结果并送LED显示,若是运算键则保存相对运算程序的首地址。
运算主程序框图如下所示:
4、简易计算器源程序
con8255equ06c6h;8255的控制端口的物理号
c8255equ06c4h;C端口的端口号
b8255equ06c2h;B端口的端口号
a8255equ06c0h;A端口的端口号
datasegment
listDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H
DB7FH,6FH,77H,7CH,39H,5EH,79H,71H
;对应数字的显示码
keycodeDB0EEH,0DEH,0BEH,7EH
DB0EDH,0DDH,0BDH,7DH
DB0EBH,0DBH,0BBH,7BH
DB0E7H,0D7H,0B7H,77H
;对应键的特征值(键盘识别码)
num1dw0;偏移量
xDB0FFH;存放参与运算的第一个数
yDB0FFH;存放运算符
zDB0FFH;存放参与运算的第二个数
reDB0FFH;存放运算结果
dataends
sstacksegmentstack
ssdadb100dup(?
)
sstackends
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
callinit8255;初始化8255
ispk:
callclear;B端口清零
callispkey;判断是否有建按下
andal,0fh
cmpal,0fh
jeispk
callfindkeyboard
calldispnum
cmpnum1,14
jejs1
callcunshu
jmpdisnum1
js1:
calljisuan
movx,0ffh
movy,0ffh
movz,0ffh
movnUM1,0
movre,0ffh
calldispnum
movcx,1000
www:
loopwww
jmpispk
disnum1:
is:
jmpispk
movah,4ch
int21h
init8255procnear;初始化8255
moval,b
movdx,06c6h
outdx,al
ret
init8255endp
clearprocnear
moval,00h
movdx,b8255
outdx,al
clearendp
ispkeyprocnear;判断是否有建按下
moval,00h
movdx,a8255
outdx,al
movdx,c8255
inal,dx
ret
ispkeyendp
findkeyboardprocnear;找具体键盘按键
cl1:
moval,b
movah,al
shlah,4
movdx,a8255;al传递给a端口
outdx,al
movdx,c8255;c端口读入数据赋值给al
inal,dx
andal,0fh
cmpal,0fh
jecl2
jmpexitk
cl2:
moval,b
movah,al
shlah,4
movdx,a8255
outdx,al
movdx,c8255
inal,dx
andal,0fh
cmpal,0fh
jecl3
jmpexitk
cl3:
moval,b
movah,al
shlah,4
movdx,a8255
outdx,al
movdx,c8255
inal,dx
andal,0fh
cmpal,0fh
jecl4
jmpexitk
cl4:
moval,b
movah,al
shlah,4
movdx,a8255
outdx,al
movdx,c8255
inal,dx
andal,0fh
cmpal,0fh
exitk:
addah,al;得到键盘识别码
ret
findkeyboardendp
dispnumprocnear;显示数字子程序
cmpah,0b7h
jnzll2
movcl,re
movch,0
movsi,offsetlist
addsi,cx
moval,[si]
movdx,06c2h
outdx,al
movnum1,14
jmpll3
ll2:
movcx,16
movsi,offsetkeycode
movdi,offsetlist
movnum1,0
numl1:
cmp[si],ah
jeexit
incsi
addnum1,1
loopnuml1
exit:
adddi,num1;显示相应数字
moval,[di]
movdx,06c2h
outdx,al
ll3:
ret
dispnumendp
CUNSHUPROCNEAR;存放数据
PUSHAX
CMPX,0FFH
JNEY1
MOVAL,BYTEPTRNUM1
MOVX,AL
JMPEX1
Y1:
CMPY,0FFH
JNEZ1
MOVAL,BYTEPTRNUM1
MOVY,AL
JMPEX1
Z1:
MOVAL,BYTEPTRNUM1
MOVZ,AL
EX1:
POPAX
RET
CUNSHUENDP
JISUANPROCNEAR;计算子程序
PUSHSI
LEASI,KEYCODE
MOVAX,0
ADDAL,X
ADDAL,Z
ADDSI,AX
MOVAH,[SI]
MOVRE,AL
POPSI
RET
JISUANENDP
codeends
endstart
四、心得体会
课程设计是培养学生综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。
我的题目是简易计算器,对于我们这些实践中的新手来说,这是一次考验。
怎么才能找到课堂所学与实际应用的最佳结合点?
怎样让自己的业余更接近专业?
怎样让自己的计划更具有序性,而不会忙无一用?
这都是我们所要考虑和努力的。
这次课程设计我学到很多很多的东西,学会了怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪。
不仅巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识,掌握了一种系统的研究方法,可以进行一些简单的编程。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,对单片机汇编语言掌握得不够好。
这次课程设计通过我们小组的努力终于顺利完成了,在设计中遇到了很多编程问题,最后在老师的辛勤指导下,终于迎刃而解,在此我表示感谢!
同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!
参考文献
微机原理与接口技术主编:
马春燕电子工业出版社
微机原理与接口技术主编:
谭浩强 电子工业出版社
微机原理与接口技术主编:
尚凤军电子工业出版社