当前位置:文档之家› 简单计算器

简单计算器

毕业论文(设计)简单计算器学生姓名:指导教师:合作指导教师:专业名称:应用电子技术所在学院:2013 年4 月目录摘要 (I)第一章前言 (1)第二章方案论证与设计 (2)2.1 目标和要求 (2)2.2 方案设计 (2)第三章硬件介绍 (3)3.1单片机 (3)3.2 LED显示器 (4)3.3键盘 (4)第四章软件编程 (5)4.1显示程序设计 (5)4.2 键盘扫描程序 (5)4.3运算程序设计 (8)4.4蜂鸣器程序设计 (9)4.5 汇编程序 (10)总结 (23)参考文献 (24)附录 (25)摘要随着社会的发展,科学的进步,人们的生活水平在逐步的提高,尤其是电子技术的发展,更犹如雨后春笋般的变化着。

现在单片机的应用已经越来越贴近生活,用单片机来实现一些电子设计也变得容易起来。

计算器在人们的日常中是比较的常见的电子产品之一。

现阶段的计算器还是比较简单的,电路也并不是特别复杂,但它却还在发展之中,以后必将出现功能更加强大的计算器,基于这样的理念,并结合所学的单片机知识,想到了应用单片机来设计一个可以完成计算器基本功能的程序。

该设计系统是选用AT89C51 的单片机为基础, P1和P3 口作为输入端,外接4X4 的键盘,通过键盘扫描来进行对输入数的控制,在P0口,P2 口接入驱动电路。

用来保证 LED 的正常工作。

计算器将完成的功能有加,减,乘,除,清零的功能。

关键词:计算器,LED,单片机第一章前言当今已是信息化时代,社会快速发展和信息技术革命的不断深入使随着现代科技的飞速发展,单片机已经在各个领域得到越来越广泛的应用,由于其体积小,功耗低这两个基本特征,在通讯,家电,工业控制,仪器仪表,汽车等产品中都可以看到单片机的身影,可以说几乎很难找到哪个领域没有单片机的踪迹,且逐渐地发展成了一门比较关键的技术学科。

单片机技术也随着集成电路技术的进步在近几年飞速的发展,这种发展可以分为两方面:一方面在硬件上单片机内部集成了越来越多的功能部件,如A/D,D/A,PWM,WATCHDOG,LCD驱动,串行口,大容量FLASH存储器等;另一方面在开发手段上从汇编语言向高级C语言过度,计算机仿真调试,IAP,ISP技术的应用使单片机开发周期大大的缩短,为各类产品更新,软件的升级提供了可靠的技术保障。

在设计单片机应用系统时,由于历史的原因,目前在国内仍然以8051系列单片机为主。

提起计算器,值得我们骄傲的是最早的计算工具诞生在中国。

中国古代最早采用的一种计算工具叫筹策,又叫做算筹,这种算筹多用竹子制成,也有用木头、兽骨充当材料的,约270,枚一束,放在布袋里克随身携带。

17世纪初,西方国家的计算工具有了较大的发展,英国数学家纳皮尔发明的“纳皮尔算筹”,英国牧师奥却德法发明了圆柱形对数计算尺,这种计算尺不仅能做加减乘除、乘方、开方运算,甚至可以计算三角函数、指数函数和对数函数,这些计算工具不仅带动了计算机的发展,也为现代计算器的发展奠定了良好的基础,计算器已经成为现代社会应用广泛的计算工具。

硬件主要由四部分组成,核心部分为8051单片机芯片,按键部分是一个4*4键盘,采用软件识别键值,并执行相应的操作。

显示部分是一个液晶显示器。

软件部分主要用编程语言来编程。

大致执行过程:开机显示零,等待输入数值,当键入数字时,通过显示器显示出来,当键入+、-、*、/运算符时,计算器在内部执行数值存储和转换,并等待再次输入数值,当再次输入数值后,显示新输入的数值,按等号就会在显示器上输出运算结果。

