课程设计—模拟计算器设计..

合集下载

c语言设计计算器课程设计

c语言设计计算器课程设计

c语言设计计算器课程设计一、课程目标知识目标:1. 学生能够掌握C语言基本语法和数据类型,特别是整型、浮点型的运用。

2. 学生能够理解并运用顺序结构、选择结构和循环结构进行程序设计。

3. 学生能够运用C语言的算术运算符,实现基本的数学运算功能。

技能目标:1. 学生能够编写简单的C程序,实现加、减、乘、除等基本计算功能。

2. 学生能够通过键盘输入数据,并处理输入异常。

3. 学生能够运用调试工具检查并修正程序中的错误。

情感态度价值观目标:1. 学生培养编程的兴趣,认识到编程在解决问题中的重要性。

2. 学生在学习过程中形成合作意识,培养团队精神。

3. 学生通过编程解决实际问题,体验成就感,增强自信心。

分析课程性质、学生特点和教学要求:本课程针对的是高一年级学生,他们对C语言已有一定的基础知识,具备基本的编程能力。

课程性质为实践性较强的编程课程,旨在让学生通过动手实践,掌握C语言编程技巧。

教学要求注重培养学生的实际编程能力,将理论知识与实际应用相结合。

课程目标分解:1. 学生能够独立完成一个简单的计算器程序,实现加、减、乘、除功能。

2. 学生能够运用所学知识对程序进行优化,提高计算器的运算效率和用户体验。

3. 学生通过课程学习,培养良好的编程习惯和解决问题的能力。

二、教学内容本课程教学内容紧密结合课程目标,确保学生能够系统地学习和掌握C语言编程计算器的制作。

1. C语言基本语法和数据类型复习:回顾整型、浮点型等基本数据类型,强调其在计算器程序中的应用。

2. 运算符和表达式:详细介绍C语言的算术运算符,如加、减、乘、除等,并讲解表达式的构成和计算规则。

3. 控制结构:- 顺序结构:巩固顺序执行的概念,并应用于计算器程序。

- 选择结构:讲解if语句,实现计算器的不同运算功能。

- 循环结构:介绍for和while循环,实现重复计算功能。

4. 输入输出函数:教授scanf和printf函数的使用,实现用户与计算器程序的交互。

模拟计算器课程设计报告

模拟计算器课程设计报告

合肥学院计算机科学与技术系课程设计报告2009~2010学年第二学期课程JAVA语言课程设计课程设计名称模拟计算器专业班级07网络工程(1)姓名舒业超指导教师许强张贯虹2010年9月一、需求分析程序运行时,显示一个窗口,等待用户输入,用户可以从键盘输入要计算的表达式,输入的表达式显示在窗口中,用户键入‘=’ 符号后,窗口显示出结果。

故需先定义一个类,继承Frame类,来实现一个窗口的显示,还需添加两个文本框,一个用于输入运算表达式,另一个显示运算结果,并以等‘=’号为表达式结束符,并触发运算的开始,所以还需设置一个键盘监听器,监听‘=’号的输入。

该计算器还要两个C(清除)、A(全清除)按钮,并予以监听,触发后进行相应操作。

如果用户输入的表达式不合法,需判别出来并给出相应的错误提示。

二. 设计1.设计思想:该程序有较好的用户操作界面,组件布局采用手动布局,并对相应组件设置监听器,触发后执行相应操作。

该程序主要的算法功能是如何利用栈实现运算符优先级的比较。

先是定义申请两个堆栈,一个作为运算数栈,另一个作为运算符栈,这两个堆栈是扫描表达式时的存储容器,在扫描过程中,扫描的单位是一个字符,扫描到的运算数入数栈,运算符入运算符栈,待比较优先级后,运算数出栈进行运算。

对于表达式的非法性判断,通过捕获异常来处理,捕获到异常后,弹出一个错误提示对话框,提示表达式的非法,并要求用户全清除后重新输入正确并完整的表达式。

2.功能设计定义一个myframe类来继承Frame类,实现窗口的显示,并在其中进行手动布局,即添加一个表达式输入文本框、一个结果显示文本框、C(清除)以及A(全清除)按钮。

在表达式文本框中输入完整表达式之后按下‘=’号后,通过键盘监听器的监听,开始进行运算。

运算过程如下:先在窗口类中将表达式提取出来,此时表达式为串字符串,需通过一个方法将其进行切割,切割成字符数组形式,然后将字符数组传递给一个Calculator类中的Calculator1方法(即运算引擎)进行表达式的计算,在这个方法执行结束时可返回运算的结果,接着将结果显示在结果文本框中即可。

proteus仿真计算器课程设计

proteus仿真计算器课程设计

proteus仿真计算器课程设计一、课程目标知识目标:1. 学生能理解Proteus仿真软件的基本原理和操作流程;2. 学生能掌握利用Proteus进行简单计算器电路设计与仿真;3. 学生能了解并描述计算器电路中的基本电子元件及其功能;4. 学生掌握基本的数字电路知识,如逻辑门、触发器等。

技能目标:1. 学生能独立使用Proteus软件进行电路设计;2. 学生能通过Proteus软件进行电路仿真,并对结果进行分析;3. 学生能运用已学知识解决实际计算器电路设计中遇到的问题;4. 学生能通过团队协作,共同完成一个具有基本功能的计算器电路设计。

情感态度价值观目标:1. 学生培养对电子技术的兴趣,激发创新意识和实践欲望;2. 学生在团队合作中学会沟通、协作,培养团队精神和责任感;3. 学生通过动手实践,体验成功的喜悦,增强自信心;4. 学生树立正确的价值观,认识到科技发展对国家和社会的重要性。

本课程针对高年级学生,结合电子技术课程内容,以Proteus仿真软件为载体,使学生掌握基本电子元件和数字电路知识。

课程注重实践操作和团队协作,旨在提高学生的实际动手能力和创新能力,为后续深入学习电子技术打下坚实基础。

通过本课程的学习,学生将能够独立完成一个简单计算器电路的设计与仿真,并在过程中培养良好的情感态度和价值观。

二、教学内容1. 计算器电路设计基础理论:- 简介计算器电路的组成和原理;- 学习基本电子元件:电阻、电容、二极管、三极管等;- 了解并掌握数字电路基础知识:逻辑门、触发器、计数器等。

2. Proteus仿真软件操作:- 学习Proteus软件的基本界面和功能;- 掌握Proteus软件的电路设计、仿真和调试方法;- 学习如何利用Proteus软件绘制电路图、设置元件参数等。

3. 计算器电路设计与仿真:- 根据计算器功能需求,设计电路原理图;- 利用Proteus软件进行电路仿真,观察并分析仿真结果;- 针对仿真过程中出现的问题,进行调试和优化。

(完整)单片机课程设计——计算器设计

(完整)单片机课程设计——计算器设计

目录一、设计总绪 (1)1。

1设计思想 (1)1.2设计说明 (1)1。

3关键词:矩阵键盘,单片机,数码管显示,汇编语言 (1)1.4设计目的 (1)1。

5设计要求 (2)二、设计方案 (2)2。

1硬件电路设计方案 (2)2.1.1基本结构 (2)2.1。

2系统框架图 (3)2.1。

3工作流程图 (3)2。

1.4单片机主控制模块 (4)2。

2系统功能描述 (6)三、各模块功能介绍 (7)3.1键盘输入模块 (7)3。

1。

1键盘分布图 (7)3。

1.2工作原理 (7)3。

2运算控制模块 (8)3.3显示模块 (8)3.4振荡电路模块 (9)四、仿真电路 (11)仿真运行结果 (11)五、调试过程总结 (13)附录: (14)参考文献: (14)源程序代码 (14)一、设计总绪1。

1设计思想近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新.在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,但仅单片机方面的知识是不够的,还应根据具体硬件结构、软硬件结合,来加以完善。

计算机在人们的日常生活中是比较常见的电子产品之一.可是它还在发展之中,以后必将出现功能更加强大的计算机,基于这样的理念,本次设计是用AT89c51单片机、LCD显示器、控制按键为元件来设计的计算器。

利用此设计熟悉单片机微控制器及汇编语言编程,对其片资源及各个I/O端口的功能和基本用途的了解。

掌握应用程序开发环境,常用的LCD显示器的使用方法和一般键盘的使用方法此设计是基于单片机技术的简易计算器的方案,本次设计所提出的一种基于单片机技术的简易计算器的方案,采用具有数据处理能力的中央处理器CPU,随机存储器ROM,多种I/O口和中断系统、定时器/计时器等功能集成到一块硅片上构成的一个小而完善的计算机系统-—单片机,配以汇编语言编写的执行程序,能更好的解决计算机计算的问题,随着数字生活的到来,单片机在生活中越来越重要,它能将大量的逻辑功能集成与一个集成电路中,使用起来十分方便。

