(完整word版)计算器的设计
(word完整版)用MATLAB GUI设计简单计算器
摘要基于MATLAB GUI的计算器设计是利用GUIDE创建图形用户界面进行计算器设计。
设计计算器时,主要是考虑到计算器的易用性、功能的常用程度进行计算器界面与功能的设计。
通过调整控件和文本的布局及颜色,使界面简单大方、布局合理,达到界面友好的效果。
计算器设计时主要利用到get和set两个函数进行各个控件属性值的传递和设置。
计算器实现的功能有:数字0~9和小数点的输入显示,平方、开平方和对数的输入显示。
进行四则运算、正弦计算、余弦计算、正切计算和余切计算,可以求阶乘、求百分数和求倒数。
可以进行括号及变量x与变量y的输入,结合坐标轴编辑框和曲线颜色编辑框实现函数的曲线绘制。
最后运行调试,实现基于MATLAB GUI的计算器的设计。
MATLAB GUI介绍MATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境。
MATLAB是matrix和laboratory两个词的组合,意为矩阵工厂,主要面对科学计算、可视化以及交互式程设计的高科技计算环境。
MATLAB是将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言的编辑模式,特别是所附带的30多种面向不同领域的工具箱支持,使得它在许多科学领域中成为计算机辅助设计和分析、算法研究和应用开发的基本工具和首选平台。
MATLAB的图形用户界面(Graphical User Interface,简称GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。
与早期计算机使用的命令行界面相比,图形界面对于用户来说在视觉上更易于接受。
MATLAB的图形用户界(GUI)是由光标,窗口,菜单、文字说明等对象构成一个用户界面。
计算器课程设计
3.3
函数功能描述
1) InitApp() 函数原型: void InitApp() InitApp()函数用于初始化程序,完成程序图形模式的进入和结构变 量、结构数组进行赋初值的操作。 2) Showme() 函数原型:void Showme() Showme()函数用于计算器界面的显示,按钮的显示通过循环来完成。 3)Load()
简易计算器
就计算机工具地历史而言,中国古代最早采用地一种计算工具叫筹 策,又叫做算筹,这种算筹多用竹子制成,也有用木头,兽骨充当材料 的,大约270枚一束,放在布袋里可随身携带。直到今天仍在使用的住 算盘,是中国古代计算工具领域中的另一项发明明代时的住算盘已经与 现代的住算盘几乎相同。 17世纪初,西方国家的计算工具有了较大的发展。英国数学家纳尔 发现了“纳皮尔算筹”;英国牧师奥却德发明了圆柱形对数计算尺,这种 计算尺不仅能做加减乘涂,乘方和开方运算,甚至可以计算三角函数, 指数函数和对数函数。这些计算工具不仅带动了计算的发展,也为现代 计算器发展尊定了良好的基础,成为现代社会应用广泛的计算工具,如 手机,操作系统上附带的多功能计算器。
2.计算机界面显示
此计算机界面由一个窗口,一个文本输入框,一个表是基因功能是 否启用的标签和28个按钮构成。这4个组成部分分别由3个结构变量和28 个元素的结构数组来实现。
Showme() 输入是否为Alt+X键? 开始 结束 InitApp() 调用bioskey(),获取用户按键值 Load() 完成按键模拟,调用CommandButton_Click()完成相应功能 调用Unload(), 退出系统 进入while()主循环 是 否 在绘制主窗口的Form()函数中,主要调用bar()函数画出一个淡灰色的 填充窗口作为主窗口,调用line()函数化初 这个填充窗口的边框,又调 用bar()函数化出一个红色的窗口标题栏。 在绘制文本的Textbox()函数中,主要调用bar()函数在主窗口中画出一
计算器设计过程
1、"加","减","乘","除"命令按钮的click事件 '加按钮 private sub command12_click() txtlabel.text="加" end sub '减按钮 private sub command13_click() txtlabel.text="减" end sub '乘按钮 private sub command14_click() txtlabel.text="乘" end sub '除按钮 private sub command18_click() txtlabel.text="除" end sub
插入代码 返回
文本框的change事件
每一个操作数: private sub txtfirst_change() ‘每当txtfirst的内容发生变化时, 将变化结果随时映射到txtResult txtResult.text=txtfirst.text end sub
每二个操作数: private sub txtsecond_change() ‘每当txtfirst的内容发生变化时, 将变化结果随时映射到txtResult txtResult.text=txtsecond.text end sub
计算器 插入代码 返回
数字输入
数字区的命令按钮的CLICK事件 (1) 数字“0”按钮 if txtlabel.text="" then txtfirst.text=txtfirst.text+"0" else txtsecond.text=txtsecond.text+"0" end if
简易计算器设计范文
简易计算器设计范文首先,我们需要决定计算器的基本功能。
一个简易计算器通常应该具备加法、减法、乘法和除法的功能。
此外,我们还可以添加开方、求平方以及取模等功能。
在设计计算器之前,我们需要确定用户界面。
对于一个简易计算器来说,我们可以使用命令行界面或者图形用户界面。
在本文中,我们将使用命令行界面。
接下来我们需要设计计算器的算法。
为了实现加、减、乘、除这些基本运算,我们可以编写四个函数来完成。
比如,加法函数可以接收两个数并返回它们的和,减法函数可以接收两个数并返回它们的差,乘法函数可以接收两个数并返回它们的乘积,除法函数可以接收两个数并返回它们的商。
同时,我们还需要添加一些辅助函数来处理开方、求平方以及取模等功能。
比如,开方函数可以接收一个数并返回它的平方根,求平方函数可以接收一个数并返回它的平方,取模函数可以接收两个数并返回它们的余数。
在设计计算器时,我们还要考虑到用户输入的错误处理。
如果用户输入无效的操作或者除数为零,我们需要给出错误的提示信息。
接下来,我们来设计主要的程序流程。
首先,我们需要显示一个欢迎信息,告诉用户如何使用计算器。
然后,在一个循环中,我们会要求用户输入要执行的操作,然后读取用户输入的操作和操作数。
根据用户的选择,我们会调用相应的函数来执行计算,并输出结果。
接着,我们会继续询问用户是否要继续进行计算。
如果用户选择退出,我们会结束循环并显示一个退出信息。
最后,我们需要编写测试用例来确保计算器的功能正常。
我们可以输入一些固定的操作和操作数,然后验证计算器返回的结果是否正确。
如果测试用例中出现错误,我们需要进行修复。
在编写代码之前,我们还需要选择一个编程语言。
对于一个简易计算器来说,Python是一个非常适合的选择。
Python具有简单易读的语法,能够轻松地实现我们的设计。
下面是本文的设计示例:```python#导入所需的库import math#加法函数def add(x, y):return x + y#减法函数def subtract(x, y):return x - y#乘法函数def multiply(x, y):return x * y#除法函数def divide(x, y):if y == 0:raise ValueError("除数不能为零") return x / y#开方函数def square_root(x):if x < 0:raise ValueError("不能对负数开方") return math.sqrt(x)#求平方函数def square(x):return x ** 2#取模函数def modulo(x, y):if y == 0:raise ValueError("除数不能为零") return x % y#欢迎信息print("欢迎使用简易计算器!")print("请按以下方式输入操作:")print("加法:'a 数1 数2'")print("减法:'s 数1 数2'")print("乘法:'m 数1 数2'")print("除法:'d 数1 数2'")print("开方:'r 数'")print("求平方:'q 数'")print("取模:'o 数1 数2'")#主程序循环while True:#用户输入operation = input("输入操作:")data = operation.splitif data[0] == "a":result = add(float(data[1]), float(data[2])) print("结果为:", result)elif data[0] == "s":result = subtract(float(data[1]), float(data[2])) print("结果为:", result)elif data[0] == "m":result = multiply(float(data[1]), float(data[2])) print("结果为:", result)elif data[0] == "d":try:result = divide(float(data[1]), float(data[2])) print("结果为:", result)except ValueError as e:print("错误:", str(e))elif data[0] == "r":try:result = square_root(float(data[1]))print("结果为:", result)except ValueError as e:print("错误:", str(e))elif data[0] == "q":result = square(float(data[1]))print("结果为:", result)elif data[0] == "o":try:result = modulo(float(data[1]), float(data[2]))print("结果为:", result)except ValueError as e:print("错误:", str(e))else:print("无效的操作")#判断是否继续计算choice = input("是否继续计算?(y/n)")if choice == "n":breakprint("谢谢使用,再见!")```通过以上设计,我们可以在命令行中使用这个简易计算器来执行加、减、乘、除、开方、求平方和取模等操作。
电子计算器课程设计(含流程图、代码等)[优秀]
目录1 设计任务和性能指标 (1)1.1 设计任务 (1)1.2 性能指标 (1)2 设计方案 (1)2.1 需求分析 (1)2.2 方案论证 (1)3 系统硬件设计 (2)3.1 总体框图设计 (2)3.2 单片机选型 (2)3.3 单片机附属电路设计 (3)3.4 LCD液晶显示 (4)4 系统软件设计 (4)4.1 设计思路 (4)4.2 总体流程图 (4)4.3 子程序设计 (5)4.4 总程序清单 (6)5 仿真与调试 (6)5.1 调试步骤 (6)5.2 仿真结果及性能分析 (8)6 总结 (8)参考文献 (8)附录1 系统硬件电路图 (10)附录2 程序清单 (11)1 设计任务和性能指标1.1 设计任务电子计算器设计1、能实现4位整数的加减法和2位整数的乘法;2、结果通过5个LED数码管显示(4位整数加法会有进位)或通过液晶显示屏显示.1.2 性能指标1.用数字键盘输入4位整数,通过LED数码显示管或液晶显示屏显示.2.完成四位数的加减法应算.当四位数想加时产生的进位时,显示进位.3.显示2位,并进行2位整数的乘法.4.设计4*4矩阵键盘输入线的连接.2 设计方案2.1 需求分析我们日常生活的开支,大额数字或是多倍小数的计算都需要计算器的帮助,处理数字的开方、正余弦都离不开计算器.虽然现在的计算器价格比较低廉,但是功能过于简单的不能满足个人需求,功能多的价格较贵,操作不便不说,很多功能根本用不到.所以,我们想到可不可以用自己所学为自己设计开发一个属于自己的简单计算器来完成日常生活的需求.2.2 方案论证使用单片机为AT米EL公司生产AT89C51,AT89C51提供以下标准功能:4K字节FLASH 闪速存储器,128字节内部RA米,32个I/O口线,两个16位定时/计数器,一个向量两级中断结构,一个全双工串行通讯口,内置一个精密比较器,片内振荡器及时钟电路,同时AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的工作模式,空闲方式停止CPU 的工作,但允许RA米,定时计数器,串行通信及中断系统继续工作.显示用LCD液晶显示屏,减少线路连接.用C言编写程序,易进行调试修改.采用4*4矩阵键盘作为输入.3 系统硬件设计3.1总体框图设计电路图如附录13.2单片机选型AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPERO米—Falsh Progra米米able and Erasable Read Only 米e米ory)的低电压,高性能、厘米OS、8位单片机.该器件采用AT米EL高密度非易失存储器制造技术制造,与工业标准的米CS-51指令集和输出管脚相兼容.AT89C51的管脚图如图2.2所示.图3-13.3 单片机附属电路设计一、晶体振荡电路1.晶体振荡器的作用石英晶体振荡器也称石英晶体谐振器,它用来稳定频率和选择频率,是一种可以取代LC谐振回路的晶体谐振元件.2.本设计所用的晶体振荡电路如图2.3所示:图3-2 晶振电路此晶振电路所选用的石英晶振频率为12米HZ.一、晶体振荡电路单片机复位的条件是:必须使RST/Vpd或RST引脚加上持续两个机器周期(即24个振荡周期)的高电平.图3-2 复位电路该电路除具有上电复位功能外,若要复位,只需按图中的BUTTON键,此时电源VCC经电阻R1、R2分压,在RESET端产生复位高电平.3.4 4*4矩阵键盘控制电路矩阵式键盘的结构与工作原理:在键盘中的按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,其内部简图如图3-3在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接.这样,只需要单片机的一个端口(如P1口)就可以构成4*4=16个按键,比直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键).由此可见,在需要的键数比较多时,采用矩阵法来做键盘比较是合理的.由于本系统按键较多,在这里采用矩阵式4*4键盘,这样可以合理应用硬件资源,用一个8位I/O口控制, 如图3-3所示:图3-3按键内部电路简图矩阵式键盘的按键识别方法一、确定矩阵式键盘上何键被按下,我们采用一种“行扫描法”.行扫描法 :行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法.3.4 LCD液晶显示1602LCD采用标准的14脚(无背光)接口,各引脚接口说明如表所示:编号符号引脚说明编号符号引脚说明1 VSS 电源地8 D1 数据2 VDD 电源正极9 D2 数据3 VEE 液晶显示偏压10 D3 数据4 RS 数据/命令选择11 D4 数据5 RW 读/写选择12 D5 数据6 E 使能信号13 D6 数据7 D0 数据14 D7 数据4 系统软件设计4.1设计思路1.要有显示子程序,当键入一个数值或符号时显示程序要把这个键入的值给显示出来.经过运算在按下等号之后显示出此次运算的结果.2.就是按键程序,当一个键盘按下的时候,按键程序要判断是哪个按键按下,如果是数字键按下就要转向显示子程序来显示出这个数字,然后等待下一个键值的输入,再次判断按下的是什么键,如果是功能键就要根据上次功能键和输入的数据来计算结果,然后保存结果和功能键,结果送显示缓冲区显示.等待下个数值的输入,如此重复.4.2总体流程图4.3 子程序设计1.读和写数据子程序void write_co米(char co米) // 写指令函数{P0=co米; //co米指令付给P0口rs=0;rw=0;lcden=0;check();lcden=1;}void write_date(char date) // 写数据函数{P0=date;rs=1;rw=0;lcden=0;check();lcden=1;}4.4 总程序清单见附录25 仿真与调试5.1 调试步骤1. 采用KEIL 开发的89c51单片机应用程序调试步骤:(1) 在uVision 集成开发环境中创建新项目(Project),扩展文件名为.UV2,并为该项目选定合适的单片机CPU器件(本设计采用AT米EL 公司下的AT89C51)(2)用uVision 的文本编辑器编写源文件,可以是汇编文件(.AS米),也可以使C语言文件(扩展名.C),并将该文件添加到项目中去.一个项目文件可以包含多个文件,除了源程序文件外,还可以是库文件、头文件或文本说明文件.(3)通过uVision 2 的相关选择项,配置编译环境、连接定位器以及Debug调试器的功能.(4)对项目中的源文件进行编译连接,生成绝对目标代码和可选的HEX文件,如果出现编译连接错误则返回到第2步,修改源文件中的错误后重构整个项目.图5-1 Keil调试2 用Proteus 对于本设计的仿真操作步骤如下:(1)进入proteus ISIS 集成环境,在工作前,在syster米菜单下设置界面的颜色、图形界面大小等项目,也可采用了系统默认值.(2)通过工具栏中的(从库中选择元件命令)命令,在pick devices窗口中选择电路所需的元件,放置元件到编辑区并调整其相对位置,进行元件参数设置,元器件间连线.(3)连线并加上设置参数,并完成仿真原理图,如图5-2所示.(4)加载程序.将编译调试完成的简易计算器机器码程序(hex文件)加载到AT89C51单片机中.(5)单击仿真工具栏中的仿真键,观察仿真结果.可以按暂停、继续、单步、等按钮,查看效果.图5-2操作说明:1) 本计算器实现4位数的加减,2位数乘除运算.2)按下数值键,显示按下的“数字”,按运算符,显示符号,按第2个操作数,显示,按“=”键,得到运算结果.3)按“清零”键清除运算结果,可重新开始.(6)调试与思考5.2 仿真结果及性能分析6 总结通过这段时间的设计,终于完成了我计算器的设计,虽然只是一个非常简单的计算器,可是我也经过了一翻很大的努力才完全达到设计要求的,从心底里说,还是挺高兴的,毕竟这次设计所要求的东西都做了出来,然而高兴之余不得不深思呀!在本次设计的过程中,我发现很多的问题,虽然以前还做过这样的设计但这次设计真的让我长进了很多,单片机的设计重点就在于软件程序的设计,需要有很巧妙的编程方法,在编程时,由于粗心大意马虎,有些语句看似没问题,可就是不出效果,经仔细揣摩修改后,程序才正常运行.学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高.从这次的课程设计中,我真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,理论指导实践,在实践中对理论知识加以理解.还要有独立思考能力和团队协作的精神,个人能力固然重要,集体的力量更是伟大的.由于时间比较仓促,我所设计的这个计算器非常简单,我们可以考虑在以后来改进一下,使它的功能更加完善,强大.参考文献[1] 刘和平,刘跃,单片机原理及应用,重庆:重庆大学出版社,2004[2] 杨西明,朱骐,单片机编程与入门,北京:机械工业出版社,2004[3] 陈明荧,89C51单片机课程设计实训教材,北京:北京清华大学出版社,2004[4] 刘瑞新,单片机原理及应用教程,北京:机械工业出版社,2003[5 楼然苗,李光飞,51系列单片机设计实例,北京:北京航空航天大学出版社,2003附录1 系统硬件电路图附录2 程序清单号include<reg51.h> //头文件号define uint unsigned int //号define uchar unsigned charsbit lcden=P2^3; //定义引脚sbit rs=P2^4;sbit rw=P2^0;sbit busy=P0^7;char i,j,te米p,nu米,nu米_1;int a,b,c; //a,第一个数b,第二个数c,得数float a_c,b_c;uchar flag,fuhao;//flag表示是否有符号键按下,fuhao表征按下的是哪个符号uchar code table[]={7,8,9,0,4,5,6,0,1,2,3,0,0,0,0,0};uchar code table1[]={7,8,9,0x2f-0x30,4,5,6,0x2a-0x30,1,2,3,0x2d-0x30,0x01-0x30,0,0x3d-0x30,0x2b-0x30};void delay(uchar z) // 延迟函数{uchar y;for(z;z>0;z--)for(y=0;y<100;y++);}void check() // 判断忙或空闲{do{P0=0xFF;rs=0; //指令rw=1; //读lcden=0; //禁止读写delay(1); //等待,液晶显示器处理数据lcden=1; //允许读写}while(busy==1); //判断是否为空闲,1为忙,0为空闲}void write_co米(char co米) // 写指令函数{P0=co米; //co米指令付给P0口rs=0;rw=0;lcden=0;check();lcden=1;}void write_date(char date) // 写数据函数{P0=date;rs=1;rw=0;lcden=0;check();lcden=1;}void init() //初始化{nu米=-1;lcden=1; //使能信号为高电平write_co米(0x38); //8位,2行write_co米(0x0c); //显示开,光标关,不闪烁*/write_co米(0x06); //增量方式不移位显竟獗暌贫柚? write_co米(0x80); //检测忙信号write_co米(0x01); //显示开,光标关,不闪烁nu米_1=0;i=0;j=0;a=0; //第一个参与运算的数b=0; //第二个参与运算的数c=0;flag=0; //flag表示是否有符号键按下,fuhao=0; // fuhao表征按下的是哪个符号}void keyscan() // 键盘扫描程序{P3=0xfe;if(P3!=0xfe){delay(20);if(P3!=0xfe){te米p=P3&0xf0;switch(te米p){case 0xe0:nu米=0;break;case 0xd0:nu米=1;break;case 0xb0:nu米=2;break;case 0x70:nu米=3;break;}}while(P3!=0xfe);if(nu米==0||nu米==1||nu米==2)//如果按下的是'7','8'或'9 {if(j!=0){write_co米(0x01);j=0;}if(flag==0)//没有按过符号键{do{a=a*10+table[nu米];}while(a>10000);}else//如果按过符号键{do{b=b*10+table[nu米];}while(b>10000);}}else //如果按下的是'/'{if(a<100){flag=1;fuhao=4;};//4表示除号已按}i=table1[nu米];write_date(0x30+i);}P3=0xfd;if(P3!=0xfd){delay(5);if(P3!=0xfd){te米p=P3&0xf0;switch(te米p){case 0xe0:nu米=4;break;case 0xd0:nu米=5;break;case 0xb0:nu米=6;break;case 0x70:nu米=7;break;}}while(P3!=0xfd);if(nu米==4||nu米==5||nu米==6&&nu米!=7)//如果按下的是'4','5'或'6' {if(j!=0){write_co米(0x01);j=0;}if(flag==0)//没有按过符号键{do{a=a*10+table[nu米];}while(a>10000);}else//如果按过符号键{do{b=b*10+table[nu米];}while(B>10000);}}else//如果按下的是'*'{if(a<100){flag=1;fuhao=3;}//3表示乘号已按}i=table1[nu米];write_date(0x30+i);}P3=0xfb;if(P3!=0xfb){delay(5);if(P3!=0xfb){te米p=P3&0xf0;switch(te米p){case 0xe0:nu米=8;break;case 0xd0:nu米=9;break;case 0xb0:nu米=10;break;case 0x70:nu米=11;break;}}while(P3!=0xfb);if(nu米==8||nu米==9||nu米==10)//如果按下的是'1','2'或'3' {if(j!=0){write_co米(0x01);j=0;}if(flag==0)//没有按过符号键{do{a=a*10+table[nu米];}while(a>10000);}else//如果按过符号键{do{b=b*10+table[nu米];}while(b>10000);}}else if(nu米==11)//如果按下的是'-'{flag=1;fuhao=2;//2表示减号已按}i=table1[nu米];write_date(0x30+i);}P3=0xf7;if(P3!=0xf7){delay(5);if(P3!=0xf7){te米p=P3&0xf0;switch(te米p){case 0xe0:nu米=12;break;case 0xd0:nu米=13;break;case 0xb0:nu米=14;break;case 0x70:nu米=15;break;}}while(P3!=0xf7);switch(nu米){case 12:{write_co米(0x01);a=0;b=0;flag=0;fuhao=0;}//按下的是"清零"break;case 13:{ //按下的是"0"if(flag==0)//没有按过符号键{a=a*10;write_date(0x30);P1=0;}else if(flag==1)//如果按过符号键{b=b*10;write_date(0x30);}}break;case 14:{j=1;if(fuhao==1){write_co米(0x80+0x4f);//按下等于键,光标前进至第二行最后一个显示处write_co米(0x04); //设置从后住前写数据,每写完一个数据,光标后退一格c=a+b;while(c!=0){write_date(0x30+c%10);c=c/10;}write_date(0x3d); //再写"="a=0;b=0;flag=0;fuhao=0;}else if(fuhao==2){write_co米(0x80+0x4f);//光标前进至第二行最后一个显示处write_co米(0x04); //设置从后住前写数据,每写完一个数据,光标后退一格(这个照理说顺序不对,可显示和上段一样)if(a-b>0)c=a-b;elsec=b-a;while(c!=0){write_date(0x30+c%10);c=c/10;}if(a-b<0)write_date(0x2d);write_date(0x3d); //再写"="a=0;b=0;flag=0;fuhao=0;}else if(fuhao==3){write_co米(0x80+0x4f);write_co米(0x04);c=a*b;while(c!=0){write_date(0x30+c%10);c=c/10;}write_date(0x3d);a=0;b=0;flag=0;fuhao=0;}else if(fuhao==4){write_co米(0x80+0x4f);write_co米(0x04);i=0;c=(long)(((float)a/b)*1000);while(c!=0){write_date(0x30+c%10);c=c/10;i++;if(i==3)write_date(0x2e);}if(a/b<=0)write_date(0x30);write_date(0x3d);a=0;b=0;flag=0;fuhao=0;}}break;case 15:{write_date(0x30+table1[nu米]);flag=1;fuhao=1;} break;}}}米ain(){init();while(1){keyscan();}}。
(完整word版)c++分数计算器(含源码)
一、实验设计方案1、实验内容与目的(简单介绍实验内容,说明实验目的)实验目的:设计一个分数计算器:1)实现输入>>,输出<<,+,-,*,/运算符的重载;2)实现分子分母的约分与规格化。
实验内容:你的具体选择(要详细)实现分数计算器的屏幕输入和输出:1)输入采用文件(input.txt)输入,可以有任意个二元分数表达式,表达式之间的分隔符自定义;2)输出到文件(output.txt)——————————————————————————————————————2、实验准备工作(阐述解决问题所涉及的算法思想,至少要画一个算法流程图来说明)以下为循环计算二元分数计算式的流程图:在实验中还需要面对六个运算符重载,通过运算符重载,我们可以简单的使用分数计算,而不需要关心它的结构,运算符重载,我们根据基本的数学定理,将加减乘除包装,并重载了输入输出运算符,这样,在输入输出时便可直接输出用户方便接收的格式。
——————————————————————————————————————二、实验步骤、测试与结果分析1、源程序的设计(在此附上源程序(cpp文件)清单)#include<iostream>#include<fstream>#include<cmath>using namespace std;//-------------------------------创建分数类------------------------------------class Fraction{private:int nume; //分子int deno; //分母int Gcf(int m,int n); //辅助函数,返回m 和n最大公因数public:Fraction(int n=1,int d=1);virtual~Fraction(){}void Reduction(); //约分int GetNume() const{return nume;} //返回分子int GetDeno() const{return deno;} //返回分母void SetNume(int n); //设置分子void SetDeno(int d); //设置分母Fraction operator+(const Fraction &a) const; //重载加法符+Fraction operator-(const Fraction &a) const; //重载加法符-Fraction operator*(const Fraction &a) const; //重载加法符*Fraction operator/(const Fraction &a) const; //重载加法符/ };ostream &operator << (ostream &out,const Fraction &a); //重载输出运算符<<istream &operator >> (istream &in,Fraction &a); //重载输入运算符>>//---------------------------------最大公因数函数------------------------------int Fraction::Gcf(int m,int n){if(n==0) return m; //如果n=0,m 为最大公因数else return Gcf(n,m%n); //否者辗转相除}//------------------------------------约分函数---------------------------------void Fraction::Reduction(){if(deno<0) //若分母小于0,将符号提前{nume=-nume;deno=-deno;}int f=Gcf(abs(nume),deno);nume=nume/f; //实现约数deno=deno/f;}//----------------------------------构造函数-----------------------------------Fraction::Fraction(int n,int d):nume(n),deno(d){if(deno==0) cout<<"分母为0"<<endl; //查出异常Reduction(); //约分}//----------------------------------设置分母函数-------------------------------void Fraction::SetNume(int n){nume=n;Reduction();}//----------------------------------设置分子函数-------------------------------void Fraction::SetDeno(int d){if(d==0) cout<<"分母为0"<<endl; //查出异常deno=d;Reduction();}//----------------------------------重载运算符+--------------------------------Fraction Fraction::operator+(const Fraction &a) const{Fraction result;result.nume=this->nume*a.deno+this->deno*a.nume; //求和的分子result.deno=this->deno*a.deno; //求和的分母result.Reduction(); //约分return result; //返回和}//----------------------------------重载运算符---------------------------------Fraction Fraction::operator-(const Fraction &a) const{Fraction result;result.nume=this->nume*a.deno-this->deno*a.nume; //求差的分子result.deno=this->deno*a.deno; //求差的分母result.Reduction(); //约分return result; //返回差}//----------------------------------重载运算符*--------------------------------Fraction Fraction::operator * (const Fraction &a) const{Fraction result;result.nume=this->nume*a.nume; //求积的分子result.deno=this->deno*a.deno; //求积的分母result.Reduction(); //约分return result; //返回积}//----------------------------------重载运算符/--------------------------------Fraction Fraction::operator / (const Fraction &a) const{if(a.nume==0) cout<<"除数为0"<<endl; //如果除数为0,输出异常Fraction result;result.nume=this->nume*a.deno; //求商的分子result.deno=this->deno*a.nume; //求商的分母result.Reduction(); //约分return result; //返回商}//----------------------------------重载运算符<<--------------------------------ostream &operator << (ostream &out,const Fraction &a){out<<a.GetNume()<<"/"<<a.GetDeno(); //按一定格式输出分数return out; //返回输出流}//----------------------------------重载运算符>>--------------------------------istream &operator >> (istream &in,Fraction &a){char ch; //接收字符int m,n; //定义分子和分母in>>m; //输入分子in>>ch; //输入/if(ch !='/') cout<<"非法字符"<<endl;in>>n; //输入分母if(n==0) cout<<"分母为0"<<endl; //如果分母为0,输出异常a.SetNume(m); //设置分子a.SetDeno(n); //设置分母a.Reduction(); //约分return in; //返回输入流}int main(void){Fraction obj1,obj2,result; //定义两个分数和结果char index,ch; //定义符号ifstream infile("input.txt",ios::in); //以输入的方式打开文件if(!infile) //若文件打开失败{cout<<"打开文件input.txt失败!"<<endl;exit(1);}ofstream outfile("output.txt",ios::app); //以输出的方式打开文件if(!outfile) //若文件打开失败{cout<<"打开文件output.txt失败"<<endl;exit(1);}outfile<<"---------------------本次计算结果如下--------------------"<<endl;for(;;) //无限次循环直到求解完成{infile>>obj1; //输入第一个分数infile>>index; //输入需要执行的操作符号infile>>obj2; //输入第二个分数infile>>ch; //选择继续或者计算结果if(index=='+') result=obj1+obj2; //加法else if(index=='-') result=obj1-obj2; //减法else if(index=='*') result=obj1*obj2; //乘法else if(index=='/') result=obj1/obj2; //除法else{system("PAUSE");return 0;}cout<<"正在计算"<<obj1<<" "<<index<<" "<<obj2<<"..."<<endl;;ofstream outfile("output.txt",ios::app);if(!outfile){cout<<"打开文件output.txt失败"<<endl;exit(1);}outfile<<obj1<<" "<<index<<" "<<obj2<<" "<<"="<<" "<<result<<endl;//输出结果到output.txtcout<<"计算完成,结果保存在output.txt中"<<endl<<endl;if(ch==';') continue; //若遇到";",继续执行else if(ch=='=') //若遇到"=",计算结果{outfile<<"-------------------------谢谢使用------------------------"<<endl<<endl;break;}outfile.close(); //文件输出流关闭}infile.close(); //文件输出流关闭system("PAUSE");return 0;} ——————————————————————————————————————2、实验现象及结论(应用文字和程序运行的截图说明程序测试现象,并解释结果)input.txt 输入截图如下:Jcsy.exe 执行截图如下:output.txt 输出截图如下:input.txt 输入截图如下:jcsy.exe 执行截图如下:Output.txt 输出截图如下:——————————————————————————————————————3、实验总结(是否成功解决问题,总结实验中最有价值的内容,程序能够在哪些方面进一步改善,自我评价成败得失)试验中,我们按照从简单到复杂的方法,一步一个脚印编写代码,使得程序不易发生错误,并且容易更正,编写出来的程序代码简洁明朗,效率较高;通过对例题的学习,我们最终将正确的代码编写出,并在不断地修改之下做到方便用户使用的要求;编码的速度有一个从慢到快的过程,在本次试验中,我们的速度依然比较慢,这看出我们平时编码比较少,缺乏熟练度,并对算法了解不深入;但是我们的代码看起来仍然有些凌乱,效率还没有带到真正的高效,每次运行都需要等待几秒钟。
简易计算器设计与实现
简易计算器设计与实现一、引言计算器是一种广泛应用的工具,可以进行基本的算数运算和一些科学计算,能够极大地方便人们的日常生活和工作。
本文将介绍一个简易的计算器的设计和实现方案。
二、设计思路1.功能选择:通过提供菜单供用户选择,以实现计算器常见功能如加法、减法、乘法、除法等。
2.输入输出处理:用户通过键盘输入待计算的数字和操作符,计算器将结果输出到屏幕上。
3.算术运算:根据用户选择的功能,进行相应的算术运算,如加法、减法、乘法、除法等。
4.错误处理:对于非法的输入,如除数为0,需要给出错误提示。
三、详细设计1.界面设计:计算器通过命令行界面展示,用户通过菜单选择功能。
界面可以提供以下功能选择菜单:1)加法2)减法3)乘法4)除法5)退出2.输入输出处理:在命令行界面上提示用户输入数字和操作符,并读取用户输入的数据。
用户输入格式为两个数字和一个操作符,操作符为"+","-","*"或"/"。
3.算术运算:a)加法运算:将两个数字相加,得到结果。
b)减法运算:将第一个数字减去第二个数字,得到结果。
c)乘法运算:将两个数字相乘,得到结果。
d)除法运算:将第一个数字除以第二个数字,得到结果。
在执行除法运算前,需要检查除数是否为0,如果为0,则给出错误提示。
4.错误处理:在用户选择除法运算时,需要检查除数是否为0。
如果为0,则输出错误提示信息,提示用户输入合法操作数。
五、实现以下为Python语言实现的简易计算器代码示例:```pythondef add(a, b):return a + bdef subtract(a, b):return a - bdef multiply(a, b):return a * bdef divide(a, b):if b == 0:raise ValueError("除数不能为0")return a / bdef calculator(:while True:print("请选择功能:")print("1) 加法")print("2) 减法")print("3) 乘法")print("4) 除法")print("5) 退出")choice = int(input()if choice == 1:a = float(input("请输入第一个数字:"))b = float(input("请输入第二个数字:")) result = add(a, b)print("计算结果:%f" % result)elif choice == 2:a = float(input("请输入第一个数字:"))b = float(input("请输入第二个数字:")) result = subtract(a, b)print("计算结果:%f" % result)elif choice == 3:a = float(input("请输入第一个数字:"))b = float(input("请输入第二个数字:")) result = multiply(a, b)print("计算结果:%f" % result)elif choice == 4:a = float(input("请输入第一个数字:"))b = float(input("请输入第二个数字:")) try:result = divide(a, b)print("计算结果:%f" % result)except ValueError as e:print("错误:%s" % str(e))elif choice == 5:breakelse:print("无效的选择,请重新选择功能。
(完整word)图文教程—VB计算器设计
VB计算器设计—图文教程界面设计——代码设计——测试运行——保存文件界面设计:一、启动VB,新建一个“标准EX E”工程,将“Form1”的“Caption属性”改为“我的计算器”,“Height属性”改为6100,“Width属性”改为7100。
二、添加一个“Frame”,“Caption属性”改为“数字区”,Height为3615,Width为2655。
添加一个“Frame”,“Caption属性”改为“功能区”,Height为1815,Width为3135。
三、添加一个“TextBox”,“名称”改为t4,“Text属性”改为空白,Height为6255,Width为615。
用同样的方法,添加一个“TextBox”,“名称”改为t1,“Text属性”改为空白,Height为975,Width为495。
添加一个“TextBox”,“名称”改为t2,“Text属性”改为空白,Height为495,Width为495。
添加一个“TextBox”,“名称”改为t3,“Text属性”改为空白,Height为975,Width为495。
摆放位置如图所示:t4t1 t2 t3四、添加一个“CommandButton”,“名称”改为cmd0,“Caption属性”改为0,Height和Width都为495。
摆放位置如图所示:按照同样的方法,在数字区添加其他的CommandButton,并根据下表更改CommandButton的名称、Caption属性,Height和Width。
类型名称Caption属性Height高度Width宽度CommandButton Cmd0 0 495 495CommandButton Cmd小数点. 495 495CommandButton 正负+/- 495 495CommandButton Cmd1 1 495 495CommandButton Cmd2 2 495 495CommandButton Cmd3 3 495 495CommandButton Cmd4 4 495 495CommandButton Cmd5 5 495 495CommandButton Cmd6 6 495 495CommandButton Cmd7 7 495 495CommandButton Cmd8 8 495 495CommandButton Cmd9 9 495 495注意:可以用复制-粘贴的方法,但是在询问“是否创建一个控件数组?”时,请选择“否”!最后,数字区的效果如下图所示:五、添加一个“CommandButton”,“名称”改为加,“Caption属性”改为+,Height和Width都为495。
基于51单片机的简易计算器设计毕业论文(设计)word格式可编辑 精品
摘要工程实践教学环节是为了学生能够更好地巩固和实践所学专业知识而设置的,在本次工程实践中,我以《智能化测量控制仪表原理与设计》、《MCS-51系列单片微型计算机及其应用》课程中所学知识为基础,设计了简易计算器。
本系统以MCS-51系列中的8051单片机为核心,能够实现多位数的四则运算。
该系统通过检测矩阵键盘扫描,判断是否按键,经数据转换把数值送入数码管动态显示。
本系统的设计说明重点介绍了如下几方面的内容:基于单片机简易计算器的基本功能,同时对矩阵键盘及数码管动态显示原理进行了简单的阐述;介绍了系统的总体设计、给出了系统的整体流程框图,并对其进行了功能模块划分及所采用的元器件进行了详细说明;对系统各功能模块的软、硬件实现进行了详细的设计说明。
关键词:MCS-51;8051单片机;计算器;加减乘除AbstractThe engineering practice teaching is to students better to consolidate and practice have set up by the professional knowledge, in this engineering practice, I to the intelligent measurement control instrument principle and design ", "the MCS-51 series single chip computer and its application" course knowledge as the foundation, the design the simple calculator. This system to MCS-51 of the 8051 series single chip microcomputer as the core, can realize the connection arithmetic. The system through the test matrix keyboard scan, judge whether key, the data transfer the numerical into digital tube dynamic display. This system mainly introduced the design that the following aspects of content: based on single chip microcomputer simple calculator basic functions, and the matrix keyboard and a digital tube dynamic display of the principle of a simple expatiated; introduced the design of the whole system, the whole process of the system are discussed, and its function module partition and the components for a detailed explanation; the functional modules of the system hardware and software of the implementation of the detailed design instructions.Key words: MCS-51;8051 single chip microcomputer;Calculator;Add, subtract, multiply and divide:目录第1章绪论 (1)1.1课题简介 (1)1.2设计目的 (1)1.3设计任务 (1)1.4章节安排说明 (1)第2章计算器系统简介 (2)2.1 单片机发展现状 (2)2.2计算机系统现状 (2)2.3简易计算器系统简介 (3)第3章计算机硬件系统简介 (4)3.1计算机硬件需求 (4)3.2MCS-51系列单片机简介 (4)3.3外围电路设计 (8)3.3.1振荡电路设计 (8)3.3.2复位电路设计 (9)3.3.3 键盘电路设计 (9)3.3.4 数码管显示电路设计 (10)3.4硬件原理图 (11)第4章计算器软件系统设计 (12)4.1系统模块图 (12)4.2系统流程图 (12)4.3 计算器主程序设计 (12)4.3.1计算器主程序设计 (12)4.3.2 存储单元分配 (13)4.4 计算器子程序设计 (14)4.4.1输入程序设计 (14)4.4.2运算程序设计 (15)4.4.3 显示程序设计 (16)第5章结论与展望 (18)5.1结论 (18)5.2不足与展望 (18)参考文献 (19)附录程序源代码 (20)第1章绪论1.1课题简介单片机由于其微小的体积和极低的成本,广泛的应用于家用电器、工业控制等领域中。
简单计算器课程设计(DOC)
简单计算器课程设计一. 课程设计的目的Java语言是此刻流行的网络编程语言,它拥有面向对象、跨平台、散布应用等特色。
面向对象的开发方法是此刻世界最流行的开发方法,它不单具有更切近自然的语义,并且有益于软件的保护和继承。
为了进一步稳固讲堂上所学到的知识,深刻掌握Java语言的重要观点及其面向对象的特征,锻炼学生娴熟的应用面向对象的思想和设计方法解决实际问题的能力,开设了Java 程序设计课程设计。
经过此次课程设计,稳固所学Java 语言基本知识,增进Java 语言编写基本功,掌握 JDK、Editplus、Eclipse、JCreator等开发工具的运用,拓宽常用类库的应用。
使学生经过该教课环节与手段,把所学课程及有关知识加以举一反三,全面掌握 Java 语言的编程思想及面向对象程序设计的方法,为此后从事实质工作打下坚固的基础。
二. 设计方案论证1.开发环境:JAVA编程工具 JDK 1.5.0 ,操作系统WindowsXP.2.功能描绘 :本计算器能够进行简单的四则运算(加、减、乘、除)但仅限于十进制下,还能够进行(八进制, 十进制, 十六进制)之间的互相变换, 八进制最多能够输入19 位数, 十进制最多能够输入18 位数,十六进制最多能够输入14 位数,backspace 表示退格,clear 表示初始化,在window 下直接运转(Jsp2003.bat )即可,界面为灰白对称。
3.纲要设计 :**********************************************************类名 : This_number_too_big作用 :自定义的异样类,用来办理计算结果溢出继承的父类 : Exception类实现的接口 :没有**********************************************************class This_number_too_big extends Exception{}// 自定义的一个结果溢出异样类**********************************************************类名 : Jsp2003作用:主类继承的父类 : Frame 类实现的接口 : ItemListener类,ActionListener类**********************************************************class Jsp2003 extends Frame implements ItemListener,ActionListener{public int number=0,length=18;//number 是用来记录输入的数字个数,//length是用来设置在不一样进制下同意输入的最多半字位数,默以为十进制char mark='n';//设置运算符号为没有即为‘ n’,它的值是‘ +’‘ - ’‘ * ’‘ / ’public double data=0;//设置运算数据为零public char ch;//用到暂时寄存所按按钮的第一个字符public boolean Refresh=false;//设置 lab 能否要在输入数据的时候刷新,初始为否4.主要方法说明://用来办理按了运算符后的计算 -public void js() throws This_number_too_big //指定由method抛出异常{if (mark=='n') //没有运算符{mark=ch; //,则设置运算符为刚才输入的字符,data=Double.parseDouble(lab.getText());//则设置运算数据为lab 的值Refresh=true;// 则设置下一次输入的时候要刷新lab}else //假如采纳的是连续运算(即没有使用‘=’号)则运转下边的语句{switch (mark) //依据运算符计算结果,并把结果保留到data{ case '+': data+=Double.parseDouble(lab.getText()); break;case '-': data-=Double.parseDouble(lab.getText()); break;case '*': data*=Double.parseDouble(lab.getText()); break;case '/': data/=Double.parseDouble(lab.getText()); break;}lab.setText(Double.toString(data)); //显示运算结果mark=ch;// 设置运算符为刚才按下的运算符Refresh=true;// 则设置下一次输入的时候要刷新 labnumber=lab.getText().length();//设置输入的字符个数// System.out.println(lab.getText());//用来调试用的if (data>Double.MAX_VALUE)//假如 data 超出 double 种类的最大值则抛出自定义的一个异样类{throw new This_number_too_big(); }}}//end js() methodpublic void enter()//办理输入字符{if(Refresh==true)//假如已经设置了运算符则在下一次输入数据的时候要把从前 lab 的内容消除去{lab.setText("0"); number=0; Refresh=false;}if(lab.getText().charAt(0)=='0'&& lab.getText().length()==1)//假如 lab 的内容为 0 则, lab 的内容将被所输入的字符取代,//不然直接在 lab 的内容后边加上所输入的字符{lab.setText(Character.toString(ch)); number++;}elseif(number<length){number++;lab.setText(lab.getText()+ch);}}//end enter() method//八进制或十六进制变换成十进制I public String goto_10(String s,long l)//参数 s:是要变换的字符串,因为输入的控制,保证了字符串的合法性;//参数 l :使用来设置是将 8 进制仍是 16 进制变换成 10 进制,它的有效值为8或 16;{ String str=s; //用来变换的字符串long j=l; //表示进制long lg=0,jing=1;//lg用来记录权乘和,jing用来记录位权char cha;//暂时记录要变换的字符for(int i=1;i<=str.length();i++){ cha=str.charAt(str.length()-i);switch(cha){ case '1': lg=lg+1*jing;break;case '2': lg=lg+2*jing;break;case '3': lg=lg+3*jing;break;case '4': lg=lg+4*jing;break;case '5': lg=lg+5*jing;break;case '6': lg=lg+6*jing;break;case '7': lg=lg+7*jing;break;case '8': lg=lg+8*jing;break;case '9': lg=lg+9*jing;break;case 'A': lg=lg+10*jing;break;case 'B': lg=lg+11*jing;break;case 'C': lg=lg+12*jing;break;case 'D': lg=lg+13*jing;break;case 'E': lg=lg+14*jing;break;case 'F': lg=lg+15*jing;break;}jing*=j; //位权升一级,为下次使用做好准备}return Long.toString(lg);}//end String goto_10() method}3.系统流程图开始初始化数据Double result=0; //储存结果Boolean newnum=true; //能否新数String lastop=” =”; /储存操作符按下数字按钮按下操作符( +-* 、 =)按钮判断把目前文本框的内容转为double 后传给calc 方法calc(double.parsedouble(txt.gettext()))newnumTrue false文本框显示新数;文本框接着显示Lastop=”操作txt.settext(“数txt.settext(txtgettext()+ ”符”newnum=true 字”)newnum=false 数字”)4.详尽设计第一剖析这个说要达成的任务,它的主要任务是达成十六进制、十进制、八进制和二进制之间的互相转变,需要包括负数,但不用考虑小数。
设计一个简单计算器
设计一个简单计算器计算器是一种能够进行数学运算的工具,可以帮助我们进行加减乘除等基本运算,并且能够处理复杂的数学表达式。
在现代科技的帮助下,我们可以轻松设计一个简单计算器,来满足日常计算的需求。
界面设计:一个简单计算器的界面主要分为数字键、运算符键、等号键和清除键等几部分。
数字键用于输入数字,运算符键用于选择运算符,等号键用于进行计算,清除键用于清除输入。
数据输入:为了方便用户输入数据,我们可以使用虚拟键盘或者物理键盘来实现数据输入功能。
用户可以通过点击数字键或者使用键盘输入数字。
同时,为了避免用户输入错误,我们可以设置一些输入的限制条件,比如只能输入数字和小数点,不能输入字母等。
运算处理:简单计算器需要支持基本的四则运算,即加、减、乘、除。
我们可以在输入的过程中判断用户选择的运算符,然后根据不同的运算符进行相应的运算。
同时,为了保证计算的准确性,我们可以使用合适的数据类型来处理计算过程中的数据,比如使用浮点数类型。
结果显示:此外,为了增加计算器的实用性,我们还可以考虑添加一些额外功能:1.历史记录:记录用户的计算历史,方便用户查看之前的计算结果。
2.科学计算:支持其他常用的数学函数,比如平方根、三角函数等。
3.单位转换:支持长度、重量、温度、速度等不同物理量单位的转换,方便用户进行单位换算。
4.百分比计算:支持百分数的计算,方便用户计算折扣、利率等。
综上所述,一个简单计算器的设计需要综合考虑界面设计、数据输入、运算处理和结果显示等几个方面,可以根据实际需求增加一些额外功能来提升计算器的实用性。
通过合理设计和优化,我们可以实现一个功能齐全、易于使用的简单计算器。
(完整word)从算筹到计算器 教学设计 教案
教学准备1。
教学目标1.知道计算工具的发展史2.认识算筹、算盘。
3.了解算盘的结构,认识算盘各部分的名称。
2. 教学重点/难点认识算筹和算盘3。
教学用具教学课件4. 标签教学过程一、新课导入介绍计算机的发展简史.师:同学们,别看我们现代使用了很快速功能丰富的计算器,其实它呀,是跟随着人类文明的发展慢慢演变而来的!师:你知道这是什么吗?师:人类的智慧真是无穷啊!今天我们就来研究这一段悠久的历史文化!二、新课探索探究一一、介绍算筹1、认识横式和纵式。
师:同学们,请你观察三千多年前,我们祖先利用算筹来进行计算,先来看看横式和纵式是如何表示1—9的呢?自学课本,说说你的理解?2、师:请你说说452怎么表示呢?【也可根据实际情况,让学生多说几个数的表示方法,由此来熟悉算筹表示数的方法。
】3、认识用算筹计算的过程。
问:试着计算452+327吧。
小结:在使用算筹计算的时候,我们是先把一个加数摆好,再在它的基础上,从最高位加起,比如这里就是先加百再加十最后加个的方法来计算的。
师:其实算筹的算理和我们平时的加法计算是一样的,只是同学们要牢牢记住算筹表示数的方法。
探究二二、介绍算盘1、认识算盘的各部分(筐、梁、档、珠)师:哪位小朋友以前学过算盘,给大家介绍一下吧.学生上台演示。
2、了解上珠和下珠的区别。
师:一颗上珠表示?一颗下珠呢?3、在算盘上表示1-9。
师:比比谁的最正确?4、探究8、80在算盘上有什么区别,体会它的重要性。
理解定位点与算珠共同确定算盘上的数。
问:用算盘计算452+327?出示媒体。
小结:在算盘上计算,先要定好个位在哪里,再要注意满五颗下珠要进位变成一颗上珠;满2颗上珠就要向前一位进一的道理。
三、及时练习小组合作师:用算筹计算153+628 347+192小组讨论,合作写出正确的表示和加法计算过程。
【可根据学生实际情况多花一些时间进行小组学习,使记忆力慢的学生在小组组员的帮助下,知道用算筹表示数以及简单的加法计算。
简易计算器的设计
简易计算器的设计一、引言计算器是一种常见的电子设备,用于进行数学运算。
然而,现在的计算器功能复杂,有时不易使用。
因此,为了满足用户的需求,我设计了一款简易计算器,以提供简单、直观和用户友好的界面。
二、设计目标1.提供基本数学运算功能,包括加、减、乘、除。
2.确保用户友好的界面设计,使用户易于操作。
3.提供结果的显示,并能够滚动以适应较长的计算结果。
4.支持清零功能,以便用户开始新的计算。
三、设计方案1.界面设计(1)计算器外观:采用手持式设计,与传统计算器外观类似,包括一个屏幕和一组按键。
(2)屏幕设计:使用液晶显示屏,具有高分辨率和抗眩光功能。
屏幕的大小根据实际需求来确定。
2.功能设计(1)基本运算功能:设计四个基本运算按键(加、减、乘、除)和一个等于键用于运算结果的计算。
(2)数字输入:提供0-9数字按键,以(3)小数点输入:提供小数点按键,以便用户输入小数。
(4)清零功能:提供一个清零键,以便用户能够轻松开始新的计算。
(5)结果显示:设计一个屏幕用于显示计算结果,并且能够滚动显示较长的结果。
3.系统设计(1)按钮交互:当用户按下数字、运算符或者清零键时,系统会根据不同按键的输入执行相应的操作。
(2)数学运算:系统在接收到运算符时,会将当前数字和运算符保存起来,当接收到等于键时,执行相应的数学运算并将结果显示在屏幕上。
(3)界面更新:系统根据用户输入时时更新屏幕上的数字和运算符。
四、流程图1.设计输入部分的流程图:(系统等待用户输入)↓(用户输入数字和运算符)↓(显示用户输入的结果)2.设计运算部分的流程图:(系统等待用户输入)↓(用户输入数字和运算符)↓(按下等于键)↓(执行数学运算)↓(显示计算结果)3.设计清零部分的流程图:(系统等待用户输入)↓(用户按下清零键)↓(清除屏幕上的显示内容)五、功能展示```_________________________________________ 2024计算器________________7,8________,________4,5________,________1,2________,________0,.________,________+,-________,________*,/________,________=,C____________,________,________,__________。
计算器设计思路范文
计算器设计思路范文设计一个计算器需要考虑以下几个方面:1.用户界面设计:首先,计算器需要提供清晰易懂的用户界面,以便用户能够方便地使用。
界面应该包括数字键盘、运算符键盘、清除键、等号键以及显示屏等功能区域。
2.输入处理:计算器应该能够接受用户的输入。
在用户按下数字键时,输入的数字应该显示在显示屏上。
如果用户按下运算符键,应该保存运算符并清空显示屏上的数字。
在用户按下等号键时,应该根据保存的运算符进行相应的运算。
3.运算功能:计算器应该支持基本的数学运算,包括加法、减法、乘法和除法。
在用户按下等号键后,计算器应该根据保存的运算符进行相应的运算,并显示计算结果在显示屏上。
4.错误处理:计算器应该能够处理输入错误的情况,例如除数为零等。
在发生错误时,计算器应该给出错误提示并清空显示屏。
5.高级功能:设计一个计算器时,可以考虑添加一些高级功能,如括号运算、开方、幂运算、百分比计算和取反等。
这些功能可以通过额外的功能键实现。
6.存储功能:计算器可以提供存储功能,允许用户将值存储在存储器中,并在需要时进行检索和使用。
这可以通过添加存储键和检索键来实现。
7.单元转换功能:一些计算器还提供单元转换功能,可以将输入的数值从一个单位转换为另一个单位。
例如,将温度从摄氏度转换为华氏度或将长度从英寸转换为厘米等。
这可以通过添加单位转换键和一个简单的转换算法来实现。
总结起来,设计一个计算器需要考虑用户界面设计、输入处理、运算功能、错误处理、高级功能、存储功能和单元转换功能等方面。
在设计过程中,应该根据实际需求和用户习惯来确定功能和界面的设计,并且要注意处理输入错误和提供友好的错误提示。
迷你计算器设计(Word)
*******************实践教学*******************兰州理工大学计算机与通信学院2009年秋季学期面向对象编程训练课程设计题目:迷你计算器设计专业班级:07级计算机1班姓名:王杰忠学号:06240104指导教师:张红成绩:______________目录第一章绪论 (1)1.1 开发环境 (1)1.2 基本功能介绍 (2)第二章系统设计 (2)2.1 系统流程图 (2)2.2 系统功能框图 (3)2.3 需求分析 (4)第三章软件设计 (4)3.1 界面设计 (5)3.2 代码设计 (5)第四章测试分析 (10)3.1 程序运行情况: (10)3.2 程序异常处理: (10)3.3 测试用例 (10)3.3.1 加法测试 (10)3.3.2 减法测试 (11)3.3.3 乘法测试 (12)3.3.4 除法测试 (13)第五章结束语 (14)第六章参考文献 (14)第一章绪论1.1 开发环境本系统是利用Java语言在NetBeans IDE6.5环境下开发的,Java语言是当今流行的网络编程语言,它具有面向对象、跨平台、分布应用等特点。
面向对象的开发方法是当今世界最流行的开发方法,它不仅具有更贴近自然的语义,而且有利于软件的维护和继承。
为了进一步巩固课堂上所学到的知识,深刻把握Java语言的重要概念及其面向对象的特性,锻炼学生熟练的应用面向对象的思想和设计方法解决实际问题的能力,开设了Java程序设计课程设计。
通过此次课程设计,巩固所学Java语言基本知识,增进Java语言编辑基本功,掌握JDK、Editplus、Eclipse、JCreator等开发工具的运用,拓宽常用类库的应用。
使学生通过该教学环节与手段,把所学课程及相关知识加以融会贯通,全面掌握Java语言的编程思想及面向对象程序设计的方法,为今后从事实际工作打下坚实的基础。
1.2 基本功能介绍本系统实现了一个简单而实用的计算器,通过这个计算器我们可以进行一些基本的运算操作,它可以进行简单的四则运算(加、减、乘、除)但仅限于十进制下,还可以进行(八进制,十进制,十六进制)之间的相互转换,八进制最多可以输入19位数,十进制最多可以输入18位数,十六进制最多可以输入14位数,backspace表示退格,clear表示初始化,在window下直接运行(Jsp2003.bat)即可,界面为灰白对称。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录1。
设计要求 (2)2.设计方案与论证 (2)2.1总体设计思路 (2)2。
2总体方案 (2)3.设计原理及电路图 (4)3.1硬件设计 (4)3。
2软件设计 (11)3。
3 算术运算程序设计 (12)3。
4 显示程序设计 (13)4。
器件清单 (14)5.器件识别与检测 (15)6。
控制系统实现(软件编程与调试) (16)6。
1 硬件调试 (17)6.2 软件调试 (17)6。
3软件编程 (18)7。
设计心得 (28)8。
参考文献 (29)1。
设计要求要求计算器能实现加减乘除四种运算,具体如下:1.加法:四位整数加法,计算结果若超过四位则显示计算错误2.减法:四位整数减法,计算结果若小于零则显示计算错误3.乘法:多位整数乘法,计算结果若超过四位则显示计算错误4.除法:整数除法5.有清除功能设计要求:分别对键盘输入检测模块;LCD显示模块;算术运算模块;错误处理及提示模块进行设计,keil与protues仿真分析其设计结果。
2。
设计方案与论证2。
1总体设计思路:本计算器是以MCS-51系列8051单片机为核心构成的简易计算器系统。
该系统通过单片机控制,实现对4*4键盘扫描进行实时的按键检测,并把检测数据存储下来。
整个计算器系统的工作过程为:首先存储单元初始化,显示初始值和键盘扫描,判断按键位置,查表得出按键值,单片机则对数据进行储存与相应处理转换,之后送入数码管动态显示。
整个系统可分为三个主要功能模块:功能模块一,实时键盘扫描;功能模块二,数据转换为了数码管显示;功能模块三,数码管动态显示。
2.2总体方案:根据功能和指示要求,本系统选用以MCS—51单片机为主控机.通过扩展必要的外围接口电路,实现对计算器的设计。
具体设计如下:1、由于要设计的是简单的计算器,可以进行四则运算,为了得到教好的显示效果,采用LCD 显示数据和结果。
2、另外键盘包括数字键(0—9)、符号键(+、—、*、/)、清除键和等号键,故只需要16个按键即可,设计中采用集成的计算机键盘.3、执行程序:开机显示零,等待键入数值,当键入数字,通过LCD显示出来,当键入+、—、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值后将显示键入的数值,按等号就会在LCD上输出运算结果.4、错误提示:当单片机执行程序中有错误时,会在LCD上显示相应的提示,如:当输入的数值或计算器得到的结果大于计算器的显示范围时,计算器会在LCD上提示溢出;当除数为0时,计算器会在LCD上提示错误.①由于要设计的是简单的计算器,可以进行四则运算,对数字的大小范围要求不高故我们采用可以进行四位数字的运算,选用8 个LED 数码管显示数据和结果。
②另外键盘包括数字键(0~9)、符号键(+、—、×、÷)、清除键和等号键,故只需要16 个按键即可.系统模块图:图2—1 系统模块图根据需要我们可以采用自上而下的程序设计方法,此方法先从主程序开始设计,然后再编制各从属程序和子程序,层层细化逐步求精,最终完成一个复杂程序的设计.这种方法比较符合人们的日常思维,缺点是一级的程序错误会对整个程序产生影响.程序流程图如图2-2所示:图2—2 程序流程图3.设计原理及电路图3。
1硬件设计本设计选用AT89C51单片机为主控单元;显示部分:采用LCD静态显示;按键部分:采用4*4键盘;用MM74C922为4*4键盘扫描IC,读取输入的键值.总体设计效果如下图:(1)运算模块MCS-51 单片机是在一块芯片中集成了CPU、RAM、ROM、定时器/计数器和多功能I/O等一台计算机所需要的基本功能部件.如果按功能划分,它由如下功能部件组成,即微处理器(CPU)、数据存储器(RAM)、程序存储器(ROM/EPROM)、并行I/O 口、串行口、定时器/计数器、中断系统及特殊功能寄存器(SFR)。
单片机是靠程序运行的,并且可以修改。
通过不同的程序实现不同的功能,尤其是特殊的独特的一些功能,通过使用单片机编写的程序可以实现高智能,高效率,以及高可靠性!因此我们采用单片机作为计算器的主要功能部件,可以进行很快地实现运算功能,如图2—1所示:MCS-51系列单片机简介8051是MCS-51系列单片机的典型产品,以这一代表性的机型进行系统的讲解。
8051单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,现在我们分别加以说明:中央处理器:中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。
数据存储器(RAM)8051内部有128个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的RAM只有128个,可存放读写的数据,运算的中间结果或用户定义的字型表.程序存储器(ROM):8051共有4096个8位掩膜ROM,用于存放用户程序,原始数据或表格。
定时/计数器(ROM):8051有两个16位的可编程定时/计数器,以实现定时或计数产生中断用于控制程序转向。
并行输入输出(I/O)口:8051共有4组8位I/O口(P0、P1、P2或P3),用于对外部数据的传输.全双工串行口:8051内置一个全双工串行通信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用。
中断系统:8051具备较完善的中断功能,有两个外中断、两个定时/计数器中断和一个串行中断,可满足不同的控制要求,并具有2级的优先级别选择.时钟电路:8051内置最高频率达12MHz的时钟电路,用于产生整个单片机运行的脉冲时序,但8051单片机需外置振荡电容。
单片机的结构有两种类型,一种是程序存储器和数据存储器分开的形式,即哈佛(Harvard)结构,另一种是采用通用计算机广泛使用的程序存储器与数据存储器合二为一的结构,即普林斯顿(Princeton)结构。
INTEL的MCS-51系列单片机采用的是哈佛结构的形式,而后续产品16位的MCS-96系列单片机则采用普林斯顿结构。
MCS-51的引脚说明:MCS—51系列单片机中的8031、8051及8751均采用40Pin封装的双列直接DIP结构,右图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。
现在我们对这些引脚的功能加以说明:VCC: 供电电压.GND:接地。
P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P0口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收.P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位.在给出地址“1"时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口:P3.0 RXD(串行输入口)P3。
1 TXD(串行输出口)P3。
2 /INT0(外部中断0)P3.3 /INT1(外部中断1)P3.4 T0(记时器0外部输入) P3。
5 T1(记时器1外部输入)P3。
6 /WR(外部数据存储器写选通)P3.7 /RD(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6.因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0.此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H—FFFFH),不管是否有内部程序存储器.注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP).XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:来自反向振荡器的输出。
在编程时,EA/V pp脚还需加上21V的编程电压。
(2)输入模块计算器输入数字和其他功能按键要用到很多按键,如果采用独立按键的方式,在这种情况下,编程会很简单,但是会占用大量的I/O 口资源,因此在很多情况下都不采用这种方式。
为此,我们引入了矩阵键盘的应用,采用四条I/O 线作为行线,四条I/O 线作为列线组成键盘。
在行线和列线的每个交叉点上设置一个按键。
这样键盘上按键的个数就为4×4个。
这种行列式键盘结构能有效地提高单片机系统中I/O 口的利用率,如图3-8所示:每个按键都有它的行值和列值,行值和列值的组合就是识别这个按键的编码。