4位数计算器的设计湖南工学院.docx

上传人:b****5 文档编号:3855486 上传时间:2022-11-25 格式:DOCX 页数:19 大小:135.62KB
下载 相关 举报
4位数计算器的设计湖南工学院.docx_第1页
第1页 / 共19页
4位数计算器的设计湖南工学院.docx_第2页
第2页 / 共19页
4位数计算器的设计湖南工学院.docx_第3页
第3页 / 共19页
4位数计算器的设计湖南工学院.docx_第4页
第4页 / 共19页
4位数计算器的设计湖南工学院.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

4位数计算器的设计湖南工学院.docx

《4位数计算器的设计湖南工学院.docx》由会员分享,可在线阅读,更多相关《4位数计算器的设计湖南工学院.docx(19页珍藏版)》请在冰豆网上搜索。

4位数计算器的设计湖南工学院.docx

4位数计算器的设计湖南工学院

单片机课程设计

4位数加法计算器的设计

院、部:

电气与信息工程学院

学生姓名:

指导教师:

廖代文

专业:

电气自动化技术

班级:

完成时间:

2016年4月

 

目录

摘要1

1总体任务2

1.1设计目的2

1.2设计内容和要求2

1.3设计思路2

2设计原理分析3

2.1计算器的工作原理3

2.1.1计算器的工作流程3

2.1.2编程实现控制3

2.1.3功能拓展3

2.2单片机计算器的基本构成及原理4

3硬件电路的设计5

3.1系统硬件总电路构成及原理5

3.2硬件电路的部分组成元器件的简介5

3.2.1AT89C51单片机5

3.2.2八段LED数码管6

3.2.3矩阵键盘7

3.3元器件清单8

3.4电路原理图9

4系统程序的简单设计10

4.1程序方框图10

4.2计算器程序11

5系统的仿真调试17

6课程设计总结18

参考文献19

摘要

本文论述了单片机4位数加法计算器的设计,从对设计任务的分析到画电原理图到编程和最后的仿真调试,都进行了一个简单的描述。

在设计过程中,采用Keil软件编写源程序,用Protues7professional的ISIS7professional软件画电原理图并且仿真,通过对编程时的编译和对仿真结果现象的观察,不断地对源程序以及电原理图的修改,最后成功设计出了一个能够进行4位数加法运算的计算器。

该计算器通过4×4的矩阵键盘输入数字及运算符,若运算结果超过4位十进制数,则显示为E;另外,也能进行减法、乘法以及除法的运算,在进行减法运算时,若运算结果小于零,则显示其绝对值;进行除法运算时,若除数等于零,则显示E。

 

关键词:

计算器;单片机;数码管;矩阵键盘

 

1总体任务

1.1设计目的

1.通过单片机课程设计,熟练掌握c语言的编程方法,将理论联系到实践中去,提高我们的动脑和动手的能力。

2.通过4位数加法计算器的设计,掌握c语言编程的基本语法,和简单程序的编写,最终提高我们的逻辑抽象能力。

1.2设计内容和要求

内容:

设计一个4位数加法计算器

要求:

该计算器通过4×4的矩阵键盘输入数字和运算符,能进行4位十进制以内的正数的加、减、乘、除的运算,如果运算结果超过4位十进制数,4位数码管全部显示为E。

1.3设计思路

1.先熟悉实验原理,了解计算器的工作过程及其显示,了解计算器电原理图的组成元器件。

2.了解各元器件的工作原理。

3.在keil软件里编写程序,用Protues7professional的ISIS7professional软件绘制电原理图,并进行仿真,通过对仿真现象的观察,修改原理图或程序,直到满足设计要求为止。

 

2设计原理分析

2.1计算器的工作原理

2.1.1计算器的工作流程

计算器是对键盘输入的数字及运算符等信号进行分析和处理,最后通过数码管显示出结果的计算工具。

当然,在输入数字的同时,数码管也是会显示出输入的数字的,其整个工作流程图如图2.1所示。

外界输入数字或运算符

微处理器处理并运算

显示器显示结果

图2.1计算器的工作流程图

2.1.2编程实现控制

通过编写程序,实现对输入信号的识别、输入数字的显示以及运算结果的显示。

2.1.3功能拓展

在进行减法运算时,若运算结果小于0,数码管显示其绝对值;在进行除法运算时,若除数等于0,数码管显示EEEE。

 

2.2单片机计算器的基本构成及原理

AT89C51是一种带4K字节闪存可编程可擦除只读存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低电压、高性能CMOS8位微处理器,俗称单片机。