模拟计算器实验报告

模拟计算器实验报告

课程设计报告课程设计题目:模拟机算器程序学生姓名:柯尊国专业:网络工程班级:1021130321指导教师:高永平、姜林2011年11 月27 日东华理工大学课程设计评分表学生姓名:柯尊国班级:10211303 学号:21课程设计题目:模拟机算器程序项目内容满分实评选题能结合所学课程知识、有一定的能力训练。

符合选题要求(5人一题)10 工作量适中,难易度合理10能力水平能熟练应用所学知识,有一定查阅文献及运用文献资料能力10 理论依据充分,数据准确,公式推导正确10能应用计算机软件进行编程、资料搜集录入、加工、排版、制图等10 能体现创造性思维,或有独特见解10成果质量总体设计正确、合理,各项技术指标符合要求。

10 说明书综述简练完整,概念清楚、立论正确、技术用语准确、结论严谨合理;分析处理科学、条理分明、语言流畅、结构严谨、版面清晰10设计说明书栏目齐全、合理,符号统一、编号齐全。

格式、绘图、表格、插图等规范准确,符合国家标准10 有一定篇幅,字符数不少于5000 10总分100指导教师评语:指导教师签名:年月日目录一. 课程设计题目..................................................................................二. 问题分析1.算法分析.....................................................................2.流程图........................................................................三. 算法设计1.算法描述.....................................................................2.系统类图.....................................................................3.属性和方法定义..............................................................四. 运行实例................................................................................五. 经验与体会................................................................................六. 参考文献................................................................................ 七.源代码................................................................................一:课程设计题目模拟计算器程序问题描述设计一个程序来模拟一个简单的手持计算器。

计算器模拟系统设计-毕业设计

计算器模拟系统设计-毕业设计

计算器模拟系统设计学生:XXX 指导教师:XXX内容摘要:本设计是基于51系列的单片机进行的简易计算器系统设计,可以完成计算器的键盘输入,进行加、减、乘、除3位无符号数字的简单四则运算,并在LED 上相应的显示结果。

设计过程在硬件与软件方面进行同步设计。

硬件选择AT89C51单片机和74lS164,输入用4×4矩阵键盘。

显示用5位7段共阴极LED静态显示。

软件从分析计算器功能、流程图设计,再到程序的编写进行系统设计。

选用编译效率最高的Keil 软件用汇编语言进行编程,并用proteus仿真。

关键词:LED 计算器 AT89C51芯片 74LS164Calculator simulation system desig nAbstract:The design is a simple calculator based on 51 series microcontroller system design, to complete the calculator keyboard input, add, subtract, multiply, and in addition to three unsigned numeric simple four operations, and the corresponding result will be displayed on the LED.The design process of hardware and software aspects of the synchronous design. Hardware choose AT89C51 microcontroller and 74ls164--enter the 4 × 4 matrix keyboard. Static display with five 7-segment common cathode LED display. Software calculator function from the analysis, flow charts, design, and then program the preparation of system design. Selected to compile the most efficient Keil software in assembly language programming, and with proteus simulation.Keywords: LED calculator AT89C51 chip 74LS164目录前言 (1)1 设计任务和要求 (1)1.1 设计要求 (1)1.2 设计方案的确定 (2)2 单片机简要原理 (2)2.1 AT89c51介绍 (2)2.2 芯片74LS164介绍 (5)3 硬件设计 (6)3.1 键盘电路的设计 (6)3.2 显示电路的设计 (7)3.3 其他电路设计 (7)3.3.1 复位、时钟电路设计 (7)3.3.2 多位数码管电路显示的驱动电路 (8)4 软件设计 (9)4.1 主程序的设计 (9)4.2 显示、读键模块的设计 (10)4.3 其他内容说明 (11)4.3.1 定时查键的程序设计 (11)4.3.2 软件的可靠性设计 (12)4.4 源程序代码(见附录) (12)5 调试与仿真 (12)5.1 Keil C51单片机软件开发系统 (12)5.2 proteus的操作 (12)5.2.1 硬件电路图的接法操作 (12)5.2.2单片机系统PROTEUS设计与仿真过程 (13)6 结束语 (13)附录:计算器程序代码 (15)参考文献: (23)计算器模拟系统设计前言近年来,单片机以其体积小、价格廉、面向控制等独特优点,在各种工业控制、仪器仪表、设备、产品的自动化、智能化方面获得了广泛的应用。

课程设计—模拟计算器设计..

课程设计—模拟计算器设计..

嵌入式课程设计课题:基于uCOS/uCGUI的模拟计算器实现报告:张昌世自动化091 109031027小组成员:刘锋自动化091 109031023陈奇英自动化091 109031001彭桂贤自动化091 109031002指导老师:陈才摘要:计算器这一小小的程序机器实际上是从计算机中割裂出来的衍生品,但因其方便快捷的操作模式,已经被广泛应用于工程、学习、商业等日常生活中,极大的方便了人们对于数字的整合运算。

现今的计算器已经不仅仅停留在传统的硬件上,而是越来越软件化,它可以在手机里,在电脑上,在许许多的的电子产品上。

所以有必要在自己平时学习的开发板上做个带界面显示的计算器来证明下自己的能力。

引言:简单的计算器包括0~9的数字输入键,小数点输入键,+、-*、/、=运算键等,还可以加入其他运算:如三角运算(sin,cos,tan,cot等),一些当木运算(平方,开方,阶乘等)。

由于条件和能力有限,所以就做个能实现四则运算的简易计算器。

计算器的程序设计实际上富有一定的难度,虽然乍一想很简单,只要实现下加减乘除运算,然后显示出来就可以了,但实际上运算结果跟图像界面的数据交换,还有浮点数的处理等都很折腾人。

通过本次设计,体会到了学习的不易,还有自己能力上的不足!一、课题描述:在STM32开发板上实现简易的计算器。

计算器界面显示在TFT彩屏上,采用触摸屏上模拟按钮来实现数据及运算符的输入。

最后把运算的结果显示在彩屏。

最基本要求:有加减乘除运算,有带小数点的运算。

二、课题分析a)、硬件要求:处理器选择:STM32F103ZE,这款处理器具有512K的flash,64K的RAM,足够大的空间,可以让程序员的可以有更大的发挥空间,而不用为节省空间而上脑筋。

TFT彩屏:带触摸的TFT彩屏,3.2寸,分辨为240*320的真彩彩屏。

JLink仿真器:使用JLink v8仿真器,仿真器能够下载程序、在线仿真,便于程序编写与错误检查。

计算器程序设计课程设计

计算器程序设计课程设计

计算器程序设计课程设计1. 概述计算器程序设计是一门基于计算机语言和算法的课程,旨在教授学生如何设计和开发一个功能完善的计算器程序。

本文将按照设计开发的步骤,从需求分析、设计、编码以及测试等方面,探讨计算器程序的设计过程。

2. 需求分析在进行计算器程序设计之前,首先需要明确项目的需求。

计算器程序通常具备基本的四则运算功能,包括加减乘除,并且能够处理带小数点的数值。

另外,还可以考虑增加一些额外的功能,如求平方根、取余、倒数等。

了解需求将帮助我们明确设计的目标和功能。

3. 设计在计算器程序设计中,设计是至关重要的一步。

我们可以采用类似于模块化的设计思路,将不同的功能模块进行划分,例如用户界面模块、计算模块和错误处理模块等。

此外,我们还可以使用一些设计原则,如面向对象设计、结构化程序设计等,来提高设计的可扩展性和可维护性。

4. 编码设计完成后,就可以开始编码阶段了。

编码过程中需要选择合适的编程语言,并结合设计所采用的思路,进行代码的实现。

计算器程序设计可以使用各种编程语言,如C++、Java、Python等。

在编码过程中,需要注重代码的规范性和可读性,良好的代码结构和注释可以提高程序的可维护性。

5. 测试在完成编码之后,需要进行程序的测试。

测试可以分为单元测试和功能测试两个阶段。

单元测试主要是针对程序的各个功能模块进行测试,而功能测试则是测试整个计算器程序的功能是否符合设计要求。

在测试过程中,需要注意各种边界条件和异常情况,保证程序的稳定性和可靠性。

6. 优化与改进在完成测试后,可以对程序进行优化与改进。

通过代码分析和性能测试,找出程序的瓶颈和不足之处,并进行相应的优化。

优化可以包括算法的改进、代码的重构和效率的提升等方面。

此外,还可以结合用户的反馈,进行功能的扩展和改进,使得程序更加完善和用户友好。

7. 总结计算器程序设计是一门重要且有趣的课程,在学习过程中,我们不仅掌握了编程的基本技巧,还锻炼了问题解决和设计思维的能力。

