4位数加法计算器

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

安庆师范大学2014级单片机原理与应用
课程设计报告
课题名称4位数加法计算器的设计姓名吴昊天、伍浩然、王鹏、万吉
学号070814018 070814008 070814005 070814001 院、系、部计算机学院物联网工程
专业物联网工程
指导教师汪文明
2016 年6月6日
一、设计任务及要求:设计任务:
1、通过4*4矩阵键盘输入数字及运算符;
2、可以进行4位十进制数以内的加法预算。

如果计算结果超出四位数,则全部显示
“ E ;
3、可以进行加减乘除所有运算;
4、添加其他功能。

要求:
首先进行预设计,根据设计的任务要求,先确定设计的硬件电路方案,然后进行硬件电路的初步设计,在计算机上画出硬件电路图,在老师的指导下进行修正硬件电路图,并对所涉及的参数进行计算。

在确定硬件的基础上,要进行软件的总体设计,包括软件主流程的设计以及各子程序的设计,同时,要写出详细的操作说明,如时间的调整方法,显示窗口的时间切换等,以配合软件的设计。

然后进入硬件的调试及编程工作,设计组内的同学可根据任务分工,有调试硬件各功能模块的,如键盘子程序、显示子程序等,有进行整体程序的编制的,各模块的编制过程中要注意资源的衔接。

最后进入联机调试,联机调试的原则也要采用分步走的原则,各个功能模块要逐步套入,通过一个再增加一项功能,从而达到设计的总体要求,不要上来编制个最大的程序,最后无法查找错误。

最后写出设计报告。

指导教师签名:
2016年6月6日
、成绩
指导教师签名:
年月曰
一、绪言 (1)
二、系统设计 (1)
2.1设计任务 (1)
2.2方案比较与论证 (1)
2.2.1系统整体流程图 (2)
222单片机的选择方案论证 (2)
2.2.3键盘选择方案论证 (2)
2.2.4显示模块的选择方案论证 (2)
2.2.5蜂鸣器的选择方案论证 (2)
三、硬件电路设计 (2)
3.1计算器的控制电路图 (2)
3.2矩阵键盘的设计................................................ (3)
3.3 LCD1602显示电路的设计 (3)
3.4蜂鸣器驱动电路的设计 (4)
3.5主要元器件选择 (4)
四、程序流程图 (5)
五、c语言程序设计 (5)
六、计算器的仿真 (19)
6.1Keil 调试 (19)
6.2Proteus 调试 (19)
七、结束语 (20)
八、参考文献 (21)
一、绪言
近年来随着科技的飞速发展,单片机的应用正在不断地走向深入,同时带动传统控制检测日
新月异更新。

在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的软件结合,加以完善。

电子时钟是现代社会中的主要计时工具之一,广泛应
用于手机,电脑,汽车等社会生活需要的各个方面,及对时间有要求的场合。

本设计采用
AT89C52单片机作为主要核心部件,附以上电复位电路,时钟电路及按键调时电路组成。

数字钟已成为人们日常生活中:必不可少的必需品,广泛用于个人家庭以及车站、码头、
剧场、办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大的方便。

由于数字集成电路技术的发展和采用了先进的石英技术,使数字钟具有走时准确、性能稳定、携带方便等优点,它还用于计时、自动报时及自动控制等各个领域。

二、系统设计
2.1设计任务
1、通过4*4矩阵键盘输入数字及运算符;
2、可以进行4位十进制数以内的加法预算。

如果计算结果超出四位数,则全部显示“ E”
3、可以进行加减乘除所有运算;
4、添加其他功能。

2.2方案比较与论证
2.2.1系统整体流程图
图1系统整体流程图
2.2.2计算器的控制方案论证
用4*4的矩阵键盘组成0-9数字键及加、减、乘、除、等于、清零按键,LCD屏幕实时显
示输入的数字和运算符号,每按下一个按键都有蜂鸣器发出的响声。

从矩阵键盘输入一个数字,选择运算符,再输入一个数字,然后按下“等于”键,最后的计算结果会呈现在LCD
屏幕上。

223单片机的选择方案论证
方案一:采用可编程逻辑期间CPLD作为控制器。

CPL可以实现各种复杂的逻辑功能、规模大、密度高、体积小、稳定性高、I/O资源丰富、易于进行功能扩展。

