单片机课程设计论文简易计算器

合集下载

基于51单片机简易计算器毕业论文

基于51单片机简易计算器毕业论文

基于51单片机简易计算器设计引言计算器(Calculator)是微型电子计算机的一种特殊类型。

它与一般通用计算机的主要区别在于程序输入方式的不同。

计算器的程序一般都已经固定,只需按键输入数据和运算符号就会得出结果,很容易就能掌握。

而一般计算机的程序可以根据需要随时改动,或重新输入新的程序。

简易计算器主要用于加减乘除;科学计算器,又增添了初等函数运算(有的还带有数据总加、求平均值等统计运算)。

现代电子计算器首次问世是1963年。

那时的计算器是台式的,在美国波士顿的电子博览会上展出过。

与计算机相比,它小巧玲珑,计算迅捷,一般问题不必事先编写复杂的程序。

随着微电子技术的不断发展,微处理器芯片的集成程度越来越高,单片机已可以在一块芯片上同时集成CPU、存储器、定时器/计数器、并行和串行接口、看门狗、前置放大器、A/D转换器、D/A转换器等多种电路,这就很容易将计算机技术与测量控制技术结合,组成智能化测量控制系统。

这种技术促使机器人技术也有了突飞猛进的发展,目前人们已经完全可以设计并制造出具有某些特殊功能的简易智能机器人。

随着社会需求,计算器也从原有单一的数字加减计算演变为复杂的多种运算。

现在不在单一的在某一方面而是涉及到生活的方方面面.由于我对知识掌握的不够熟练,重点不够清楚,导致在重点与非重点处花费的时间不成比例,进度缓慢,这是设计没能全部完成的部分原因。

目前只做到按键与显示的结合(即在显示器上可以显示数字键还有命令键+-*/ =清零);加法子程序已经编写成功并严整无误,但在整体调试中未能圆满实现,本部分正在调试中。

等调试成功后,其它运算子程序的问题将迎刃而解。

1.简易计算器的设计方案1.1硬件部分设计方案1 单片机部分单片机以AT89C51来做为核心元器件。

2 按键部分设计思路:采用4*4行列式键盘,分别设定数字键和功能键,采用查询方式,每次有键按下时,先判断是实数字键还是功能键。

但是这种方式采用了大量的I/O口线。

基于51单片机的简易计算器论文设计

基于51单片机的简易计算器论文设计

基于51单片机的简易计算器论文设计摘要:计算器是一种常见的电子设备,用于数学计算。

随着科技的迅速发展,计算器不再是一种巨大且笨重的机械设备。

相反,它们变得迷你、便携且功能强大。

本论文旨在设计和实现一种基于51单片机的简易计算器。

该设计利用了51单片机的优点,如低功耗、成本低廉和易于学习等特点。

本论文介绍了设计和实现的过程,包括硬件电路设计、软件程序编写以及性能测试等方面。

1.引言计算器广泛应用于日常生活和学习中,人们常常需要进行加减乘除等简单的数学计算。

为了提供便捷的计算功能,传统计算器使用专用的集成电路设计。

然而,这种计算器成本较高,体积较大,且功能有限。

为了满足市场需求,我们设计了一款基于51单片机的简易计算器。

2.硬件电路设计2.1键盘模块键盘模块采用矩阵键盘设计,包括数字键0-9、运算符键+、-、*、/以及等于键=。

采用矩阵建构可以减少IO口资源的使用,并简化设计。

2.2显示模块显示模块采用液晶显示器,能够清晰地显示数字、运算符和结果。

为了实现更好的用户交互体验,还可以添加背光模块。

2.3控制电路控制电路由51单片机和其他常用电子元件组成,可以通过编程控制键盘的输入和显示模块的输出。

其中,51单片机充当了控制中心的作用,负责接收键盘输入、解析用户命令、进行数学计算和控制显示模块的显示。

2.4电源电路电源电路用于提供稳定的电源给整个计算器系统。

电源电路由电池、稳压电路和滤波电路组成,能够为计算器提供稳定的电压和电流。

3.软件程序设计软件程序设计是整个计算器系统的核心。

主要功能包括接收键盘输入、解析输入、进行数学计算、控制显示模块的显示和处理异常情况。

3.1键盘输入接收软件程序通过扫描键盘矩阵来接收键盘输入。

当用户按下一些键时,软件程序会检测到相应的按键信号,并将其转换为数值或运算符。

3.2输入解析软件程序能够解析用户的输入,判断用户输入的是数字还是运算符,并将其保存在相应的变量中。

同时,软件还可以处理异常输入,如除以零等情况。

单片机的简易计算器

单片机的简易计算器

单片机的简易计算器单片机简易计算器的设计与实现一、引言计算器是一种用于计算数学运算的工具,现在已经成为人们日常生活中必不可少的设备之一、在这个数字化的时代,我们经常需要进行简单的数学运算,如加、减、乘、除等。

为了满足人们的需求,我们可以使用单片机来设计和实现一个简易的计算器。

二、设计目标我们的设计目标是实现一个能够进行基本的加减乘除四则运算的简易计算器。

具体来说,我们希望计算器能够实现以下功能:1.输入两个数字进行计算,并显示结果。

2.支持加法、减法、乘法和除法运算。

3.具备简单的误操作处理能力,如输入错误提示等。

三、设计思路我们将使用8051系列单片机来设计和实现计算器。

具体的设计思路如下:1.使用矩阵键盘作为输入设备,通过扫描矩阵键盘来获取输入的数字和运算符。

2.通过数码管来显示计算结果。

3.使用中断处理器来处理键盘输入和计算结果的显示。

4.根据输入的运算符进行相应的运算,然后将结果显示在数码管上。

四、硬件设计1.选择合适的单片机,如STC89C52,AT89S52等,它们都是基于8051核心的单片机。

2.连接矩阵键盘到单片机的IO口,通过矩阵键盘的扫描来获取输入的数字和运算符。

3.连接数码管到单片机的IO口,用于显示计算结果。

五、软件设计1.在主程序中初始化单片机的IO端口和中断向量。

2.编写中断服务程序,用于处理键盘输入和计算结果的显示。

3.设计一个状态机来处理键盘输入和计算结果的显示。

4.根据状态机的状态来进行相应的运算和显示。

六、实现步骤1.编写主程序,包括对IO口和中断向量的初始化。

2.编写中断服务程序,用于处理键盘输入和计算结果的显示。

3.设计一个状态机,并实现状态机的状态转换和运算结果的计算。

4.测试并调试系统,确保计算结果的准确性。

七、总结通过使用单片机,我们成功地设计并实现了一个简易的计算器。

这个计算器不仅能够进行基本的加减乘除四则运算,还具备了简单的误操作处理能力。

在实际使用中,我们可以通过添加更多的功能和改进设计来进一步完善这个简易计算器。

单片机的简易计算器毕业设计

单片机的简易计算器毕业设计

单片机的简易计算器毕业设计简易计算器是一种基本、常见的电子设备,它能够对数字进行简单的加减乘除运算。

单片机作为一种小型、低功耗的微型计算机,非常适合用于设计和实现计算器的功能。

在本文中,我们将以单片机为基础,设计和实现一个简易计算器。