c设计计算器课程设计

c设计计算器课程设计

c 设计计算器课程设计一、课程目标知识目标:1. 学生能理解计算器的基本原理和功能,掌握计算器的基本操作方法。

2. 学生能够运用计算器解决基本的数学运算问题,如加减乘除、百分比计算等。

3. 学生能够理解并运用计算器上的科学计算功能,如平方根、指数运算等。

技能目标:1. 学生能够熟练操作计算器,快速进行数值输入、计算和结果读取。

2. 学生能够运用计算器进行实际问题的计算,如购物找零、时间计算等。

3. 学生能够通过计算器解决一些简单的数学问题,培养解决问题的能力和逻辑思维能力。

情感态度价值观目标:1. 学生培养对计算器的正确使用态度,明白计算器是辅助工具,提高计算效率的同时,不应过度依赖。

2. 学生在合作交流中使用计算器,培养团队合作意识和分享精神。

3. 学生通过计算器的运用,增强对数学学科的兴趣,认识到数学与生活的紧密联系。

课程性质:本课程属于实践操作类课程,注重培养学生的动手操作能力和实际问题解决能力。

学生特点:学生处于小学高年级阶段,对计算器有一定了解,好奇心强,喜欢动手操作。

教学要求:教师应引导学生通过实践操作,掌握计算器的使用方法,将计算器与实际生活问题相结合,提高学生的数学应用能力。

同时,注重培养学生的团队合作意识和正确使用计算器的态度。

在教学过程中,关注学生的学习成果,及时进行教学评估和调整。

二、教学内容1. 计算器的基本结构:介绍计算器的各个部分及其功能,如显示屏、键盘、电源等。

教材章节:《计算器与计算法则》第一章内容列举:计算器按键的功能及操作方法。

2. 计算器的基本操作:教授加减乘除、百分比、平方根、指数等基本运算。

教材章节:《计算器与计算法则》第二章内容列举:各类运算的操作步骤及注意事项。

3. 计算器在生活中的应用:通过实例教授计算器解决实际问题,如购物找零、时间计算等。

教材章节:《计算器与计算法则》第三章内容列举:实际案例及解决方法。

4. 科学计算器的使用:针对高年级学生,介绍科学计算器的拓展功能,如三角函数、对数等。

微机课设(模拟计算器运算)

微机课设(模拟计算器运算)

一、设计题目及要求:模拟计算器运算(加,减,乘)设计要求:1.通过小键盘做加、减、乘、括号运算。

数码管显示输入数据和计算结果数据。

2.按键规定:(1)数字用小键盘0~9输入。

(2)功能按键设定:“A”——“+”“D”——“-”“B”——“*”“F”——“括号”“E”——“=”“C”——输入过程中撤消当前运算,此时屏幕显示“0”。

3.其它要求:(1)输入计算数据时,数码管应跟随显示。

若超出显示范围则不响应超出部分。

(2)按“+”、“-”、“*”或“括号”对应按键时,数码管当前显示内容不变。

(3)按“=”时,显示器显示最终计算结果。

若结果超出显示范围时,则显示“F”。

(4)按“C”时,屏幕显示“0”。

(5)需要考虑运算的优先级问题。

(6)只考虑正整数运算,不考虑负数和实数运算。

二、设计思想:调用键盘扫描子程序不断扫描键盘是不是有输入,如果没有就一直扫描,如果有就停止扫描,完成输入,并将输入的数字通过调用显示子程序显示到LED显示器上。

利用汇编的程序核对输入键的数值,并把输入的表达式存储为中缀表达式,之后转化为后缀表达式,通过调用加,减,乘,括号,子程序实现后缀表达式的加、减、乘运算。

运算完成后将运算的结果储存并显示到LED显示器上。

简要流程中五大步骤的具体描述步骤(一):从小键盘输入合法中缀算术表达式,并将其存储到S1中此处用系统功能1号调用,每次从键盘输入一个字符,就将其存入到数组S1中,然后在判断此字符是否为等号,如果不是,则循环,继续输入字符,否则,程序往下执行。

步骤(二):调用子程序CHANGE将中缀式转化为后缀式此处最核心的就是中缀表达式转化为后缀表达式的算法。

具体思路为:用一个栈来存储与运算符号.先将字符’@’压入栈中,并假设其优先级为0.然后遍历S1中的字符,遇到数字直接存入S2中并且输完数字后向S2中输入一空格以备计算结果时用。

遇到运算符则先判断其与栈顶运算符的优先级谁大。

如果S1中运算符号优先级大,则此运算符号直接入栈;否则栈顶符号先出栈到S2,待栈顶符号优先级小于S1中符号时,S1中元素入栈。

模拟计算器程序课程设计

模拟计算器程序课程设计

模拟计算器程序-课程设计模拟计算器学生姓名:**** 指导老师:****摘要本课程设计的课题是设计一个模拟计算器的程序,能够进行表达式的计算,并且表达式中可以包含Abs()和Sqrt()运算。

在课程设计中,系统开发平台为Windows ,程序设计设计语言采用C++,程序运行平台为Windows 或*nix。

本程序的关键就是表达式的分离和处理,在程序设计中,采用了将输入的中缀表达式转化为后缀表达式的方法,具有可靠的运行效率。

本程序做到了对输入的表达式(表达式可以包含浮点数并且Abs()和Sqrt()中可以嵌套子表达式)进行判定表达式是否合法并且求出表达式的值的功能。

经过一系列的调试运行,程序实现了设计目标,可以正确的处理用户输入的表达式,对海量级数据都能够通过计算机运算快速解决。

关键词C++程序设计;数据结构;表达式运算;栈;中缀表达式;后缀表达式;字符串处理;表达式合法判定;目录1 引言 (4)1.1课程设计目的 (4)1.2课程设计内容 (5)2 设计思路与方案 (5)3 详细实现 (6)3.1 表达式的合法判定 (6)3.2 中缀表达式转化为后缀表达式 (7)3.3 处理后缀表达式 (10)3.4 表达式嵌套处理 (12)4 运行环境与结果 (13)4.1 运行环境 (13)4.2 运行结果 (13)5 结束语 (16)参考文献 (17)附录1:模拟计算器源程序清单 (18)1 引言本课程设计主要解决的是传统计算器中,不能对表达式进行运算的问题,通过制作该计算器模拟程序,可以做到快速的求解表达式的值,并且能够判定用户输入的表达式是否合法。

该模拟计算器的核心部分就在用户输入的中缀表达式的转化,程序中用到了“栈”的后进先出的基本性质。

利用两个“栈”,一个“数据栈”,一个“运算符栈”来把中缀表达式转换成后缀表达式。

最后利用后缀表达式来求解表达式的值。

该算法的复杂度为O(n),能够高效、快速地求解表达式的值,提高用户的效率。

java模拟科学计算器课程设计

java模拟科学计算器课程设计

软件学院课程设计报告书课程名称面向对象程序设计设计题目模拟科学计算器专业班级学号姓名指导教师2012 年6 月目录1设计时间 (3)2设计目的 (3)3设计任务 (3)4设计内容 (3)4.1需求分析 (3)4.1.1 问题描述 (3)4.1.2 基本要求 (3)4.2总体设计 (3)4.2.1 包的描述 (3)4.2.2 类的描述 (4)4.2.3 类之间的关系 (4)4.3详细设计 (5)4.3.1类图 (5)4.3.2 页面设计 (6)4.4测试与分析 (6)4.5程序与代码 (8)5总结与展望 (17)参考文献 (18)课程设计成绩评定 (18)4.3.2页面设计图4.3.2-1科学计算器页面4.4测试与分析(1)加运算(2)减运算图4.4-1加运算1+2结果图4.4-2减运算18-3结果(3)乘运算(4)除运算图4.4-3乘运算2×4结果图4.4-4除运算8÷5结果(5)退格(2)清零图4.4-5Backspace1.6退格结果图4.4-6C1.清零结果(7)正弦运算(8)余弦运算图4.4-7sin90结果图4.4-8cos90结果(9)指数运算(10)阶乘运算图4.4-9 2^3结果图4.4-10 8!结果4.5 程序代码import java.awt.BorderLayout;import java.awt.Color;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.text.DecimalFormat;。

模拟计算器

模拟计算器