采用并行的输入输出方式,提高了系统的处理速度,适合作为大规模控制系统的控制核心。

但本系统不需要复杂的逻辑功能,对数据的处理速度的要求也不是非常高,且从使用及经济的角度考虑我们放弃了此方案方案二:采用Atmel公司的AT89C5单片机作为控制器。

AT89C5是一个低功耗,高性能的51内核的CM08位单片机,片内含8k空间的可反复擦些1000次的Flash只读存储器,具有256 bytes的随机存取数据存储器(RAMI,32个双向I/O 口,2个16位可编程定时计数器。

综合考虑,选择方案二,采用Atmel公司的AT89C5单片机作为控制器。

2.2.4键盘选择方案论证
方案一:采用独立式键盘。

由于各键相互独立,每个按键各接一根输入线,通过检测输入线的电平状态可以很容易的判断哪个按键被按下。

此种键盘适用于按键较少或操作速度较高的场合。

但本题发挥部分要求16个功能键,按键数目较多,这就需要较多的输入口线,而且电路结构复杂。

故此方案不可取。

方案二:采用矩阵键盘。

它由行和列组成,按键位于行列的交叉点上,行线信号和列线信号分别通过两个接口和CPU相连,通过行列扫描法判定按键的位置,此方案适用于按键较多的场合。

通过对4位数加法计算器题目的分析,采用4*4行列式键盘。

2.2.5显示模块的选择方案论证
方案一:采用带字库LCD模块显示。

能显示复杂的信息,具有质量轻,体积小,功耗低,指令功能强,接口简单,可靠性强等优点,显示内容丰富,图形美观,易于人机交流。

但是价格昂贵。

方案二:采用LED数码管显示。

数码管能显示数字和符号,但是占用I/O 口资源较多,对于简单的电路可以选用此方案。

计算器,需要较为强大的人机交互界面,故选用方案一,显示所需信息。

2.2.6蜂鸣器的选择方案论证
方案一:采用有源蜂鸣器。

有源蜂鸣器内部带震荡源,只要一通电就会发出响声。

方案二:采用无源蜂鸣器。

无源蜂鸣器内部不带震荡源,所以用直流信号无法令其鸣 叫,必须用2K~5K 的方波去驱动它。

综合考虑,为了程序控制的方便,选用了方案一。

三硬件电路设计 3.1计算器控制电路图
图2计算器控制线路图
3.2矩阵式键盘的设计
键盘电路如图3所示。

设计数字键0〜9的键号依次为0〜9,运算符号分别为“ +”、 、“ *,以及“=”和清零“ C',通过逐行扫描函数来确定按下的键位。

£
rj
> .■
:■

1 r
2
1=!
7
R1
1k
►XTAL1
POCVADQ PO
P0 2/AO2 XTAL2
poa/Am PO 型AD4
P05/AD5 RST
POWADfe PO 7/AD7
P2 WAS
P2 1M9 P2 2TA10
PSEN
P2.3/A11 ALE P24fAl2 E A P2.S/AB
P2.如 4 P1 0/T2 P1 1/T2EX
P2.7/A15
P3.0/RXD P3 I/TXD pi 9
P3.2/KT0 P3.4/TD pa.srri
PI a PI d P1 5 P1 &
P1 7
F-2 7/RD
AT09CS
LCD 1602
U1
MJE35Q
LMJ16L
BEEP
I
17
T
JJ —
4
5
a
c
■ i: E
* L7 0
10
13 15 i
j .q
图3键盘电路
3.3 LCD1602显示电路的设计
LCD1602液晶屏采用LM016L型号元件,其电路如图3所示。

3.4蜂鸣器驱动电路的设计
蜂鸣器的驱动采用PNPE极管来驱动,低电平有效。

其电路如图5所示
4
RPPP
QI

L
V

[177FR
Z
1

11
MJE350
1
<
L /v 1 n
U1
3.5主要元器件选择
主要元器件选用型号和数量如表 1所示:
表1主要元器件清单
-►XT AL 1 PO O/ADO
PO.1/AD1 PO.2/AD2 ・ XTAL2
PO3/AD3 P0.4/AW PO.5/AD5 PO.6/AD6 ・RST
PO.7/AD7
P2.Q/A8 P2.1/A9
P2.2/A10
-PSEN P2.3/A11
图5蜂鸣器电路图
R1
1k
T-
21 le
!2 le
LCD 液晶屏显不
五C 语言程序设计
#in elude <reg51.h> #in elude vintrin s.h>
#defi ne uehar un sig ned char #defi ne uint un sig ned int sbit leden=P2A
1; //定义 E 口 sbit lcdrs=P2A0; //定义 RS 口
sbit beep=P2A2;
II 定义蜂鸣器
uehar code table[]={'0','1','2',3,'4','5','6',
四、程序流程图
蜂鸣器发 出响声
II 创建键位数组,
数字,运算符号,等于号,清零(小数点)
7','8',9,'+','-','*',7','=','.'};
uchar key,flag1,js,k1,k2;
uchar a[20],b[20];
float jieguo=0;
void delay(uchar z) // 延迟函数
{
uchar x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_cmd(uchar cmd) // 写命令函数
{
lcdrs=0;
P仁cmd;
delay(5);
lcde n=1;
delay(4);
lcde n=0;
}
void write_data(uchar date) // 写数据函数
{
lcdrs=1;
P仁date;
delay(5);
lcde n=1;
delay(5);
lcde n=0;
}
void init() //LCD初始化函数
{
lcde n=0;
write_cmd(0x38); // 设置16x2 显示,8 位数据接口write_cmd(0x0c); //设置开显示,不显示光标(关显示是write_cmd(0x06); II 写一个字符后地址指针加 1
0x08)
write_cmd(0x01); II 清屏
}
void keysca n()
{
uchar temp,uu=0xf7;
uint i;
for(i=0;i<4;i++)
{
uu=_crol_(uu,1); II 左移
P3=uu;
temp=P3;
temp=temp&0 x0f;
if(temp!=OxOf)
{
delay(10);
temp=P3;
temp=temp&O x0f;
if(temp!=0x0f)
{
temp=P3;
switch(temp)
{
case 0xee:key=1;beep=0;delay(200);beep=1;break; 〃延迟200 响声
case 0xde:key=2;beep=0;delay(200);beep=1;break;
case 0xbe:key=3;beep=0;delay(200);beep=1;break;
case 0x7e:key=10;beep=0;delay(200);beep=1;break;
case 0xed:key=4;beep=0;delay(200);beep=1;break;
case 0xdd:key=5;beep=0;delay(200);beep=1;break;
case 0xbd:key=6;beep=0;delay(200);beep=1;break;
case 0x7d:key=11;beep=0;delay(200);beep=1;break;
case 0xeb:key=7;beep=0;delay(200);beep=1;break;
case 0xdb:key=8;beep=0;delay(200);beep=1;break;
case 0xbb:key=9;beep=0;delay(200);beep=1;break;
case 0x7b:key=12;beep=0;delay(200);beep=1;break;
case 0xe7:key=0;beep=0;delay(200);beep=1;break;
case 0xd7:key=15;beep=0;delay(200);beep=1;
beep=0;delay(200);beep=1;beep=0;delay(200);beep=1;break; // 清零长响声
case 0xb7:key=13;beep=0;delay(200);beep=1;break;
case 0x77:key=14;beep=0;delay(180);beep=1;delay(100);
beep=0;delay(180);beep=1;break; // 等于按键两声短响,中间较短间隔
}
while(temp!=0x0f)
{
temp=P3;
temp=temp&0 x0f;
}
flag1=1;
}
}
}
}
void jscl() //计算显示函数
{
uchar i,j, n;
float s,temp2;
long int s1,s2,a1,b1,c1,temp1;
a1=1;
b1=1;
s1=0;
s2=0;
s=0;
if(k2!=0)
{
for(j=0;j<k1+1;j++) 〃存放第一操作数
{
for(i=0;i<k1-j;i++)
a仁a1*10;
s仁s1+a[j]*a1;
a1=1;
}
for(j=k1+1;j<k2+1;j++) // 存放第二操作数
{
for(i=0;i<k2-j;i++)
b仁b1*10;
s2=s2+a[j]*b1; b1=1;
}
if(js==10) //判断运算符号
{
s=s1+s2;
}
if(js==11)
{
s=s1-s2;
}
if(js==12)
{
s=s1*s2;
}
if(js==13)
{
s=(s1*0.1)/(s2*0.1);
}
jieguo=s;
}
else
s=jieguo;
if(jieguo>9999||s>=9999)
{
write_data('E');
} else
{
c仁(Io ng in t)(s*1000)%10; if(c1>=5)
s=s+0.01;
temp1=(lo ng in t)(s);
temp2=s-temp1;
n=0;
while(temp1)
{
b[ n]=temp1%10; temp1=temp1/10;
n++;
}
b[ n]=temp2*10;
b[ n+1]=(uchar)(temp2*100)%10; for(i=n; i>0;i-
-)
{
write_data(table[b[i-1]]);
}
if(jieguo<1)
{
write_data(table[0]);
write_data(table[15]);
write_data(table[b[ n]]);
write_data(table[b[ n+1]]);
}
else
{
write_data(table[15]);
write_data(table[b[ n]]);
write_data(table[b[ n+1]]);
}
}
}
void mai n()
{
uchar i,j;
in it();
write_cmd(0x80); //将液晶指针定位在第key=15;
i=0;
flag 仁0;
while(1)
//运算结果小数的处理行第一个单元
keysca n();
if(flag 仁=1)
{
if(key==15) 〃判断为清零操作
{
write_cmd(OxO1);
i=0; for(j=0;j<20;j++)
{
a[j]=0;
b[j]=0;
}
k仁0;
k2=0;
}
else if(key<10) // 判断为数字
{
write_data(table[key]); a[i]=key;
i++;
}
else if(key<14) //判断为运算符号
{
write_data(table[key]);
k1=i-1;
js=key; } else {
write_data(table[key]); if(i==0) k2=0;
else
〃判断为等于操作
k2=i-1;
write_cmd(0x80+0x40); jscl();
}
flag 仁0;
}
}
}
6.计算器仿真
在完成了计算器硬件设计和软件设计以后,便进入系统的调试阶段。

系统的调试步骤和方法基本上是相同的,但具体细节和所采用的开发系统以及用户系统选用的单片机型号有关,如可选用Keil 软件进行软件调试,用Proteus软件完成硬件调试。

6.1 Keil 调试
宙GdMateH - UVgM ■ 口X Erofwi fljdi 4加弓]«ita 已Wrdc*
•忌.|S L4 ft ft 读JI 疋-4Z庄虬画%
电口jjl屮J W a屮i■乐上
IP'rt^BCt » fl
X J 團 KLMCB.C
营h J 狂仙押
1 KHFI fiDcludff ^reg51,)i> *
呂 口 %wrg Gntwp 1
& *1 汝loda cin-Lrina.h^ 回 SJARTUP.A 引