一、设计思路1.硬件设计:-使用单片机作为主控制器。

-接入键盘矩阵和显示器。

-使用LED灯作为指示灯,用于显示运算符和结果。

2.软件设计:-通过键盘输入数字和运算符。

-将输入的数字和运算符转换成相应的控制信号。

-进行运算,并将结果显示在屏幕上。

3.功能实现:-实现加法、减法、乘法和除法运算。

-提供清零、退格和等号等功能。

-支持小数和负数的输入和运算。

-提供错误提示功能,例如除数不能为零等。

二、具体实现1.硬件实现:-将键盘矩阵的行和列与单片机的IO口相连,通过扫描来检测按键的输入。

-将显示器与单片机的IO口相连,通过控制引脚来发送和接收数据。

-将LED灯与单片机的IO口相连,设置相应的引脚状态来显示不同的指示信号。

2.软件实现:-使用C语言编写程序,通过中断和轮询的方式,实现键盘输入的检测和数据的读取。

-将读取到的数据进行解析,并根据不同的按键进行相应的操作。

-根据输入的数字和运算符,进行相应的运算并输出结果。

3.功能实现:-加法、减法、乘法和除法运算可以通过相应的算法实现,例如加法可以通过循环和位运算来实现。

-清零功能可以将运算结果和输入的数字都清零,退格功能可以删除输入的最后一个数字或运算符。

-支持小数运算可以在运算过程中进行进位和进位操作,支持负数运算可以通过判断运算符来进行相应的处理。

-错误提示功能可以通过对输入的数据进行检查和判断来实现,例如判断除数是否为零。

三、总结通过上述的设计和实现,我们可以成功地设计和制作一个单片机的简易计算器。

通过这个计算器,用户可以进行简单的加减乘除运算,同时还具备清零、退格、小数和负数等功能。

这个计算器可以应用在日常生活中的计算场景,方便用户进行各种简单的运算操作。

基于单片机的简易计算器的设计

基于单片机的简易计算器的设计

基于单片机的简易计算器的设计引言:计算器作为一种常见的便携式计算设备,在我们的生活中扮演着重要的角色。

基于单片机的简易计算器凭借其小巧的体积、低功耗和简单易用的特点,成为了很多人的选择。

本文将介绍一种基于单片机的简易计算器的设计。

一、设计思路设计思路如下:1.显示部分设计使用4位共阴数码管来作为计算结果的显示和反馈。

单片机通过控制不同的引脚,将待显示的数字依次输出到数码管的不同位上,实现显示。

2.控制部分设计使用独立按键作为用户输入,并通过行列扫描的方式进行检测。

通过分析用户输入的按键,识别出相应的操作,并进行相应的计算。

根据不同的按键组合,可以实现加、减、乘、除等运算。

二、硬件设计1.单片机选择为了实现计算器的功能,选择一种性能良好、资源丰富的单片机是很重要的。

根据需求,选择一款采用8051内核的单片机,如AT89S51或AT89C51、这两款单片机具有5V供电、8位数据总线、4KB内存和32个I/O口等特点,并且广泛应用于各种嵌入式开发领域。

2.数码管显示设计为了显示计算结果,采用4位共阴数码管。

通过将各段控制端接通高电平或低电平,实现不同数字的显示。

3.按键设计使用独立按键作为用户输入,通过行列扫描的方式进行检测。

使用矩阵键盘可以减少I/O口的使用,避免使用太多的引脚。

4.电源设计计算器可以通过外接电源供电,同时还可以使用电池作为备用电源。

为了延长电池寿命,可以使用低功耗的工作模式,并在无操作时自动进入休眠状态。

5.外设接口设计为了增加计算器的功能,可以添加一些扩展模块,如蓝牙模块、USB 接口等。

这样可以实现与其他设备的通信和数据传输。

三、软件设计1.按键检测和解码将行列扫描的结果通过软件进行解码,识别用户输入的按键。

通过判断不同的按键组合,可以实现加、减、乘、除等运算。

2.计算实现根据用户输入的数字和操作符,进行相应的计算。

将结果显示到数码管上,并可以通过串口输出到其他设备。

3.界面设计设计简洁、友好的用户界面,提供用户输入和计算结果的显示。

51单片机简易计算器论文

51单片机简易计算器论文

51单片机简易计算器论文摘要:本篇论文基于51单片机设计并实现了一款简易计算器。

该计算器具有基本的加、减、乘、除四则运算功能,并支持小数点运算和括号运算。

通过设计合理的菜单界面和使用者友好的操作方式,使得计算器更加易用。

本文介绍了计算器的硬件设计和软件设计,并对其进行了功能测试和性能评估。

实验结果表明,该计算器具有较好的计算精度和运算速度,能够满足一般计算需求。

关键词:51单片机,简易计算器,四则运算,菜单界面1.引言随着计算机技术的发展和普及,计算器作为一种便携式计算工具得到了广泛应用。

无论是学生、工程师还是商务人士,都离不开计算器的帮助。

本文旨在设计一款基于51单片机的简易计算器,以满足用户日常计算需求。

2.硬件设计本文采用51单片机作为计算器的主控芯片,搭配LCD显示屏、按键和外部存储器等外围电路。

通过合理的电路连接和引脚设置,实现计算器的功能。

3.软件设计3.1主程序设计计算器的主程序采用C语言编写。

主程序主要包括菜单界面设计、按键响应和运算处理等功能。

通过LCD显示屏输出菜单选项,并通过按键输入执行相应的功能。

3.2加法运算加法运算是计算器最基本的功能之一、在软件设计中,通过读取按键输入的数值,并使用加法运算符将数值累加,最后显示结果。

3.3减法运算减法运算与加法运算类似,通过读取按键输入的数值,并使用减法运算符将数值相减,最后显示结果。

3.4乘法运算乘法运算是计算器的扩展功能之一、在软件设计中,定义乘法运算函数,通过读取按键输入的数值,并使用乘法运算符将数值相乘,最后显示结果。

3.5除法运算除法运算也是计算器的扩展功能之一、在软件设计中,定义除法运算函数,通过读取按键输入的数值,并使用除法运算符将数值相除,最后显示结果。

3.6小数点运算和括号运算为了提高计算器的实用性,本文还添加了小数点运算和括号运算功能。

在软件设计中,通过读取按键输入的数值,并进行相应的运算处理和显示结果。

4.功能测试和性能评估为了验证计算器的功能和性能,本文进行了一系列的功能测试和性能评估。

单片机课程设计简易计算器设计

单片机课程设计简易计算器设计
软件设计:编写程序代码,实现计算器的功能
调试与测试:对硬件和软件进行调试,确保计算器能够正常工作
制作报告:编写设计报告,包括需求分析、硬件设计、软件设计、调 试与测试等内容
Part Three
硬件设计
电路原理图设计
单片机:作为核心控制单元,负责接收输入信号、处理数据、输出结果 输入设备:键盘或触摸屏,用于输入数字和运算符号 显示设备:LED或LCD,用于显示计算结果 电源:提供稳定的电源电压,保证系统正常工作 连接线:将各个部件连接起来,实现信号传输和电源供应 保护电路:防止过压、过流、过热等异常情况对系统造成损害
成本:价格、开发成本、维护成本等
开发环境:开发工具、编程语言、开发 文档等
应用领域:计算器、智能家居、工业控 制等
兼容性:与其他硬件、软件的兼容性
技术支持:厂商技术支持、社区资源等
设计流程概述
需求分析:确定计算器的功能需求,如加减乘除、平方根等
硬件设计:选择合适的单片机型号,设计电路原理图,选择元器件
稳定性测试: 对集成后的系 统进行稳定性 测试,确保系 统在各种环境 下能够稳定运