单片微型计算机原理、接口及应用课程设计之模拟计算器姓名:@@@@@@@@@@@@@@学号:@@@@@@@@@@@@@@学院:@@@@@@@@@@@@@@专业:@@@@@@@@@@@@@@指导老师:@@@@@@@@@@@@@@时间:2012-12-28目录1引言********************************************************** 1 1.1计算器设计意义********************************************** 3 1.2设计方法 *************************************************** 3 1.3计算器基本实现功能****************************************** 3 2系统硬件设计 ************************************************** 3 2.1 所用器件简单介绍***************************************** 4 2.2 LCD工作原理*********************************************6 3系统的软件设计************************************************* 8 3.1软件主要程序设计**************************************** 93.2Keil与Proteus软件仿真********************************134第四章课程设计体会******************************************175参考文献*****************************************************186附1 硬件原理图******************************************** 19第一章引言1.1计算器设计意义随着社会的发展,科学的进步,人们的生活水平在逐步的提高,尤其是微电子技术的发展,犹如雨后春笋般的变化。

课程设计设计计算器

课程设计设计计算器

课程设计设计计算器一、教学目标本课程的学习目标包括知识目标、技能目标和情感态度价值观目标。

知识目标要求学生掌握计算器的基本原理和使用方法,理解计算器在数学和科学领域的应用。

技能目标要求学生能够熟练操作计算器,进行基本的算术运算、科学计算和数据处理。

情感态度价值观目标要求学生培养对科学技术的兴趣和好奇心,提高解决实际问题的能力,培养创新精神和团队合作意识。

通过分析课程性质、学生特点和教学要求,我们将目标分解为具体的学习成果。

课程目标明确,有利于学生和教师清晰地了解课程的预期成果,为后续的教学设计和评估提供依据。

二、教学内容根据课程目标,我们选择和了以下教学内容:1.计算器的基本原理:介绍计算器的电路结构、工作原理和编程方法。

2.计算器的使用方法:讲解计算器的各种功能键、操作界面和操作步骤。

3.计算器在数学领域的应用:举例说明计算器在代数、几何、概率等数学领域的应用。

4.计算器在科学领域的应用:介绍计算器在物理、化学、生物等科学领域的应用实例。

5.计算器编程:教授计算器的基本编程语言和编程技巧,让学生能够编写简单的计算器程序。

教学大纲将按照以上内容的安排和进度进行教学,确保内容的科学性和系统性。

三、教学方法为了激发学生的学习兴趣和主动性,我们选择以下教学方法:1.讲授法:教师讲解计算器的基本原理、使用方法和应用领域。

2.讨论法:学生分组讨论计算器编程技巧和解决实际问题的方法。

3.案例分析法:分析计算器在数学和科学领域中的应用案例,让学生加深理解。

4.实验法:学生动手操作计算器,进行编程和实践,提高操作技能。

通过多样化的教学方法,我们能够激发学生的学习兴趣,培养他们的创新精神和团队合作意识。

四、教学资源为了支持教学内容和教学方法的实施,我们选择和准备了以下教学资源:1.教材:选用权威、实用的计算器教材,为学生提供系统的学习材料。

2.参考书:提供相关的计算器参考书籍,丰富学生的知识储备。

3.多媒体资料:制作课件、视频等多媒体资料,生动展示计算器的使用和应用。

C语言课程设计--计算器(图形界面)

C语言课程设计--计算器(图形界面)

C语言课程设计--计算器(图形界面)扬州大学C语言课程设计报告题目一个简易计算器的设计与实现班级学号姓名指导教师成绩老师评语:第 2 页共 14 页第 3 页共 14 页一、系统调试…………………………………………8,9,10,11二、课程设计体会总结………………………………8,9,10,111 课程设计目的(1).课程设计是一项综合性实践环节,是对平时实验的一个补充,课程设计内容包括课程的主要理论知识,但由于C语言对初学者较难掌握,因而对一个完整的C语言程序不适合平时实验。

通过课程设计可以达到综合设计C语言程序的目的。

(2)通过本课程设计,可以培养独立思考,综合运用所学有关相应知识的能力,能更好地使用C语言的知识,更好地了解C语言的好处和其可用性!掌握基本的程序设计过程和技巧,掌握基本的分析问题和利用计算机求解问题的能力,具备初步的高级程序设计能力。

为后续各门计算机课程的学习和毕业设计打下坚实基础!(3)通过本程序训练程序设计的基本技能,掌握字符串的表示方法和字符串函数的功能、自学掌握四则运算的算法及WIN-TC的图形操作的基本知识、键盘上特殊键的获取及图形方式下光标的显示。

2 课程设计内容目的:本课程的课程设计要求学生模拟实现一个简单计算器,要求(1)能够实现四则运算,并能支持优先级运算。

(2)三角与反三角运算:如sinx,cosx等。

(3)指数对数运算:如log(x),lnx,e的x次方等。

(4)其他运算:如X!,x 的累加等。

(4)不允许调用库函数,使用自行开发的程序实现常用函数运算。

(5)进一步考虑计算器外观设计,用可视化界面给出计算器外观、功能按键及输入界面。

使用说明:执行加法运算,'—'表示执行减法运算,表示执行乘法运算,'/'表第 4 页共 14 页示除法运算.‘Q’表示退出计算器‘C’表示清零,’=’表示得出结果'^'表示执行x的y次方,'e'表示执行e的x次方操作,'&'表示执行累加操作.,你可以可以用键盘上的上下左右键对光标进行移动,当光标移动到计算器按键上时,按ENTER即可执行该键的操作!最后按“=”则可得出结果。

数据结构与算法课程设计--模拟简单计算器

数据结构与算法课程设计--模拟简单计算器

数据结构与算法课程设计--模拟简单计算器数据结构与算法课程设计模拟简单计算器在计算机科学领域中,数据结构和算法是非常重要的基础知识。

本次课程设计的目标是模拟一个简单计算器,通过这个实践项目,深入理解和应用数据结构与算法的相关知识。

首先,让我们来明确一下简单计算器需要实现的功能。

它应该能够进行基本的四则运算,即加法、减法、乘法和除法。

同时,还需要支持输入多个操作数和运算符,能够按照正确的运算顺序进行计算。

为了实现这个简单计算器,我们需要选择合适的数据结构来存储输入的操作数和运算符。

考虑到操作的顺序性和灵活性,栈这种数据结构是一个不错的选择。

栈具有先进后出的特点,可以方便地处理运算的优先级。

接下来,我们开始设计算法。

当用户输入一个表达式时,程序需要对其进行解析。

首先,将表达式中的数字和运算符分别提取出来,并按照顺序存储在相应的栈中。

在计算过程中,从运算符栈中取出运算符,从操作数栈中取出相应的操作数进行计算,将结果重新压入操作数栈中。

在具体的实现过程中,我们需要处理一些特殊情况。

例如,除数不能为零的情况。

当遇到除法运算且除数为零时,程序应该给出相应的错误提示。

另外,对于表达式的合法性也需要进行检查。

比如,输入的表达式是否符合基本的数学运算规则,是否存在多余的字符或不匹配的括号等。

如果表达式不合法,程序也需要给出明确的提示信息,以便用户能够及时修正。

为了提高程序的可读性和可维护性,我们采用模块化的编程思想。

将表达式解析、运算处理、错误检查等功能分别封装成独立的函数,这样在后续的调试和优化过程中会更加方便。

```pythonclass Stack:def __init__(self):selfitems =def push(self, item):selfitemsappend(item)def pop(self):if not selfis_empty():return selfitemspop()else:return Nonedef is_empty(self):return len(selfitems) == 0def calculate(expression):operand_stack = Stack()operator_stack = Stack()num =""for char in expression:if charisdigit():num += charelif char in "+/":if num!="":operand_stackpush(int(num))num =""operator_stackpush(char)if num!="":operand_stackpush(int(num))while not operator_stackis_empty():operator = operator_stackpop()operand2 = operand_stackpop()operand1 = operand_stackpop()if operator =='+':result = operand1 + operand2 elif operator =='':result = operand1 operand2elif operator =='':result = operand1 operand2elif operator =='/':if operand2 == 0:print("除数不能为零!")returnresult = operand1 / operand2 operand_stackpush(result)return operand_stackpop()测试代码expression ="2+34-5/2"print(calculate(expression))```在上述代码中,我们首先定义了一个栈类`Stack`,用于存储操作数和运算符。

JAVA课程设计-模拟科学计算器

JAVA课程设计-模拟科学计算器

JAVA课程设计-模拟科学计算器课程:模拟科学计算器学号:姓名: 班级: 教师: 时间:10.12.10,11.01.12计算机科学与技术系课程设计指导书姓名学号班级课程名称课程性质 JAVA 专业必修课设计时间 2010年12 月10日——2011年01月12日设计名称模拟科学计算器巩固所学理论知识,提高程序设计能力的重要实践设计目的环节。

综合应用Java基础知识和基本方法。

界面模拟Windows中的计算器程序。

实现基本数学运算、函数等功能,加、减、乘、除、阶乘、正弦、余弦和指数运算。

设计要求实现要点,添加相关组件并进行按钮事件处理。

要求提交Application和Applet两个版本的程序。