第二章方案论证与设计2.1 目标和要求设计是一个实现加、减、乘、除的计算器,它的硬件主要由四部分组成,一个AT89C51单片机芯片,一个八位共阳极的数码管,一个四乘四的键盘,一个排阻做P0口的上拉电阻,它可以实现结果低于65535的加、减、乘、除运算。

2.2 方案设计本次设计是在应用单片机的前提下进行的,根据要求需要扩展必要的外接口电路,实现计算器的控制。

具体设计考虑如下:①由于要设计的是简单的计算器,可以进行四则运算,对数字的大小范围要求不高故我们采用可以进行四位数字的运算,选用8个LED数码管显示数据和结果。

②另外键盘包括数字键(0~9)、符号键(+、-、×、÷)、清除键和等号键,故只需要16个按键即可。

因此根据需要我们可以采用自上而下的程序设计方法,此方法先从主程序开始设计,然后再编制各从属程序和子程序,层层细化逐步求精,最终完成一个复杂程序的设计。

这种方法比较符合人们的日常思维,缺点是一级的程序错误会对整个程序产生影响。

如图2-1程序流程图第三章硬件介绍3.1单片机单片机作为计算器的主要功能部件,可以进行很快地实现运算功能MCS-51 单片机是在一块芯片中集成了CPU、RAM、ROM、定时器/计数器和多功能I/O等一台计算机所需要的基本功能部件。

如果按功能划分,它由如下功能部件组成,即微处理器(CPU)、数据存储器(RAM)、程序存储器(ROM/EPROM)、并行I/O 口、串行口、定时器/计数器、中断系统及特殊功能寄存器(SFR)。

单片机是靠程序运行的,并且可以修改。

通过不同的程序实现不同的功能,尤其是特殊的独特的一些功能,通过使用单片机编写的程序可以实现高智能,高效率,以及高可靠性!因此我们采用单片机作为计算器的主要功能部件,可以进行很快地实现运算功能。

图3-1 单片机实物图图3-2 单片机芯片3.2 LED显示器发光二极管LED 是单片机应用系统中的一宗简单而常用的输出设备,其在系统中的主要作用是显示单片机的输出数据、状态等。

因而作为典型的外围器件,LED 显示单元是反映系统输出和操作输入的有效器件。

LED 具备数字接口可以方便的和大年纪系统连接;它的优点是价格低,寿命长,对电压电流的要求低及容易实现多路等,因而在单片机应用系统中获得了广泛的应用,所以在此设计中我首先选用了LED作为显示器件。

:图3-3显示器3.3键盘计算器输入数字和其他功能按键要用到很多按键,如果采用独立按键的方式,在这种情况下,编程会很简单,但是会占用大量的I/O 口资源,因此在很多情况下都不采用这种方式。

我们引入了矩阵键盘的应用,采用四条I/O 线作为行线,四条I/O 线作为列线组成键盘。

在行线和列线的每个交叉点上设置一个按键。

这样键盘上按键的个数就为4×4个。

这种行列式键盘结构能有效地提高单片机系统中I/O 口的利用率。

图3-4 按钮矩阵第四章软件编程4.1显示程序设计考虑到显示程应具有通用性,在不进行输入时显示0,输入时显示输入的数字或运算结果,而且要使8个数码管同时显示不同的数字,选用动态显示应是最佳的。

将30H-37H单元设置成数码管显示缓冲区,分别存放数码管各个位要显示的数据,40H单元作为输入数据的计数单元。

因为运算结果超出范围时应报错,使数码管显示“ERROR”即可,将数码管的0-9的代码和“ERROR”代码存于LABLE1列表中。

当调用显示程序时,显示程序根据40H单元的记录的个数决定数码管显示的位数。

如果输入错误将在数码管上显示“ERROR”。

这样就得到了显示程序的入口:30H-37H,依次存放个位至千万位,而40H,存放输出的数字位数。