它能进行简单的运算,通过编写程序,可以让它完成对输入信号的识别、处理以及显示等功能。

它完全能满足4位加法计算器的要求,能够完成对键盘输入信号的识别、处理等功能。

据此,本设计系统以单片机位核心,连接成最小系统,由键盘输入模块和4位数码管输出模块等组成,系统放入总体方框图如图2.2所示。

键盘输入

最小系统外围接口电路单片机

数码管显示

图2.2系统的总体方框图

键盘作为整个系统的输入端口,单片机是整个系统的核心,兼有识别信号和处理等功能,而数码管是整个系统的输出部分,用于显示输入的数字和运算后的结果。

 

3硬件电路的设计

3.1系统硬件总电路构成及原理

实现本设计要求的具体功能,可以选用AT89C51单片机及外围器件构成最小控制系统,4×4的矩阵键盘和4位共阳极的数码管组成。

其中4×4的矩阵键盘是用来输入信号的,而4位共阳极的数码管是用来显示输入的数字及运算结果的。

3.2硬件电路的部分组成元器件的简介

3.2.1AT89C51单片机

AT89C51单片机是80C51类型中的一种,其基本型包含CPU系统、存储器系统和I/O口及其他功能单元。

单片机的最小控制系统如图3.1所示。

图3.1单片机及其最小控制系统

 

3.2.2八段LED数码管

LED显示屏作为大型显示设备的一种,具有亮度高、价格低、寿命长、维护简便等优点。

LED数码管的结构简单,分为七段和八段两种形式,也有共阳极和共阴极之分。

以八段共阳管为例,它有8个发光二极管(比七段多一个发光二极管,用来显示sP,即点),每个发光二极管的阳极连在一起。

这样,一个LED数码管就有I根位选线和8根段选线,要想显示一个数值,就要分别对它们的高低电平来加以控制。

为方便起见,本文主要讨论共阳极八段LED数码显示管,其他类形的显示管与其类似。

图3.2即为八段数码管,下面的引脚从左至右一次为a,b,c,d,e,f,g,dp和位选引脚。

图3.2LED数码管

数码管的显示原理:

通过同名管脚上所加电平的高低来控制发光二极管是否点亮而显示不同的字形,如a,b,c,d,e,f,g全亮是显示为8,其中共阳极连接的数码管的驱动代码如表3.1所示。

表3.1共阳极数码管驱动代码

显示数值

dpgfedcba

驱动代码(16进制)

0

11000000

C0

1

11111001

F9

2

10100010

A4

3

1010000

B0

4

10011001

99

5

10010010

92

6

10000010

82

7

11111000

F8

8

10000000

80

9

10010000

90

4位八段数码显示管是由4个数码管组成,如图3.3所示,其左侧的a,b,c,d,e,f,g,dp为数码管的驱动引脚,右侧的1,2,3,4为数码管的位选引脚。

图3.34位数码显示管

4位数码管显示计算数据的过程:

如输入数字4136,当从键盘上输入4时,4位数码管第4位显示4,其他三位不亮;再次输入1时,数码管第3位显示4,同时第4位显示1,其他两位不亮;再次输入3时,数码管第2位显示4,同时第3位显示1,第2位显示3,第一位不亮;再次输入6时,数码管第1位显示4,同时第2位显示1,第3位显示3,第4位显示6。

3.2.3矩阵键盘

矩阵键盘是由16个按钮组成的,16个按钮按4行4列的顺序排列构成4×4的矩阵键盘,如图3.4所示,图3.4所示的键盘是Protues7professional的ISIS7professional软件中的一个元器件,其原理就是16个按钮按4行4列排列构成的。

图3.4矩阵键盘

在4位计算器的设计中,单片机识别矩阵键盘是通过按列扫描的方式进行的。

其具体过程如下:

对所有的列加以高电平,对第一行(A行)加以低电平,扫描列的电平变化,如列有高电平变为低电平,则能确定按下的键是哪一个;如第一列没有电平变化,依次对第二行(B行)、第三行(C行)和第四行(D行)加以低电平,分别对列进行扫描,看列的电平变化,来确定按下的键。

3.3元器件清单

4位加法计算器的硬件电路图主要由表3.2所示的元器件组成

表3.2元器件列表

器件

说明

AT89C51单片机

核心器件

晶体

51单片机工作的振荡源

电阻

对电流大小进行限制

电容

51单片机复位和振荡源工作的辅助器件

矩阵键盘

用于输入数字和运算符

4位8段数码管

用于显示输入的数字及运算结果

 

3.4电路原理图

图3.5系统电路原理图

 

4系统程序的简单设计

4.1程序方框图