设计Application和Applet两个版本的程序,对Application运用继承JFrame设计,类的设计构造方法利用等。

而Applet则继承Applet,在浏览器上运行。

Application过程,1.菜单栏设计.2.文本域,即为计算器的屏幕显示区域3.初始化操作4.统一设置按钮的的使用方式5.计算器的基础操作,+ - × ?, 设计思路6.运算符号的事件监听与7.清除按钮的事件监听设计过程8.数字输入的事件监听9.小数点的事件监听10.main方法Applet过程,1.init()方法,完成初始化操作,2.事件统一监听,3.科学计算,4.建立Calucator.html;5.浏览器运行,12.10-12.13 复习Java程序开发的相关操作,了解“计算器相关知识”,12.14-12.17 熟悉题目并理解,及找寻相关资料,12.18-12.20 根据题目要求进行需求分析设计,计划与进度12.21-12.25 对Application进行总体程序设计,12.26-12.30 对Applet进行相关各功能的程序设计,12.31-01.05 对程序进行细节完善,01.06-01.10 进行调试运行并完成资料归档。

C语言课程设计(计算器)

C语言课程设计(计算器)

目录1 前言 (2)2 需求分析 (2)2.1要求 (2)2.2任务 (2)2.3运行环境 (2)2.4开发工具 (2)3 概要设计 (2)3.1系统流程图 (3)3.2查询函数流程图 (4)4 详细设计 (8)4.1分析和设计 (8)4.2具体代码实现 (9)5 课程设计总结 (25)参考文献 (25)致谢 (26)1 前言编写一个程序来实现算术计算器。

通过结构体数组和共用体数组来存放输入的每一数字或运算符号的记录(包括1.2.3等数字, +、--、*、等运算符号), 然后将其信息存入文件中。

输入一个算术计算式, 就在屏幕上显示结果。

2 需求分析2.1要求(1)用C语言实现程序设计;(2)利用结构体、共用体进行相关信息处理;(3)画出查询模块的流程图;(4)系统的各个功能模块要求用函数的形式实现;(5)界面友好(良好的人机互交), 程序要有注释。

2.2任务(1)定义一个结构体类型数组, 输入0~9及+、--、*等符号的信息, 将其信息存入文件中;(2)输入简单的加减乘除算术计算式, 并在屏幕上显示计算结果;(3)画出部分模块的流程图;(4)编写代码;(5)程序分析与调试。

2.3运行环境(1)WINDOWS2000/XP系统(2)TurboC2.0编译环境2.4开发工具C语言3 概要设计3.1系统流程图如图3.1所示。

图3.1系统流程图3.2查询函数流程图4 详细设计4.1分析和设计在程序的开头部分定义了结构替类型, 用来存放按钮信息struct s_button /*按键的结构体*/{int sx,sy,ex,ey;char *head;int press;}button[17]; /*图表按键数*/char far *vid_mem;static int tx=32,ty=3; /*静态变量*/float v1=0.0,v2=0.0;用输入函数input()来输入按键放在s_button数组中。

计算器课程设计

计算器课程设计

计算器课程设计一、课程目标知识目标:1. 学生能理解计算器的基本功能与操作,掌握其在数学运算中的应用。

2. 学生能运用计算器解决简单的数学问题,如加减乘除、括号运用等。

3. 学生了解计算器在科技发展中的地位和作用,认识到计算器与日常生活、学习的紧密联系。

技能目标:1. 学生能熟练操作计算器,进行快速准确的数值计算。

2. 学生能通过计算器解决实际问题,提高问题解决能力。

3. 学生能运用计算器进行探索性学习,发现数学规律,培养探究精神。

情感态度价值观目标:1. 学生培养对计算器操作的耐心和细致,养成良好的学习习惯。

2. 学生通过计算器学习,增强对数学学科的兴趣,激发学习积极性。

3. 学生认识到科技发展对人类生活的影响,培养创新意识和社会责任感。

本课程针对小学四年级学生设计,结合学生年龄特点和认知水平,注重培养学生在计算器操作、问题解决等方面的技能。

同时,关注学生情感态度价值观的培养,使学生在掌握知识技能的同时,形成积极的学习态度和价值观。

课程目标具体、可衡量,为后续教学设计和评估提供依据。

二、教学内容本章节教学内容以人教版小学数学四年级下册教材中“计算器的使用”为基础,结合课程目标,进行以下安排:1. 计算器的基本功能与操作:介绍计算器的各个按键功能,如数字键、运算键、清除键等,以及如何正确进行开机、关机、清屏等基本操作。

2. 简单数值计算:教授学生使用计算器进行加减乘除、括号运算等,掌握连续计算、顺序计算等方法。

3. 计算器在生活中的应用:通过实例分析,让学生了解计算器在日常生活中的应用,如购物、计费等。

4. 探索计算器中的数学规律:引导学生运用计算器进行探索性学习,发现数学中的规律,如平方、立方等。

教学内容安排如下:第一课时:计算器的基本功能与操作第二课时:简单数值计算第三课时:计算器在生活中的应用第四课时:探索计算器中的数学规律教学进度根据学生掌握情况灵活调整,确保学生充分理解并掌握教学内容。

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

嵌入式课程设计课题:基于uCOS/uCGUI的模拟计算器实现报告:张昌世自动化091 109031027小组成员:刘锋自动化091 109031023陈奇英自动化091 109031001彭桂贤自动化091 109031002指导老师:陈才摘要:计算器这一小小的程序机器实际上是从计算机中割裂出来的衍生品,但因其方便快捷的操作模式,已经被广泛应用于工程、学习、商业等日常生活中,极大的方便了人们对于数字的整合运算。

现今的计算器已经不仅仅停留在传统的硬件上,而是越来越软件化,它可以在手机里,在电脑上,在许许多的的电子产品上。

所以有必要在自己平时学习的开发板上做个带界面显示的计算器来证明下自己的能力。

引言:简单的计算器包括0~9的数字输入键,小数点输入键,+、-*、/、=运算键等,还可以加入其他运算:如三角运算(sin,cos,tan,cot等),一些当木运算(平方,开方,阶乘等)。

由于条件和能力有限,所以就做个能实现四则运算的简易计算器。

计算器的程序设计实际上富有一定的难度,虽然乍一想很简单,只要实现下加减乘除运算,然后显示出来就可以了,但实际上运算结果跟图像界面的数据交换,还有浮点数的处理等都很折腾人。

通过本次设计,体会到了学习的不易,还有自己能力上的不足!一、课题描述:在STM32开发板上实现简易的计算器。

计算器界面显示在TFT彩屏上,采用触摸屏上模拟按钮来实现数据及运算符的输入。

最后把运算的结果显示在彩屏。

最基本要求:有加减乘除运算,有带小数点的运算。

二、课题分析a)、硬件要求:处理器选择:STM32F103ZE,这款处理器具有512K的flash,64K的RAM,足够大的空间,可以让程序员的可以有更大的发挥空间,而不用为节省空间而上脑筋。

TFT彩屏:带触摸的TFT彩屏,3.2寸,分辨为240*320的真彩彩屏。

JLink仿真器:使用JLink v8仿真器,仿真器能够下载程序、在线仿真,便于程序编写与错误检查。

b)、软件要求:操作系统:使用uC/OS嵌入式实时操作系统。

由于触屏要实时响应,所以需要使用操作系统,并给触屏专门建立一个任务。

CPU其他的操作组成一个任务。

程序在两个任务中相互切换。

图形软件:使用uCGUI嵌入式图形界面软件。

uCGUI是个小型的图形软件,包括有基本的图形显示,还有许多图形控件,如:按钮,编辑框,窗口,滚动条等等,而我们的计算器的制作就要用到其中的按钮、编辑框和窗口3个控件。

固件库:STM32编程,可以使用固件库,ST公司提供STM32处理器的固件库,以方便程序员编程,缩短了项目的编程周期。

c)、设计方案:界面布局:1个编辑框:位于彩屏左上角,占整屏的1/5左右,用于数据输入显示,运算符的输入显示。

编辑框内最大输入和显示的长度为10,这就限制了数据的范围。

11个数子按钮:位于左下角开始向上向右的按钮队列,分别为:’1’,’2’,‘3’,‘4’,‘5’,‘6’,‘7’,‘8’,‘9’,‘0’,‘.’。

可以输入操作者任意想要的数据,进行运算。

6个运算符按钮:位于屏幕偏右的数来第一列和第二列的位子上。

实现加减乘除倒数平方6个运算,对应的按钮分别为:‘+’,‘-’,‘*’,‘/’,‘1/X’,’X^2’。

2个操作按钮:位于屏幕右侧数来第一列的位子上。

功能分别为等号和清楚。

对应着‘=’和‘clear’两个按钮。