Itlfflric dc>iai 丄gnfd ^I UIE
K- ftfeL : Icden^FS^l;
// 足 iE 口
jri?g5i>h 聪 ■sbi ■匕 ICdra-Pl^O; //JS_tP3口 -
.Jinuinc.h
K> ^blt tS--£• ".罡文&吗盟
jcbai cedi Cibie[.-fn% 'I'j '2'^'3'i P '-E'J
"创洼隽垃数迥・載TT ,
尋于弓・:廿零C 小数母}
KB ■7% 'S'j 習・「4 , \
r'.- HD .1 !■?
til ychar k 的』fl^gl r 站.k 九 k2:
udui &£20]^[20]- Fl £l»t [丄上护亠曲
^□Lci d-iay lucJinr 对 打伍『:兗 WBt tit 山Uh 由 f Kx^fr nr IK-l^X^a,1 M--) 耐 "里(y-HOr-yjO^ y __ | j
ns

wi.d Miite oxi bar end] 打 室:皓些t£§5 KiF 1 d- lcdia-^j
Helay <冲 F

IA
如1細Ml;
E ledAn-Oj
13
void wzitc- ditn rucTinr dauE . FE 敎拇
m-
H P ffllk &■ A r
1

p|
104H -】; |
maET^ilang FUUPTir. h31^ ■- COCFX H XE ^! ■DUH ■.口S . I S . isnkiag ...
Six ■:日 uiaci."':! nd«B
2M3
cm.Z3n? has fAl :! E~=B ^C H ^CX I LCOX "... ■CB:inlr=ax ・-t> Exrcr|a|P & N IX =J .ZQ is|-.
6.2 Proteus 调试
| ・ U IP I H 卩■ d O' L a*p 生叩"t 吐
■JW "
7结束语
通过这次课程设计,使我们得到了一次用专业知识和专业技能去分析问题、解决问题 全面系统的锻炼。