安全性测试: 对集成后的系 统进行安全性 测试,确保系 统能够抵御各
种安全威胁
测试环境搭建
硬件环境:单片机、显示器、键盘、电源等 软件环境:单片机开发环境、测试软件等 测试工具:万用表、示波器、逻辑分析仪等 测试步骤:编写测试程序、执行测试程序、记录测试结果、分析测试结果等
功能测试与调试
测试方法:黑 盒测试、白盒 测试、灰盒测
试等
测试内容:输 入输出、功能 实现、性能指
标等
调试工具:调 试器、仿真器、 逻辑分析仪等
调试技巧:断 点设置、单步 执行、变量监

单片机设计简易计算器

单片机设计简易计算器

单片机设计简易计算器单片机是指将整个计算机系统集成在一块芯片上的微处理器。

设计一个简易计算器,可以使用单片机实现各种基本运算,如加、减、乘、除以及开方等。

首先,我们需要选择单片机的类型和开发环境。

常用的单片机有51系列、AVR系列、ARM系列等。

根据具体需求,选择一种合适的单片机进行设计。

接下来,需要设计计算器的硬件电路。

计算器的核心部分是输入和输出部分,因此需要设计一个合适的显示屏和按键阵列。

一种常用的显示屏是数码管,可以显示数字和一些特殊字符。

按键阵列可以使用矩阵型按键。

在硬件设计完成后,需要进行软件编程。

首先要开发一个简单的操作系统,以便管理单片机的资源和任务。

然后,根据计算器的功能需求,在操作系统上开发相应的计算器应用程序。

计算器的软件程序主要包括以下几个模块:1.输入模块:通过按键阵列读取用户输入的数字和操作符,并且根据用户的输入进行相应的处理。

2.运算模块:根据用户输入的操作符进行相应的运算,包括加、减、乘、除以及开方等。

3.输出模块:将运算结果通过数码管显示出来。

以下是一个简单计算器的软件程序设计示例:```c#include <reg51.h>sbit row1 = P1^0;sbit row2 = P1^1;sbit row3 = P1^2;sbit col1 = P1^3;sbit col2 = P1^4;sbit col3 = P1^5;sbit col4 = P1^6;void delay(unsigned int ms)unsigned int i, j;for (i = 0; i < ms; i++)for (j = 0; j < 112; j++);unsigned char keyscarow1 = 0; // 设置第一行为低电平row2 = 1;row3 = 1;if (col1 == 0) { delay(10); while(col1 == 0); return '1'; } if (col2 == 0) { delay(10); while(col2 == 0); return '2'; } if (col3 == 0) { delay(10); while(col3 == 0); return '3'; }if (col4 == 0) { delay(10); while(col4 == 0); return '+'; } row1 = 1;row2 = 0; // 设置第二行为低电平row3 = 1;if (col1 == 0) { delay(10); while(col1 == 0); return '4'; } if (col2 == 0) { delay(10); while(col2 == 0); return '5'; } if (col3 == 0) { delay(10); while(col3 == 0); return '6'; } if (col4 == 0) { delay(10); while(col4 == 0); return '-'; } row1 = 1;row2 = 1;row3 = 0; // 设置第三行为低电平if (col1 == 0) { delay(10); while(col1 == 0); return '7'; } if (col2 == 0) { delay(10); while(col2 == 0); return '8'; } if (col3 == 0) { delay(10); while(col3 == 0); return '9'; } if (col4 == 0) { delay(10); while(col4 == 0); return '*'; } return 0;void display(unsigned char number)P2 = number;void maiunsigned char num1 = 0, num2 = 0, result = 0; unsigned char operator = 0;while (1)num1 = keyscan(;if (num1 == '+')operator = '+';} else if (num1 == '-')operator = '-';} else if (num1 == '*')operator = '*';} else if (num1 != 0)while (1)num2 = keyscan(;if (num2 != 0)break;}}if (operator == '+')result = num1 + num2;} else if (operator == '-')result = num1 - num2;} else if (operator == '*')result = num1 * num2;}display(result);}}```以上程序是一个简单的计算器程序示例。

基于单片机的简易计算器设计

基于单片机的简易计算器设计

基于单片机的简易计算器设计引言:计算器是一种广泛应用的电子设备,可以进行各种数学计算。

基于单片机的计算器是一种使用单片机作为核心处理器的计算器。

本文将介绍如何设计一个基于单片机的简易计算器。

一、设计思路:1.硬件设计:选择适合的单片机,LCD显示屏,按键开关和电源电路,将它们连接在一起组成计算器的硬件。

2.软件设计:使用单片机的编程语言编写程序,实现计算器功能,如加法、减法、乘法、除法等运算,以及清零、退格、等号等功能。

二、硬件设计:选择单片机:在设计单片机计算器时,我们可以选择MCU,如STC89C52、ATmega32等。

这些单片机性能稳定,功能强大,适合用于计算器的设计。

LCD显示屏:选择合适尺寸和接口的LCD显示屏,用于显示计算结果和输入的数字。

按键开关:选择合适的按键开关,用于接收用户的按键输入,如数字、运算符等。

电源电路:设计适合的电源电路,为计算器提供稳定的电源。

三、软件设计:1.初始化功能:启动计算器时,进行相关初始化操作,如清屏、设置计算器状态等。

2.数字输入功能:通过按键输入,将数字输入到计算器中,同时刷新LCD显示屏上的内容。

3.运算功能:根据用户输入的数字和运算符,进行相应的运算操作,如加法、减法、乘法、除法等。

4.清零功能:按下清零按钮时,将计算器的状态重置为初始状态。

5.退格功能:当用户输入错误时,可以通过按下退格按钮,删除最后一个输入的数字或运算符。

6.等号功能:用户按下等号按钮时,计算器将完成运算,并将结果显示在LCD屏上。

7.错误处理功能:当用户输入错误时,计算器应该给出合适的错误提示。

四、程序实现:1.确定单片机的引脚分配,将LCD显示屏、按键开关和单片机的引脚连接起来。

2.使用单片机的编程语言编写程序,实现计算器的功能。

3.根据运算符和数字的不同,确定相应的运算方法,并在LCD显示屏上显示结果。

4.使用条件语句和循环结构,实现计算器的控制逻辑。

5.通过编程实现按键响应功能,当用户按下相应按键时,执行相应的操作。

基于51单片机的简易教学计算器设计

基于51单片机的简易教学计算器设计

基于51单片机的简易教学计算器设计设计目的:本设计旨在基于51单片机实现一个简易的教学计算器,可以进行基本的四则运算,并具备一些辅助功能,帮助学生进行数学计算和学习。

