计算器设计报告
- 格式:doc
- 大小:346.00 KB
- 文档页数:13
计算器程序设计报告计算器程序设计报告1. 引言2. 设计目标本计算器程序的设计目标如下:提供简单的四则运算功能,包括加法、减法、乘法和除法;提供括号功能,可以进行复杂的运算操作;提供求幂功能,支持指数运算;接受用户输入,并返回计算结果。
3. 系统设计3.1 输入与输出本计算器程序采用命令行界面。
用户可以通过键盘输入数学表达式,程序将对表达式进行解析计算,并将结果输出到屏幕上。
3.2 表达式解析与计算本计算器程序的关键功能是解析并计算用户输入的数学表达式。
为了实现这一功能,我们需要进行以下步骤:1. 从用户输入中提取出数字、运算符和括号,并将它们按照正确的顺序组合成一个合法的数学表达式。
2. 对表达式中的括号进行处理,按照括号的优先级逐步计算子表达式的值,最终得到整个表达式的结果。
3. 对表达式中的运算符进行处理,按照运算符的优先级进行相应的运算。
3.3 错误处理为了提高用户体验和程序的健壮性,我们需要对用户输入进行合法性检查,并及时给出错误提示。
例如,输入的表达式中如果缺少括号或运算符,或者存在不支持的字符,程序应该能够及时发现并提示用户进行修正。
4. 系统实现本计算器程序的实现可以采用编程语言。
提供了丰富的字符串处理和数值计算的库,十分适合用来实现一个简单的计算器程序。
具体的实现过程如下:1. ,我们需要定义一个函数,用于接受用户输入的数学表达式,并返回计算结果。
这个函数可以使用的input函数实现。
2. 接下来,我们需要编写一个函数,用于对用户输入的表达式进行解析,并把它们按正确的顺序组合成一个合法的数学表达式。
这个函数可以使用的字符串处理函数实现。
3. 对于带有括号的表达式,我们可以使用递归的方式进行解析和计算。
递归函数可以反复调用自身,处理子表达式,并将最终的计算结果返回。
4. ,我们需要编写一个函数,用于对表达式中的运算符进行处理,并按照优先级进行相应的运算。
5. 测试与验证为了验证计算器程序的正确性和可靠性,我们需要进行一系列的测试。
计算器详细设计说明书1引言1.1编写目的编写这份详细设计说明书,旨在完整地描述计算器的功能实现细节,预期读者为程序代码编写人员。
1.2背景说明:a.待开发软件系统的名称:计算器1.3定义运算数:表示一个二元运算中的一个操作数运算符:表示一个二元运算中的一个操作数的运算类型符号ON/OFF:开关键,Open/OFF的缩写,即启动计算器MC:清空键,Member Clear的缩写,即清空输入2程序系统的结构图1.classDiagram1类图及接口说明:方法shawData:把按钮上的数字显示在显示框里,即计算器屏幕上方法powOn:控制计算器是否启动方法operation:在显示框里显示运算符方法cumulate:实现x的n次方方法clearAll:清空输入的数据方法calculat:实现计算器的四则元算(加减乘除)3程序1(标识符)设计说明3.1程序描述本程序主要实现简单的二元加减乘除运算,还有求幂、倒数、根号、取反运算。
设计本程序主要是给用户用来计算日常的简单计算,给用户减轻运算的负担。
3.2功能结构化语言表示如下:public double calculate (double num1, double num2, string operat){try{if (operat == "+"){resultNum = num1 + num2;return resultNum;}else if (operat == "-"){resultNum = num1 - num2;return resultNum;}else if (operat == "*"){resultNum = num1 * num2;return resultNum;}else if (operat == "/"){resultNum = num1 / num2;return resultNum;} return 0;}catch (DivideByZeroException e){textBox1.Text = "除数不能为零";}catch(Exception e){textBox1.Text="数据超出范围";}return double.MinValue;}private void cumulate(double num, double len){for (double i = 0; i < len; i++){resultNum *= num;}textBox1.Text = Convert.ToString(resultNum);resultNum = 1;}private void equal_Click(object sender, EventArgs e){if (select == false){if (opr1 != ")"){midle1 = textBox1.Text;double transform;if (opr1 == "^"){cumulate(Convert.ToDouble(midle), Convert.ToDouble(midle1));}else{transform = calculate(Convert.ToDouble(midle), Convert.ToDouble(midle1), opr1);textBox1.Text = Convert.ToString(transform);}textBox2.Text = textBox1.Text;textBox1.Text = "";}}}3.3性能精度:双精度浮点型灵活性:容错能力一般,不能保存记录。
设计报告课题名称:计算器设计学院:专业班级:学号:学生:指导教师:教务处年月日学生指导教师课题名称JAVA计算器课程设计设计时间设计地点设计目的图形界面设计,熟悉java.awt包中的组件,掌握图形界面设计方法,理解委托事件处理模型。
从而检测对这门课的掌握情况,有助于及时查漏补缺。
1.1功能模块设计以下为标准计算器的基本功能:(1)加法两个数据进行加操作,可以为小数。
(2)减法两个数据进行减操作,可以为负数相减。
(3)乘法两个数相乘操作。
(4)除法两个数相除操作。
(5)开平方对任意一个数进行开方运算,可以是小数。
(6)百分号对任意一个数进行百分号运算。
(7)倒数对任意一个数进行倒数运算。
1.2标准计算器界面(图1-1)图1-1 1.3系统功能图(图1-2)2标准计算器演示(1)启动计算器(图2-1)图2-1(2)加法、乘法运算分别输入9和3然后分别计算其加法、乘法运算(图2-2,图2-3)图2-2(加法运算)图2-3(乘法运算)(3)开平方运算sqrt(图2-4)图2-4(4)百分号运算%(图2-5)图2-5(5)倒数运算1/x(图2-6)图2-63程序设计过程中的问题该设计目前还不太完整全面,在测试时有以下问题:1.在进行aqrt 、%、 1/x这三个运算后再输入数据就在文本框中继续输入,不能重新输入。
需要按下清零键才可继续输入下一数据再进行运算。
2.菜单栏中虽然设计了“查看—标准型、科学型、数字分组”以及“帮助—帮助主题、关于计算器”可是其功能并没有时间。
3.该计算器设计了有关内存的操作,可是并没有达到预期中的效果。
题目一计算器1.1 题目简介用Java语言、MyEclipse工具、设计一个GUI简易计算器,编写计算器的基本运算的程序,用户可以通过鼠标一次输入参加计算的数值,进行加减乘除等混合运算,基本实现计算器的四则运算和三角函数运算功能以及开方和求对数的基本运算。
本计算器只适用十进制的运算,不限制十进制的大小。
编写本计算器运用java的类得调用和直接在程序中定义类,实现计算器的基本功能,在这个计算器中对于执行的操作可以进行复制和保存以便以后能直接查看运行结果本计算器保存没不得运行结果,只有点清除键是才可以清除每步的结果。
1.2 设计的内容、要求和目标设计内容:设计一个GUI简易计算器,用户可以通过鼠标一次输入参加计算的数值,进行加减乘除等混合运算。
设计要求:由于现代用户更倾向于由鼠标方便操作的图形用户界面,所以我们采用GUI来实现计算器,并采用Swing组件,AWT事件来处理等实现具体功能。
(1)、应具有相应的界面,可参考下图进行设计:(2)、操作符号定为:“+”“-”,“*”,“/”等。
(3)、用户通过点击面板中的各种组件输入的表达式,应在上方文本框。
(4)、党用户点击“=”时,文本框中之前的内容应清空,直接显示表达式运算结果。
例如:输入表达式“7*8”之后按“=”,显示结果“56”。
(5)、具有菜单栏,内有相应的编辑“复制”、“粘贴”等菜单,提供相应的功能。
设计目标:利用Java语言设计一个简单的计算器,以实现基本的加减乘除功能,还有sin、|cos、tan、log等算术运算;同时实现退格、清零等运算。
1.3总体设计1)、对计算器面板的整体布局首先是对计算器的整体面板进行一个简单的设计,整体布局是采用layout (边框布局)布局,对计算器中的一些数字按钮和运算符按钮采用gridlayout 布局(网格布局)。
2)、创建实现程序所需的类整理思路,确定一个主类CalculatorWindow,然后对Dialog、HandleBack、HandleClear、HandleCos、HandleCot、HandleSin、HandleTan、HandleDigit、HandleDot、HandleDownNumber、HandleEquality、HandleLog、HandleOperation、HandlePOrN、HandlePositiveOrNegative、NumberButton、OperationButton、SelectJTree等类的创建。
课程设计报告——计算器编程计算器系统编程设计一、设计背景:课堂所学与实际需求相结合,计算器的使用频率高 二、主要功能:能进行基本运算和稍复杂的操作 二、系统结构:三、设计说明 (一)控件的应用1、菜单编辑器的应用创建三个主菜单 ,分别命名为“编辑”、“查看”、“帮助” A 、“编辑”包含两个子菜单:复制、粘贴可 显示数字的 文本框 可操作的控件 可 显示数字的 文本框 可供选择的单选按钮 可操作的控件计算器主界面编辑 查看 帮助复制 粘贴标准型 科学型 辅导老师关于计算器B、“查看”标准型里包含三个子菜单:标准型、科学型、数字分组,科学型里还包括进制转换及角度转换的子菜单C、“帮助”包含两个子菜单:辅导老师、关于计算器2、文本框的应用普通型和科学型中各有一个,显示单击命令按钮的内容及运算结果3、命令按钮的应用通过创建数字按钮、算术运算按钮、函数运算等按钮,实现计算器的运算操作及窗体的转换4、单选按钮的应用在科学计算器中设置不同进制的转换、角度的转换5、标签的应用通过是否显示字母M表达数据是否被暂存(二)系统设计及实现1、主界面设计显示标准型的界面,通过菜单“查看”中的子菜单“科学型”及菜单“帮助”中的两个子菜单及期中的“返回”按钮实现窗体的转换2、工程的创建步骤如下:(1)新建一个“标准EXE”工程。
(2)添加4个子窗体(3)对所有的窗体进行简单的属性设置,如下表默认名称(Name)标题(Caption)Form1 计算器(1)Form1 计算器(2)Form1 辅导老师Form1 关于计算器3、菜单的创建(1) 标准型通过“菜单编辑器”创建,如下表标题(Caption)名称(Name)快捷键(ShortCut)编辑Edit……复制Copy Ctrl+C……粘贴Paste Ctrl+V查看View……标准型Biao……科学型Ke……数字分组Identify帮助Help……辅导老师Teacher……关于计算器About(2)科学型在查看菜单中增添了部分子菜单,如下表标题(Caption)名称(Name)快捷键(ShortCut)十六进制Liu F5十进制Shi F6八进制Ba F7二进制Er F8角度Jiao F2弧度Hu F3梯度Ti F44、窗体的设计(1)标准型标准型计算器的功能由“计算器(1)”窗体完成,用到的控件主要有:菜单、命令按钮、标签、文本框。
两位计算器设计报告一、实验任务:1.利用单片机控制来制作一个按键计算器2.开机时,显示“0000”3.单片机能对按键进行识别并处理相对应的键4.要能够计算两位数的加、减、乘、除。
5.单片机对计得的数值要能进行数码显示。
二、思路:由于此计算器最重要的是软件部分,所以我们一开始先把程序编出来,然后用仿真软件进行仿真,在软件上仿真成功后,再在硬件上调试,这样避免在硬件上试程序时,损坏硬件。
数码管选用共阴,因为不需要再接驱动。
三、硬件及仿真1、系统板上硬件连线:1).把“单片机系统“区域中的P1.0-P1.7端口用8芯排线连接到“4X4行列式键盘”区域中的C1-C4R1-R4端口上;2). 把74LS164作为8位LED的段码输出口,用P3.3-3.6作为4位数码显示的位选;2、硬件制作过程:我们一开始使用protel99绘制了PCB图,由于电路元件不多,连线也不是很复杂,于是采用了手工布线,手工布线比较工整,做出的PCB板也比较美观。
其PCB板如图:3、仿真:在这次制作过程中,我们用软件对程序进行了改革,先在仿真软件上仿真、调试,成功后再把程序写入单片机中,进行显示。
仿真软件原理图如下:三、原理介绍及电路原理图:利用AT89S51单片机来制作一个按键计数器,在AT89S51单片机的P1。
0-1。
7处接上16个按键,作为0-9及等于号、清零、加、减、乘、除等的输入键。
用单片机的P3.3-P2.6接一个共阴数码管,作为两位计算数的结果的显示。
用单片机的P3.0、P3.1接一个74LS164来扩展并行IO口,作为数码管串行输入并行输出的移位寄存器,以节约单片机资源。
将数从键盘读入后送到数码管后从低位至高位从右到左显示出来.电路原理图如下:四、相关程序设计内容1).行列式键盘输入及按键功能设定;2).动态数码显示;3).数码显示方式处理;4).加、减、乘、除的计算及结果的显示;五、程序的流程图如下:六、程序ORG 0000HLJMP MAINORG 0100HMAIN: MOV R1,#40HMAIN1: SETB P3.3 ;送数并显示SETB P3.4SETB P3.5CLR P3.6MOV R0,#50HLCALL XSSETB P3.3SETB P3.4CLR P3.5SETB P3.6INC R0LCALL XSSETB P3.3CLR P3.4SETB P3.5SETB P3.6INC R0LCALL XSCLR P3.3SETB P3.4SETB P3.5SETB P3.6INC R0LCALL XSDELAY1: MOV P1,#11101111B ;扫描MOV A,P1ANL A,#0FHORL A,#11100000BCPL ACJNE A,#00010000B,JJDELAY2: MOV P1,#11011111B MOV A,P1ANL A,#0FHORL A,#11010000BCPL ACJNE A,#00100000B,JJDELAY3: MOV P1,#10111111BMOV A,P1ANL A,#0FHORL A,#10110000BCPL ACJNE A,#01000000B,JJDELAY4: MOV P1,#01111111BMOV A,P1ANL A,#0FHORL A,#01110000BCPL ACJNE A,#10000000B,JJLJMP MAIN1JJ: LCALL YS2;按键去抖CJNE A,#10000001B,TT1;除LJMP TT6TT1: CJNE A,#01000001B,TT2;乘LJMP TT6TT2: CJNE A,#00100001B,TT3;减LJMP TT6TT3: CJNE A,#00010001B,TT4;加LJMP TT6TT4: CJNE A,#00011000B,TT5;清零LJMP CLLTT5: CJNE A,#00010010B,KEY1;等于LJMP CLLLTT6: MOV R4,AMOV R2,#99;判断按键赋值时的入口地址的标志MOV R1,#42HTT7: LJMP MAIN1KEY1: MOV B,A;扫描0-9的数字值MOV DPTR,#TABLEMOV R3,#0FFHKEY2: INC R3MOV A,R3MOVC A,@A+DPTRCJNE A,B,KEY3 ;判键码,求顺序码MOV A,R3;存并显示键值MOV @R1,ACJNE R2,#99,CCMOV 50H,42H;被运算数存值MOV 51H,#0INC R1CJNE R1,#44H,DD;执行两位的运算MOV 51H,42HMOV 50H,43HMOV R1,#42H;两位输入结束自己重新输入DD: MOV 62H,50HMOV 63H,51HLCALL YS1LJMP MAIN1CC: MOV 50H,40H;运算数存值MOV 51H,#0INC R1CJNE R1,#42H,BBMOV 51H,40HMOV 50H,41HMOV R1,#40H;两位输入结束自己重新输入BB: MOV 60H,50HMOV 61H,51HLCALL YS1LJMP MAIN1KEY3: CJNE A,#82H,KEY2;判是否查完LJMP MAIN1CLL:CJNE R2,#99,EE;判断是结果清零还是输入清零MOV R1,#42HLJMP FFEE: MOV R1,#40HFF: MOV 52H,#0MOV 53H,#0MOV 50H,#0MOV 51H,#0LJMP MAIN1;*******等于后的程序运算处理*********** CLLL: MOV R2,#0MOV A,R4CJNE A,#10000001B,TT11;除MOV B,#10;将两位数的除数十进制数送到78H MOV B,#10MOV A,61HMUL AB ;将两位数的除数十进制化ADD A,60HMOV 78H,A;将除数暂存在78MOV B,#10;MOV A,63HMUL AB;将两位数的被除数十进制化ADD A,62HMOV 79H,A;将被除数暂存在78MOV A,78H MOV B,79HDIV AB ;进行除法运算MOV B,#10DIV AB ;将结果分成两位MOV 50H,B;将结果分成的结果送去显示MOV 51H,A;高位LCALL LIANYSTT11: CJNE A,#01000001B,TT22;乘MOV A,60HMOV B,62HMUL ABMOV B,#10DIV AB;分离出个位和十位MOV 70H,B;个位数据暂存地址MOV 71H,A;十位数据暂存地址MOV A,61HMOV B,62HMUL AB;十位和个位相乘MOV B,#10DIV AB;分离出十位和百位MOV 72H,B;十位数据暂存地址MOV 73H,A;百位数据暂存地址MOV A,60HMOV B,63HMUL AB;个位和被乘数的十位相乘MOV B,#10DIV AB ;分离相乘结果MOV 74H,B;十位数据暂存地址MOV 75H,A;百位数据暂存地址MOV A,61HMOV B,63HMUL AB ;十位和被乘数的十位相乘MOV B,#10DIV AB ;分离相乘结果MOV 76H,B;百位数据暂存地址MOV 50H,70H ;将个位送出MOV A,71H ; 将暂存的十位进行累加ADD A,72HADD A,74HMOV B,#10DIV AB;分离相加结果MOV 51H,B ; 得到十位ADD A,73H;将暂存的百位进行累加ADD A,75HADD A,76HMOV B,#10DIV AB ;分离百位相加结果MOV 52H,B ;将百位送出ADD A,77H;累加千位MOV 53H,A ;将千位送出LCALL LIANYSTT22: CJNE A,#00100001B,TT33;减XM: MOV A,60HADD A,#10;借位SUBB A,62H;个位相减MOV B,#10DIV AB;分离出个位和十位MOV 50H,B;存个位ADD A,61H;存十位并与减数的十位相加作下一个的减数ADD A,#10DEC ASUBB A,63H;十位相减MOV B,#10DIV AB;分离出十位MOV 51H,BCJNE A,#0, LIANYS;如果为负从新运算MOV B,60HMOV 60H,62HMOV 62H,BMOV B,61HMOV 61H,63HMOV 63H,BMOV 53H,#10;53H显示为负LJMP XMTT33: CJNE A,#00010001B,TT44;加MOV A,60HADD A,62H;个位相加MOV B,#10DIV AB;分离出个位和十位MOV 50H,B;存个位MOV 51H,A;存十位MOV A,61HADD A,63HADD A,51H;十位相加MOV B,#10DIV AB;分离出十位和百位MOV 51H,BMOV 52H,AMOV 53H,#0LCALL LIANYS;实现连加运算TT44: LJMP MAIN1XS: MOV A,@R0MOV DPTR,#TABMOVC A,@A+DPTRMOV SBUF,AJNB TI,$CLR TILCALL YSRETLIANYS: LCALL YS1MOV 60H,50HMOV 61H,51HLJMP MAIN1RETYS1: MOV R5,#20D2: LCALL YSDJNZ R5,D2RETYS2: MOV R5,#26D3: MOV R7,#66LCALL YSDJNZ R7,$DJNZ R5,D3RETYS: MOV R6,#36D1: MOV R7,#66DJNZ R7, $DJNZ R6,D1RETTAB:DB0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,0FE H,0F6H,02H;0-9及负号对应的段码表TABLE:DB 14H,28H,24H,22H,48H,44H,42H,88H,84H,82H;按键对应的码值END七、问题分析:1. 软件部分:首先是.其次是也致使进程变慢.再次是计算的结果,一位数的计算还好,没有出现大问题,都是一些需要注意的细节.到两位数时,加、减、乘、除都出现了问题,当减法出现负号时,显示总是不行,后来请教同学,仔细看书,终于可以了,可以说是松了1)开始编译时把程序的入口地址设为了1000H,造成了程序过大,后改为0100H,效果好了许多。
51单片机简易计算器设计报告(一)背景介绍在数字化时代,计算器作为一种简单易用的工具,越来越得到人们的关注和热爱。
而基于51单片机的简易计算器,不仅可以成为一种学习电子技术的手段,还具有满足简单计算需求的实用性。
设计思路本计算器采用键盘输入和数码管输出的电路设计,为用户提供加、减、乘、除、小数点、退位以及等于等功能。
1.键盘输入采用矩阵键盘的方式,将所有按键按行列排列,并利用51单片机中断方式来读取键值。
2.计算处理通过编写相应的程序代码,计算出用户输入的两个数值及操作符的结果,并将结果存储在数据缓存器中,最后将其输出至数码管。
3.数码管显示根据计算结果的数据类型,将其经过相应的转换处理后,通过数码管将结果输出至用户。
设计技术1.软件编写软件编写方面,采用汇编语言进行编写,代码总长度为2.2KB 左右。
其中,以中断方式读取键值、实现数值存储与判断、计算处理、数码管的结果输出等作为关键点进行编写。
2.硬件搭建硬件搭建方面,需要按照电路图进行搭建,并将51单片机与相关周边电路进行连接。
根据设计思路,将键盘、数码管、电源、指示灯等设备按照需求进行连接。
可改进之处虽然 51单片机的简易计算器的搭建能够满足基本计算需求,但其在以下几方面还有可改进之处:•添加计算科学函数,如三角函数、对数函数等。
•改进操作方式,使其更加符合人体工程学原理。
•添加储存器,使用户能够将计算结果进行存储和调用。
总结通过本次对基于51单片机的简易计算器的设计与实现,我们深入了解了电子技术的基本概念和硬件搭建原理,并了解到了简单嵌入式系统的工作原理。
虽然该计算器在功能和效率方面还有待改进,但对于初学者来说,其对于电子技术的学习和实验还是很有价值和意义的。
•编写的汇编代码过于繁琐,可考虑使用高级语言编写以提高效率和易读性。
•在电路搭建时需注意布线的合理性,尽量避免出现干扰和信号损失的问题。
综上所述,基于51单片机的简易计算器的设计和实现虽存在一些不足,但还是很有价值的。
高级语言程序设计课程设计报告题目:计算器学号:20131211420姓名:路延红指导教师:李菊霞计算机科学与应用系一、选题分析计算器:1.内容: 编写一个高精度计算器程序,可以计算任意精度的数字。
2.制作菜单;3.为各操作设计函数;二、算法设计1. 设计菜单界面2.添加成功后返回主菜单;3.选择相应数字进入系统;4.退出系统。
三、数据结构void fun1()//算术运算void menu()void fun2()//进制转换void main()四.程序源码#include<stdio.h>#include<math.h>void menu(){printf(" |============================|\n"); printf(" | 1.算术运算; 2.进制转换; |\n"); printf(" |============================|\n\n"); }void fun1()//算术运算{int a,b;char oper; printf("请输入算式:");scanf("%d%c%d",&a,&oper,&b);switch(oper){case '+':printf("结果为:%d\n",a+b);break;case '-':printf("结果为:%d\n",a-b);break;case '*':printf("结果为:%d\n",a*b);break;case '/':printf("结果为:%.2f\n",(float)a/b);break;case '%':printf("结果为:%d\n",a%b);break;default:printf("输入有误!\n");break;}}void fun2()//进制转换{int choice,value,i,j=0,k,t;char s[50];int a[4];printf("********************************************************\n");printf(" 1.十进制转换成二进制; 2.十进制转换成十六进制;\n");printf(" 3.二进制转换成十进制; 4.二进制转换成十六进制;\n");printf(" 5.十六进制转换成二进制; 6.十六进制转换成十进制;\n");printf("********************************************************\n");printf("请选择:");scanf("%d",&choice);switch(choice){case 1:printf("请输入十进制数值:");scanf("%d",&value);while(value>=2){if(value%2!=0)s[j++]='1';elses[j++]='0';value=value/2;}if(value==1)s[j]='1';printf("结果为:");for(i=j;i>=0;i--)printf("%c",s[i]);break;case 2:printf("请输入十进制数值:");scanf("%d",&value);printf("结果为:%x",value);break;case 3:printf("请输入二进制数:");scanf("%s",s);for(i=0;s[i]!='\0';i++);i--;value=0;for(j=0;j<=i;j++){ t=1;if(s[j]=='1'){ for(k=i-j;k>0;k--)t*=2;value+=t;}}printf("结果为:%d\n",value);break;case 4:printf("请输入二进制数:");scanf("%s",s);for(i=0;s[i]!='\0';i++);i--;value=0;for(j=0;j<=i;j++){ t=1;if(s[j]=='1'){ for(k=i-j;k>0;k--)t*=2;value+=t;}}printf("结果为:%x\n",value);break;case 5:printf("请输入十六进制数值:");scanf("%x",&value); while(value>=2){if(value%2!=0)s[j++]='1';elses[j++]='0';value=value/2;}if(value==1)s[j]='1';printf("结果为:");for(i=j;i>=0;i--)printf("%c",s[i]);break;case 6:printf("请输入十六进制数值:");scanf("%x",value); printf("结果为:%d\n",value);break;default:printf("选择有误!\n");break;}}void main(){int choice;while(choice!=0){menu();printf("请选择(0退出):");scanf("%d",&choice);if(choice==1)fun1();else if(choice==2)fun2();printf("\n");}}五、运行结果六、课程设计总结通过这次课程设计,学到了很多编程知识,也知道了自己欠缺。
目录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 方案论证使用单片机为ATMEL公司生产AT89C51,AT89C51提供以下标准功能:4K字节FLASH 闪速存储器,128字节部RAM,32个I/O口线,两个16位定时/计数器,一个向量两级中断结构,一个全双工串行通讯口,置一个精密比较器,片振荡器及时钟电路,同时AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的工作模式,空闲方式停止CPU的工作,但允许RAM,定时计数器,串行通信及中断系统继续工作。
数学与信息技术学院 嵌入式系统课程设计报告
设计题目:数字计算器的设计与实验 班 级: 11级计科本2班 学 号: 2011081211 姓 名: 秦铭浩 指导教师: 李海颖 完成日期: 2014/4/27
成绩: 1. 目录 目录是将报告书内的章节标题依次排列。 2. 绪论 Android是以Linux为核心的手机操作平台,作为一款开放式的操作系统,随着Android的快速发展,如今已允许开发者使用多种编程语言来开发Android应用程序,而不再是以前只能使用Java开发Android应用程序的单一局面,因而受到众多开发者的欢迎,成为真正意义上的开放式操作系统。本次课程设计一个简易的计算器。主要了解Activity的创建和Intent的使用。Intent不仅可以连接两个Activity。而且可以传递数据。下面是整个程序的设计流程。据Gartner最新数据显示,2010年第二、三季度全球智能手机销售继续大幅增长,其中第三季度安卓占全球智能手机市场的25.5%,仅次于塞班,成为第二大智能手机系统。2010第二、三季度与去年同期相比,增度分别是15.4%及22%,增势迅猛。而塞班系统较09年的市场份额,尽管终端销量有大幅度提升,但增势下滑10%,形势非常严峻。其他操作系统的表现则要平稳很多 自Android在美国推出后, Android凭借自身的良好用户体验,相对低廉的成本和较高的开放性使得越来越多的终端厂商采用。在Android出现之前,智能手机基本都采用WM平台,成本较高、系统封闭、用户的体验差。而Android 系统成本低、用户体验较好、平台开源,使得终端厂商和开发者有了更大的灵活性。 总之,Android在发展中虽遇到了一些问题,但是在多种积极因素的推动下,总体趋势仍旧很好。基于Android操作系统的智能设备在国内市场必将有大的发展空间。
3. 需求分析 计算器作为现在人们日常生活中常用的一种工具已经可以说是人们日常生活中必不可少的工具了。但是计算器的发展经历了漫长的过程,凝聚无数先人的智慧,甚至连计算机的发展都可以说是源于计算器的发展。计算器和计算机一样都能够实现数据的输入、处理、存储和输出这些基本的功能,但计算器区别于计算机的地方就是,它不能自动的进行计算,必须要求由人来操作完成计算;而计算机通过提前编写好的程序就能够自动的按照程序进行处理。所以计算器和计算机的一个显著的区别就在于是否需要人为地操作来完成运行。这二者还有另一个本质性的区别。计算器的处理数据的方法是生产时就已经固化在系统中了,所以计算器只能按照系统中规定的处理方法来处理用户要求的计算任务;而计算机由于可以自行安装操作系统和各种的相关软件和硬件,理论上计算机拥有的可扩展性是无穷的。所以简单的说,计算器和计算机的本质性区别就在于该系统是否存在可扩展性。 本计算器程序主要解决日常生活中常见的基本数据计算问题,程序要实现的目标如下: (1)实现基本的加、减、乘、除四则运算。 (2)有清空功能,即清除所以数据,重新开始计算。 4. 总体设计 根据需求,符合用户的实际要求,系统应实现以下功能:计算器界面友好,方便使用,显示到少6位结果,具有基本的加、减、乘、除功能,能够判断用户输入运算数是否正确,支持小数运算,具有退格功能,能够删除最后一个输入,具有清除功能,即“C”。 整个程序基于Android技术开发,除总体模块外主要分为输入模块、显示模块以及计算模块这三大部分。在整个系统中总体模块控制系统的生命周期,输入模块部分负责读取用户输入的数据,显示模块部分负责显示用户之前输入的数据以及显示最终的计算结果,计算机模块部分负责进行数据的运算以及一些其他的功能。下面较为详细的做了说明。 具体的说,总体模块的作用主要是生成应用程序的主类,控制应用程序的生命周期。输入模块主要描述了计算器键盘以及键盘的监听即主要负责读取用户的键盘输入以及响应触屏的按键,需要监听手机动作以及用指针事件处理方法处理触屏的单击动作。同时提供了较为直观的键盘图形用户界面。 显示模块描述了计算器的显示区,即该区域用于显示用户输入的数据以及最终的计算结果,同时负责显示一些其他的信息。 计算模块则主要描述了计算器的整体,实现了计算器的界面,负责计算用户输入数据,包括加、减、乘、除等各种功能,记忆数据的相关功能,退格以及清零的功能。 系统除了总体模块以外主要由三大模块来组成,即输入模块、显示模块和计算模块,如下图所示:
输入模块主要描述了计算器键盘以及键盘的监听即主要负责读取用户的键盘输入以及响应触屏的按键,需要监听手机按键动作以及用指针事件处理方法处理触屏的单击动作(以松开按键为准)。同时提供了较为直观的键盘图形用户界面。 显示模块描述了计算器的显示区,即该区域用于显示用户输入的数据以及最终的计算结果,同时还负责显示一些其他的信息。 计算模块则主要描述了计算器的整体,实现了计算器的界面,负责计算用户输入数据,包括加、减、乘、除、等各种计算功能,记忆数据的相关功能,退格以及清零的功能 5. 详细设计
总体系统 输入模块 显示模块 计算模块 5.1输入模块详细设计 系统如果想完成计算器中各种功能,首先用户要能进行数据输入,由于是在触屏手机上开发计算器程序,所以要求输入可以直接使用触屏进行,所以在设计的时候就要充分的考虑这一点。正是由于考虑到这个特殊的地方,所以在进行模块设计中,选择编写输入模块类的时候会特意选取使用可以支持触屏输入的特殊增强型图形用户界面类。 输入模块主要的任务是描述计算器键盘以及实现键盘的监听,即当用户点击按键或者屏幕的时候监听会去调用相应的处理办法,本模块还需要为系统提供一个较为直观的键盘图形用户界面。输入模块的功能图如图所示:
5.2显示模块详细设计 作为手机计算器系统,显示部分也是必不可少的一部分。没有显示部分就没有办法显示用户输入的数字是否正确,甚至不能显示计算出的结果,由此可见显示模块即包括输入的部分也包括输出的部分。 显示模块主要完成的任务是描述计算器的显示区,该区域用于显示用户输入的数据以及最终的计算结果和一些其他信息。同时本模块还将提供调用和设置显示的具体方法。如图所示:
显示模块
显示区的相关调用显示区数设置显示区数据方
输入模块 支持触屏 描述计算器键盘 实现按键监听 定义键盘按键和画法 设置按键监听 5.3计算模块详细设计 系统要完成整个的计算器的功能,那么计算模块就是整个系统的重要模块。没有计算模块系统就不能顺利的完成计算,就无法达到用户的要求。所以计算模块的设计也是本次系统设计的重点。 系统想要能在屏幕上显示出计算器的样子要有整体的布局。在本模块中要完成布局的具体设计,使用户能够看到整个计算器的界面。同时系统想完成 计算功能必须要处理用户的输入,当输入模块的监听传到计算模块中时,计算模块就要根据相应的方法进行进一步的处理。计算模块功能图如图3-6所示:
6.编码 6.1 构建Android应用程序用户界面 Android应用程序的基础功能单元是Activity。它是android.app.Activity类中的一个对象。一个Activity可以实现很多功能,但是它自己并不会显示到屏幕上。Android应用程序界面需要使用view和viewgroup一起构造。 Android.view.View:基础类的对象。它是一个用来存储屏幕上特定的一个矩形内布局和内容属性的数据结构。一个View对象处理测距和布局、绘图、焦点交换、滚动条,还有屏幕区域自己表现的按键和手势。View类作为一个基类,为widget(窗体部件)服务,widget是一组用于绘制交互屏幕元素的完全实现子类。Widget处理它们自己的测距和绘图,可以快速的使用它们去构建Android应用程序界面。可用到的widget包括TextView,EditText,InputMethod,Botton,RadioButton,Checkbox和ScrollView等。
计算模块 整体布局 逻辑判断
运算输入判断 数值输入判断 普通运算功能 高级功能 记忆相关功能 清零复位功能 Android.view.ViewGroup:一个ViewGroup是一个Android.view.ViewGroup类对象。ViewGroup是一个特殊的view对象,它可以装载和管理一组下层的view其他viewgroup。ViewGroup类作为一个基类,为layout(布局)服务,layout是一组提供屏幕界面通用类型的完全实现子类。Layout可以为一组view构建一个结构。 在Android平台上,用view树和viewgroup节点来定义一个Activity的用户界面,如下图所示。这个树形结构可以构建各种Android程序界面,并且可以使用Android的预定义widget和layout或者自定义的view类型来构建。Android树形用户界面如图4-2所示。
图4-2 Android树形界面 所有的viewgroup都包括宽和高。很多还包括边界的定义(margin和border)。可以非常精确地描述宽和高,同时view可以自行调整到适应内容大小,或者适应容器大小。
6.2 Android应用系统界面组件 基于Android的手机计算器,是以用户为中心的。因此构建良好的用户界面是很重要的。Android构建用户界面有以下三种方式: (1)用户界面通过XML配置文件生成。 (2)直接用代码生成用户界面。 (3)通过实现用户界面接口形成自定义的用户界面组件。 每种方式各有自己的优缺点及使用环境,下面将结合本文界面实现逐一介绍。 (1)XML文件生成 根据MVC原则,UI应该与程序逻辑相分离,因此,在XML中定义UI结构是强烈推荐的。常用的方式是用图形化的方式来编写布局Layout,这些布局保存在XML文件中,然后编译成资源,在程序中Activity通过setContentView()方法来加载,然后通过findViewByld()方式来获得每一个界面组件的引用。实现过程及步骤。在layout文件夹下定义自己的XML页面,如计算器属性界面的实现如下所示。