等号得到计算得到的结果,清除键清楚编辑框上的数字和取消当前运算操作的功能1个说明按钮:位于屏幕的右上角。

对应’About’按钮,点击该按钮,就会跳出一个对话框,上面显示本课程设计的小组成员们名字。

1个对话框:当点击‘About’按钮时,就会跳出来,对话框上显示四个课程设计小组成员的姓名,还有一个“OK“按钮,点击“OK”按钮就会结束当前的对话框,关闭对话框。

功能说明:1、数字键被按下去时,在编辑框内显示输入的数,这里需要注意的是,编辑框内的内容时字符串的形式,例如按下12时,并不是表示数字12,而是字符串“12”,先是按下‘1’键,再按下‘2’键,按下第二个键的时候不能将编辑框的第一个数覆盖掉,而是要接到第一个数后面。

2、当运算符按钮被按下时,把按下去之前的编辑框的字符串转化成负浮点数形式保存在var[]中,然后将编辑框显示’+’,如果运算符被按下了两次,表示之前已经有两个变量要进行了计算,直接显示结算结果。

3、当按下"1/X",和"X^2"时,并不增加变量的个数,只是将原先变量运算后的结果覆盖原先变量,参加后续的计算。

4、按下"About"键是,会跳出一个对话框,该对话框支持移动,故可以将其拖到屏幕任意位子,点下对话框上的"OK"键,就会关闭对话框。

之后再点下"About"键后对话框优惠弹出来。

三、相关介绍说明a)、STM32F103ZT6E介绍:ARM 32位Cortex-M3 微处理器,72MHz频率, 512kB Flash, 64kB SRAM,灵活的静态存储器控制器存储器:SRAM, PSRAM, NOR 和NAND Flash,PLL, 内置的RC正当频率为8MHz 和32kHz, 实时时钟,嵌套中断控制器, 节电模式, JTAG 和SWD两种模式,4个同步16位计时器与输入捕获, 输出比较和PWM波,2个16位的高级定时器, 2个16位的基本定时器, 2 个16位的看门狗定时器,系统时钟定时器, 3个SPI/I2S模块, 2个I2C模块, 5个USART模块, 一个USB 2.0 全速接口,一个CAN 2.0B Active, 3个112位16通道A/D 控制器, 2个12位的D/A 控制器, 1个SDIO接口, 快速的I/O 口。

b)、uCOS介绍:μC/OS-II是一种可移植的,可植入ROM的,可裁剪的,抢占式的,实时多任务操作系统内核。

它被广泛应用于微处理器、微控制器和数字信号处理器。

μC/OS-II的前身是μC/OS,最早出自于1992 年美国嵌入式系统专家Jean brosse 在《嵌入式系统编程》杂志的5 月和6 月刊上刊登的文章连载,并把μC/OS的源码发布在该杂志的B B S 上。

μC/OS 和μC/OS-II 是专门为计算机的嵌入式应用设计的,绝大部分代码是用C语言编写的。

CPU 硬件相关部分是用汇编语言编写的、总量约200行的汇编语言部分被压缩到最低限度,为的是便于移植到任何一种其它的CPU上。

用户只要有标准的ANSI 的C交叉编译器,有汇编器、连接器等软件工具,就可以将μC/OS-II嵌入到开发的产品中。

μC/OS-II 具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点,最小内核可编译至2KB 。

μC/OS-II 已经移植到了几乎所有知名的CPU 上。

严格地说uC/OS-II只是一个实时操作系统内核,它仅仅包含了任务调度,任务管理,时间管理,内存管理和任务间的通信和同步等基本功能。

没有提供输入输出管理,文件系统,网络等额外的服务。

但由于uC/OS-II良好的可扩展性和源码开放,这些非必须的功能完全可以由用户自己根据需要分别实现。

uC/OS-II目标是实现一个基于优先级调度的抢占式的实时内核,并在这个内核之上提供最基本的系统服务,如信号量,邮箱,消息队列,内存管理,中断管理等。

uC/OS-II以源代码的形式发布,但并不意味着它是开源软件。

你可以将其用于教学和私下研究(peaceful research);但是如果你将其用于商业用途,那么你必须通过Micrium获得商用许可。

c)、uCGUI简介UCGUI是一种嵌入式应用中的图形支持系统。

它设计用于为任何使用LCD图形显示的应用提供高效的独立于处理器及LCD控制器的图形用户接口,它适用单任务或是多任务系统环境, 并适用于任意LCD控制器和CPU下任何尺寸的真实显示或虚拟显示。

它的设计架构是模块化的,由不同的模块中的不同层组成,由一个LCD 驱动层来包含所有对LCD的具体图形操作。

UCGUI可以在任何的CPU上运行,因为它是100%的标准C代码编写的。

UCGUI能够适应大多数的使用黑白或彩色LCD的应用,它提供非常好的允许处理灰度的颜色管理。

还提供一个可扩展的2D图形库及占用极少RAM的窗口管理体系。

UCGUI的设计目标是为使用LCD作为图形显示装置的应用提供高效的/与LCD控制器独立及处理器独立的图形用户接口。

