单片机简易计算器课程设计Word格式文档下载.docx

上传人:b****1 文档编号:875037 上传时间:2023-04-29 格式:DOCX 页数:19 大小:206.75KB
下载 相关 举报
单片机简易计算器课程设计Word格式文档下载.docx_第1页
第1页 / 共19页
单片机简易计算器课程设计Word格式文档下载.docx_第2页
第2页 / 共19页
单片机简易计算器课程设计Word格式文档下载.docx_第3页
第3页 / 共19页
单片机简易计算器课程设计Word格式文档下载.docx_第4页
第4页 / 共19页
单片机简易计算器课程设计Word格式文档下载.docx_第5页
第5页 / 共19页
单片机简易计算器课程设计Word格式文档下载.docx_第6页
第6页 / 共19页
单片机简易计算器课程设计Word格式文档下载.docx_第7页
第7页 / 共19页
单片机简易计算器课程设计Word格式文档下载.docx_第8页
第8页 / 共19页
单片机简易计算器课程设计Word格式文档下载.docx_第9页
第9页 / 共19页
单片机简易计算器课程设计Word格式文档下载.docx_第10页
第10页 / 共19页
单片机简易计算器课程设计Word格式文档下载.docx_第11页
第11页 / 共19页
单片机简易计算器课程设计Word格式文档下载.docx_第12页
第12页 / 共19页
单片机简易计算器课程设计Word格式文档下载.docx_第13页
第13页 / 共19页
单片机简易计算器课程设计Word格式文档下载.docx_第14页
第14页 / 共19页
单片机简易计算器课程设计Word格式文档下载.docx_第15页
第15页 / 共19页
单片机简易计算器课程设计Word格式文档下载.docx_第16页
第16页 / 共19页
单片机简易计算器课程设计Word格式文档下载.docx_第17页
第17页 / 共19页
单片机简易计算器课程设计Word格式文档下载.docx_第18页
第18页 / 共19页
单片机简易计算器课程设计Word格式文档下载.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

单片机简易计算器课程设计Word格式文档下载.docx

《单片机简易计算器课程设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《单片机简易计算器课程设计Word格式文档下载.docx(19页珍藏版)》请在冰点文库上搜索。

单片机简易计算器课程设计Word格式文档下载.docx

4.调用数码管动态显示子程序,显示数值,重新循环。

硬件系统设计

1、LED接口电路

简易计算器需要2位8段码LED显示电路。

用8031单片机经8255A扩展2位8段码LED显示器,用8255A的A口作为段码(字形代码)数据口,PB0和PB1作为位控制端口。

在位控制口加集电极开路的反相高压驱动器74LS06以提供驱动LED显示器所需的足够大的电流,然后接至各数码显示器的共阴极端。

同理,在段码数据口集电极开路的正相高压驱动器74LS07提供足够大的电流,然后接到数码显示器的各段。

逻辑电路结构如下:

2、键盘接口电路

简易计算器需要4*4的行列式键盘。

用8031单片机经8255A扩展4*4行列式键盘,8255A的B口和C口用于扩展键盘接口,B口高4位作为输出口,C口低4位作为输入口。

3、计算器逻辑电路图

将LED接口电路和键盘接口电路结合到一起就是简易计算器的逻辑电路图,如下:

三、软件设计

1、LED显示程序设计

LED显示器由七段发光二极管组成,排列成8字形状,因此也成为七段LED显示器,器排列形状如下图所示:

为了显示数字或符号,要为LED显示器提供代码,即字形代码。

七段发光二极管,再加上一个小数点位,共计8段,因此提供的字形代码的长度正好是一个字节。

简易计算器用到的数字0~9的共阴极字形代码如下表:

0~9七段数码管共阴级字形代码

显示字型

g

f

e

d

c

b

a

段码

1

3fh

06h

2

5bh

3

4fh

4

66h

5

6dh

6

7dh

7

07h

8

7fh

9

6fh

2位LED显示的程序框图如下:

2、读键输入程序设计

为了实现键盘的数据输入功能和命令处理功能,每个键都有其处理子程序,为此每个键都对应一个码——键码。

为了得到被按键的键码,现使用行扫描法识别按键。

其程序框图如下:

3、主程序设计

(1)数值送显示缓冲程序设计

简易计算器所显示的数值最大位两位。

要显示数值,先判断数值正负,如果是负值,则符号位显示“-”,然后将数值除以10,余数送显最最低位,判断商是否为0,若为0则返回,若不为0,则将商除以10,将余数送显高位。

程序框图如下:

 

(2)运算主程序设计

首先初始化参数,送LED低位显示“0”,高位不显示。

然后扫描键盘看是否有键输入,若有,读取键码。

判断键码是数字键、清零键还是功能键(“+”“-”“*”“/”“=”),是数值键则送LED显示并保存数值,是清零键则做清零处理,是功能键则又判断是“=”还是运算键,若是“=”则计算最后结果并送LED显示,若是运算键则保存相对运算程序的首地址。

运算主程序框图如下所示:

4、简易计算器源程序

OUTBITequ07FFDh;

位控制口

OUTSEGequ07FFCh;

段控制口

INequ07FFEh;

键盘读入口

data1equ70h

data2equ71h

dizhi1equ72h

dizhi2equ73h

LEDBufequ60h;