4.2 键盘扫描程序将P3口送0EOH,将P1口先送1在读P1口的数据当P1口低四位全一时说明没有键按下,在扫描下一行,如果P1口不全一,则有键按下,将P3口高四位与P1口低四位组合成一个字节,放入R5寄存器中,按键去抖,判键是否松开,如松开则将得到的键值判别是哪个键,如果是数字键则首先将其对应的数字(按键代码对应如下表)放入缓冲区30H,同时将将键值放入结果缓冲区,并调用显示程序,显示键值,在调用扫描键盘程序,如果在有键值输入则将原来的数值在数码管显示缓冲区向高位依次移一位,将刚键入的数值放入最低位,并将原来的数值乘十加上刚键入的数放人结果缓冲区,然后调用显示程序,如果是运算符,则记录运算符标志,加法用01H表示,减法用02H 表示,乘法用03H表示,除法用04H表示,并将结果缓冲区的数转移到中间结果缓冲区,将结果缓冲区清零,等待输入运算数据,当按等号时,根据记录的运算符标志,判断是那种运算,执行运算将结果依次除10取余数放入结果显示缓冲区,调用显示程序。

依次循环执行。

表4-1键盘扫描码图4-1 显示程序流程图4.3运算程序设计运算程序分四个模块,即加减乘除。

分别采用两字节运算,因此运算结果不能超出两字节,否则会溢出。

溢出时显示ERROR。

加法程序:入口:R0被加数低位字节地址指针,R1加数低位字节地址指针,R3字节数。

出口:R0和值地位字节地址指针,R3和值字节数。

运算时用R0,R1间接寻址,从低字节算起,高字节采用带进位加(ADDC),计算结果回送到R0所指的单元中,并将和字节数放入R3单元中,如果R3大于等于3说明溢出。

减法程序:入口:R0被减数低位字节地址指针,R1减数低位字节地址指针,R3字节数。

出口:R0和值地位字节地址指针,R3和值字节数。

只是判断溢出是通过CY位,如果运算后CY 位有借位,则将07H位置1,否则置0。

乘法程序:入口:R3,被乘数低位地址字节,R2,被乘数高位地址字节,R7,乘数低位地址字节,R6,乘数高位地址字节。

出口:R4,R5,R6,R7结果字节由高到低。

通过判断R5是否为零就可以知道运算结果是否溢出,如果溢出调用溢出程序。

除法程序:入口:被除数放在R4R5R6R7,R4R5,内容为零,R4高R5低,除数放在R2R3,R2高R3低。

出口:商放在R6R7,R6高R7低,余数放在R4R5,R4高R5低。

图4-2 运算程序扫描流程图4.4蜂鸣器程序设计这个程序是实现当输入八个数字时,如果在输入数字它便鸣叫,提示使用者输入以满,不允许在键入值,只需在键盘程序中,加入判别输入是否超过八个如果超过则调用风鸣器程序,使P3.0由低电平转入高电平,延迟1ms返回。