开始

初始化

显示0

取第一个数

取运算符

取第二个数

取等于号

计算并显示结果

结束

图4.1计算器程序流程图

4.2计算器程序

#include

sbitP3_0=P3^0;

sbitP3_1=P3^1;

sbitP3_2=P3^2;

sbitP3_3=P3^3;

unsignedcharsz[12],xs1[4],xs2[4],xs3[4],xs4[4],sj;

inti,cs,bb,t1,t2,fh,s1,s2,k;

voidchushihua()/*初始化程序*/

{

bb=1;

xs1[0]=10;xs1[1]=10;xs1[2]=10;xs1[3]=10;

xs2[0]=10;xs2[1]=10;xs2[2]=10;xs2[3]=10;

xs3[0]=11;xs3[1]=11;xs3[2]=11;xs3[3]=11;

xs4[0]=0;xs4[1]=10;xs4[2]=10;xs4[3]=10;

t1=0;t2=0;s1=s2=0;

fh=0;

cs=1;

}

voidxianshi(unsignedcharxs[4])/*显示程序*/

{

inti,j;

unsignedcharzy;

zy=0xf1;

for(i=0;i<4;i++)

{

P2=(0xff-zy);

P1=sz[xs[i]];

zy=(zy>>1);

for(j=0;j<100;j++);

}

return;

}

unsignedcharsaomiao()/*键盘扫描程序*/

{

inti;

unsignedcharpp;

for(i=0;i<1000;i++);

P0=0xfe;

P3=0x0f;

pp=P3;

if(P3_0==0){P3=0x0f;pp=P3;while(P3_0==0);for(i=0;i<1000;i++);return7;}

if(P3_1==0){P3=0x0f;pp=P3;while(P3_1==0);for(i=0;i<1000;i++);return8;}

if(P3_2==0){P3=0x0f;pp=P3;while(P3_2==0);for(i=0;i<1000;i++);return9;}

if(P3_3==0){P3=0x0f;pp=P3;while(P3_3==0);for(i=0;i<1000;i++);return11;}

P0=0xfd;

P3=0x0f;

pp=P3;

if(P3_0==0){P3=0x0f;pp=P3;while(P3_0==0);for(i=0;i<1000;i++);return4;}

if(P3_1==0){P3=0x0f;pp=P3;while(P3_1==0);for(i=0;i<1000;i++);return5;}

if(P3_2==0){P3=0x0f;pp=P3;while(P3_2==0);for(i=0;i<1000;i++);return6;}

if(P3_3==0){P3=0x0f;pp=P3;while(P3_3==0);for(i=0;i<1000;i++);return12;}

P0=0xfb;

P3=0x0f;

pp=P3;

if(P3_0==0){P3=0x0f;pp=P3;while(P3_0==0);for(i=0;i<1000;i++);return1;}

if(P3_1==0){P3=0x0f;pp=P3;while(P3_1==0);for(i=0;i<1000;i++);return2;}

if(P3_2==0){P3=0x0f;pp=P3;while(P3_2==0);for(i=0;i<1000;i++);return3;}

if(P3_3==0){P3=0x0f;pp=P3;while(P3_3==0);for(i=0;i<1000;i++);return13;}

P0=0xf7;

P3=0x0f;

pp=P3;

if(P3_0==0){P3=0x0f;pp=P3;while(P3_0==0);for(i=0;i<1000;i++);return16;}

if(P3_1==0){P3=0x0f;pp=P3;while(P3_1==0);for(i=0;i<1000;i++);return0;}

if(P3_2==0){P3=0x0f;pp=P3;while(P3_2==0);for(i=0;i<1000;i++);return15;}

if(P3_3==0){P3=0x0f;pp=P3;while(P3_3==0);for(i=0;i<1000;i++);return14;}

return10;

}

voidchuli(unsignedcharx)/*运算程序*/

