模拟简单计算器实训
- 格式:doc
- 大小:900.00 KB
- 文档页数:12
Linux应用与编程实习报告学院名称专业班级学生姓名学号指导教师山东科技大学一、实习题目: B2-简单计算器二、实习时间:19周~ 20周实习地点: J13- 128三、实习任务:实现一个简单计算器,计算器包括加、减、乘、除四种运算。
用户通过鼠标进行数据输入,输入的数据以及计算结果显示在文本框中四、小组分工说明:独立完成五、实习成绩六、指导教师对实习的评语:指导教师(签章):2015年月日目录1. 概述 -------------------------------------------------------- 42. 相关技术 -------------------------------------------------- 42.1 QT中信号和槽 -------------------------------------- 42.2 字符串输出数据组 -------- 错误!未定义书签。
3. 需求分析 -------------------------------------------------- 54. 总体设计与详细设计 ----------------------------------- 54.1 系统模块划分 --------------------------------------- 54.2 主要功能模块 --------------------------------------- 55. 编码实现 -------------------------------------------------- 6 6.测试情况说明------------------------------------------- 157. 实训中遇到的主要问题及解决方法 ---------------- 168. 实训收获与体会 ---------------------------------------- 161. 概述1.1 实训项目简介本次实训项目是应用Linux系统中的QT编译器编写一个界面简洁,操作简单的简易计算器。
计算机c语言实训报告计算机c语言实训报告(通用3篇)计算机c语言实训报告篇1一、课题名称:简洁计算器设计一个简洁的程序来模拟计算器的功能。
二、设计目的:1、通过理论学问与实际需求相结合,编辑解决一些日常中的实际问题,培育初步的独立分析和设计力量。
2、了解应用程序设计解决实际问题的详细过程和实现方法,把握应用C语言进行程序设计的基本规范;3、重点把握C语言的程序编写、函数设计、算法设计和程序调试方法;4、初步把握系统开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能。
三、设计任务:1、通过结构体数组和共用体数组来存放输入的每一数字或运算符号的记录(包括1、2、3等数字,+、--、_、等运算符号),然后将其信息存入文件中。
输入一个算术计算式,就在屏幕上显示结果。
2、输入简洁的加减乘除算术计算式,并在屏幕上显示计算结果;四、设计要求:1、用C语言实现程序设计并进行调试;2、画出查询模块的流程图;3、系统的各个功能模块要求用函数的形式实现;4、界面友好(良好的人机互交)。
5、完成设计说明书(A4)。
五、代码设计:#include stdio.h main { float x,y;char operator;printf(x,yun suan fu ,y: ); scanf(%f%c%f,x,operator,y); switch(operator){case +: printf(%.2f+%.2f=%.2f,x,y,x+y); break; case -:printf(%.2f-%.2f=%.2f,x,y,x-y); break; case _:printf(%.2f_%.2f=%.2f,x,y,x_y); break; case /: if(y==0)printf(chushushilingwuyiyi); elseprintf(%.2f/%.2f=%.2f,x,y,x/y); break;default: printf(yunsunfuwuxiao); } }?七、设计总结:学习C程序这门课一个学期了,这是我们学的第一门专业课,所以作为我这个计算机系的同学来说当然非常重要,老师在第一节课说过,C语言是计算机的基础,大多数软件都需要用C语言来编写,通过一个学期的学习,使我初步把握了一些关于这门课的学问这次的课程设计是对我们一个学期来所学的学问的综合考察,里面涉及到了我们大多数所学学问。
简易计算器实验报告一、实验目的本次实验的目的是设计并实现一个简易计算器,能够进行基本的四则运算(加、减、乘、除),以及处理括号的优先级运算,提高对程序设计和逻辑思维的理解与应用能力。
二、实验原理1、四则运算的优先级规则在数学运算中,先计算括号内的表达式,然后按照先乘除后加减的顺序进行计算。
乘除法的优先级高于加减法,如果在同一级运算中,按照从左到右的顺序进行。
2、数据结构的选择使用栈(Stack)数据结构来存储操作数和运算符。
栈具有先进后出的特点,非常适合处理表达式中的括号和优先级。
3、算法思路首先,将输入的表达式进行解析,将数字和运算符分别存储到不同的栈中。
然后,根据运算符的优先级进行计算,将计算结果重新压入栈中,直到表达式计算完毕。
三、实验设备及环境1、编程工具:选择了 Python 语言作为主要的编程工具,使用PyCharm 集成开发环境进行代码编写和调试。
2、操作系统:Windows 10 操作系统。
四、实验步骤1、定义数据结构定义两个栈,一个用于存储操作数(operandStack),一个用于存储运算符(operatorStack)。
2、表达式解析遍历输入的表达式字符串,将数字转换为整数并压入操作数栈,将运算符压入运算符栈。
遇到左括号直接压入运算符栈,遇到右括号则进行括号内的运算。
3、运算处理当运算符栈不为空时,取出栈顶的运算符和两个操作数进行计算。
根据运算符的优先级进行相应的运算,将结果压入操作数栈。
4、最终结果当表达式解析完毕后,操作数栈中的唯一元素即为表达式的计算结果。
五、代码实现```pythonclass SimpleCalculator:def __init__(self):selfoperandStack =selfoperatorStack =def calculate(self, expression):for char in expression:if charisdigit():selfoperandStackappend(int(char))elif char in '+/()':if char =='(':selfoperatorStackappend(char)elif char ==')':while selfoperatorStack-1!='(':operator = selfoperatorStackpop()operand2 = selfoperandStackpop()operand1 = selfoperandStackpop()result = selfperformOperation(operand1, operand2, operator)selfoperandStackappend(result)selfoperatorStackpop()else:while selfoperatorStack and selfhasHigherPrecedence(selfoperatorStack-1, char):operator = selfoperatorStackpop()operand2 = selfoperandStackpop()operand1 = selfoperandStackpop()result = selfperformOperation(operand1, operand2, operator)selfoperandStackappend(result)selfoperatorStackappend(char)while selfoperatorStack:operator = selfoperatorStackpop()operand2 = selfoperandStackpop()operand1 = selfoperandStackpop()result = selfperformOperation(operand1, operand2, operator)selfoperandStackappend(result)return selfoperandStackpop()def hasHigherPrecedence(self, op1, op2):if op1 in '/' and op2 in '+':return Trueelif op1 in '+' and op2 in '+':return Falseelif op1 in '/' and op2 in '/':return Falsereturn Falsedef performOperation(self, operand1, operand2, operator):if operator =='+':return operand1 + operand2elif operator =='':return operand1 operand2elif operator =='':return operand1 operand2elif operator =='/':if operand2 == 0:raise ValueError("除数不能为 0")return operand1 / operand2if __name__ =="__main__":calculator = SimpleCalculator()expression ="2 + 3 (4 1) / 2"result = calculatorcalculate(expression)print("计算结果:", result)```六、实验结果与分析1、测试用例及结果输入表达式:"2 + 3 4",计算结果:14输入表达式:"(2 + 3) 4",计算结果:20输入表达式:"5 2 3",计算结果:-1输入表达式:"10 / 2 + 1",计算结果:62、结果分析对于简单的四则运算表达式,计算器能够正确计算出结果。
八年级《数学》学教案(课题:用计算器模拟实验)学习目标1.知识目标探索如何使用计算器模拟实验,进一步体会认识频率的特点及频率与概率的关系. 2.能力目标经历探究实验过程,养成随机观念,增强自主探索能力. 3.情感目标在学习过程中学会与他人合作,并能与他人交流思维.学习重点、难点重点:进一步体会随机事件的特点及事件发生的可能性.难点:理解现实世界中随机事件的特点,树立一定的随机观念.预习导航:1. 掷硬币实验,当实验次数增大时,“正面向上”的频率逐渐稳定到 ,即频率稳定到 .2. 掷一枚均匀的骰子,P(掷出1点)= ,P(掷出2点)= ,P(掷出3点)= , P(掷出4点)= ,P(掷出5点)= ,P(掷出6点)= .3. 掷两枚均匀的硬币,“得到两个面相同”的概率为 , “得到两个面不同”的概率为 .学习过程一、预习导航假如你们班有50名学生,从中选出1名学生做代表,要求每名学生都有机会被选到。
如何设计方案? 二、合作探究、展示交流活动一: 利用随机数模拟掷骰子实验,请你和同学合作,完成实验.两人一组模拟掷骰子,做120次实验,观察1到6点出现的频数各是多少?将相邻5组的实验数据汇总在一起,填写下表.问题1:当实验总次数为120次时,“1点”“2点”……“6点”的频率是否接近61?不同的实验结果是否相同?利用学生们最常见的一个例子,引导学生理解什么是“随机数”并掌握计算器的使用方法。
问题2:当实验总次数为600次时,“1点”“2点”……“6点”的频率是否更接近61?不同的实验结果是否相同?问题3:对掷骰子实验中事件的频率与概率有什么联系呢?归纳结论:当实验次数足够多时,事件A 的频率稳定到它的 . 所以我们常用频率估计事件发生的概率,实验次数越多,越有可能得到较准确的估计. 三、巩固练习1. .老师将一些白球和黑球放人袋中搅匀,他说:“蒙上 眼睛从袋中取出一个球,正好是一个黑球的概率是0.6”与这句话最接近的意思是( )A.取出一个球,是黑球的可能性大.B.假如这个游戏重复100次,有6次左右会摸出黑球.C.假如这个游戏重复200次,有6次左右全摸出黑球.D.假如这个游戏重复1000次,有600次左右会摸 出黑球. 2.从一副没有大、小王的扑克牌中任意抽一张,放回搅匀后再抽,下列说法中合理的是( )①如果抽取1000次,抽出四种花色的次数会比较接近;②如果抽取1000次,抽出四种花色的次数一定相等;③如果抽取4次,可能全是黑桃;④如果抽取4次,不可能全是黑挑. A. ①② B.①③ C.③④ D.②3.在一个不透明的袋中装有大小一样的红球和黑球 各一个,从中摸出一个球恰好为红球的概率与一枚 均匀硬币抛起后落地时正面朝上的概率( )A.相等B.摸出红球的概率大于硬币正面朝上的概率C.摸出红球的概率小于硬币正面朝上的概率D.不能确定4.下列说法正确的是( )A .一颗质地均匀的骰子已连续抛掷了2000次,其中,抛掷出5点的次数最少,则第2001次一定抛掷出5点.B.某种彩票中奖的概率是1%,因此买100张该种彩票一定会中奖.C.天气预报说明天下雨的概率是50%,所以明天将有一半时间在下雨.D .抛掷一枚图钉,钉尖触地和钉尖朝上的概率不 相等.教师要关注学生操作是否正确,统计方法是否合理。
Linux应用与编程实习报告学院名称专业班级学生姓名学号指导教师山东科技大学一、实习题目: B2-简单计算器二、实习时间:19周~ 20周实习地点: J13- 128三、实习任务:实现一个简单计算器,计算器包括加、减、乘、除四种运算。
用户通过鼠标进行数据输入,输入的数据以及计算结果显示在文本框中四、小组分工说明:独立完成五、实习成绩六、指导教师对实习的评语:指导教师(签章):2015年月日目录1. 概述 -------------------------------------------------------- 42. 相关技术 -------------------------------------------------- 42.1 QT中信号和槽 -------------------------------------- 42.2 字符串输出数据组 -------- 错误!未定义书签。
3. 需求分析 -------------------------------------------------- 54. 总体设计与详细设计 ----------------------------------- 54.1 系统模块划分 --------------------------------------- 54.2 主要功能模块 --------------------------------------- 55. 编码实现 -------------------------------------------------- 6 6.测试情况说明------------------------------------------- 147. 实训中遇到的主要问题及解决方法 ---------------- 158. 实训收获与体会 ---------------------------------------- 161. 概述1.1 实训项目简介本次实训项目是应用Linux系统中的QT编译器编写一个界面简洁,操作简单的简易计算器。
简易计算器实训报告(一)简易计算器实训报告实训目的本次简易计算器实训的目的在于让学生了解python语言的基本语法和运算符,同时通过实践操作,提升学生的编程思维和实际应用能力。
实训内容本次实训内容主要包括以下方面:1.简易计算器的基本功能:加、减、乘、除。
2.计算器的界面设计与功能实现。
3.错误处理与异常捕获。
实训步骤步骤一:设计计算器界面在本次实训中,我们采用tkinter库来设计计算器的用户界面。
具体步骤如下:1.创建一个窗口;2.在窗口中添加各种按钮和文本框,用于输入和显示计算结果;3.将按钮按照功能分类,为每个按钮设置对应的事件处理函数。
步骤二:实现基本计算功能根据下拉菜单中所选的运算符,我们可以对输入的两个数进行相应的计算。
具体实现方法如下:1.在计算器窗口中添加一个下拉菜单,用于选择运算符;2.根据所选运算符,获取相应的输入数据,并调用对应的计算函数;3.将计算结果输出到窗口中。
步骤三:错误处理与异常捕获在实际应用中,我们不能保证用户输入的一定是数字,所以我们需要对输入做一些错误处理。
具体方法如下:1.在获取用户输入时,先对输入的字符串进行判断,如果用户输入不合法,弹出提示窗口;2.对于除数为0等异常情况进行相应的异常捕获处理,避免程序崩溃。
实训总结通过本次实训,我们学习了python语言的基本语法和运算符,并通过实践操作,学习了tkinter库的使用方法。
通过本次实训,我们还深入了解了计算器的界面设计和功能实现过程。
此外,我们也学会了一些常用的错误处理和异常捕获方法。
未来拓展本次实训只是简易计算器的基本实现,还有很多可以拓展的功能,如:1.添加科学记数法、三角函数、对数函数、平方根等高级数学运算;2.设计多个数字输入框,实现多操作数的计算;3.添加历史记录功能,记录用户计算过程和结果;4.将计算器移植到移动设备或网页上,提供更为便捷的计算服务。
5.添加输入历史记录及回显功能,便于用户查错和复查。
简单计算器试验一、设计分析:1.本程序使用VB语言编成,只使用了一个窗体模块,完成模仿市面简单计算器的功能。
例如加减乘除,开方,求倒数,求百分比,并可连贯运算这些功能。
2.为了能在windows开始程序菜单中运行它,深入一点了解面向对象开发应用程序。
使用vb6.0的部署发布程序做了一个简单的安装包,可以在Windows Xp 下安装并运行。
(SetupFactory V8.1打包工具制作的vb软件安装包专业些。
)3.界面友好易操作。
(可以使用键盘输入数字进行运算,比较方便操作!)二、程序结构流程图:退格键显示窗口清除键重启键开方键求百分键求倒数键符号键数字键小数点键加法键等于键三、各模块功能及程序说明:1.这个程序是依照计算机处理器内ALU处理数据的原理设计,根据输入的数据,来判断怎样操作、怎样送入操作数。
例如:如果是双操作数则会将操作数A 和操作数B的运算结果送入操作数A,标志状态变量重新按情况设置。
2.比较起来虽然简单的多了,但是这种算法很经典。
3.数字键的事件过程主要是靠调用number(num)过程来实现,一个控件数组和“0”键组成。
4.加、减、乘、除运算键的事件过程主要是靠调用Calculation()过程来实现。
5.开方、求百分比等特殊运算键的事件过程主要是靠调用VB工具内相应VBA 函数来实现,例如sqr()函数。
6.关于退格键事件过程主要是用了字符串截取函数,由于当时未使用“&”来代替“+”作为连接运算符、未使用字符串匹配函数instr(),调试程序时增加了多行代码(由此可见工具内自带函数的方便之处)。
虽然很健康,但是感觉过长,时间又有限,当做经验吧,暂不改了。
7.接受键盘输入的运算操作是打开了建立了一个Form_KeyPress(KeyAscii)通用过程,根据KeyAscii的值响应相应事件。
8.在代码中针对每个过程都有简单注释;在代码的开头例如“'''operand ----------------------------操作数'''Calculation -------------------------计算”,这些都是帮助说明变量用途而写。
程序实习报告一、需求分析:编写简易计算器程序,主要实现四则运算,运算符号包括“—”,“+”,“/”,“*”,“(”,“)”,按照“先乘除后加减,先算括号内后算括号外,从左到右”的原则的原则进行计算。
考虑到程序的编写困难度,暂时不予考虑多位数的四则运算,也不考虑平方、阶乘、三角函数的运算。
只进行一位数的四则运算,所需要的内存空间不会很大,也就放弃空间不足自动添加空间的情况。
输入:输入一个只含一位数的四则运算式,以#结束,运算符只包括“—”,“+”,“*”,“/”,“(”,“)”。
输出:直接输出结果“结果是:”。
测试数据:例如9—(3—2)*3—1#二、概要设计:JI三、详细设计:1、主函数 首先定义两个栈,分别取名是OPTR,OPND ,其中OPTR存放字符,OPND 存放数字。
从键盘上获取键入字符cC!=#或 Gettop!='#"否输出结果结束是否是字符否小于等于大于开始将字符压入OPTR是返回栈顶元素比 C 的优先级出栈执行operate ,压栈脱括号将字符压入栈OPTR获取栈顶元素将optr中压入#作为栈底元素,然后从键盘上获取表达式的字符如果是数字,将该字符转化为数字,压入到栈opnd中。
如果是字符,和optr的栈顶元素比较优先级1,、栈顶元素优先级<键入的元素,该调用push()函数,将字符压入到optr栈中2、如果栈顶元素的优先级等于键入元素,则得知此符号为括号,调用pop()函数,将该字符栈中的栈顶元素退出,即为脱括号。
3、如果栈顶元素的优先级高于键入元素,调用pop()函数,分别将取两次数字栈的栈顶元素,pop(opnd,b),pop(opnd,a),,同时将optr中的栈顶元素去取出,pop(optr,theta),调用operate()函数,进行计算。
将operate(a,theta,b)压入到opnd栈中,继续进行循环。
直到#结束。
模块1、定义2中栈,定义栈,区分两种数据类型typedef struct {int stack[MAXSIZE];int top;}SqStack;模块2、定义两种出栈入栈函数,以便后来调用不同数据类型的pop(*s,x),.push(*s,*x);int Push1(SqStack *s,int x){ if(s->top>=MAXSIZE)printf("ERROR,Overflow!\n");else{s->stack [s->top ]=x;s->top++;}return 1;}模块3、Operate函数定义:operate函数,利用switch()语句来operate(int a,char b,int c) 写定义3个实参,int a,b char theta;{ theta代表运算符,依次判断运算符的+—switch(b) *,/,情况,进行运算,{ case'+':a=a+c;break; 令a= a+c,a=a-c,a=a*c,a=a/c, case'-':a=a-c;break; 返回a的值case'*':a=a*c;break;case'/':a=a/c;break; }return a;}模4、优先级判断将+—*/()#的优先级做成如下的图+'>', >','>','<','<','<','>','>',—'>','>','<','<','<','>','>',* '>','>','>','>','<','>','>',/ '>','>','>','>','<','>','>',( '<','<','<','<','<','=', 0 ,) '>','>','>','>', 0,'>','>',# '<','<','<','<','<', 0 ,'=',寻找优先级即将左表中的对应坐标用程序语言找到即可,设计一个二维数组,str[7[,[7],将字符进行定位,i,j 分别代表横纵坐标,利用switch,语句进行选择,对应的str[i][j]即为优先级符号,所以将str[i][j],作为函数的返回值调试中的问题:1、最初只定义了一种数据类型的栈,出栈入栈函数也只有一种int数据类型,导致之后的函数调用数据类型不匹配,无法识别。
《Java实训》设计报告电子信息工程学院专业:软件技术班级:1班实训:简单计算器项目名称一、项目需求本程序的主要功能:(1)单击“简单计算器”上的数字按钮(0~9)可以设置参和计算的运算数。
(2)单击“简单计算器”上的运算符按钮(+、-、*、/、1/x、sqrt、%)可以选择运算符号。
(3)单击“简单计算器”上的“=”按钮显示计算结果。
(4)单击“简单计算器”上的“C”按钮清空计算结果。
(5)单击“简单计算器”上的“Backspace”按钮删除输入的最后一个数字。
二、项目设计在设计计算器时,编写1个Java源文件:SimpleCalculator.java,计算器除了上述Java源文件所给出的类外,还需要Java系统提供的一些重要类,如JButton,JTextField等。
下面是Java源文件的总体设计。
SimpleCalculator(主类)SimpleCalculator类负责创建计算器的主窗口,该类含有main方法,计算器从该类开始执行。
SimpleCalculator类有3种类型的对象,分别是:JPanel、JButton、JTextField。
还有boolean canClick;是否单击double memd;int memi;double tempResult,result;显示的结果short op=0;1、SimpleCalculator类(主类)(1)数据和方法SimpleCalculator类是javax.swing包中JFrame的一个子类,并实现了ActionListener接口。
类中有关数据和方法的详细说明。
1)成员变量btnNumber是数组,该数组长度为10。
btnNumber数组中的“数字按钮”含有的数字依次为0~9。
每个“数字按钮”都注册有ActionEvent事件监听器。
2)方法main(String args[])方法是计算器程序运行的入口方法。
SimpleCalculator()是构造方法,负责完成窗口的初始化。
苏州市职业大学课程设计说明书名称___模拟简单计算器_______________2011 年12月26 日至2011年12月31 日共1 周院系__ 计算机工程系班级10嵌入式姓名系主任____李金祥教研室主任刘文芝指导教师徐丽华、刘文芝目录一.课程设计的目的与要求 (2)1.课程设计的目的 (2)2.课程设计的要求 (2)二.题目说明 (2)2.1开发背景 (3)2.2 开发工具介绍 (4)2.3 小组成员分工 (4)三.硬件方案 (5)3.1硬件设计 (5)3.2电路原理图 (7)四.软件设计 (8)4.1 模块划分 (8)4.2 模块结构图 (9)4.3 液晶显示模块 (9)4. 4 定时器模块 (6)五.运行结果分析与系统改进 (10)六.遇到的问题和解决方法 (11)七.课程设计总结 (11)八.参考文献 (11)一.课程设计的目的与要求1.课程设计的目的《单片机原理与应用》是一门专业技术基础课,是一门实践性很强的课,单片机课程设计要求将所学的理论知识通过实践加强理解和认识,提高学生们对单片机的认识,同时提高同学们的设计能力和实践动手能力。
同时《单片机原理与应用》也是一门应用性很强的专业课,其理论与实践技能是从事嵌入式专业技术工作的人员所不可少的。
本次课程设计选择AW60实验板进行模拟应用设计与开发,要求学生掌握使用 C 语言进行单片机程序设计和调试的方法,提高综合运用所学的理论知识独立分析和解决问题的能力。
同时也为了提高学生的学习能力,锻炼同学之间的合作能力。
2.课程设计的要求在本课程设计过程中要求学生:重视课程设计环节,用严谨、科学和踏实的工作态度对待课程设计的每一项任务;按照课程设计的题目要求,独立地完成各项任务,不允许相互抄袭;按时到机房上机,并接受教师的检查。
认真编写课程设计报告。
课程设计可以由2~4名同学合作完成一个课题。
全体成员应共同完成选题,确定设计思想,进行功能模块划分,然后由组长为各成员分配任务。
苏州市职业大学课程设计说明书名称___模拟简单计算器_______________2011 年12月26 日至2011年12月31 日共1 周院系__ 计算机工程系班级10嵌入式姓名系主任____李金祥教研室主任刘文芝指导教师徐丽华、刘文芝目录一.课程设计的目的与要求 (2)1.课程设计的目的 (2)2.课程设计的要求 (2)二.题目说明 (2)2.1开发背景 (3)2.2 开发工具介绍 (4)2.3 小组成员分工 (4)三.硬件方案 (5)3.1硬件设计 (5)3.2电路原理图 (7)四.软件设计 (8)4.1 模块划分 (8)4.2 模块结构图 (9)4.3 液晶显示模块 (9)4. 4 定时器模块 (6)五.运行结果分析与系统改进 (10)六.遇到的问题和解决方法 (11)七.课程设计总结 (11)八.参考文献 (11)一.课程设计的目的与要求1.课程设计的目的《单片机原理与应用》是一门专业技术基础课,是一门实践性很强的课,单片机课程设计要求将所学的理论知识通过实践加强理解和认识,提高学生们对单片机的认识,同时提高同学们的设计能力和实践动手能力。
同时《单片机原理与应用》也是一门应用性很强的专业课,其理论与实践技能是从事嵌入式专业技术工作的人员所不可少的。
本次课程设计选择AW60实验板进行模拟应用设计与开发,要求学生掌握使用 C 语言进行单片机程序设计和调试的方法,提高综合运用所学的理论知识独立分析和解决问题的能力。
同时也为了提高学生的学习能力,锻炼同学之间的合作能力。
2.课程设计的要求在本课程设计过程中要求学生:重视课程设计环节,用严谨、科学和踏实的工作态度对待课程设计的每一项任务;按照课程设计的题目要求,独立地完成各项任务,不允许相互抄袭;按时到机房上机,并接受教师的检查。
认真编写课程设计报告。
课程设计可以由2~4名同学合作完成一个课题。
全体成员应共同完成选题,确定设计思想,进行功能模块划分,然后由组长为各成员分配任务。
整个设计期间,组长负责协调工作。
各小组成员明确自己的任务后,应独立完成设计、编码和调试。
课题设计完成后,小组成员要理解同组其他成员设计的源程序,熟练操作本组设计,各自完成课程设计说明书。
1、对系统进行功能需求分析;2、设计合理的模块结构和系统框架;3、编程简练,程序功能齐全,能正确运行;4、说明书、流程图要清楚;5、课题完成后必须按要求提交课程设计报告;二.题目说明我们选择的题目是:模拟简单计算器。
题目描述:用AW60实验板模拟计算器。
模拟一个简单计算器的功能,通过键盘按键输入参加运算的运算数和运算符号,运算算式及结果均在液晶显示器上输出。
1)输入:AW60实验板上有3*3键盘,自定义、分配键盘的9个按键,模拟简单计算器的按键输入。
2)输出:运算算式及结果均在液晶显示器上输出。
若输入不正确导致不能运算,输出提示信息。
在液晶显示的位置及方式自行定义。
3)时间要求:利用定时器实现将每次运算及结果显示控制在1分钟内完成,到一分钟后实现自动清屏并显示相关提示信息。
2.1开发背景在中国,嵌入式软件发展过程中,政府已充分认识到它的重要作用,并在政策、资金等方面给予了大力支持。
2004 年国家发改委、科技部、商务部联合颁布的《当前优先发展的高技术产业化重点领域指南》,把嵌入式软件产业作为国家发展的一个重要领域。
最近几年来,中国的嵌入式软件发展速度一直高于中国软件产业的发展速度和全球嵌入式软件的发展速度,在中国软件产业和全球嵌入式软件产业中所占的比重越来越大。
目前,中国嵌入式软件产业在整个软件产业中的比重已经超过了三分之一强。
从2006年至2010年,中国嵌入式软件产业规模仍将保持快速增长态势,年均复合增长率为25.8%,到2010年将达到3339.6亿元的规模。
中国嵌入式软件产业的发展面临着良好的发展环境与机遇,这包括政府的重视与扶植、信息产业与传统产业的融合机遇、垄断局面尚未形成、中国制造的良好基础、自由软件运动的兴起等等。
同时,不可否认的是长期以来,由于人才、宣传、资金等诸多问题以及嵌入式本身所特有的软硬结合特性,使嵌入式软件人才一直处于供不应求的状态。
《单片机原理与应用》这本书,第一章讲的是概述,一些关于嵌入式系统的知识;下一章讲的是AW60硬件最小系统与S08CPU,介绍AW60和S08CPU 的特点、寻址方式、内部寄存器、指令系统;接着说的是第一个样例程序及CODEWARRIOR,在CW下实现对小灯的控制;然后又讲的是串口通信接口SCI,说了一些关于中断处理的概念以及在S08CPU中怎么实现中断的、AW60中的中断编程方法;第五章讲的是GPIO的应用实例——键盘、LED、LCD,使用逐行扫描发去判断被按下的是哪个键值,八段数码管怎么去工作,实现显示效果的,点阵字符型LCD的特点和它的编程案例;第六章介绍定时器模块,实现了电子表的正常运行,知道了它的基本原理;还有串行外设接口SPI、A/D转换模块、I2C模块、内部时钟发生模块ICG、FLASH存储器在线编程。
2.2 开发工具介绍MC9S08AW60评估板是一款以学习HCS08系列微控制器为应用目标的评估板。
MC9S08AW60评估板(简称MC9S08AW60EVB)包含MC9S08AW60(以下简称AW60)最小系统、SCI、LED、蜂鸣器、按键、写入调试接口。
评估板配套资料提供了部分硬件模块的以用于实际系统开发中。
开发环境可使用CodeWarrior6.0,可选配写入器。
HCS08系列MCU是Freescale 8位微处理器的主流产品,应用非常广泛。
MC9S08AW60微控制器具有多种封装形式,它们分别为44脚、48脚、64脚等,本评估板使用64引脚宽脚封装。
MC9S08AW60微控制器的主要特点概述如下:①2K片内RAM;60K片内Flash程序存储器,具有在线编程能力和保密功能。
②时钟发生器模块,具有PLL电路,可产生各种工作频率;内部总线频率最高可达20MHz。
③增强的HCS08 CPU结构;最高支持26个中断源。
④54根通用I/O脚,部分I/O口有可选择的内部上拉电阻,并且可以选择引脚的驱动能力。
⑤两个增强型串行通讯口SCI;一个串行外围接口SPI;一个集成电路内部通信接口IIC;两个16位双通道定时器接口模块(TIM1和TIM2),每个通道可选择为输入捕捉、输出比较和PWM;一个模拟信号比较器ACMP;16路10位AD转换模块;8位键盘唤醒口;一个实时时钟计数器模块;一个计算机工作正常(COP)复位模块。
⑥优化用于控制应用;优化支持C语言。
2.3 小组成员分工小组成员有:孙健、薄跃耀、潘贝,孙健负责的是蜂鸣器模块,薄跃耀负责的是键盘模块、LED模块,我负责的是液晶显示模块、定时器模块。
三.硬件方案3.1硬件设计3.1.1主控MCU:HCS08系列MCU是Freescale 8位微处理器的主流产品,应用非常广泛。
MC9S08AW60微控制器具有多种封装形式,它们分别为44脚、48脚、64脚等,本评估板使用64引脚宽脚封装,如图3-1。
【实物图】图3-1 写入调试器实物图3.1.2键盘:键盘是常用的输入设备,评估板以9个小按键模拟一个3*3 键盘,以掌握矩阵键盘的工作原理,如图3-2所示。
图3-2 键盘原理图3.1.3调试小灯LED 及蜂鸣器:(1) 调试小灯评估板用LED 提供8位数字量的输出。
原理图如图3-3所示导线接插点为高电平时LED 是暗的,低电平时LED 是亮的。
2) 蜂鸣器输出,原理图如图23所示。
为了节约I/O 口,蜂鸣器也采用插孔方式设计,如图3-4所示,当使用蜂鸣器模块时,1孔插地,2孔插接控制I/O 口,3孔插接VCC (5V ),当控制点为高电平时蜂鸣器响,当控制点为低电平时蜂鸣器不响。
LCD 显示:LCD 即液晶,是常用的嵌入式输出设备。
评估板上配置两种LCD ,一种使用1602点阵字符型LCD ,LCD 管脚定义如表1所示,实物及原理此型号液晶采用并口通信方式,评估板中使用PTB 口作为数据口,另外控制引脚采用PTA0~PTA3四个引脚控制,如图3-5右侧所示。
Vcc图3-3 调试小灯电路图3-4蜂鸣器电路-3.1.4写入调试器:评估板的左上角是写入器部分,通过6针插座和PC 机相连,与MT-IDE For HCS08写入器配套使用,原理图如图3-6所示。
图3-6 写入调试器实物图3.2电路原理图(1) 芯片:MC9S08AW60CB QFP 封装 64引脚,如图3-7所示。
(2) 最小系统电路:晶振电路、电源及PLL 滤波、复位电路。
晶振电路:接MCU 第57、58脚之间的电路为晶振电路,这里选用的晶振频率为f=4MHz 。
通过内部PLL 电路模块,可获得小于等于24MHz 的内部总线频率。
电路及其元件参数是由AW60参考手册确定的。
滤波电路的作用主要是增强电路工作稳定性。
AW60芯片的21、22脚(VDD 、VSS )为芯片的电源输入端。
接在电源与地之间的0.1µF 电容为滤波电容。
图3-5 LCD 实物图复位电路:接在MCU第3脚的电路为芯片硬件复位电路。
正常工作时该脚通过10K电阻接到电源正极(这里设为5V电源供电),所以应为高电平。
若按下复位按钮,则第3脚通过接地,为低电平,芯片复位。
(3) I/O口:每个I/O口都外接到了MCU四周的接线排孔上,用户可以任意使用任何一个I/O口,但要注意不能多个模块同时使用一个口。
注意:电路板上ADC模块、液晶模块和数码管模块共用一些I/O口,使用时要防止冲突。
4.1 模块划分模拟简单计算器中涉及的模块有:LED模块、液晶显示模块、蜂鸣器模块、键盘模块、定时器模块,如图4-1所示。
4.2 模块结构图图4-1 模块结构图4.3 液晶显示模块通过键盘按键,在液晶上显示出来,键盘是3*3的小键盘,能按出来的数字是0、1、2、3、4、5,接着按“+”或者是“-”,继续按的是数字,然后是“=”,就会在液晶显示器上显示结果,如图4-2所示。
图4-2 液晶显示4.4 定时器模块利用定时器可以实现将每次运算及结果显示控制在1分钟内完成;在液晶显示器上显示的算式,等待30秒后,屏幕会自动清屏,如图4-3所示。
图4-3 定时器显示五.运行结果分析与系统改进把东西连接好,编译、运行,结果显示:液晶有二行,第一行是MC9S08AW60,第二行显示的是Welcome to MCU,8盏小灯一直流水亮;按键盘,按一个数字,蜂鸣器响一下,再按“+”或者“-”,蜂鸣器响一下,接着按个数字,蜂鸣器响一下,然后按“=”,在液晶显示器上显示出等式及结果。
我们制作的模拟简单计算器只能实现一位数的加或者减,不能叠加、叠减,每次按键,都需要判断按键是否符合要求,不满足时,会报错,提醒重新去按键。