电子计算器课程设计(含流程图、代码等)[优秀]
课程设计——电子计算器设计1
××大学××学院××系××课程设计电子计算器设计学生姓名学号所在系专业名称班级指导教师成绩××大学××学院二○一二年七月摘要:智能仪器是计算机技术与测量技术以及仪器仪表技术相结合的产物。
它具有传统仪器无法比拟的优点。
在精度,可靠性方面都有了本质性的改变。
仪器硬件都趋于采用嵌入式系统、片上系统等结构。
电子计算器是能进行数学运算的手持机器,拥有集成电路芯片,采用来实现电子计算器的各个功能。
该电子计算器由按键输入的数值显示在7段数码管上,但只限4位数;按加、减、乘、除键时,第一次输入的值被存放在缓冲区中,当做被加、减、乘、除数,且加、减、乘、除相对的运算指示灯会亮;接着输入一个数,之后若是按下“=”键,则此加、减、乘、除数被存放于另一个缓冲区中,与刚才输入的数做运算,且相对应的运算指示灯熄灭;运算结果显示在7段数码管上。
关键字:智能仪器片上系统电子计算器集成电路芯片缓冲区Abstract:Intelligent instrument is the computer technology and measurement technology and instrumentation technology combined with the product. It has the incomparable advantage of traditional instruments. In the accuracy, reliability are all essential changes. Instrument hardware are tending to use embedded system, system on chip structure. An electronic calculator is able to perform mathematical operations on handheld machine, has integrated circuit chip, used to realize each function of the electronic calculator. The electronic calculator from the key input values displayed in the7digital tube, but only4 digits; according to plus or minus, multiplication, addition to the key, the first input value is stored in the buffer, as is plus or minus, multiplication, addition, subtraction, division, and, in addition to take relative operation indicator light; and then enter a number, then press" if = " button, the plus, minus, multiplication, the divisor is stored in a buffer, and just the number of inputs to do arithmetic, and the corresponding operation indication lamp is extinguished; calculation results in the7 digital tube on.Key words: Intelligent instrument system on chip electronic calculator integrated circuit chip buffer目录前言 (1)1. 概述 (1)1.1 应用背景 (1)1.2 课题设计目标 (1)1.3 课题设计任务与思路 (1)2. 设计方案论述 (2)2.1 系统总体方案设计 (2)2.2 系统设计框图 (2)3. 系统硬件设计 (3)3.1 单片机最小系统 (3)3.2 矩阵键盘 (3)3.3 显示部分 (4)4. 程序设计 (4)4,1 具体设计内容 (5)4.1.1 四则运算 (5)4.1.2 键盘 (5)4.1.3 执行过程 (5)4.1.4 错误提示 (5)4.2 主程序流程图 (5)4.3 算数运算程序设计 (7)5.系统调试 (7)6. 设计总结 (8)7. 参考文献 (9)附录 (9)前言智能仪器是一种先进的技术产品,是计算机技术与测试技术相结合的产物,仪器内部带有处理能力很强的智能软件。
电子计算器课程设计(含流程图、代码等)
用C言编写程序,易进行调试修改。
采用4*4矩阵键盘作为输入。
3 系统硬件设计
3.1总体框图设计
电路图如附录1
3.2单片机选型
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能、CMOS、8位单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。AT89C51的管脚图如图2.2所示。
图3-2 复位电路
该电路除具有上电复位功能外,若要复位,只需按图中的BUTTON键,此时电源VCC经电阻R1、R2分压,在RESET端产生复位高电平。
3.4
矩阵式键盘的结构与工作原理:
在键盘中的按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,其内部简图如图3-3在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,只需要单片机的一个端口(如P1口)就可以构成4*4=16个按键,比直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。由此可见,在需要的键数比较多时,采用矩阵法来做键盘比较是合理的。
3.显示2位,并进行2位整数的乘法。
4.设计4*4矩阵键盘输入线的连接。
2 设计方案
2.1 需求分析
我们日常生活的开支,大额数字或是多倍小数的计算都需要计算器的帮助,处理数字的开方、正余弦都离不开计算器。虽然现在的计算器价格比较低廉,但是功能过于简单的不能满足个人需求,功能多的价格较贵,操作不便不说,很多功能根本用不到。所以,我们想到可不可以用自己所学为自己设计开发一个属于自己的简单计算器来完成日常生活的需求。
大班科学教案《电子计算器》
大班科学教案《电子计算器》一、教学目标1.了解电子计算器是一种什么类型的工具。
2.能够正确地使用电子计算器进行基础的数学计算。
3.了解计算器的一些简单的特性和功能。
二、教学内容1.引入我们在日常生活中,都会用到各种各样的工具来完成自己的工作。
有的时候,我们需要计算一些数字,那么,你们知道我们可以用什么工具来完成这个任务吗?今天,我们要学习的就是,如何使用电子计算器来进行数字计算。
2.讲解首先,我们先了解一下,什么是电子计算器。
电子计算器是一种可以进行数字计算的电子设备。
通常,这种工具小巧轻便,而且可以很方便地携带,因此,它非常适合我们在各种生活和工作场合中使用。
在我们使用计算器的时候,我们最常用的计算方法就是加、减、乘、除。
因此,在今天的课程里,我们也就只着重讲解这些部分的内容。
加法:我们都知道,加法就是将两个数字相加,得出它们的和。
比如说,5加3,答案就是8。
在计算器上,我们可以按照如下步骤来进行计算:•首先,我们要输入第一个数字,比如说,5。
•然后,我们按下加号“+”。
•接着,我们输入第二个数字,比如说,3。
•最后,按下“=”号,电脑就可以帮我们自动进行计算了。
减法、乘法和除法的步骤也类似,只需要找到相应的符号,再按照上述步骤即可。
3.练习为了让孩子们更好地掌握所学知识,我们将进行一些简单的练习。
例1:15+7=?答案:22解析:我们先输入15,然后按下“+”号,再输入7,最后按“=”号,计算器就会自动显示22。
例2:92÷4=?答案:23解析:我们先输入92,然后按下“÷”号,再输入4,最后按“=”号,计算器就会自动显示23。
以上两个例子是比较简单的计算练习,大家可以试着练习一遍,加深自己对计算器的理解和应用。
三、教学总结今天我们学习了如何使用电子计算器来进行数字计算,并且掌握了加、减、乘、除四种基本计算方法。
除此之外,我们还介绍了电子计算器这个工具的一些特性和功能。
希望同学们可以在今天的课程中有所收获,学以致用,把所学知识应用到实际生活和工作中去。
幼儿园大班科学教案《电子计算器》
幼儿园大班科学教案《电子计算器》
一、教学目标
1.让幼儿认识和了解电子计算器是一种现代化工具。
2.培养幼儿对科技的兴趣和好奇心。
3.通过实践操作,让幼儿能够简单地使用电子计算器。
二、教学内容
1.电子计算器的介绍。
2.电子计算器的基本操作。
3.数字输入和计算方法。
三、教学过程
3.1 电子计算器的介绍
让幼儿看一看电子计算器,引导他们用手去摸、去看、去思考,自主探究其外形、按键、屏幕等特点,并介绍电子计算器的起源、作用等。
3.2 电子计算器的基本操作
教师现场演示电子计算器,介绍各个操作按键的功能,并在黑板上列出相应的操作符号,如加减乘除、等于、退格等。
让幼儿逐一操作计算器,熟练掌握各个键的作用。
3.3 数字输入和计算方法
通过一些数字加、减法的例子进行演示,指导幼儿正确的操作流程,并鼓励幼儿尝试各种不同的数字输入和计算方法。
四、教学评估
1.安排幼儿用电子计算机进行简单的加、减运算测试,并在黑板上展示测试结果。
2.引导幼儿进行自我评估,询问他们对电子计算器的掌握情况及感受。
五、教学感想
本节科学教学中,我采用了直观的教学方法和体验式学习模式,让幼儿在实践中掌握电子计算器的操作方法和基本使用技巧。
这种方法不仅能够提高幼儿的兴趣和好奇心,也可以促进他们对科技的了解和认识。
希望这节课能够为幼儿的个人成长和未来的学习生涯打下坚实的基础。
大班科学优秀教案《电子计算器》
大班科学优秀教案《电子计算器》一、教学目标1.理解电子计算器的基本原理和使用方法。
2.学会使用电子计算器进行简单的数学运算。
3.培养学生的观察、推理和解决问题的能力。
二、教学准备1.教师准备:–电子计算器–小黑板或白板–打印好的演示资料2.学生准备:–铅笔和纸三、教学过程步骤一:导入新知识(5分钟)教师通过提问和讲解的方式导入新知识,引发学生对电子计算器的兴趣。
步骤二:电子计算器的基本原理(10分钟)1.教师在黑板或白板上写下电子计算器的基本组成部分,如数字键、运算符键、功能键等。
2.教师讲解电子计算器的基本原理,说明数字键和运算符键的作用。
步骤三:电子计算器的使用方法(15分钟)1.教师向学生演示如何打开电子计算器,并介绍其各个功能键的作用。
2.学生尝试使用电子计算器进行简单的数学运算,如加法、减法等。
步骤四:电子计算器的应用(30分钟)1.教师提出一些生活中常见的实际问题,让学生利用电子计算器进行解答。
2.学生根据问题的要求,使用电子计算器进行适当的数学运算,得出结论。
步骤五:讨论与总结(10分钟)教师与学生一起讨论电子计算器的优点和不足,并总结使用电子计算器的注意事项。
四、教学反思通过这节课的教学,学生能够基本理解电子计算器的原理和使用方法,并能够运用电子计算器解决简单的数学问题。
在教学过程中,学生的参与度比较高,能够积极思考和合作。
然而,仍有部分学生在操作电子计算器的过程中存在困难,需要进一步加强练习和指导。
下次教学中,我将更加注重操作技巧的讲解,帮助学生更好地掌握电子计算器的使用方法。
电子计算器课程设计
电子计算器课程设计电子计算器作为一种普遍存在于日常生活中的计算工具,其使用范围已经远远超越了普通代数式和运算符的简单计算。
在现代科技的加持下,电子计算器也可以进行大量数据的处理、统计和分析等工作。
因此,对于计算器的使用不仅是日常生活工作的必备技能,而且在计算机应用和理论学习等领域中也具有重要的作用。
为此,我们需要针对不同年龄段和不同群体的需求设计出适当的电子计算器课程,使得学生们能够根据个人需求和实际情况来应用计算器进行精确的计算和数据处理。
一、课程目标1.了解电子计算器的基本构造和原理,学习常见的运算和功能;2.学习在不同情境下如何正确使用计算器进行数据处理和统计;3.了解如何使用计算器进行简单的编程;4.了解计算器在各行各业的应用。
二、教学内容1.计算器的基本操作:如基本数学运算、幂、指数、阶乘、开方、百分数,分数、小数等基本数值的转换操作;2.计算器的统计功能:包括数据录入、数据分类、分布、方差、标准差等基本统计量的计算;3.计算器的编程:了解计算器的编程,如何编辑程序,如何建立循环结构,如何使用条件语句等;4.计算器的应用案例:如如何使用计算器进行贷款计算、股票的投资利润计算、缴税计算、房贷的还款计算等;三、适宜人群该课程主要适宜具有初中及以上学历人群,对于电子计算器有一定的认知和基础,如学生、初入职场的年轻人、会计等业内人士。
四、教学方法该课程采用电子计算器教学与实例分析结合的方式,具体包括以下几个环节。
1.讲解:针对计算器的概念、构造、操作等进行详细的讲解与演示,同时让学生们了解如何使用计算器进行统计和编程等操作。
2.实例分析:通过一些典型的实例分析,例如房贷、股票等,让学生们灵活运用计算器进行运算,同时,也让学生们了解计算器在现实生活中的应用场景。
3.练习:课后布置与讲解相应的练习和作业题,巩固讲解的知识和技能,同时提高学生们的计算能力。
五、教学成果1.学生能够灵活使用电子计算器完成基本数学运算、统计分析等操作,并能在一些实际情境下进行正确的应用。
大班科学优秀教案《电子计算器》
大班科学优秀教案《电子计算器》1. 教学目标知识目标•掌握电子计算器的基本功能和使用方法。
•理解电子计算器的构造原理和运作过程。
能力目标•能够正确使用电子计算器完成简单的算术运算。
•能够进行简单的计算器误差分析,了解计算器的精度和误差来源。
•能够通过观察电子计算器的内部构造,了解其中的电子元件和电路原理。
情感目标•鼓励学生保持好奇心和求知欲,探究事物的本质和原理。
•培养学生的自主学习能力和探究精神。
•激发学生对科技发展和创新的兴趣和热情。
2. 教学重难点教学重点•了解电子计算器的基本构造和工作原理。
•学会正确使用电子计算器完成加减乘除等基本运算。
•进行简单的计算器误差分析,了解其中的精度和误差来源。
教学难点•了解电子计算器内部的电子元件和电路原理。
•进行更加深入的计算器误差分析。
3. 教学过程第一节:电子计算器的基础知识1.介绍电子计算器的历史及发展现状。
2.介绍电子计算器的基本构造和工作原理。
第二节:电子计算器的使用方法1.介绍电子计算器的基本按钮和功能。
2.讲解电子计算器基本操作方法。
3.给学生展示不同类型的电子计算器,让学生比较不同型号的电子计算器的差异。
第三节:电子计算器的误差分析1.介绍电子计算器的精度和误差来源。
2.示范如何进行简单的计算器误差分析。
3.让学生自己进行计算器误差分析。
第四节:探究电子计算器的内部构造1.展示电子计算器的内部构造图。
2.介绍其中的电子元件和电路原理。
3.实践拆解电子计算器并观察电子元件。
4. 课堂作业1.操作电子计算器完成给定的简单算术运算。
2.计算不同电子计算器的误差,并进行简单的误差分析。
3.拆解及观察电子计算器内部构造,并写一个小结论。
5. 教学评价1.督促学生完成课堂作业。
2.鼓励学生互相交流,并在问题解决后进行总结。
3.考核学生在计算器误差分析和电子计算器内部结构等方面的学习情况。
6. 教学反思本次教学活动很好地帮助学生了解了电子计算器的构造原理和运作过程,并掌握了其基本使用方法和常见误差源。
电子计算器的课程设计
电子计算器的课程设计一、教学目标本课程的学习目标包括以下三个方面:1.知识目标:学生需要掌握电子计算器的基本结构、工作原理和常见功能,能够正确使用电子计算器进行基本的数学运算,了解电子计算器在生活中的应用场景。
2.技能目标:学生能够熟练操作电子计算器,进行精确的数学计算,解决实际问题。
此外,学生还需要学会使用电子计算器进行数据处理和分析,提高数据处理能力。
3.情感态度价值观目标:通过学习电子计算器,学生能够认识到科技对生活的改变,增强对科技的兴趣和好奇心,培养创新精神和实践能力。
二、教学内容本课程的教学内容主要包括以下几个部分:1.电子计算器的基本结构和工作原理:介绍电子计算器的各种部件及其功能,解释电子计算器的工作原理。
2.电子计算器的操作方法:讲解如何使用电子计算器进行基本的数学运算,如加减乘除、开平方等,以及如何进行数据输入和输出。
3.电子计算器的功能拓展:介绍电子计算器的高级功能,如科学计算、统计分析、编程等。
4.电子计算器在生活中的应用:通过实例讲解电子计算器在日常生活、学习和工作中的应用,如购物计算、数据分析等。
三、教学方法为了提高教学效果,本课程将采用以下几种教学方法:1.讲授法:教师讲解电子计算器的基本知识、操作方法和应用场景。
2.演示法:教师现场演示电子计算器的使用,让学生直观地了解电子计算器的操作。
3.实践操作法:学生亲自动手操作电子计算器,进行实际计算,加深对电子计算器的理解和掌握。
4.小组讨论法:学生分组讨论电子计算器的使用心得和应用实例,促进学生之间的交流与合作。
四、教学资源为了支持本课程的教学,我们将准备以下教学资源:1.教材:选用适合学生年龄特点和知识水平的电子计算器教材,为学生提供系统的学习资料。
2.参考书:推荐一些电子计算器的参考书籍,丰富学生的知识储备。
3.多媒体资料:制作电子计算器的教学课件、视频等多媒体资料,增强课堂教学的趣味性和生动性。
4.实验设备:准备一定数量的电子计算器,保证每个学生都能动手操作。
电子计算器课程设计
电子计算器 课程设计一、课程目标知识目标:1. 让学生掌握电子计算器的基本功能与操作方法,包括开机、关机、数字输入、基本运算等。
2. 使学生了解电子计算器的发展历程,理解其工作原理及在日常生活和学习中的应用。
3. 培养学生运用电子计算器解决实际问题的能力,如进行数值计算、数据处理等。
技能目标:1. 培养学生熟练操作电子计算器的能力,提高计算速度和准确性。
2. 培养学生运用电子计算器进行科学探究和数据整理的能力。
3. 培养学生通过电子计算器进行问题分析和解决的能力。
情感态度价值观目标:1. 培养学生对电子计算器的兴趣,激发学习热情,增强学习自信。
2. 培养学生合作交流、分享成果的团队精神,提高沟通能力。
3. 培养学生珍惜科技产品,养成爱护电子设备的良好习惯。
4. 使学生认识到电子计算器在科技发展和实际应用中的重要性,增强科技意识。
课程性质:本课程为实用性课程,旨在帮助学生掌握电子计算器的使用方法,提高计算能力,培养科学素养。
学生特点:学生处于好奇心强、求知欲旺盛的年级,喜欢动手操作,善于合作交流。
教学要求:教师应注重理论与实践相结合,关注个体差异,激发学生兴趣,培养操作技能和解决问题的能力。
在教学过程中,分解课程目标为具体的学习成果,以便进行有效的教学设计和评估。
二、教学内容1. 电子计算器的发展历程及其在现代科技中的地位。
2. 电子计算器的基本结构和工作原理。
3. 电子计算器的基本功能及操作方法,包括:- 开机与关机;- 数字与符号的输入;- 基本运算(加、减、乘、除、乘方等);- 计算结果查看与清除;- 功能键的使用(如百分比、开方、倒数等)。
4. 电子计算器在日常生活和学习中的应用实例。
5. 电子计算器操作注意事项及日常维护。
教学大纲安排:第一课时:电子计算器发展历程及工作原理介绍。
第二课时:基本功能操作与练习(数字输入、基本运算)。
第三课时:深入探讨功能键的使用及计算器在日常生活中的应用。
大班科学优秀教案《电子计算器》
大班科学优秀教案《电子计算器》教案标题:电子计算器的使用方法教案目标:1. 了解电子计算器的基本功能和各个按键的作用;2. 掌握电子计算器的基本操作方法,包括加、减、乘、除等运算;3. 提高学生运用电子计算器解决实际问题的能力。
教学重点:1. 电子计算器的基本功能和作用;2. 电子计算器的基本操作方法;3. 运用电子计算器解决实际问题。
教学难点:1. 学生通过电子计算器来解决实际问题;2. 掌握电子计算器的复杂操作。
教学准备:1. 电子计算器;2. 准备好的实际问题。
教学过程:Step 1 引入新课1. 引入新课的目的是激发学生对电子计算器的兴趣和好奇心。
可以通过以下引导提问来引入新课:- 你们平时用电子计算器解决过什么问题吗?- 电子计算器有什么功能?- 你们知道电子计算器的各个按键分别是干什么用的吗?2. 让学生陈述他们对电子计算器的了解,然后通过教师补充介绍电子计算器的基本功能和作用。
Step 2 学习电子计算器的基本操作1. 教师向学生展示电子计算器的各个按键,并简要说明它们的作用。
2. 详细介绍电子计算器的基本操作方法,包括加、减、乘、除等运算的操作步骤。
3. 给学生一些练习题,让他们通过操作电子计算器来解决问题。
Step 3 运用电子计算器解决实际问题1. 教师提供一些实际问题,要求学生利用电子计算器来解决,例如:- 三个人出去吃饭,账单共120元,每个人平均分摊多少钱?- 一个长方形的长是12cm,宽是8cm,求它的面积和周长。
2. 让学生用电子计算器来计算并给出答案。
3. 对学生的答案进行检查,鼓励正确的回答,并纠正错误的操作。
Step 4 总结与拓展1. 教师对整节课内容进行总结,强调学生学到的重点和难点。
2. 激发学生的思考,让学生思考电子计算器在生活中的其他应用场景。
3. 鼓励学生多加练习,提高他们对电子计算器的熟练程度。
教学反思:本节课的教学目标是让学生掌握电子计算器的基本功能和操作方法,并能运用电子计算器解决实际问题。
大班科学优秀教案《电子计算器》
大班科学优秀教案《电子计算器》教学目标1.能够正确使用电子计算器进行简单的加、减、乘、除运算和开方运算。
2.能够了解电子计算器的结构和使用方法,提高对电子产品的认识和运用能力。
3.能够自主探究电子计算器的其他功能,如百分数、科学计数法等。
教学准备1.教师准备一台电子计算器并熟悉其各种功能。
2.为学生准备足够的练习用纸和笔。
教学过程1. 电子计算器的介绍•首先,教师举起一台电子计算器,向学生介绍其功能和用途,并指出其特点和优势。
•接着,教师让学生互相交流分享自己用过的电子计算器,并从中找出相似和不同之处。
2. 电子计算器的基本操作•教师引导学生逐步掌握电子计算器的基本按钮和操作,如加减乘除、取余、正负号等。
•以加法为例,教师演示如何输入数字和符号,然后学生跟随操作,完成加法练习。
•之后,教师引导学生自主探索减法、乘法、除法和开方等基本运算的操作方法。
3. 电子计算器的高级操作•教师进一步介绍电子计算器的高级功能,如百分数、科学计数法等。
•学生可以自主探索和练习这些功能,如输入小数,再把小数转换成百分数或科学计数法进行计算。
•最后,教师可以利用实际问题来引导学生运用电子计算器解决实际问题,如计算折扣、税收等。
教学评估1.教师可提出一些口头问题,考查学生对电子计算器使用的掌握度,如如何进行开方运算等。
2.也可让学生自主完成一些练习题,考核他们对所学知识的掌握情况,例如计算一个具体的实际问题。
总结与反思通过上述授课过程,学生可以获得丰富的用计算器解决数学问题的经验,并且进一步了解电子产品的结构和使用方法,提高自己的计算能力。
教学中还应引导学生正确使用计算器,灵活运用计算器辅助自己的学习,在提高计算能力的同时增进对计算器的理解与掌握。
电子计算器课程设计
电子计算器课程设计一、课程目标知识目标:1. 学生能理解电子计算器的基本结构、功能及操作方法。
2. 学生掌握使用电子计算器进行四则运算、百分比计算、乘方运算等基本计算技能。
3. 学生了解电子计算器在日常生活和学习中的应用。
技能目标:1. 学生能熟练运用电子计算器进行各种运算,提高计算速度和准确性。
2. 学生通过操作电子计算器,培养观察问题、分析问题、解决问题的能力。
3. 学生能够运用电子计算器进行简单的数据处理,为学习高级数学知识打下基础。
情感态度价值观目标:1. 学生培养对电子计算器及科学技术的兴趣,增强学习数学的积极性。
2. 学生在合作交流中,学会尊重他人、倾听他人意见,培养团队协作精神。
3. 学生通过电子计算器课程的学习,认识到数学知识在实际生活中的重要性,增强实践意识。
课程性质分析:本课程为小学四年级数学课程,以实际操作和实践活动为主,注重培养学生的动手能力和实际应用能力。
学生特点分析:四年级学生具有一定的数学基础和认知能力,对新鲜事物充满好奇,但注意力容易分散,需要通过有趣的实践活动来提高学习兴趣。
教学要求:1. 结合学生特点,设计富有挑战性和趣味性的实践活动。
2. 教师引导学生主动参与,充分调动学生的积极性和主动性。
3. 注重个体差异,因材施教,使每个学生都能在课程中收获成长。
二、教学内容1. 认识电子计算器:介绍电子计算器的发展历程、基本结构及功能键的作用。
- 教材章节:第一章第二节《电子计算器的基本认识》- 内容列举:电子计算器的外观结构、按键功能、显示屏作用。
2. 电子计算器的基本操作:教授电子计算器的开关机、清除、四则运算、百分比计算等基本操作。
- 教材章节:第一章第三节《电子计算器的操作方法》- 内容列举:四则运算、括号运用、百分比计算、乘方运算。
3. 电子计算器在实际应用中的技巧:探讨电子计算器在日常生活中的应用,如购物、烹饪等。
- 教材章节:第二章《电子计算器在实际应用中的技巧》- 内容列举:购物找零计算、烹饪食材分配、时间计算等。
《电子计算器》大班教案(1)
《电子计算器》大班教案一、教学内容本节课选自《小学数学》教材第五册第十章《计算器与计算法则》,具体内容包括:电子计算器的认识,基本操作与使用方法,计算器在数学运算中的应用。
二、教学目标1. 让学生掌握电子计算器的基本结构、功能及操作方法。
2. 培养学生运用计算器进行数学运算的能力,提高计算速度和准确性。
3. 培养学生的动手操作能力和解决问题的能力。
三、教学难点与重点重点:电子计算器的操作方法及在数学运算中的应用。
难点:电子计算器的高级功能使用及计算器在解决实际问题中的应用。
四、教具与学具准备教具:电子计算器、教学PPT。
学具:每人一台电子计算器、练习本。
五、教学过程1. 实践情景引入(5分钟)教师展示一个购物场景,让学生通过计算器计算商品价格及找零。
2. 电子计算器的基本认识(10分钟)教师通过PPT介绍电子计算器的基本结构、功能键及操作方法。
学生跟随教师一起学习,了解电子计算器的使用方法。
3. 例题讲解(15分钟)教师选取几个典型例题,通过计算器进行演示,讲解计算步骤。
学生跟随教师一起操作计算器,学习计算方法。
4. 随堂练习(10分钟)教师布置一些练习题,让学生使用计算器进行计算。
教师巡回指导,解答学生的疑问。
5. 高级功能介绍(10分钟)教师介绍电子计算器的高级功能,如科学计算、统计功能等。
学生学习并尝试使用这些高级功能。
6. 解决实际问题(15分钟)教师给出几个实际问题,让学生运用计算器进行解决。
学生分组讨论,合作解决问题。
学生分享自己在课堂上的收获,提出疑问和拓展性问题。
六、板书设计1. 电子计算器的基本结构、功能及操作方法。
2. 例题及解答过程。
3. 高级功能介绍。
七、作业设计1. 作业题目:2. 答案:579、468、4032、8。
八、课后反思及拓展延伸1. 反思:本节课学生对电子计算器的操作方法掌握程度如何?在解决实际问题中,学生能否灵活运用计算器?2. 拓展延伸:让学生研究计算器的高级功能,如编程计算、图形计算等,提高学生的动手操作能力和解决问题的能力。
电子计算器课程设计(含流程图、代码等)[优秀]
目录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();}}。
电子计算器课程设计
单片机课程设计报告课题:电子计算器学院:报告人:目录1课题概述 (3)1.1 课题描述及实现功能 (3)1.2 按键说明 (3)2 系统的工作流程图 (4)3 系统程序设计 (5)3.1 主程序模块设计 (5)3.2 LCD模块设计 (11)3.3 蜂鸣器模块设计 (13)3.4 键盘模块设计 (14)3.5 其他程序模块设计 (16)4 课程设计心得 (20)1 课题概述1.1 课题描述及实现功能本课题是基于ADuC848单片机的电子计算器设计。
由于本实验所需的单片机开发板已经确定,相应的硬件部分已经做好,所以我们只需要根据硬件原理图进行软件设计。
软件设计部分采用C语言进行编写。
根据要求设计的电子计算器的功能如下:1)利用小键盘作为数据和命令的输入装置;2)利用LCD显示过程和结果;3)实现的运算包括:正实数的加、减、乘、除、开方、乘方、三角函数运算(sin、cos、tan);4)未工作时显示北京时间;5)当数据超出范围,可声音提示或报警。
1.2 按键说明本系统采用4×4矩阵键盘作为输入部分,实现数据输入功能。
本系统规定的键盘上的各按键功能如下所示:1(+)2(-)3(*)ON4(/)5(sqrt) 6(power) OFF7(sin) 8(cos) 9(tan) ClearFuction 0 . =各按键功能如下:Fuction:功能键。
按下此键,显示数字1至9括号里的运算符;未按此键,显示数字。
ON: 显示北京时间时,按下此键之后进入计算器状态。
OFF:在计算器状态下,按下此键之后显示北京时间。
Clear: 清除键。
2 系统的工作流程图3 系统程序设计3.1 主程序模块设计#include<aduc848.h>#include<Keyprocess.h> #include<LCD.h> #include<math.h> #include<stdio.h> #include<zifuc.h> #include<iic.h> #include<sin.h> #include<cos.h>#define uchar unsigned chardouble xdata First,End1,End2; //定义全局变量void delay(int n) //延时程序NYYN数据过大数字键=结果报警C 清除off功能键(F )扫描键盘按键?运算方式NY NY 初始化时间显示 扫描键盘 按键?其他开关 扫描键盘 按键?{int i,j;for(i=0;i<n;i++){for(j=0;j<25;j++);}}double add(double x,double y) //加法程序 {double z;z=x+y;return(z);}double sub(double x,double y) //减法程序{double z;if(x>=y)z=x-y;elsez=y-x;return(z);}double mul(double x,double y) //乘法程序{double z;z=x*y;return(z);}double div(double x,double y) //除法程序{double z;z=x/y;return(z);}double power(double x,int y) //乘方程序{double z;int i;z=1;for(i=1;i<=y;i++)z=z*x;return(z);}double tan(double x) //tan(x)程序{ double z;z=sin(x)/cos(x);return(z);}void main(void){ int n,k,h,g,t=0;unsigned char time[7]={00,00,12,4,9,6,11};unsigned char f,m,key=0x80;unsigned char fp[16];I2CCON=0xE8;n=0;f=0;m=0;k=-1;h=0; /*h有小数,m功能键,g小数转换,k按键次数,n判断前后数,f算法,t时间计算切换*/First=0;g=1;LCDInitialize(); //LCD初始化SetTime(time);SwitchRTC(1);while(1) //不断查询是否有按键动作{key=GetKey(); //获取返回键值if(t==0) /*时间状态*/key=100;switch(key){case 1:if(m==0){if(h==0){First=First*10+key;k++;}else {First=First+(double)key/(g*10);g=g*10;k++;}LCDPrintString(k,1,"1");}else{f=1;First=0;m=0;n=1;k++;LCDPrintString(k,1,"+");}break;case 2:if(m==0){if(h==0){First=First*10+key;k++;}else {First=First+(double)key/(g*10);g=g*10;k++;}LCDPrintString(k,1,"2");}else{f=2;First=0;m=0;n=1;k++;LCDPrintString(k,1,"-");}break;case 3:if(m==0){if(h==0){First=First*10+key;k++;}else {First=First+(double)key/(g*10);g=g*10;k++;}LCDPrintString(k,1,"3");}else{f=3;First=0;m=0;n=1;k++;LCDPrintString(k,1,"x");}break;case 4:if(m==0){if(h==0){First=First*10+key;k++;}else {First=First+(double)key/(g*10);g=g*10;k++;}LCDPrintString(k,1,"4");}else{f=4;First=0;m=0;n=1;k++;LCDPrintString(k,1,"/");}break;case 5:if(m==0){if(h==0){First=First*10+key;k++;}else {First=First+(double)key/(g*10);g=g*10;k++;}LCDPrintString(k,1,"5");}else{f=5;First=0;m=0;n=1;k++;LCDPrintString(k,1,"sqrt");k=k+3;}break;case 6:if(m==0){if(h==0){First=First*10+key;k++;}else {First=First+(double)key/(g*10);g=g*10;k++;}LCDPrintString(k,1,"6");}else{f=6;First=0;m=0;n=1;k++;LCDPrintString(k,1,"^");}break;case 7:if(m==0){if(h==0){First=First*10+key;k++;}else {First=First+(double)key/(g*10);g=g*10;k++;}LCDPrintString(k,1,"7");}else{f=7;First=0;m=0;n=1;k++;LCDPrintString(k,1,"sin");k=k+2;}break;case 8:if(m==0){if(h==0){First=First*10+key;k++;}else {First=First+(double)key/(g*10);g=g*10;k++;}LCDPrintString(k,1,"8");}else{f=8;First=0;m=0;n=1;k++;LCDPrintString(k,1,"cos");k=k+2;}break;case 9:if(m==0){if(h==0){First=First*10+key;k++;}else {First=First+(double)key/(g*10);g=g*10;k++;}LCDPrintString(k,1,"9");}else{f=9;First=0;m=0;n=1;k++;LCDPrintString(k,1,"tan");k=k+2;}break;case 10: //功能键m=1;h=0;g=1;break;case 11: //小数点{k=k+1;LCDPrintString(k,1,".");h=1;g=1;} break;case 13:t=0;break; /*进入时间状态*/case 0:if(h==0){First=First*10+key;k++;}else {First=First+(double)key/(g*10);g=g*10;k++;}LCDPrintString(k,1,"0");break;case 15:switch(f){case 1: First=add(End1,End2);if(First>30000){buzzer();key=14;}else {ecvt(First,fp);LCDPrintString(0,2,fp);}break;case 2: First=sub(End1,End2);if(First>30000){buzzer();key=14;}else {ecvt(First,fp);LCDPrintString(0,2,fp);}break;case 3: First=mul(End1,End2);if(First>30000){buzzer();key=14;}else {ecvt(First,fp);LCDPrintString(0,2,fp);}break; case 4: First=div(End1,End2);if(First>30000){buzzer();key=14;}else {ecvt(First,fp);LCDPrintString(0,2,fp);}break;case 5: First=sqrt(End2);if(First>30000){buzzer();key=14;}else {ecvt(First,fp);LCDPrintString(0,2,fp);}break;case 6: First=power(End1,End2);if(First>30000){buzzer();key=14;}else {ecvt(First,fp);LCDPrintString(0,2,fp);}break;case 7: First=sin(End2);if(First>30000){buzzer();key=14;}else {ecvt(First,fp);LCDPrintString(0,2,fp);}break;case 8: First=cos(End2);if(First>30000){buzzer();key=14;}else {ecvt(First,fp);LCDPrintString(0,2,fp);}break;case 9: First=tan(End2);if(First>30000){buzzer();key=14;}else {ecvt(First,fp);LCDPrintString(0,2,fp);}break;} First=0;n=0;k=-1;g=1;f=0;break;case 100:ReadTime(time);switch(time[3]){case 1: LCDPrintString(10,1,"");LCDPrintString(10,1,"Mon.");break;case 2: LCDPrintString(10,1,"");LCDPrintString(10,1,"Tues");break;case 3: LCDPrintString(10,1,"");LCDPrintString(10,1,"Weds");break;case 4: LCDPrintString(10,1,"");LCDPrintString(10,1,"Thurs");break;case 5: LCDPrintString(10,1,"");LCDPrintString(10,1,"Fri.");break;case 6: LCDPrintString(10,1,"");LCDPrintString(10,1,"Sat.");break;case 7: LCDPrintString(10,1,"");LCDPrintString(10,1,"Sun.");break;default:break;}LCDPrintNumber(0,1,2,time[5]); //monthLCDPrintString(2,1,"/");LCDPrintNumber(3,1,2,time[4]); //dayLCDPrintString(5,1,"/");LCDPrintNumber(6,1,2,time[6]); //yearLCDPrintNumber(0,2,2,time[2]); //hourLCDPrintString(2,2,":");LCDPrintNumber(3,2,2,time[1]); //minuteLCDPrintString(5,2,":");LCDPrintNumber(6,2,2,time[0]); //secondkey=GetKey();if (key==12) /*进入计算状态*/{t=1;key=0x80;LCDInitialize();First=0;End1=0;End2=0;f=0;k=-1;g=1;n=0;h=0;} break;default:break;}if(n==0)End1=First;elseEnd2=First;if(End1||End2>30000){buzzer();key=14;}if(key==14) //清零AC{First=0;End1=0;End2=0;f=0;k=-1;g=1;h=0;LCDInitialize();} key=0x80;}}3.2 LCD模块设计sbit LCD_RS = P3^6;sbit LCD_RW = P3^5;sbit LCD_EN = P3^3;sfr LCDData=0x80;void LCDWrite(bit cd,unsigned char input);void LCDWait(unsigned char CiShu);void LCDDelay();void LCDInitialize();void LCDPrintString(unsigned char x,unsigned char y,unsigned char *string); void LCDPrintNumber(unsigned char x,unsigned char y,unsigned char WeiShu,unsigned int number);unsigned char ReadState();void LCDInitialize(){LCDDelay();LCDWrite(0,0x38); /*设置16*2显示,5*7点阵,8位数据接口*/LCDDelay();LCDWrite(0,0x38);LCDDelay();LCDWrite(0,0x38);LCDDelay();LCDWrite(0,0x38);LCDDelay();LCDWrite(0,0x08); /*关显示,不显示光标,光标不闪烁*/ LCDDelay();LCDWrite(0,0x01); /*显示清屏,数据指针清零,所有显示清零*/LCDDelay();LCDWrite(0,0x06); /*读或写一个字符后地址指针加一,且光标加一,整屏显示不移动*/LCDDelay();LCDWrite(0,0x0c); /*开显示,不显光标,光标不闪*/}void LCDWrite(bit cd,unsigned char DATA) /*cd=0,写命令;cd=1,写数据*/ {LCDWait(20);LCD_RS=cd;LCD_RW=0;LCD_EN=0;LCDData=DATA;LCD_EN=1;LCD_EN=0;}void LCDPrintString(unsigned char x,unsigned char y,unsigned char *string) /*写字符串*/{unsigned char address;address=x+(y-1)*0x40+0x80; /*指针定位,x为列,y为行*/ LCDWrite(0,address);while(*string!='\0'){LCDWrite(1,*string);string++;}}void LCDPrintNumber(unsigned char x,unsigned char y,unsigned char WeiShu,unsigned int number){unsigned char address; /*写数字,最大为6位数,x列,y行,位数,数字*/unsigned char j,temp[5];address=x+(y-1)*0x40+0x80;LCDWrite(0,address);temp[0]=(number%100000)/10000+48;temp[1]=(number%10000)/1000+48;temp[2]=(number%1000)/100+48;temp[3]=(number%100)/10+48;temp[4]=number%10+48;for(j=5-WeiShu;j<5;j++){LCDWrite(1,temp[j]);}}void LCDWait(unsigned char CiShu){unsigned char i;for(i=0;i<CiShu;i++){if(ReadState()&0x80)continue;else break;}}unsigned char ReadState() /*读状态*/{unsigned char temp;P0=0xff;LCD_EN=0;LCD_RS=0;LCD_RW=1;LCD_EN=1;temp=LCDData;LCD_EN=0;return temp;}void LCDDelay(){unsigned int a;for(a=0;a<1000;a++);}3.3 蜂鸣器模块设计void buzzer(){ unsigned char i,j,k,l;for(k=0;k<8;k++){for(i=0;i<100;i++){for(j=0;j<10;j++) {P2|=0x40; /*P2.6=1*/ delay(3);P2&=0xbf; /*P2.6=0*/ delay(4); }}for(l=0;l<100;l++)delay(100);for(i=0;i<100;i++){for(j=0;j<5;j++) {P2|=0x40; /*P2.6=1*/ delay(6);P2&=0xbf; /*P2.6=0*/ delay(8); }}for(l=0;l<100;l++)delay(100);}}void delay(unsigned int x){unsigned int m,n;for(m=0;m<x;m++){for(n=0;n<10;n++);}}3.4 键盘模块设计void KeyDelay(unsigned int KeyJsTime); //按键扫描头文件unsigned char GetKey();unsigned char GetKey(){unsigned char temp;P1&=0xf0;P2&=0xf0;temp=P1&0x0f;if(temp!=0x0f){KeyDelay(666666) ;if(temp==(P1&0x0f)){ P2|=0x0e;switch(P1&0x0f){case 0x0e:return 12;case 0x0d:return 13;case 0x0b:return 14;case 0x07:return 15;case 0x0f:break;default:return 0x80;}P2&=0xf0;P2|=0x0d;switch(P1&0x0f){case 0x0e:return 3;case 0x0d:return 6;case 0x0b:return 9;case 0x07:return 11;case 0x0f:break;default:return 0x80;}P2&=0xf0;P2|=0x0b;switch(P1&0x0f){case 0x0e:return 2;case 0x0d:return 5;case 0x0b:return 8;case 0x07:return 0;case 0x0f:break;default:return 0x80;}P2&=0xf0;P2|=0x07;switch(P1&0x0f){case 0x0e:return 1;case 0x0d:return 4;case 0x0b:return 7;case 0x07:return 10;case 0x0f:break;default:return 0x80;}}}return 0x55;}void KeyDelay(unsigned int KeyJsTime){unsigned char temp;unsigned int JsKeyDelay;for(JsKeyDelay=0;JsKeyDelay<KeyJsTime;JsKeyDelay++)temp++; }3.5 其他程序模块设计1.浮点数转字符串程序#include<stdio.h>#include<string.h>#include<stdlib.h>char ecvt( double m,char *str);int a[16];char ecvt( double m,char *str){int x,i,j,temp,tmp,num,n,p;x=m;p=1;tmp=x;num=0;while(x){ a[num]=x%10;if(a[num++]==0)p=p*1;else p=p*0;x/=10;}if(p!=1){for(i=num-1,j=0;i>=0;i--) str[j++]=a[i]+'0';}else str[num++]='0';str[num]='.';n=num;temp=(m-tmp)*10000;while(temp){a[num++]=temp%10;temp/=10;}{for(i=n+3,j=n+1;i>=n;i--) str[j++]=a[i]+'0';}if(a[n]!=0)str[n+5]='\0';else if(a[n+1]!=0)str[n+4]='\0';else if(a[n+2]!=0)str[n+3]='\0';else if(a[n+3]!=0)str[n+2]='\0';else str[n]='\0';for(i=0;i<16;i++)a[i]=0;return(*str);}3.sin程序#include<stdio.h>#include<math.h>double sin(double y);double sin(double y){double xdata x,s,fm,t,t1;double xdata fs;int n=1;//项数x=3.14*y/180;s=0,fs=x,fm=1,t1=1;//求和、分子、分母、精度、t1表示符号位t=fs/fm;//精度赋值while(fabs(t)>=1e-6)//循环条件{ s=s+t;//求和n++;//基数增加fs=fs*x*x;//新分子fm=fm*(2*n-2)*(2*n-1);//新分母t1=t1*(-1);//符号位一正一负t=t1*(fs/fm);//精度s=(double)s;}return(s);}4.cos程序#include<stdio.h>#include<math.h>double cos(double y);double cos(double y){double xdata x,s,fm,t,t1;double xdata fs;int n=1;//项数x=3.14*y/180;s=0,fs=1,fm=1,t1=1;//求和、分子、分母、精度、t1表示符号位t=fs/fm;//精度赋值while(fabs(t)>=1e-6)//循环条件{ s=s+t;//求和n++;//基数增加fs=fs*x*x;//新分子fm=fm*(2*n-3)*(2*n-2);//新分母t1=t1*(-1);//符号位一正一负t=t1*(fs/fm);//精度s=(double)s;}return(s);}4 课程设计心得单片机课程设计,是以学生自己动手动脑,并亲手设计、制作、组装与调试为特色的。
大班科学教案《电子计算器》
大班科学教案《电子计算器》教学目标1.了解电子计算器的定义、结构和使用方法。
2.能够正确操作电子计算器进行简单数学运算。
3.了解电子计算器的使用过程中需要注意的事项。
教学准备1.板书:“电子计算器的定义、结构和使用方法”。
2.电子计算器若干。
教学过程1. 导入请同学们回顾一下最近上的数学课,是否有用到过计算器?对计算器你们有什么了解和使用经验?针对同学们的回答,教师可以进一步引导学生思考计算器的作用、使用场景等方面。
2. 了解电子计算器板书:“电子计算器的定义、结构和使用方法”。
定义:电子计算器是一种以电子器件为基础的计算工具。
它可以用于各种数学运算、物理、化学实验和科学计算等方面。
结构:电子计算器主要由四个部分组成:1.数字键盘:用于输入数字和符号。
2.显示屏幕:用于显示数字和运算结果。
3.控制键:用于控制计算器的运算方式和功能。
4.电池或电源适配器:供电。
使用方法:简单介绍使用电子计算器进行加减乘除运算、小数转分数、分数运算、百分数和混合运算等常见计算方式。
3. 操作练习教师向学生展示电子计算器。
请同学们踊跃参与操作练习。
1.加减乘除运算–输入运算符和数字,然后按下等于号即可得到运算结果。
–例如:输入“2+3=”后,屏幕上会显示“5”。
2.小数转分数–输入小数,按下分数键即可得到分数形式表示。
–例如:输入“0.5”,然后按下分数键“=”后,屏幕上会显示“1/2”。
3.分数运算–先输入一个分数,按下运算符,再输入另一个分数,最后按下等于键即可得到运算结果。
–例如:输入“1/2+2/3=”后,屏幕上会显示“7/6”。
4.百分数–输入一个数字,然后按下%键即可将其转换为百分数形式。
–例如:输入“50%”后,屏幕上会显示“0.5”。
5.混合运算–首先根据数学运算的基本规则,先计算括号内的,再计算乘除,最后计算加减。
–例如:输入“(1+2)*3/2=”后,屏幕上会显示“4.5”。
4. 注意事项在使用电子计算器时需要注意以下事项:1.电池或电源适配器需要及时更换。
大班科学优秀教案《电子计算器》
大班科学优秀教案《电子计算器》教案名称:电子计算器科目:科学年级:大班教学目标:1. 了解电子计算器的基本功能和使用方法。
2. 能够正确使用电子计算器进行简单的数学计算。
3. 发展学生的观察、思考和操作能力。
教学过程:一、导入1. 引导学生回顾之前学习的数字和数学计算,提出使用计算器进行计算的需求。
2. 出示一台简单的电子计算器,让学生观察及描述其外观特点。
二、探究1. 通过观察和操作,导入电子计算器的基本功能。
2. 介绍计算器上的数字按键、运算符号、清零键和等号键等基本元素。
3. 引导学生按照老师的示范,依次输入数字并进行简单的加减乘除计算。
4. 提出一些基础的数学问题,让学生使用计算器进行计算并给出答案。
三、拓展1. 让学生自主操作计算器,尝试进行更多的数学计算,如平方、开方、倒数等。
2. 引导学生观察计算器显示屏上的数字,并告诉他们显示屏上的数字是如何显示的。
3. 让学生尝试通过按下清零键来清除计算器上的显示结果。
四、总结1. 总结电子计算器的基本功能和使用方法。
2. 让学生回答以下问题:电子计算器能够帮助我们做些什么?我们使用它有什么好处?3. 结合学生的回答,总结出学习电子计算器的重要性和实用性。
五、实践1. 布置作业:让学生在家里使用计算器进行一些简单的数学计算,例如计算购物清单上的总金额等。
2. 下节课开始前,让学生分享他们在家里使用计算器的经验和感受。
教学资源:1. 电子计算器2. 白板和黑板笔3. 资源图片或实物示范评估方法:1. 教学过程中观察学生的参与和操作情况,及时给予指导和反馈。
2. 回答问题的准确性和思维的活跃程度。
3. 作业完成情况及分享的经验和感受。
此为一份适用于大班科学课的电子计算器教案,教师可根据实际情况和学生的需要进行调整和改进。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录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();}}。