设计要求:1.显示器:使用液晶显示器(LCD)来显示操作数和计算结果。

2.键盘输入:设计一个按键矩阵作为输入设备,用于输入数字和操作符。

3.四则运算:实现加法、减法、乘法和除法四种基本运算。

4.辅助功能:提供开平方、取倒数等辅助功能。

5.界面友好:界面清晰、操作简单。

硬件设计:1.51单片机(AT89C52):作为计算器的核心芯片,控制程序运行和与外围设备的交互。

2.液晶显示器(LCD):用于显示操作数和计算结果。

3.按键矩阵:用于输入数字和操作符。

4.运算模块:用于进行四则运算和辅助功能计算。

软件设计:1.系统初始化:初始化51单片机和LCD屏幕,设置键盘矩阵的引脚。

2.输入处理:通过按键矩阵检测用户输入,并将输入的字符存储在缓冲区中。

3.表达式计算:根据用户输入的表达式,通过逆波兰表达式算法将其转换为后缀表达式,并进行计算得到结果。

4.显示结果:将计算结果显示在LCD屏幕上。

5.辅助功能:根据用户选择的辅助功能,进行相应的计算,并显示结果。

6.重置功能:提供清零功能,将计算器的状态和显示结果重置。

操作流程:1.系统初始化:开机时,系统进行初始化,屏幕显示“计算器”字样。

2.输入操作数和操作符:用户通过按键矩阵输入操作数和操作符。

3.计算结果:用户输入“=”符号后,计算器根据输入的表达式进行计算,并将结果显示在LCD屏幕上。

4.辅助功能:在计算结果显示完成后,用户可选择进行辅助功能,如开平方、取倒数等操作。

5.重置功能:用户可通过按下“C”键进行重置,将计算器状态和显示结果清零。

总结:本设计基于51单片机实现了一个简易的教学计算器,具备基本的四则运算功能和一些辅助功能。

其使用液晶显示器作为显示设备,利用按键矩阵进行输入操作,通过逆波兰表达式算法进行计算,并将结果显示在屏幕上。

新基于51单片机的简易计算器

新基于51单片机的简易计算器

新基于51单片机的简易计算器一、引言计算器是一种广泛应用的电子设备,用于进行常见的数值运算。

在现代社会,计算器是广大人们日常生活和学习中常用的工具之一、本文将介绍一种新基于51单片机的简易计算器的设计和实现,该计算器具有计算基本四则运算的功能,并且操作简便、界面友好。

二、设计实现1.系统硬件设计该计算器的硬件主要由51单片机、LCD显示屏、按键开关、电源等组成。

(1)51单片机:使用51系列单片机作为计算器的核心处理器,它具有处理能力强、易编程等特点,可以快速实现计算功能。

(2)LCD显示屏:采用16*2字符LCD显示屏,用于显示计算结果和用户输入的数字。

(3)按键开关:设置数字键盘开关、运算符键盘开关、等号键开关等,用户通过按下对应的按键输入数字和运算符。

(4)电源:使用直流电源供电,通过稳压电路和滤波电路提供稳定的电压和电流。

2.系统软件设计该计算器的软件主要由嵌入式C语言编写,实现了计算基本四则运算的功能。

(1)初始化:在系统启动时对各个设备进行初始化设置,包括LCD显示屏的初始化、按键开关的初始化等。

(2)用户输入:通过按键开关读取用户输入的数字和运算符,将其保存在缓冲区中。

(3)计算功能:根据用户输入的数字和运算符,通过判断运算符的类型进行相应的数值计算,并将结果保存在特定的寄存器中。

(4)结果显示:将计算结果从寄存器中读取并显示在LCD显示屏上,用户可以直观地看到计算结果。

三、系统特点1.硬件结构简单:该计算器的硬件结构简单,主要由几个常见元件组成,易于制作和调试。

2.操作简便:用户只需通过按键输入数字和运算符,即可完成计算操作,无需进行复杂的设置和调试。

3.界面友好:通过LCD显示屏直观地显示计算结果,用户可以清楚地了解计算过程和结果。

4.功能强大:该计算器可以进行基本的四则运算,满足大多数日常计算需求。

四、应用范围该简易计算器可以广泛应用于日常生活和学习中,包括商品购物计算、数学运算、财务统计等场景。

(完整)基于51单片机的简易计算器设计

(完整)基于51单片机的简易计算器设计

(完整)基于51单片机的简易计算器设计基于51单片机的简易计算器设计计算器作为一种常见的电子设备,既能满足日常生活的计算需求,又能帮助人们提高工作效率。

本文将介绍基于51单片机的简易计算器的设计。

该计算器具备加减乘除的基本计算功能,并支持用户输入和结果显示。

下面将从材料准备、电路连接和程序设计三个方面详细介绍该计算器的设计。

一、材料准备在设计计算器之前,我们需要准备以下材料:1. 51单片机开发板:用于控制计算器的整个运行过程;2. 液晶显示屏:用于显示用户输入的数字和计算结果;3. 数字按键:用于用户输入数字和运算符;4. 连接线:用于连接51单片机开发板、液晶显示屏和数字按键。

二、电路连接1. 连接液晶显示屏和51单片机开发板:将液晶显示屏的VCC、GND、SCL和SDA引脚分别与开发板上对应的引脚连接。

2. 连接数字按键和51单片机开发板:将数字按键的引脚依次与开发板上的IO口引脚连接,其中有一根引脚需要连接到开发板的中断口。

三、程序设计1. 初始化设置:在程序开始时,进行液晶显示屏和数字按键的引脚初始化设置,以及相应的中断设置。

2. 输入处理:通过数字按键输入,获取用户输入的数字和运算符,并将其保存到相应的变量中。

3. 运算处理:根据用户输入的运算符,对相应的数字进行加、减、乘、除的运算,并将结果保存到一个变量中。

4. 结果显示:将运算结果显示在液晶显示屏上,以便用户查看计算结果。

5. 重置处理:在每次运算结束后,对相关变量进行重置,以便下一次计算。

通过以上程序设计,我们可以完成基于51单片机的简易计算器的设计。

在实际使用过程中,用户只需要通过数字按键输入相应的数字和运算符,计算器就可以自动进行运算,并将结果显示在液晶显示屏上,方便用户进行查看。

总结本文介绍了基于51单片机的简易计算器的设计。

通过合理的材料准备、电路连接和程序设计,我们可以实现一个具备加减乘除功能的计算器。

该计算器不仅能满足人们日常的计算需求,还能帮助提高工作效率。

基于51单片机的简易计算器设计

基于51单片机的简易计算器设计

基于51单片机的简易计算器设计设计一个基于51单片机的简易计算器,主要功能包括加减乘除四则运算和百分数计算。

下面是设计的详细步骤:1.硬件设计:-使用51单片机作为主控芯片。

-连接16x2的LCD显示屏,用于显示输入和计算结果。

-连接16个按键开关,用于输入运算符和数字。

-连接4个LED灯,用于指示四则运算的选择。

2.软件设计:-初始化LCD显示屏,并显示欢迎信息。

-监听按键输入,在接收到输入后,根据输入的按键值判断操作类型。