它适合于单任务环境及多任务环境,如私用的操作系统或是商业的RTOS(实时操做系统。

UCGUI以C源码形式提供,并适用于任意LCD控制器和CPU下任何尺寸的真实显示或虚拟显示。

它包含以下特性:[1] 适用任何8/16/32位CPU, 只要有相对应的标准C编译器.[2] 任何的控制器的LCD显示器(单色,灰度,颜色), 只要有适合的LCD驱动可用.[3] 在小模式显示时无须LCD控制器.[4] 所有接口支持使用宏进行配制.[5] 显示尺寸可定制.[6] 字符和位图可在LCD显示器上的任意起点显示,并不仅局限于偶数对齐的地址起点.[7] 程序在大小和速度上都进行了优化.[8] 编译时允许进行不同的优化.、、[9] 对于缓慢一些的LCD控制器, LCD显存可以映射到内存当中, 从而减少访问次数到最小并达到更高的显示速度.[10]清晰的设计架构.[11]支持虚拟显示, 虚拟显示可以比实际尺寸大(即放大).四、代码分析a)、uCOS部分代码建立两个任务/*OS两个任务堆栈区*/OS_STK MainTask1Stk[MAXSTKSIZE];OS_STK Task1Stk[MAXSTKSIZE];/*两个任务函数*/void MainTask1(void *pdata);void Task1(void *pdata);/*主函数,建立两个任务*/int main(){OSInit(); //OS初始化OSTaskCreate(MainTask1,(void *)0,&MainTask1Stk[MAXSTKSIZE-1],1); //建立任务OSTaskCreate(Task1,(void *)0,&Task1Stk[MAXSTKSIZE-1],2);OSStart();}/*任务一:初始化板子,初始化液晶,建立计算器图像界面*/void MainTask1(void *pdata){pdata=pdata;BSP_Init(); //硬件初始化GUI_Init(); //GUI初始化GUI_SetBkColor(GUI_BLACK); //设置彩屏背景颜色为黑色GUI_Clear();GUI_TOUCH_Calibrate(0,0,320,296,3854);GUI_TOUCH_Calibrate(1,0,240,249,3906); //屏幕校准// GUI_CURSOR_Show(); //显示光标WidgetCreate(); //建立控件GUI_Exec(); //显示控件for(;;){KeyCallback(edit); //响应控件}}/*任务二:专门为触屏和控件的更新而建立的任务*/void Task1(void *pdata){pdata=pdata;for(;;){WM_Exec(); //更新窗口GUI_TOUCH_Exec(); //更新触屏OSTimeDly(10);}}b)、计算器图形界面的相关代码/*GUI相关变量*/EDIT_Handle edit;BUTTON_Handle num0,num1,num2,num3,num4,num5,num6,num7,num8,num9;//数字0~9,BUTTON_Handle numPoint,numPlus,numSub,numMul,numDiv;//小数点,加号,减号,除号,乘号BUTTON_Handle clear,inverse,square,equal,about; //清除,倒数,平方,等于/*图形界面函数*/void WidgetCreate(void){/*画计算器边框*/GUI_SetPenSize(3); //设置之前宽度为3个像素GUI_SetColor(GUI_RED); //设置边框颜色为红色GUI_DrawLine(7,0,7,239); //画边框GUI_DrawLine(311,0,311,239);GUI_DrawLine(7,238,311,238);GUI_DrawLine(7,1,311,1);edit=EDIT_Create(15,5,225,50,'e',10,WM_CF_SHOW);//创建编辑框EDIT_SetFont(edit,&GUI_Font32B_ASCII); //设置编辑框内容字体大小num7=BUTTON_Create(15,60,50,35,'7',WM_CF_SHOW);//创建数字7的按钮BUTTON_SetFont(num7,&GUI_Font24_ASCII); //设置字体24号BUTTON_SetText(num7,"7"); //按钮上显示7 BUTTON_SetTextColor(num7,0,GUI_WHITE); //设置字体颜色BUTTON_SetBkColor(num7,0,GUI_DARKBLUE); //设置按钮背景颜色num4=BUTTON_Create(15,105,50,35,'4',WM_CF_SHOW);//创建数字4的按钮BUTTON_SetFont(num4,&GUI_Font24_ASCII);BUTTON_SetText(num4,"4");BUTTON_SetTextColor(num4,0,GUI_WHITE);BUTTON_SetBkColor(num4,0,GUI_DARKBLUE);num1=BUTTON_Create(15,150,50,35,'1',WM_CF_SHOW); //创建数字1的按钮BUTTON_SetFont(num1,&GUI_Font24_ASCII);BUTTON_SetText(num1,"1");BUTTON_SetTextColor(num1,0,GUI_WHITE);BUTTON_SetBkColor(num1,0,GUI_DARKBLUE);num0=BUTTON_Create(15,195,110,35,'0',WM_CF_SHOW);//创建数字0的按钮BUTTON_SetFont(num0,&GUI_Font24_ASCII);BUTTON_SetText(num0,"0");BUTTON_SetTextColor(num0,0,GUI_WHITE);BUTTON_SetBkColor(num0,0,GUI_DARKBLUE);num8=BUTTON_Create(74,60,50,35,'8',WM_CF_SHOW); //创建数字8的按钮BUTTON_SetFont(num8,&GUI_Font24_ASCII);BUTTON_SetText(num8,"8");BUTTON_SetTextColor(num8,0,GUI_WHITE);BUTTON_SetBkColor(num8,0,GUI_DARKBLUE);num5=BUTTON_Create(74,105,50,35,'5',WM_CF_SHOW); //创建数字5的按钮BUTTON_SetFont(num5,&GUI_Font24_ASCII);BUTTON_SetText(num5,"5");BUTTON_SetTextColor(num5,0,GUI_WHITE);BUTTON_SetBkColor(num5,0,GUI_DARKBLUE);num2=BUTTON_Create(74,150,50,35,'2',WM_CF_SHOW); //创建数字2的按钮BUTTON_SetFont(num2,&GUI_Font24_ASCII);BUTTON_SetText(num2,"2");BUTTON_SetTextColor(num2,0,GUI_WHITE);BUTTON_SetBkColor(num2,0,GUI_DARKBLUE);num9=BUTTON_Create(133,60,50,35,'9',WM_CF_SHOW); //创建数字9的按钮BUTTON_SetFont(num9,&GUI_Font24_ASCII);BUTTON_SetText(num9,"9");BUTTON_SetTextColor(num9,0,GUI_WHITE);BUTTON_SetBkColor(num9,0,GUI_DARKBLUE);num6=BUTTON_Create(133,105,50,35,'6',WM_CF_SHOW);//创建数字6的按钮BUTTON_SetFont(num6,&GUI_Font24_ASCII);BUTTON_SetText(num6,"6");BUTTON_SetTextColor(num6,0,GUI_WHITE);BUTTON_SetBkColor(num6,0,GUI_DARKBLUE);num3=BUTTON_Create(133,150,50,35,'3',WM_CF_SHOW); //创建数字3的按钮BUTTON_SetFont(num3,&GUI_Font24_ASCII);BUTTON_SetText(num3,"3");BUTTON_SetTextColor(num3,0,GUI_WHITE);BUTTON_SetBkColor(num3,0,GUI_DARKBLUE);numPoint=BUTTON_Create(133,195,50,35,'.',WM_CF_SHOW);//创建小数点.的按钮BUTTON_SetFont(numPoint,&GUI_Font24_ASCII);BUTTON_SetText(numPoint,".");BUTTON_SetTextColor(numPoint,0,GUI_WHITE);BUTTON_SetBkColor(numPoint,0,GUI_DARKBLUE);numDiv=BUTTON_Create(192,60,50,35,'/',WM_CF_SHOW);//创建除号/的按钮BUTTON_SetFont(numDiv,&GUI_Font24_ASCII);BUTTON_SetText(numDiv,"/");numMul=BUTTON_Create(192,105,50,35,'*',WM_CF_SHOW);//创建乘号*的按钮BUTTON_SetFont(numMul,&GUI_Font24_ASCII);BUTTON_SetText(numMul,"*");numSub=BUTTON_Create(192,150,50,35,'-',WM_CF_SHOW);//创建减号-的按钮BUTTON_SetFont(numSub,&GUI_Font24_ASCII);BUTTON_SetText(numSub,"-");numPlus=BUTTON_Create(192,195,50,35,'+',WM_CF_SHOW); //创建加好+的按钮BUTTON_SetFont(numPlus,&GUI_Font24_ASCII);BUTTON_SetText(numPlus,"+");clear=BUTTON_Create(251,60,50,35,'c',WM_CF_SHOW); //创建清除键clear的按钮BUTTON_SetFont(clear,&GUI_Font24_ASCII);BUTTON_SetText(clear,"clear");BUTTON_SetBkColor(clear,0,GUI_YELLOW);inverse=BUTTON_Create(251,105,50,35,'i',WM_CF_SHOW); //创建倒数1/X的按钮BUTTON_SetFont(inverse,&GUI_Font24_ASCII);BUTTON_SetText(inverse,"1/X");square=BUTTON_Create(251,150,50,35,'s',WM_CF_SHOW);//创建平方X^2的按钮BUTTON_SetFont(square,&GUI_Font24_ASCII);BUTTON_SetText(square,"X^2");equal=BUTTON_Create(251,195,50,35,'=',WM_CF_SHOW);//创建等号=的按钮BUTTON_SetFont(equal,&GUI_Font24_ASCII);BUTTON_SetText(equal,"=");BUTTON_SetBkColor(equal,0,GUI_YELLOW);about=BUTTON_Create(249,20,57,30,'a',WM_CF_SHOW); //创建说明信息about 的按钮BUTTON_SetFont(about,&GUI_Font24_ASCII);BUTTON_SetText(about,"About");BUTTON_SetBkColor(about,0,GUI_LIGHTGRAY);}c)、按键响应代码/*按钮响应函数*/void KeyCallback(EDIT_Handle obj){/*重画边框,因为控件在最上层,会把下层的图案覆盖掉*/GUI_SetPenSize(3);GUI_SetColor(GUI_RED);GUI_DrawLine(7,0,7,239);GUI_DrawLine(311,0,311,239);GUI_DrawLine(7,238,311,238);GUI_DrawLine(7,1,311,1);switch (GUI_WaitKey()){case '0':if(operaFlag==1) //如果是刚操作完运算符号后的数,先把编辑框清掉{EDIT_SetText(obj,NULL);operaFlag=0;}EDIT_GetText(obj,editBuf,10);if((*editBuf!='0')) //保证不会出现001这样的情况{EDIT_AddKey(obj,'0');}break;case '1':if(operaFlag==1){EDIT_SetText(obj,NULL);operaFlag=0;}EDIT_GetText(obj,editBuf,10);if((*editBuf=='0')&&(*(editBuf+1)!='.'))//保证不会出现.123这样的情况{EDIT_SetText(obj,NULL);}EDIT_AddKey(obj,'1');break;case '2':if(operaFlag==1){EDIT_SetText(obj,NULL);operaFlag=0;}EDIT_GetText(obj,editBuf,10);if((*editBuf=='0')&&(*(editBuf+1)!='.')){EDIT_SetText(obj,NULL);}EDIT_AddKey(obj,'2');break;case '3':if(operaFlag==1){EDIT_SetText(obj,NULL);operaFlag=0;}EDIT_GetText(obj,editBuf,10);if((*editBuf=='0')&&(*(editBuf+1)!='.')){EDIT_SetText(obj,NULL);}EDIT_AddKey(obj,'3');break;case '4':if(operaFlag==1){EDIT_SetText(obj,NULL);operaFlag=0;}EDIT_GetText(obj,editBuf,10);if((*editBuf=='0')&&(*(editBuf+1)!='.')){EDIT_SetText(obj,NULL);}EDIT_AddKey(obj,'4');break;case '5':if(operaFlag==1){EDIT_SetText(obj,NULL);operaFlag=0;}EDIT_GetText(obj,editBuf,10);if((*editBuf=='0')&&(*(editBuf+1)!='.')){EDIT_SetText(obj,NULL);}EDIT_AddKey(obj,'5');break;case '6':if(operaFlag==1){EDIT_SetText(obj,NULL);operaFlag=0;}EDIT_GetText(obj,editBuf,10);if((*editBuf=='0')&&(*(editBuf+1)!='.')){EDIT_SetText(obj,NULL);}EDIT_AddKey(obj,'6');break;case '7':if(operaFlag==1){EDIT_SetText(obj,NULL);operaFlag=0;}EDIT_GetText(obj,editBuf,10);if((*editBuf=='0')&&(*(editBuf+1)!='.')){EDIT_SetText(obj,NULL);}EDIT_AddKey(obj,'7');break;case '8':if(operaFlag==1){EDIT_SetText(obj,NULL);operaFlag=0;}EDIT_GetText(obj,editBuf,10);if((*editBuf=='0')&&(*(editBuf+1)!='.')){EDIT_SetText(obj,NULL);}EDIT_AddKey(obj,'8');break;case '9':if(operaFlag==1){EDIT_SetText(obj,NULL);operaFlag=0;}EDIT_GetText(obj,editBuf,10);if((*editBuf=='0')&&(*(editBuf+1)!='.')){EDIT_SetText(obj,NULL);}EDIT_AddKey(obj,'9');break;case '.':if(operaFlag==1){EDIT_SetText(obj,NULL);operaFlag=0;}EDIT_GetText(obj,editBuf,10);if(*editBuf!=NULL) //保证不会出现.123情况{EDIT_AddKey(obj,'.');}break;case 'i': //倒数operaFlag=1;var[varCnt]=StoF();var[varCnt]=1/var[varCnt];result=var[varCnt];FtoS();EDIT_SetText(obj,editBuf);break;case 's': //平方operaFlag=1;var[varCnt]=StoF();var[varCnt]=var[varCnt]*var[varCnt];result=var[varCnt];FtoS();EDIT_SetText(obj,editBuf);break;case '+': //加法typeFlag='+';var[varCnt++]=StoF(); //把输入到编辑框内的内容,转化成浮点数,保存在var[]中EDIT_SetText(obj,"+"); //编辑框显示运算符operaFlag=1;if(varCnt==2) //varCnt=2,表示var[]已经被填满,可以做运算操作了{result=var[0]+var[1];FtoS();EDIT_SetText(obj,editBuf);if(numDir==0) //判断结果正负{EDIT_SetCursorAtChar(obj,0);//如果是符号EDIT_AddKey(obj,'-'); //在编辑框数值最前面加'-'号}varCnt=0;}break;case '-': //减法typeFlag='-';operaFlag=1;var[varCnt++]=StoF();EDIT_SetText(obj,"-");if(varCnt==2){result=var[0]-var[1];FtoS();EDIT_SetText(edit,editBuf);if(numDir==0){EDIT_SetCursorAtChar(obj,0);EDIT_AddKey(obj,'-');}varCnt=0;}break;case '*': //乘法typeFlag='*';operaFlag=1;var[varCnt++]=StoF();EDIT_SetText(obj,"*");if(varCnt==2){result=var[0]*var[1];FtoS();EDIT_SetText(edit,editBuf);if(numDir==0){EDIT_SetCursorAtChar(obj,0);EDIT_AddKey(obj,'-');}varCnt=0;}break;case '/': //除法typeFlag='/';operaFlag=1;var[varCnt++]=StoF();EDIT_SetText(obj,"/");if(varCnt==2){result=var[0]/var[1];FtoS();EDIT_SetText(edit,editBuf);if(numDir==0){EDIT_SetCursorAtChar(obj,0);EDIT_AddKey(obj,'-');}varCnt=0;}break;case '=': //等于operaFlag=1;var[varCnt++]=StoF();switch(typeFlag){case '+':result=var[0]+var[1];break;case '-':result=var[0]-var[1];break;case '*':result=var[0]*var[1];break;case '/':result=var[0]/var[1];break;default:break;}typeFlag=0;FtoS();EDIT_SetText(edit,editBuf);if(numDir==0){EDIT_SetCursorAtChar(obj,0);EDIT_AddKey(obj,'-');}varCnt=0;break;case 'c': //清除operaFlag=1;EDIT_SetText(obj,NULL);break;case 'a': //关于ExecDialog();//执行对话框default:break;}}d)、函数从编辑框读取字符串或把字符串写入到编辑框的,浮点数到字符串,和字符串到浮点数的相关代码:/*字符串转浮点数*/float StoF(void){float tranf=0.0,a=0.0;int i,p=0;for(i=0;i<10;i++){editBuf[i]=0;}i=0;EDIT_GetText(edit,editBuf,11);tranf=editBuf[i]-'0';if(strstr(editBuf,".")!=NULL){while((editBuf[++i]!='.')&&i<10){tranf*=10;tranf=tranf+(editBuf[i]-'0');}}else{while((editBuf[++i]!='\0')&&i<10){tranf*=10;tranf=tranf+(editBuf[i]-'0');}}for(i=0;i<10;i++){if(editBuf[i]=='.'){p=i;break;}}if(p>0){for(i=9;i>p;i--){if(editBuf[i]!=0)a+=(editBuf[i]-'0');a/=10;}}tranf=tranf+a;return tranf;}/*浮点数转字符串*/int FtoS(void){int s1=0,sum=0,p=0,i=1;float s2;for(i=0;i<10;i++){editBuf[i]=0;}i=1;if(result<0){result=-result;numDir=0;}else{numDir=1;}s1=(int)result;s2=(float)((int)(result*10000-s1*10000))/10000;while(s1){s1/=10;sum++;}if(s1>10){EDIT_SetText(edit,"Overflow");return 0;}s1=(int)result;if(s2!=0) //说明有小数{if(sum==0){editBuf[sum]='0';sum+=1;}editBuf[sum]='.';while(s2!=0) //小数部分{if(sum+i<10){s2*=10;p=(int)s2; //取整editBuf[sum+i]=p+'0';s2=(s2*10000-p*10000)/10000; //取小数部分i++;}else{break;}}}else //没有小数{editBuf[sum+1]=0;editBuf[sum+2]=0;editBuf[sum+3]=0;}while(sum--!=0) //整数部分{editBuf[sum]=s1%10+'0';s1=s1/10;}return 1;}e)、关于dialog对话框的显示代码/*建立一个对话框dialog,存放组员信息*/static const GUI_WIDGET_CREATE_INFO DialogList[]={{FRAMEWIN_CreateIndirect,"GroupMember:",'f',60,60,190,120,FRAMEWIN_CF_MOVEABLE,0},{BUTTON_CreateIndirect,"OK",GUI_ID_OK, 68,60,60,20,0,0},{TEXT_CreateIndirect,"张昌世", '1',40,10,75,25,TEXT_CF_LEFT,0},{TEXT_CreateIndirect,"刘锋", '2',100,10,75,25,TEXT_CF_LEFT,0},{TEXT_CreateIndirect,"陈奇英", '3',40,40,75,25,TEXT_CF_LEFT,0},{TEXT_CreateIndirect,"彭桂贤", '4',100,40,75,25,TEXT_CF_LEFT,0}, };/*执行对话框*/void ExecDialog(void){WM_SetDesktopColor(GUI_BLACK);//设置背景颜色GUI_ExecDialogBox(DialogList,GUI_COUNTOF(DialogList),&Callback,0,0,0);/* GUI_COUNTOF(DialogList):计算DialogList大小,后面3个0表示:第一个0表示没有父窗口,故后面为(0,0)*/}/*对话框的响应函数*/void Callback(WM_MESSAGE *pMsg){int NCode,Id;WM_HWIN text1,text2,text3,text4;WM_HWIN hWin=pMsg->hWin;if(pMsg->MsgId==WM_INIT_DIALOG){text1=WM_GetDialogItem(hWin,'1'); //获得对话框内控件的句柄text2=WM_GetDialogItem(hWin,'2');text3=WM_GetDialogItem(hWin,'3');text4=WM_GetDialogItem(hWin,'4');TEXT_SetFont(text1,&GUI_FontHZ_SimSun_14);//设置TEXT字体TEXT_SetFont(text2,&GUI_FontHZ_SimSun_14);TEXT_SetFont(text3,&GUI_FontHZ_SimSun_14);TEXT_SetFont(text4,&GUI_FontHZ_SimSun_14);}if(pMsg->MsgId==WM_NOTIFY_PARENT){Id=WM_GetId(pMsg->hWinSrc);NCode=pMsg->Data.v;if(NCode==WM_NOTIFICATION_RELEASED){if(Id==GUI_ID_OK) //响应按钮{GUI_EndDialog(hWin,0); //结束对话框}}FRAMEWIN_SetFont(hWin, &GUI_Font24B_ASCII);//设置窗体的题目大小}}五、程序不足与分析程序一路写下来,遇到许许多多的瓶颈,让我曾一度放弃编写计算器第一个问题:从编辑框获取文本存储失败。

相关文档
最新文档