使我们在单片机的基本原理、单片机应用系统开发过程,以及用
C 语言
设计程序的思路技巧等方面都能向前迈了一大步,为我们日后成为合格的应用型人才打下 良好的基础。

8参考文献
LCD1502
LWI5L
石:!:«■■
&2J09斷”青/
■・、
・A ■+eo E -
**
BEEP
'l
—<TJ| -
口 ST
.Alt
PC IA M)I PO 丹觸 a PO^W RjA'JLM POWMH 用曲心 R9TMD7 P2OM P2 V*J» PI3»A1!
PtWC P2^I3
P?B/At4 P2 7^A1^ PJOftKD P3 irrsD r-a:;tnc Ri jjfrrr PMD P1WT1 用6/丽 P3
7.WE
tru.
I L ZZT
iMilQ.
MJTBO UlTlirtE -
E 勺1311' 占
& T —
谿岁 眩山8BS8a88a
1.期刊类
【格式】[序号]作者.篇名[J].刊名,出版年份,卷号(期号):起止页码•
【举例】
[1]王海粟•浅议会计信息披露模式[J].财政研究,2004,21(1) : 56-58.
[2]夏鲁惠.高等学校毕业论文教学情况调研报告[J].高等理科教育,2004(1):46-52.
[3]Heider, E.R.& D.C.Oliver. The structure of color space in naming and memory
of two Ian guages [J]. Foreig n Lan guage Teachi ng and Research, 1999, (3): 62 - 67. 2.专著类
【格式】[序号]作者.书名[M].出版地:出版社,出版年份:起止页码.
【举例】[4]葛家澍,林志军.现代西方财务会计理论[M].厦门:厦门大学出版社,2001:
42.
⑸ Gill, R. Masteri ng En glish Literature [M]. Lo ndon: Macmilla n, 1985: 42-45.
3.报纸类
【格式】[序号]作者.篇名[N].报纸名,出版日期(版次).
【举例】
⑹ 李大伦.经济全球化的重要性[N].光明日报,1998-12-27(3).
[7]French, W. Between Silences: A Voice from China[N]. Atlantic Weekly, 1987-8-15(33).
4.论文集
【格式】[序号]作者.篇名[C].出版地:出版者,出版年份:起始页码.
【举例】
[8]伍蠡甫.西方文论选[C].上海:上海译文出版社,1979: 12-17.
[9]Spivak,G. “ Can the Subaltern Speak? ” [A]. In C.Nelson & L. Grossberg(eds.). Victory in Limbo: Imigism [C]. Urbana: University of Illinois Press, 1988, pp.271-313.
[10]Almarza, G.G. Student foreign Ianguage teacher ' s knowledge growth [A]. In
D.Freema n and J.C.Richards (eds.). Teacher Lear ning in Lan guage Teachi ng [C]. New York: Cambridge Un iversity Press. 1996. pp.50-78.
5.学位论文
【格式】[序号]作者.篇名[D].出版地:保存者,出版年份:起始页码.
【举例】
[11]张筑生.微分半动力系统的不变集[D].北京:北京大学数学系数学研究所,1983:1-7. 6.研究报告
【格式】[序号]作者•篇名[R].出版地:出版者,出版年份:起始页码•
【举例】
[12]冯西桥.核反应堆压力管道与压力容器的LBB分析[R].北京:清华大学核能技术设计
研究院,1997 : 9-10.
7.条例
【格式】[序号]颁布单位.条例名称.发布日期
【举例】[15]中华人民共和国科学技术委员会.科学技术期刊管理办法[Z].1991 —06—05
8.译著
【格式】[序号]原著作者.书名[M].译者,译.出版地:出版社,出版年份:起止页码.
说明:
1正文部分采用宋体小四,1.5倍行距。

2 一级标题黑体小三号加黑,二级标题黑体四号加黑,三级标题黑体小四号加黑。

全部标题均不居中,段前段后都为0行,行间距为1.5倍。

3参考文献不少于10个。

4图和表分别采用通篇编号方式,必须有标题。

图的标题在图下方,表的标题在表上方。

相关文档
最新文档