-如果按键值对应数字键,保存输入的数字,并在LCD上显示当前输入的数字。

-如果按键值对应四则运算符(+、-、*、/),保存当前输入的数字,并保存运算符。

-如果按键值对应等号(=),根据保存的数字和运算符进行相应的运算,计算结果保存并显示在LCD上。

-如果按键值对应清零(C),将所有保存的数据清空,并显示初始状态。

-如果按键值对应百分号(%),将当前数字除以100并显示在LCD上。

3.主要函数说明:- void init_lcd(:初始化LCD显示屏。

- void display_lcd(char* str):将指定字符串显示在LCD上。

- void clear_lcd(:清空LCD显示屏。

- char get_key(:获取按键输入的值。

- void calculate(:根据保存的数字和运算符进行计算。

- void add_digit(char digit):将输入的数字添加到当前数字中。

- void set_operator(char op):保存运算符。

- void clear_data(:清空所有保存的数据。

4.主要流程:-初始化LCD显示屏并显示欢迎信息。

-在循环中监听按键输入,并根据输入的按键值进行相应的操作。

-根据不同的按键值,调用不同的函数进行处理。

-最后计算结果显示在LCD上。

以上是基于51单片机的简易计算器设计的详细步骤和主要函数说明。

你可以根据这个设计框架进行具体的代码实现。

单片机课程设计报告-简易计算器

单片机课程设计报告-简易计算器

目录一、概述 (2)二、实验内容 (2)三、硬件设计 (3)1 设计总体框图 (3)2 实际电路 (3)(1)复位电路 (4)(2)时钟电路 (5)(3)EA/VPP(31脚)的功能和接法 (6)(4)键盘输入电路 (6)(5)数码管显示电路 (7)四、软件设计 (8)1 程序内容 (8)2 C语言程序 (9)五、Protues仿真 (9)六、设计总结 (10)七、附录 (11)1 C语言程序: (11)2焊接电路板实物图 (18)3 芯片引脚图 (19)一、概述单片机课程设计是一门实践课程,要求学生具有制作调试单片机最小系统及外设的能力,能够掌握单片机内部资源的使用。

单片机课程设计内容包括硬件设计、制作及软件编写、调试,学生在熟练掌握焊接技术的基础上,能熟练使用单片机软件开发环境Keil C51编程调试,并使用STC ISP调试工具采用串口下载方式联调制作的单片机最小系统。

单片机课程设计题目包含基本部分及扩展部分,基本部分即单片机最小系统部分,扩展部分是对单片机内部资源及外部IO口的功能扩展,使制作的单片机系统具有一定的功能。

二、实验内容自制一个单片机最小系统,包括串口下载、复位电路,采用外部小键盘输入数据,能够实现加法、乘法及一个科学计算,计算结果显示在四位一体的数码管上。

三、硬件设计1 设计总体框图2实际电路在单片机系统中,复位电路是非常关键的,当程序跑飞(运行不正常)或死机(停止运行)时,就需要进行复位。

MCS-5l 系列单片机的复位引脚RST(第9 管脚)出现2个机器周期以上的高电平时,单片机就执行复位操作。

如果RST 持续为高电平,单片机就处于循环复位状态。

复位操作通常有两种基本形式:上电自动复位和开关复位。

上电瞬间,电容两端电压不能突变,此时电容的负极和RESET 相连,电压全部加在了电阻上,RESET 的输入为高,芯片被复位。

随之+5V 电源给电容充电,电阻上的电压逐渐减小,最后约等于0,芯片正常工作。

单片机课程设计 简易计算器

单片机课程设计  简易计算器

目录中文摘要 (Ⅰ)英文摘要 (Ⅱ)1 任务及要求 (2)1.1设计任务 (2)1.2 设计要求 (2)2 设计思想 (2)2.1 硬件设计思想 (2)2.2 软件设计思想 (2)3 电路原理与电路图 (3)3.1 电路原理 (3)3.2 电路原理图 (3)4 流程图与算法描述 (3)4.1 流程图 (4)4.2 算法描述 (5)5 仿真结果 (6)5.1 仿真结果 (6)6 设计总结 (11)6.1 设计体会 (11)参考文献 (12)致谢 (12)附录 (13)1 任务及要求1.1设计任务设计一个4×4的键盘的简易计算器和LED数码管的显示电路的Proteus仿真及汇编程序设计。

1.2 设计要求1、设计一个十六个按键的矩阵式计算器的模拟系统。

2、该系统具有加减乘除等功能。

3、用Proteus 7仿真工作的全过程。

4、有相应的实物图5、掌握4×4矩阵式键盘程序识别原理,掌握4×4矩阵式键盘按键的设计方法。

2 设计思想2.1 硬件设计思想用单片机的并行口P1连接4×4矩阵键盘,并以单片机的P1.0-P1.7各管脚作输入线,以单片机的P2.0-P2.7和P0.0—P0.7各管脚作输出线,在数码管上显示每个按键“0-9”的序号。

键盘中对应按键的序号排列如图(1)所示。

数字0、1、2、3接X0;4、5、6、7接X1;8、9、10、11接X2;12、13、14、15接X3。

即16个按钮空接,即十六个键一端低电平,另一端接高电平;当按下任意一个按钮时显示对应数字。

该系统可以实现四则运算,当分别按下2个数字,再按任意一个功能键即可实现相应的运算。

2.2 软件设计思想整个程序可以实现十进制内的加减乘除,其中包含了延时子程序(去抖动),加法、减法、除法、乘法等子程序。

(1)按键的识别判断键盘上有无按键闭合,先判断行线X0—X3输出低电平“0”,然后判断列线Y0—Y3的状态,若为全1,即列线全为高电平,说明键盘上没有按键闭合,若Y0—Y3不全为1,说明有键按下。

基于51单片机的简易计算器设计

基于51单片机的简易计算器设计

基于51单片机的简易计算器设计一、引言计算器是一种执行基本数学运算的电子设备,现在市面上有各种类型的计算器,从小型的手持计算器到大型的科学计算器。

本设计基于51单片机设计了一种简易计算器,可以实现加法、减法、乘法和除法等基本运算。

二、设计思路1.系统硬件设计本设计使用的51单片机芯片选择了常用的STC89C52芯片,具有强大的功能和稳定性。

外设有键盘、数码管和LCD液晶显示屏。

2.系统软件设计系统的软件设计基于C语言进行,使用51单片机的汇编语言和C语言进行编程。

软件主要分为键盘输入处理、运算处理和结果显示三个部分。

三、系统硬件设计1.键盘输入部分使用4x4矩阵键盘作为输入设备,将键盘的4行4列分别接入到51单片机的4个IO口上,通过行列扫描的方式来检测按键的状态。

2.数码管显示部分使用共阳极的数码管来显示结果,通过提供适当的电压和信号控制来显示所需的数字。

3.LCD液晶显示屏为了方便用户查看输入和结果,本设计还使用了LCD液晶显示屏。

通过串口通信将结果传输到液晶显示屏上进行显示。

四、系统软件设计1.键盘输入处理通过行列扫描的方式检测键盘的按键状态,当检测到按键按下时,将对应的按键值存储起来。

2.运算处理根据用户的输入进行相应的运算处理。

根据检测到的按键值进行不同的运算操作,如加法、减法、乘法和除法。

3.结果显示将运算的结果通过串口通信传输到LCD液晶显示屏上进行显示。

五、系统实现1.硬件连接将键盘的行列引脚接到51单片机的对应IO口上,数码管和LCD液晶显示屏也分别连接到单片机的IO口上。

2.软件编码通过C语言编写系统软件,包括键盘输入处理、运算处理和结果显示三个模块。

3.调试测试将编写好的软件烧录到单片机上,通过键盘输入进行测试,并观察数码管和LCD液晶显示屏上的输出结果。

六、总结本设计基于51单片机实现了一个简易计算器,通过键盘输入进行基本的运算操作,并将结果通过数码管和LCD液晶显示屏进行显示。

单片机的简易计算器毕业设计

单片机的简易计算器毕业设计

单片机的简易计算器毕业设计设计题目:基于单片机的简易计算器设计目的和意义:计算器是人们日常生活中必不可少的工具之一、通过设计一个基于单片机的简易计算器,可以帮助学生更好地理解计算机的原理和工作原理,同时也能提高他们的计算能力和逻辑思维能力。

此外,通过此设计可以加深对单片机的了解,并能提高学生的动手实践能力。

设计内容和要求:1.设计一个基于单片机的简易计算器,能完成基本的四则运算;2.能够输入和显示数字和运算符号;3.根据输入的数字和运算符号进行运算,得到正确的计算结果;4.能够处理异常情况,如除数为零等;5.设计一个简单的界面,使用户能够方便地进行操作;6.设计合理的电源管理系统,能够延长电池寿命;7.系统要求具有一定的误差范围,能够容忍一定的计算误差。

设计原理和方法:1.首先,选择一个合适的单片机作为主控制器,例如常用的51单片机;2.设计合适的输入和输出电路,使用户能够方便地输入和显示数字和运算符号;3.利用单片机的IO口进行数字和运算符号的输入和输出控制;4.设计算法,根据输入的数字和运算符号进行正确的四则运算,并得到正确的计算结果;5.根据实际情况进行运算结果的显示和存储,可以使用LCD液晶显示模块或LED数码管进行显示;6.设计异常处理程序,处理除数为零等异常情况;7.设计合理的电源管理系统,合理利用低功耗模式和休眠模式,延长电池寿命;8.对计算结果进行一定的误差范围控制,使其能够容忍一定的计算误差。

设计步骤和流程:1.确定设计的硬件平台和软件开发环境;2.进行电路设计,包括输入和输出电路的设计;3.进行程序开发,包括输入和输出控制、四则运算和异常处理程序的编写;4.进行整体系统调试,测试输入和输出的功能是否正常;5.进行算法调试,测试四则运算的正确性;6.进行界面设计,设计一个简单易用的用户界面;7.进行电源管理系统的设计和调试,测试功耗和电池寿命;8.完善设计文档,撰写设计报告。

设计结果和展示:通过以上设计,完成了一个基于单片机的简易计算器。

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

电气信息学院单片机课程设计报告课题名称 4位数加法运算器的设计专业班级学号学生姓名指导教师评分目录自己写,不想写也可以不写,设计目标实现方法自己写。

总结自己写。

写完将红字删除。

2012年1月3日至1 月10 日目录第一章绪论 (1)第二章方案论证与设计 (2)2.1 设计目标和实现方法 (2)2.2 方案论证与设计 (2)第三章主体设计部分 (3)第四章硬件设计 (5)4.1 总体硬件设计 (5)4.2 单片机接口电路说明 (5)4.3 键盘接口电路 (8)4.4 LCD显示模块 (11)4.5 运算模块(单片机控制) (12)4.6 软件设计 (12)4.6.1主函数设计 (12)4.6.2 键盘中断程序设计 (17)4.6.3 LCD显示程序 (19)4.6.4 头文件< calc.h > (21)第五章仿真及调试 (22)总结 (23)参考文献 (24)第一章绪论随着社会的发展,科学的进步,人们的生活水平在逐步的提高,尤其是微电子技术的发展,犹如雨后春笋般的变化.电子产品的更新速度快就不足惊奇了, 单片机的应用已经越来越贴近生活,用单片机来实现一些电子设计也变得容易起来.近年来,单片机以其体积小、价格廉、面向控制等独特优点,在各种工业控制、仪器仪表、设备、产品的自动化、智能化方面获得了广泛的应用.与此同时,单片机应用系统的可靠性成为人们越来越关注的重要课题.影响可靠性的因素是多方面的,如构成系统的元器件本身的可靠性、系统本身各部分之间的相互耦合因素等.其中系统的抗干扰性能是系统可靠性的重要指标.本设计采用80c51 芯片,实现了利用单片机进行了一个简单计算器设计.允许对输入数据进行加减乘除运算及LCD 显示.如果设计对象是更为复杂的计算器系统,其实际原理与方法与本设计基本相同.LCD液晶显示器是Liquid Crystal Display 的简称,LCD 的构造是在两片平行的玻璃基板当中放置液晶盒,下基板玻璃上设置TFT(薄膜晶体管),上基板玻璃上设置彩色滤光片,通过TFT上的信号与电压改变来控制液晶分子的转动方向,从而达到控制每个像素点偏振光出射与否而达到显示目的.现在LCD已经替代CRT成为主流,价格也已经下降了很多,并已充分的普及.故采用LCD.设计的关键所在,必须非常熟悉单片机的原理与结构,同时还要对整个设计流程有很好的把握,将单片机和其他模块完整的衔接.本设计是基于51系列单片机来进行的数字计算器系统设计,可以完成计算器的键盘输入,进行加、减、乘、除基本四则运算,并在LCD上显示相应的结果;设计电路采用AT89C51单片机为主要控制电路,显示采用字符LCD静态显示;软件方面使用C语言编程,并用PROTUES仿真i。

第二章方案论证与设计2.1设计目标和实现方法为了满足计算器的基本要求,可以基本的运算(加减乘除),数据归零和出错警告提示,我们采用基于单片机设计计算器,并用LCD显示器显示数据,4*4 的矩阵键盘实现数据输入.分别对键盘输入检测模块;LCD显示模块;算术运算模块;错误处理及提示模块进行设计,并用Visio画系统方框图,keil与protues仿真分析其设计结果2.2方案论证与设计根据功能和指标要求,本系统选用MCS 51 单片机为主控机.通过扩展必要的外围接口电路,实现对计算器的设计.具体设计考虑如下:本系统选用AT89C51单片机为主控机.通过扩展必要的外围接口电路,实现对计算器的设计,具体设计如下:(1)由于设计的计算器要进行四则运算,为了得到较好的显示效果,经综合分析后,最后采用LCD 显示数据和结果.(2)采用键盘输入方式,键盘包括数字键(0~9)、符号键(+、-、×、÷)、清除键(on\c)和等号键(=),故只需要16 个按键即可,设计中采用集成的计算键盘.(3)在执行过程中,开机显示零,等待键入数值,当键入数字,通过LCD显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当再键入数值后将显示键入的数值,按等号就会在LCD上输出运算结果.(4)错误提示:当计算器执行过程中有错误时,会在LCD上显示相应的提示,如:当输入的数值或计算得到的结果大于计算器的表示范围时,计算器会在LCD上提示E.第三章、主体设计部分(1)、系统模块图:(2)、算术运算程序流程图:(3)、系统总流程图:第四章、硬件设计4.1、总体硬件设计:本设计选用AT89C51单片机为主控单元;显示部分:采用LCD静态显示;按键部分:采用4*4键盘;用MM74C922为4*4键盘扫描IC,读取输入的键值.总体设计效果如下图:4.2、单片机接口电路说明:1、手动上电复位电路:当VCC上电时,C充电,在10K电阻上出现电压,使得单片机复位;几个毫秒后,C充满,10K电阻上电流降为0,电压也为0,使得单片机进入工作状态.工作期间,按下S,C放电.S 松手,C又充电,在10K电阻上出现电压,使得单片机复位.几个毫秒后,单片机进入工作状态.2、内部时钟模式电路:当单片机工作于内部时钟模式的时候,只需在XTAL1和XTAL2引脚连接一个晶体振荡器或者陶瓷振荡器,并接两个电容后接地即可,在使用时对于电容的选择有一定的要求:当外接晶体振荡器的时候,电容值一般选择C1=C2=30+10pF或30-10pF;当外接陶瓷振荡器的时候,电容值一般选择C1=C2=40+10pF或40-10pF;3、AT89C51单片机引脚介绍:VCC:供电电压.GND:接地.P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流.当P0口的管脚第一次写1时,被定义为高阻输入.P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位.在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高.P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流.P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故.在FLASH编程和校验时,P1口作为第八位地址接收.P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入.并因此作为输入时,P2口的管脚被外部拉低,将输出电流.这是由于内部上拉的缘故.P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位.在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容.P2口在FLASH编程和校验时接收高八位地址信号和控制信号.P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流.当P3口写入“1”后,它们被内部上拉为高电平,并用作输入.作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故.P3口也可作为AT89C51的一些特殊功能口:P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 /INT0(外部中断0)P3.3 /INT1(外部中断1) P3.4 T0(记时器0外部输入) P3.5 T1(记时器1外部输入)P3.6 /WR(外部数据存储器写选通) P3.7 /RD(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号.RST:复位输入.当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间.ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节.在FLASH编程期间,此引脚用于输入编程脉冲.在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6.因此它可用作对外部输出的脉冲或用于定时目的.然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲.如想禁止ALE的输出可在SFR8EH地址上置0.此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用.另外,该引脚被略微拉高.如果微处理器在外部执行状态ALE禁止,置位无效./PSEN:外部程序存储器的选通信号.在由外部程序存储器取指期间,每个机器周期两次/PSEN有效.但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现./EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器.注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器.在FLASH编程期间,此引脚也用于施加12V 编程电源(VPP).XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入.XTAL2:来自反向振荡器的输出.4、单片机与复位、时钟电路连接电路图:4.3、键盘接口电路:计算器输入数字和其他功能按键要用到很多按键,如果采用独立按键的方式,在这种情况下,编程会很简单,但是会占用大量的I/O 口资源,因此在很多情况下都不采用这种方式,而是采用矩阵键盘的方案.矩阵键盘采用四条I/O 线作为行线,四条I/O 线作为列线组成键盘,在行线和列线的每个交叉点上设置一个按键.这样键盘上按键的个数就为4×4个.这种行列式键盘结构能有效地提高单片机系统中I/O 口的利用率.矩阵键盘的工作原理:计算器的键盘布局如图1所示:一般有16个键组成,在单片机中正好可以用一个P口实现16个按键功能,这种形式在单片机系统中也最常用.图 1 矩阵键盘布局图矩阵键盘内部电路图如图所示:我们在设计中还使用了6264静态RAM芯片,如图所示:Intel 6264的容量为8KB,是28引脚双列直插式芯片,采用CMOS工艺制造A12~A0(address inputs):地址线,可寻址8KB的存储空间.D7~D0(data bus):数据线,双向,三态.OE(output enable):读出允许信号,输入,低电平有效.WE(write enable):写允许信号,输入,低电平有效.CE1(chip enable):片选信号1,输入,在读/写方式时为低电平.CE2(chip enable):片选信号2,输入,在读/写方式时为高电平.VCC:+5V工作电压.GND:信号地.Intel 6264的操作方式由OE,WE, CE1 , CE2的共同作用决定①写入:当WE和CE1为低电平,且OE和CE2为高电平时,数据输入缓冲器打开,数据由数据线D7~D0写入被选中的存储单元.②读出:当OE和CE1为低电平,且WE和CE2为高电平时,数据输出缓冲器选通,被选中单元的数据送到数据线D7~D0上.③保持:当CE1为高电平,CE2为任意时,芯片未被选中,处于保持状态,数据线呈现高阻状态.此外,还用了74ls373八D锁存器,如图:内部引脚图如下:当三态允许控制端 OE 为低电平时,Q0~Q7为正常逻辑状态,可用来驱动负载或总线.当 OE 为高电平时,Q0~Q7 呈高阻态,即不驱动总线,也不为总线的负载,但锁存器内部的逻辑操作不受影响.当锁存允许端 LE 为高电平时,Q 随数据 D 而变.当 LE 为低电平时,D 被锁存在已建立的数据电平.当 LE 端施密特触发器的输入滞后作用,使交流和直流噪声抗扰度被改善 400mV.4.4、LCD显示模块:本设计采用LCD液晶显示器来显示输出数据.通过D0-D7引脚向LCD写指令字或写数据以使LCD实现不同的功能或显示相应数据.LCD模块4.5、运算模块(单片机控制):MCS-51 单片机是在一块芯片中集成了CPU、RAM、ROM、定时器/计数器和多功能I/O等一台计算机所需要的基本功能部件.如果按功能划分,它由如下功能部件组成,即微处理器(CPU)、数据存储器(RAM)、程序存储器(ROM/EPROM)、并行I/O 口、串行口、定时器/计数器、中断系统及特殊功能寄存器(SFR).单片机是靠程序运行的,并且可以修改.通过不同的程序实现不同的功能,尤其是特殊的独特的一些功能,通过使用单片机编写的程序可以实现高智能,高效率,以及高可靠性!因此我们采用单片机作为计算器的主要功能部件,可以很快地实现运算功能.4.6、软件设计:4.6.1主函数设计:/******************************************************************************************* 主程序calc.c ************ ************ 2012/1/8 *******************************************************************************************/#include <intrins.h>#include <reg51.h>#include "calc.h"//定义变量static data LONG lvalue;static data LONG rvalue;static data CHAR currtoken;static data CHAR lasttoken;static data CHAR lastpress;static xdata CHAR outputbuffer[MAX_DISPLAY_CHAR];VOID main (VOID)//给变量初始化并调用汇编程序初始化LCD显示器;{ lvalue = 0;rvalue = 0;currtoken = '=';lasttoken = '0';initialise(); // 初始化LCD显示器calc_output(OK);calc_evaluate();}VOID calc_evaluate(){ CHAR data key;INT data i;CHAR xdata number[MAX_DISPLAY_CHAR];CHAR xdata *bufferptr;// 程序开始前先清除所有缓冲区.for (i = 0; i <= MAX_DISPLAY_CHAR; i++){ number[i] = ' ';}bufferptr = number;for (;;){ key = calc_getkey();if (calc_testkey(key))// 按键测试为1是数字,将其写入缓冲区.// 数字的大小限制,主要是数字的数目.{ if (bufferptr != &number[MAX_DISPLAY_CHAR - 2]) { *bufferptr = key;calc_display(number);bufferptr++;}}else// 否则就是运算符.{//分配值.if (lasttoken == '0'){ lvalue = calc_asciidec (number);}else{ rvalue = calc_asciidec (number);}//清除缓冲.bufferptr = number;for (i = 0;i <= MAX_DISPLAY_CHAR; i++){ number[i] = ' '; }//处理运算符.currtoken = key;if (currtoken == 'C'){ calc_opfunctions(currtoken); }else{ calc_opfunctions(lasttoken); }// 清除输出缓冲,为下一个运算符做准备.for (i = 0;i <= MAX_DISPLAY_CHAR;i++){ outputbuffer[i] = ' ';}bufferptr = number;// 处理等于号,只需要保留以前的值.if (currtoken != 0x3D) lasttoken = currtoken;}lastpress = key;}}VOID calc_opfunctions (CHAR token)// 运算符的处理操作,左值保存结果.{ CHAR data result;switch(token)// 加.{ case '+' : if ((currtoken == '=' ) || ((lastpress >= 0x30) && (lastpress <=0x39))){ lvalue += rvalue;result = calc_chkerror(lvalue);}else{ result = SLEEP; } break;// 减.case '-' : if ((currtoken == '=' ) || ((lastpress >= 0x30) && (lastpress <=0x39))){ lvalue -= rvalue;result = calc_chkerror(lvalue);}else{ result = SLEEP;} break;// 乘.case '*' : if ((currtoken == '=' ) || ((lastpress >= 0x30) && (lastpress <=0x39))){ lvalue *= rvalue;result = calc_chkerror(lvalue);}else{ result = SLEEP;} break;// 除.case '/' : if ((currtoken == '=' ) || ((lastpress >= 0x30) && (lastpress <=0x39))){ if (rvalue){ lvalue /= rvalue;result = calc_chkerror(lvalue);}else{ result = ERROR;}}else{ result = SLEEP;} break;// 清零.case 'C' : lvalue = 0;rvalue = 0;currtoken = '0';lasttoken = '0';result = OK; break;default : result = SLEEP;}calc_output(result);}INT calc_chkerror (LONG num)// 检查最低位数和最高位数从-9999到+9999{ if ((num >= -9999) && (num <= 9999))return OK;elsereturn ERROR;}VOID calc_output (INT status)// 根据操作状态输出{ switch (status){ case OK : calc_display(calc_decascii(lvalue)); break; case SLEEP : break;case ERROR : calc_display("E "); break;default : calc_display("E "); break;}}LONG calc_asciidec (CHAR *buffer)// 将ASCII码转换为浮点数.{ LONG data value;LONG data digit;value = 0;while (*buffer != ' '){ digit = *buffer - 48;value = value*10 + digit;buffer++;}return value;}CHAR *calc_decascii (LONG num)// 将浮点数转换成ASCII码.{ LONG data temp = num;CHAR xdata *arrayptr = &outputbuffer[MAX_DISPLAY_CHAR];LONG data divisor = 10;LONG data result;CHAR data remainder,asciival;INT data i;// 如果计算结果是0,直接将0插入缓冲区即可.if (!temp){ *arrayptr = 48;goto done;}// 处理负数.if (temp < 0){ outputbuffer[0] = '-';temp -= 2*temp;}for (i=0 ; i < sizeof(outputbuffer) ; i++){ remainder = temp % divisor;result = temp / divisor;// 运行结束,将空格插入缓冲区if ((!remainder) && (!result)){ *arrayptr = ' ';}else{ asciival = remainder + 48;*arrayptr = asciival;}temp /= 10;// 为“-“保存一个空间;if (arrayptr != &outputbuffer[1]) arrayptr--;}done: return outputbuffer;}CHAR calc_testkey (CHAR key)// 测试按键是数字还是运算符;返回1代表数字,0代表运算符;{ if ((key >= 0x30) && (key <= 0x39)){ return 1;}else{ return 0;}}/************************************************************************ ***** 输入输出部分函数 ****************************/CHAR calc_getkey (VOID)//使用*Keypad_Read* 汇编文件函数扫描键和返回按下的键的 ASCII 值{ CHAR data mykey;do mykey = input();while (mykey == 0); //等待按键;return mykey;}VOID calc_display (CHAR buf[MAX_DISPLAY_CHAR])// 使用输出和 *LCD_Write* 的汇编文件输出LCD的值{ INT data i = 0;clearscreen();for (i ; i <= MAX_DISPLAY_CHAR ; i++){ if (buf[i] != ' '){ output(buf[i]); } //输出LCD的值;}}4.6.2、键盘中断程序设计:/******************************************************************************************* 控制按键的汇编 ************ ************ keypad.asm ************************ 2012/1/8 *******************************************************************************************/NAME KEYPAD; 从键盘读出一个字符然后返回到R7中.;设立部分无参输入程序.PRinputKEYPAD SEGMENT CODEPUBLIC inputDTinputKEYPAD SEGMENT DATARSEG ?DT?input?KEYPAD ; 局部变量的输出程序段.KEY_ROW1 equ 0EFhKEY_ROW2 equ 0DFhKEY_ROW3 equ 0BFhKEY_ROW4 equ 07Fhkeyflags: ds 16RSEG ?PR?input?KEYPAD ; 输出程序的代码段.input:keyscan: push DPHpush DPLmov R0,#keyflags ; R0 处理按键的切换字节mov R1,#KEY_ROW1 ; R1 处理键盘的行地址mov R2,#4 ; R2 计数行ksrow: mov P2,R1 ; 将行地址给P2口nopmov A,P1 ; 从P1口读取列地址mov R3,#4 ; 每行按键用R3计数anl A,#3Fhks0: rrc A ; 移动到下一位mov R4,A ; R4 保存行数据jc ks1 ; 如果没有按键就跳到ks1mov A,@R0 ; 测试按键是否已被按下mov @R0,#1 ; 按下之后将R0给#0,标志按下jz ksnew ; 如果有新的按键按下就跳转到ksnewjmp ks2ks1: mov @R0,#0 ; 没有按键就标记为0ks2: inc R0 ; R0自增,进入这行里面的下一个按键的循环mov A,R4djnz R3,ks0mov A,R1 ; 将R1循环移位去处理下一行rl Amov R1,Adjnz R2,ksrowclr Amov R7,A ; 如果没有按键,返回0.jmp ksendksnew: mov DPTR,#keycodes ;发现有新的按键按下:mov A,R0 ; 按键的标志从R0取出clr Csubb A,#keyflagsmovc A,@A+DPTRmov R7,A ; 将按键给R7.ksend: mov P2,#0FFhpop DPLpop DPHret;按键表keycodes: db '7','8','9', '/'db '4','5','6', '*'。

相关文档
最新文档