显示缓冲

ljmpStart

LEDMAP:

;

八段管显示码

db3fh,06h,5bh,4fh,66h,6dh,7dh,07h

db7fh,6fh,77h,7ch,39h,5eh,79h,71h

Delay:

延时子程序

movr7,#0

DelayLoop:

djnzr7,DelayLoop

djnzr6,DelayLoop

ret

DisplayLED:

movr0,#LEDBuf

movr1,#2;

共2个八段管

movr2,#00000010b;

从左边开始显示

Loop:

movdptr,#OUTBIT

mova,#0

movx@dptr,a;

关所有八段管

mova,@r0

movdptr,#OUTSEG

movx@dptr,a

mova,r2

显示一位八段管

movr6,#1

callDelay

mova,r2;

显示下一位

rra

movr2,a

incr0

djnzr1,Loop

TestKey:

输出线置为0

movdptr,#IN

movxa,@dptr;

读入键状态

cpla

anla,#0fh;

高四位不用

KeyTable:

键码定义

db0dh,0ch,0bh,0ah

db0eh,03h,06h,09h

db0fh,02h,05h,08h

db00h,01h,04h,07h

GetKey:

movP2,dph

movr0,#Low(IN)

movr1,#00100000b

movr2,#4

KLoop:

mova,r1;

找出键所在列

movr1,a;

下一列

movxa,@r0

anla,#0fh

jnzGoon1;

该列有键入

djnzr2,KLoop

movr2,#0ffh;

没有键按下,返回0ffh

sjmpExit

Goon1:

键值=列X4+行

deca

rla

movr2,a;

r2=(r2-1)*4

r1中为读入的行值

movr1,#4

LoopC:

rrca;

移位找出所在行

jcExit

incr2;

r2=r2+行值

djnzr1,LoopC

Exit:

取出键码

movdptr,#KeyTable

movca,@a+dptr

WaitRelease:

movdptr,#OUTBIT;

等键释放

clra

movr6,#10

callTestKey

jnzWaitRelease

Start:

movsp,#40h

movLEDBuf+0,#0

movLEDBuf+1,#03fh

movdptr,#7FFFh

mova,#89h

MLoop:

callDisplayLED;

显示

callTestKey;

有键入?

jzMLoop;

无键入,继续显示

callGetKey;

读入键码

Jisuan:

movr3,a

cjner3,#0fh,Qita;

判断是否为清零键?

movr3,#00h;

清零

movr4,#00h

movr5,#00h

movdata1,#00h

movdata2,#00h

movdizhi1,#00h

movdizhi2,#00h

ljmpMLoop

Qita:

clrc

cjner3,#0ah,follow;

判断是数字键还是功能键?

follow:

jcShuzi

ljmpGn

Shuzi:

mova,r4;

判断是否已有运算符输入,没有就将数值存在

jnzShuzi2data1,有就将数值存在data2

mova,r3

movdata1,a

ljmpXs;

显示第一次输入的数值

Shuzi2:

movdata2,a

显示第二次输入的数值

Gn:

movr4,#01h;

将01h给r4,说明已有运算符输入

cjner3,#0eh,Ja;

判断键值是否为“=”?

movr4,#00h;

将r4清零

mova,dizhi1;

执行“=”

movdph,a

mova,dizhi2

movdpl,a

mova,#00h

jmp@a+dptr;

转到本次输入的算法程序

Ja:

cjner3,#0ah,Jn;

若键值为“+”则将“+”的程序首地址存在

movdptr,#Jiadizhi1和dizhi2中

mova,dph

movdizhi1,a

mova,dpl

movdizhi2,a

ljmpMLoop

Jn:

cjner3,#0bh,Ce;

若键值为“-”则将“-”的程序首地址存

movdptr,#Jiandizhi1和dizhi2中

Ce:

cjner3,#0ch,Cu;

若键值为“*”则将“*”的程序首地址存在

movdptr,#Chengdizhi1和dizhi2中

Cu:

cjner3,#0dh,Zhuan;

若键值为“/”则将“/”的程序首地址存在

movdptr,#chudizhi1和dizhi2中

Zhuan:

Jia:

mova,data1;

加法程序

adda,data2

ljmpXs

Jian:

减法程序

subba,data2

Cheng:

乘法程序

movb,data2

mulab

Chu:

除法程序

divab

Xs:

movb,#10;

显示个位数字

movr5,a

mova,b

movdptr,#LEDMap

movLEDBuf+1,a

mova,r5

First:

cjnea,#0,Next

ljmpMLoop;

运算完后继续扫描键盘

Next:

movb,#10;

显示十位数字

movdptr,#LEDMap

movLEDBuf+0,a

ljmpFirst

end

硬件连线图

总结

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

随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。

因此作为电子信息工程专业的学生来说掌握单片机的开发技术是十分重要的。

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

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

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

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

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

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

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

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

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

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

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

参考文献

[1]刘和平,刘跃.单片机原理及应用.重庆:

重庆大学出版社,2004

[2]杨西明,朱骐.单片机编程与入门.北京:

机械工业出版社,2004

[3]陈明荧,89C51单片机课程设计实训教材.北京:

清华大学出版社,2004

[4]刘瑞新,单片机原理及应用教程.北京:

机械工业出版社,2003

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

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2