简易计算器完整课程设计.docx

上传人:b****5 文档编号:8131264 上传时间:2023-01-29 格式:DOCX 页数:13 大小:99.52KB
下载 相关 举报
简易计算器完整课程设计.docx_第1页
第1页 / 共13页
简易计算器完整课程设计.docx_第2页
第2页 / 共13页
简易计算器完整课程设计.docx_第3页
第3页 / 共13页
简易计算器完整课程设计.docx_第4页
第4页 / 共13页
简易计算器完整课程设计.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

简易计算器完整课程设计.docx

《简易计算器完整课程设计.docx》由会员分享,可在线阅读,更多相关《简易计算器完整课程设计.docx(13页珍藏版)》请在冰豆网上搜索。

简易计算器完整课程设计.docx

简易计算器完整课程设计

一、设计要求

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,10001001b

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,00001110b

movah,al

shlah,4

movdx,a8255;al传递给a端口

outdx,al

movdx,c8255;c端口读入数据赋值给al

inal,dx

andal,0fh

cmpal,0fh

jecl2

jmpexitk

cl2:

moval,00001101b

movah,al

shlah,4

movdx,a8255

outdx,al

movdx,c8255

inal,dx

andal,0fh

cmpal,0fh

jecl3

jmpexitk

cl3:

moval,00001011b

movah,al

shlah,4

movdx,a8255

outdx,al

movdx,c8255

inal,dx

andal,0fh

cmpal,0fh

jecl4

jmpexitk

cl4:

moval,00000111b

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

四、心得体会

课程设计是培养学生综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。

我的题目是简易计算器,对于我们这些实践中的新手来说,这是一次考验。

怎么才能找到课堂所学与实际应用的最佳结合点?

怎样让自己的业余更接近专业?

怎样让自己的计划更具有序性,而不会忙无一用?

这都是我们所要考虑和努力的。

这次课程设计我学到很多很多的东西,学会了怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪

不仅巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识,掌握了一种系统的研究方法,可以进行一些简单的编程。

通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。

同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,对单片机汇编语言掌握得不够好。

这次课程设计通过我们小组的努力终于顺利完成了,在设计中遇到了很多编程问题,最后在老师的辛勤指导下,终于迎刃而解,在此我表示感谢!

同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!

参考文献

微机原理与接口技术主编:

马春燕电子工业出版社

微机原理与接口技术主编:

谭浩强  电子工业出版社

微机原理与接口技术主编:

尚凤军电子工业出版社

 

(注:

可编辑下载,若有不当之处,请指正,谢谢!

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1