图4-3蜂鸣器4.5 汇编程序ORG 0000HLJMP STARTORG 0030HSTART: MOV 30H,#00HMOV 38H,#00HMOV 39H,#00HMOV 3AH,#00HMOV 3BH,#00HMOV 3CH,#00HMOV 3DH,#00HMOV 3EH,#00HMOV 3FH,#00HMOV 40H,#00HMOV 41H,#00HMOV 42H,#00HMOV 43H,#00HMOV 44H,#00HMOV 50H,#0E0HMOV 51H,#0D0HMOV 52H,#0B0HMOV 53H,#70HLOOP3: ACALL DISPLAYMOV R0,#50HMOV R7,#04HLOOP1: MOV A,@R0MOV P3,AMOV A,#0FFHMOV P1,AMOV A,P1ANL A,#0FHMOV R5,ACJNE A,#0FH,LOOP2INC R0DJNZ R7,LOOP1SJMP LOOP3LOOP2: MOV R4,#0A0H YANSHI: ACALL DELAY1mSDJNZ R4,YANSHISK: MOV A,#0FFHMOV P1,AMOV A,P1ANL A,#0FHCJNE A,#0FH,SKMOV A,42HMOV R1,#30HCJNE A,#01H,NEXT1MOV 40H,#00HMOV 42H,#00HNEXT1: CJNE @R0,#0E0H,ROW2KEYMOV A,R5ORL A,@R0CJNE A,#0EEH,KEY2MOV A,40HCJNE A,#08H,TW1ACALL WARNNINGJMP LOOP3TW1: INC 40HMOV A,#07HMOV 43H,AACALL MOVEACALL CHANGE11JMP LOOP3KEY2: CJNE A,#0EDH,KEY3MOV A,40HCJNE A,#08H,TW2ACALL WARNNINGJMP LOOP3TW2: INC 40HMOV A,#08HMOV 43H,AACALL MOVEACALL CHANGE11JMP LOOP3KEY3: CJNE A,#0EBH,KEY4MOV A,40HCJNE A,#08H,TW3ACALL WARNNINGJMP LOOP3TW3: MOV A,#09HINC 40HMOV 43H,AACALL MOVEACALL CHANGE11JMP LOOP3KEY4: ACALL JUDEGACALL CHANGEMOV 42H,#01HMOV 41H,#04HJMP LOOP3ROW2KEY: CJNE @R0,#0D0H,ROW3KEYMOV A,R5ORL A,@R0CJNE A,#0DEH,KEY5MOV A,40HCJNE A,#08H,TW4ACALL WARNNINGJMP LOOP3TW4: INC 40HMOV A,#04HMOV 43H,AACALL MOVEACALL CHANGE11JMP LOOP3KEY5: CJNE A,#0DDH,KEY6MOV A,40HCJNE A,#08H,TW5ACALL WARNNINGJMP LOOP3TW5: MOV A,#05HINC 40HMOV 43H,AACALL MOVEACALL CHANGE11JMP LOOP3KEY6: CJNE A,#0DBH,KEY7MOV A,40HCJNE A,#08H,TW6ACALL WARNNINGJMP LOOP3TW6: MOV A,#06HINC 40HMOV 43H,AACALL MOVEACALL CHANGE11JMP LOOP3KEY7: ACALL JUDEGACALL CHANGEMOV 42H,#01HMOV 41H,#03HJMP LOOP3ROW3KEY: CJNE @R0,#0B0H,ROW4KEYMOV A,R5ORL A,@R0CJNE A,#0BEH,KEY8MOV A,40HCJNE A,#08H,TW7ACALL WARNNINGJMP LOOP3TW7: MOV A,#01HINC 40HMOV 43H,AACALL MOVEACALL CHANGE11JMP LOOP3KEY8: CJNE A,#0BDH,KEY9MOV A,40HCJNE A,#08H,TW8ACALL WARNNINGJMP LOOP3TW8: MOV A,#02HINC 40HMOV 43H,AACALL MOVEACALL CHANGE11JMP LOOP3KEY9: CJNE A,#0BBH,KEY10MOV A,40HCJNE A,#08H,TW9ACALL WARNNINGJMP LOOP3TW9: MOV A,#03HINC 40HMOV 43H,AACALL MOVEACALL CHANGE11JMP LOOP3KEY10: ACALL JUDEGACALL CHANGEMOV 42H,#01HMOV 41H,#02HJMP LOOP3ROW4KEY: MOV A,R5ORL A,@R0CJNE A,#7EH,KEY11JMP STARTKEY11: CJNE A,#7DH,KEY12MOV A,40HJZ QQCJNE A,#08H,TW10ACALL WARNNINGJMP LOOP3TW10: MOV A,#00HINC 40HMOV 43H,AACALL MOVEACALL CHANGE11QQ: JMP LOOP3KEY12: CJNE A,#0BBH,KEY13ACALL JUDEGACALL CHANGEJMP LOOP3KEY13: ACALL JUDEGACALL CHANGEMOV 42H,#01HMOV 41H,#01HJMP LOOP3MOVE: MOV R1,#30HMOV R6,40HDDD: XCH A,@R1NOPNOPNOPNOPINC R1DJNZ R6,DDDRET;加法程序:人口:R0,被加数低位字节地址指针,R1,加数低位字节地址指针,R3,字节数;出口:R0,和值地位字节地址指针,R3,和值字节数。

相关主题