{

inti;

if(x==16)

{

cs=0;

k=2;

return;

}

if(x>=0&&x<10)

{

k=0;

if(bb==1)

{

if(s1==4){cs=0;return;}

else

{

for(i=3;i>0;i--)

xs1[i]=xs1[i-1];

xs1[0]=x;

s1++;

t1=t1*10+x;

}

}

if(bb==2)

{

if(s2==4){cs=0;return;}

else

{

for(i=3;i>0;i--)

xs2[i]=xs2[i-1];

xs2[0]=x;

s2++;

t2=t2*10+x;

}

}

}

if(x>10)

{

if(bb==1){fh=x;bb=2;return;}

if(bb==2)

{

if(fh==11&&t2==0)t1=10000;

if(fh==11)t1=t1/t2;

if(fh==12)t1=t1*t2;

if(fh==13)t1=t1-t2;

if(fh==14)t1=t1+t2;

if(t1<0)t1=-t1;

if(t1>=10000){cs=0;k=1;return;}

else

{

if(t1>=0&&t1<10){xs1[0]=t1;xs1[1]=10;xs1[2]=10;xs1[3]=10;}

if(t1>=10&&t1<100)

{xs1[0]=t1%10;xs1[1]=t1/10;xs1[2]=10;xs1[3]=10;}

if(t1>=100&&t1<1000){xs1[0]=t1%10;xs1[1]=(t1-(t1/100)*100)/10;xs1[2]=t1/100;xs1[3]=10;}

if(t1>=1000&&t1<10000){xs1[0]=t1%10;xs1[1]=t1%100/10;xs1[2]=(t1-(t1/1000)*1000)/100;xs1[3]=t1/1000;}

bb=2;

s2=0;

t2=0;

xs2[0]=10;xs2[1]=10;xs2[2]=10;xs2[3]=10;

fh=x;

}

}

}

}

voidmain()/*主程序*/

{

sz[0]=0xc0;

sz[1]=0xf9;

sz[2]=0xa4;

sz[3]=0xb0;

sz[4]=0x99;

sz[5]=0x92;

sz[6]=0x82;

sz[7]=0xf8;

sz[8]=0x80;

sz[9]=0x90;

sz[10]=0xff;

sz[11]=0x86;

cs=0;

k=2;

for(;;)

{

if(cs==0)chushihua();

if(cs==1)sj=saomiao();

if(cs==1&&sj!

=10)chuli(sj);

if(cs==1&&(bb==1||bb==2&&s2==0))xianshi(xs1);

if(cs==1&&(bb==2&&s2!

=0))xianshi(xs2);

if(k==1)xianshi(xs3);

if(cs==1&&k==2)xianshi(xs4);

}

}

 

5系统的仿真调试

进行110+600+9500的加法运算时,在进行前一部分的加法,即110+600是的结果显示如图5.1所示。

在其结果上再加上9500时,结果超出了计算器的范围,计算器显示错误,数码管的显示如图5.2所示。

图5.1110+600的结果显示图

图5.2超出计算范围显示错误

 

6课程设计总结

经过两周的努力,4位加法计算器终于设计成功,达到了要求的目标。

这两周的课程设计,我过的忙碌且充实着,从对单片机的懵懵懂懂,到现在熟练运用,我都觉得受益颇多。

同学们在这为期两个月的单片机课程设计中,都辛勤的努力着,都在自己的设计课题上都有着一个又一个的进步,大家的脸上都流露出兴奋的喜悦。

在这两月的设计中我们不仅学到了关于自己课程设计题目方面的东西。

同时我们也从课程设计中的相互交流和互帮互助中学到了很多关于单片机应用方面的其它知识,这些知识都是我们在这次课程设计实践中一点一滴的积累下来的。

 

至于设计课题,我选择的是4位加法计算器的设计,在最初设计的时候,还是低估了它的难度,前两天,一次次的碰壁,既不会用proteus软件画图,也不熟悉keil编程的语法,弄好的程序不是这里有错误,就是那时那里有错误。

后来在网上学习了相关的知识,并去图书馆借了大量的单片机应用、以及c语言编程相关方面的书籍阅读后,对其有了一个很大方面的了解,在后来不断的对程序的修改中,慢慢地就熟练了单片机的编程语法,最后也按要求完成了课题的设计要求。

最终我们圆满的完成了这次非常有意义的课程设计,在最后我想说的是通过这次课程设计我们学到的不仅仅是那些知识,同时我们还学到了很多关于同学之间合作的重要性,同时也加深了我们今后,齐心协力一起解决问题的意识。

 

参考文献

[1]程国钢.案例解说单片机c语言开发.电子工业出版社,2012.

[2]汤竞南,沈国琴.51单片机C语言开发与实例.人民邮电出版社,2008.

[3]李全利.单片机原理与接口技术.高等教育出版社,2009.

[4]刘鲲,孙春亮.单片机C语言入门.人民邮电出版社,2010.

[5]周怀芬.简易计算器的设计与实现.天津职业院校联合校报NO.6Vol.152013.6

[6]周润景,张丽娜.基PROTEUS的电路及单片机系统设计与仿真.航空航天大学出版社,2006.

[7]姜志海,赵艳雷,陈松.单片机的C语言程序设计与应用.电子工业出版社2011.

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

当前位置:首页 > 人文社科 > 文学研究

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

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