单片机设计简易计算器

合集下载

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

单片机简易计算器设计

单片机简易计算器设计

单片机简易计算器设计一、引言:计算器是一种用于进行数学运算的工具,可以提供基本的算术运算功能。

单片机是一种集成电路,具有微处理器、存储器、计数器和输入/输出接口等功能,适合用于设计和实现计算器。

本篇文章将介绍如何设计和实现一款基于单片机的简易计算器。

二、设计目标:本文设计的简易计算器具有以下功能:1.能够进行四则运算,包括加法、减法、乘法和除法;2.具有输入和输出功能,可以输入运算表达式,并输出计算结果;3.采用简单直观的按键输入方式,便于用户操作。

三、设计原理:1.系统框图:```_______________输入/输接口I______________\/_______________单片机芯(CPU______________```2.硬件设计:使用单片机来处理计算表达式和输出计算结果。

输入/输出接口IC负责处理用户输入和显示输出。

单片机芯片是整个计算器系统的核心,负责执行算术运算的逻辑。

3.软件设计:(1)初始化:设置单片机芯片工作环境,包括引脚配置、定时器设置等。

(2)输入处理:使用按键输入方式获取用户输入的数值和运算符,按下等号键时开始计算。

(3)运算处理:根据输入的数值和运算符进行相应的运算操作,得出计算结果。

(4)输出显示:将计算结果输出到显示装置上。

四、实现步骤:1.硬件实现:根据设计原理中的系统框图,采购和连接合适的输入/输出接口IC以及单片机芯片。

2.软件编程:(1)初始化:根据单片机芯片的型号和文档,编写初始化程序,包括引脚配置、定时器设置等。

(2)输入处理:编写输入处理程序,包括按键输入方式、数值和运算符的提取等。

(3)运算处理:编写运算处理程序,根据输入的数值和运算符,实现相应的运算逻辑。

(4)输出显示:编写输出显示程序,将计算结果输出到显示装置上。

3.实验验证:将硬件和软件进行调试和验证,确保计算器可以正常工作并满足设计目标。

4.优化改进:根据实验结果,对计算器进行优化和改进,提升计算器的性能和用户体验。

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

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

基于51单片机的简易计算器设计基于51单片机的简易计算器设计一、引言随着微电子技术和嵌入式技术的发展,越来越多的智能化设备被应用于日常生活中。

其中,基于51单片机的简易计算器设计具有广泛的应用价值。

本文将介绍如何使用51单片机设计一个简易计算器,实现加减乘除的基本运算功能。

二、设计方案1.硬件组成:本设计采用51单片机作为主控芯片,与键盘、显示器等外围设备相连。

键盘用于输入数字和运算符,显示器则用于显示运算结果。

2.软件设计:软件部分包括主程序和子程序。

主程序负责初始化硬件、读取键盘输入和显示运算结果。

子程序包括加减乘除的运算子程序,可根据输入的运算符和操作数进行相应的运算。

3.算法实现:在加减乘除的运算子程序中,采用基本的数学运算方法实现。

对于加法,直接将两个操作数相加;对于减法,将两个操作数相减;对于乘法,采用循环相乘的方法;对于除法,采用循环相除的方法。

三、实验结果在实验中,我们成功地使用51单片机设计了一个简易计算器,实现了加减乘除的基本运算功能。

在测试过程中,我们输入了不同的数字和运算符,得到了正确的运算结果。

同时,我们也测试了计算器的稳定性,发现其在连续运算时表现良好,没有出现明显的误差或故障。

四、结论基于51单片机的简易计算器设计具有简单易行、实用性强等优点。

通过实验测试,我们验证了其可行性和稳定性。

此外,该设计还可以根据需要进行扩展和优化,例如增加更多的运算功能、优化算法等。

未来,我们可以进一步研究如何提高计算器的运算速度和精度,以及如何将其应用于更多的实际应用场景中。

五、改进意见与展望1.增加更多的运算功能:例如实现括号、开方、指数等高级运算,满足更复杂的数学计算需求。

2.优化算法:针对现有的加减乘除运算算法进行优化,提高运算速度和精度。

例如采用更高效的除法算法,减少运算时间。

3.增加存储功能:在计算器中加入存储单元,使得用户可以在多个步骤之间进行数据传递和保存。

4.增强人机交互界面:优化显示器的显示效果,增加用户输入的便捷性,提高用户体验。

单片机简易计算器设计(二)2024

单片机简易计算器设计(二)2024

单片机简易计算器设计(二)引言:单片机简易计算器是一种以单片机为核心实现基本算术运算的小型电子设备。

本文继续探讨单片机简易计算器的设计方案,并详细介绍了其具体实现步骤和功能。

正文:第一大点:电路设计1. 选择适当的单片机型号2. 设计电源电路,确保稳定供电3. 搭建输入输出电路,包括按键和显示模块的连接4. 设计外部调试接口,方便程序的调试和更新5. 进行电路的模拟仿真和实际测试,确保电路的正常工作第二大点:程序编写1. 定义输入输出的数据结构2. 编写初始化程序,配置端口和寄存器3. 编写按键扫描程序,实现按键的读取和编码4. 编写基本算术运算程序,包括加法、减法、乘法和除法5. 编写显示程序,将结果显示在数码管或液晶屏上第三大点:算法优化1. 选择合适的算法,使计算速度尽可能快2. 使用位运算代替乘除法运算,提高运算效率3. 使用查表法来加速计算过程4. 增加缓存机制,优化存储空间的使用5. 对程序进行反复优化和测试,确保算法的准确性和高效性第四大点:错误处理与异常处理1. 设计输入错误的检测机制,防止用户输入无效的数据2. 处理溢出和除零等运算错误,避免程序崩溃3. 设计异常处理程序,对错误输入进行友好提示4. 进行充分的测试和调试,确保程序的稳定性5. 添加日志功能,记录错误信息和运行状态,便于排查问题第五大点:功能扩展1. 添加科学计算功能,如平方根、三角函数等2. 实现单位换算功能,方便不同单位之间的转换3. 增加储存器功能,可以保存计算结果或中间数据4. 设计菜单界面,使用户可以自由选择不同的功能5. 进行实际应用测试,检验扩展功能的可靠性和实用性总结:本文对单片机简易计算器的设计进行了全面的阐述。

通过合理的电路设计、程序编写和算法优化,以及错误和异常处理,使得计算器具备稳定高效的运算能力。

同时还介绍了功能扩展方面的设计思路,为后续的开发和升级提供了参考。

单片机设计简易计算器

单片机设计简易计算器

单片机设计简易计算器(共18页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--简易计算器Simply Calculator1 设计思想此计算器有键盘部分、单片机、显示部分三部分组成,键盘部分主要完成输入功能;单片机主要完成数据处理功能,包括确定按键,完成运算,以及输出数据;显示器部分主要完成单片机输出的显示。

本设计的思路是利用单片机性能好,稳定性强的优点来实现系统的运行。

设计大致可以分为三个步骤:第一步,硬件的选取和设计;第二步,程序的设计和调试;第三步,Protues系统仿真。

硬件是设计的骨骼,不仅关系到设计总体方向的确定,还要综合考虑节能,环保,以及稳定性和经济性等各种因素。

因此需要花费大量的时间。

硬件的选取最为重要,包括选用的芯片,显示设备的选取,输入设备的选取等。

本设计是通过单片机来实现的,因此选用了ATMEGA16单片机作为主体,输入设备选用矩阵键盘。

程序是硬件的灵魂,是实现设计的中心环节。

本设计使用的程序语言是C语言,在“ICC AVR”中运行,调试,直到运行出正确结果,然后输出后缀名为.HEX格式的文件,以备在Protues中仿真使用。

程序是设计的关键,程序的调试需要大量的时间,耐心,还够要有足的细心才能成功。

本设计中就出现了大量的错误,经过认真修改,最终才能运行出正确结果。

最后的系统仿真是设计是否成功的验证,是设计不可缺少的重要环节。

这就要求能掌握Protues的一些基本操作。

2原理分析矩阵键盘的扫描图矩阵键盘图如图所示,单片机的8个I/O口和矩阵键盘相连,用8个I/O口来控制矩阵键盘的16个按键是非常有意思的,首先我们设置单片机的PD0—PD7为输出,且PD0—PD3依次设置为低电平,而PD4—PD7设置为高电平,然后我们设置PD4—PD7为输入,而PD0—PD3仍然为输出,假如此时M1键按下,则PD0与PD4相连,因为PD0是低电平,而PD4是输入,所以PD4会被拉为低电平,同理,如果M2被按下,则PD5会被拉低,M3按下,PD6会被拉低,M4按下,PD7被拉低。

51单片机简易计算器设计

51单片机简易计算器设计

51单片机简易计算器设计一、设计思路计算器的基本功能包括加法、减法、乘法和除法。

我们可以使用按键作为输入方式,将输入的数字和操作符暂时保存在内存中,然后根据操作符进行相应的运算。

最后再将运算结果显示在数码管上。

具体设计思路如下:1.确定计算器所需的硬件组件:数码管、按键、51单片机和相关电路。

2.定义按键与数字和操作符的对应关系。

3.编写51单片机的程序,实现按键输入、运算和结果显示的功能。

二、硬件设计1.数码管:使用常见的7段数码管作为显示器,通过引脚连接到51单片机的IO口。

2.按键:使用4个按键分别表示数字输入键、加法键、减法键和等于键。

三、软件设计1.初始化:将数码管引脚设为输出模式,将按键引脚设为输入模式。

2.按键处理:采用中断方式检测按键输入,通过编程判断所按的键。

3.数字输入:将按键所对应的数字保存在变量中,最多支持四位数的输入。

4.操作符输入:将按下的操作符保存在变量中。

5.运算:根据保存的操作符进行相应的运算,并将结果保存在变量中。

6.结果显示:将结果显示在数码管上。

四、代码实现下面是一个示例代码的框架,供参考:```c#include <reg52.h>sbit SDA = P0^0; // I2C总线数据线sbit SCL = P0^1; // I2C总线时钟线//定义按键的IO口sbit BUTTON0 = P1^0; // 数字输入键sbit BUTTON1 = P1^1; // 加法键sbit BUTTON2 = P1^2; // 减法键sbit BUTTON3 = P1^3; //等于键unsigned char num1 = 0; // 第一个操作数unsigned char num2 = 0; // 第二个操作数unsigned char op = 0; // 操作符unsigned char result = 0; // 运算结果//判断按键所对应的数字或操作符void buttonif (BUTTON0 == 0) // 数字输入键//将按键所对应的数字保存在变量中//显示数字}else if (BUTTON1 == 0) // 加法键//保存操作符为加号}else if (BUTTON2 == 0) // 减法键//保存操作符为减号}else if (BUTTON3 == 0) //等于键//根据保存的操作符进行相应的运算//将结果保存在变量中//显示结果}void mainwhile (1)button(; // 按键处理}```五、总结通过以上的设计思路和示例代码,我们可以轻松地实现一个简易的计算器。

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

单片机课程设计简易计算器设计
软件设计:编写程序代码,实现计算器的功能
调试与测试:对硬件和软件进行调试,确保计算器能够正常工作
制作报告:编写设计报告,包括需求分析、硬件设计、软件设计、调 试与测试等内容
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);}}```以上程序是一个简单的计算器程序示例。

单片机实践简易计算器实验报告

单片机实践简易计算器实验报告

单片机实践简易计算器实验报告本次实验的目的是通过单片机实现一个简易计算器,实现加减乘除四则运算。

在实验过程中,我们使用了STC89C52单片机,通过编写程序实现计算器的功能。

实验步骤:1. 确定硬件电路连接我们需要确定硬件电路连接。

本次实验使用的是STC89C52单片机,需要将其与LCD1602液晶屏、4x4矩阵键盘、蜂鸣器等硬件连接。

具体连接方式如下:STC89C52单片机:P0口:连接LCD1602液晶屏的数据线D0-D7P1口:连接LCD1602液晶屏的控制线RS、RW、EP2口:连接4x4矩阵键盘的行线R1-R4P3口:连接4x4矩阵键盘的列线C1-C4P4口:连接蜂鸣器2. 编写程序接下来,我们需要编写程序实现计算器的功能。

程序主要分为以下几个部分:(1)LCD1602液晶屏初始化(2)4x4矩阵键盘扫描(3)计算器功能实现(4)LCD1602液晶屏显示结果3. 调试程序编写完程序后,我们需要进行调试。

在调试过程中,我们需要注意以下几点:(1)检查硬件连接是否正确(2)检查程序是否有语法错误(3)检查程序是否能够正常运行4. 实验结果经过调试,我们成功实现了一个简易计算器。

在使用过程中,用户可以通过4x4矩阵键盘输入数字和运算符,计算器会自动进行计算,并在LCD1602液晶屏上显示结果。

同时,计算器还具有清零、退格等功能,方便用户进行操作。

总结:通过本次实验,我们学习了单片机的基本原理和编程方法,掌握了如何使用单片机实现一个简易计算器。

同时,我们还学习了如何进行硬件电路连接和程序调试,提高了我们的实践能力和动手能力。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

单片机设计实验报告简单计算器的设计

单片机设计实验报告简单计算器的设计

目录1.总体方案选择 (2)1.1 实验要求: (2)1.2方案设计 (2)2.硬件原理电路图的设计及分析 (3)2.1主控模块 (3)2.1.1 STC89C52单片机主要特性 (3)2.1.2 STC89C52单片机管脚图 (4)2.1.3 STC89C52单片机的中断系统 (5)2.1.4 STC89C52单片机的定时/计数器 (5)2.2矩阵键盘模块设计: (5)2.2.1矩阵键盘原理介绍 (5)2.2.2矩阵键盘电路设计 (6)2.3 LCD液晶显示器简介 (7)2.3.1液晶模块简介 (7)2.3.2液晶显示部分与89S52的接口 (8)3系统软件设计 (10)3.1系统软件流程图 (10)3.2系统整体原理图 (11)4.系统调试 (12)4.1硬件调试 (12)4.2软件调试 (12)4.3调试结果 (13)5.心得体会131.总体方案选择1) 1.1 实验要求:2)通过小键盘实现数据的输入, 并在LED数码管上显示3)实现+、-、*、/4)在LED数码管上显示结果并有清零, 退出功能1.2方案设计本系统以STC89C52单片机为控制核心, 对系统进行初始化, 主要完成对键盘的响应、液晶显示灯功能的控制, 起到总控和协调各模块之间工作的作用。

单片机通过检测键盘读取使用者按下对用功能的按键, 然后通过单片机内部运放把运算的结果显示在液晶屏幕上。

图1-1系统结构框图本系统结构如图1-1所示, 本设计可分为以下模块: 单片机主控模块、键盘模块、功率放大模块、闹铃模块、按键设置模块。

下面对各个模块的设计方案逐一进行论证分析。

2.硬件原理电路图的设计及分析2.1主控模块STC89C52有40个引脚, 4个8位并行I/O口, 1个全双工异步串行口, 同时内含5个中断源, 2个优先级, 2个16位定时/计数器。

STC89C52的存储器系统由4K的程序存储器(掩膜ROM), 和128B的数据存储器(RAM)组成。

51单片机简易计算器设计报告(一)

51单片机简易计算器设计报告(一)

51单片机简易计算器设计报告(一)背景介绍在数字化时代,计算器作为一种简单易用的工具,越来越得到人们的关注和热爱。

而基于51单片机的简易计算器,不仅可以成为一种学习电子技术的手段,还具有满足简单计算需求的实用性。

设计思路本计算器采用键盘输入和数码管输出的电路设计,为用户提供加、减、乘、除、小数点、退位以及等于等功能。

1.键盘输入采用矩阵键盘的方式,将所有按键按行列排列,并利用51单片机中断方式来读取键值。

2.计算处理通过编写相应的程序代码,计算出用户输入的两个数值及操作符的结果,并将结果存储在数据缓存器中,最后将其输出至数码管。

3.数码管显示根据计算结果的数据类型,将其经过相应的转换处理后,通过数码管将结果输出至用户。

设计技术1.软件编写软件编写方面,采用汇编语言进行编写,代码总长度为2.2KB 左右。

其中,以中断方式读取键值、实现数值存储与判断、计算处理、数码管的结果输出等作为关键点进行编写。

2.硬件搭建硬件搭建方面,需要按照电路图进行搭建,并将51单片机与相关周边电路进行连接。

根据设计思路,将键盘、数码管、电源、指示灯等设备按照需求进行连接。

可改进之处虽然 51单片机的简易计算器的搭建能够满足基本计算需求,但其在以下几方面还有可改进之处:•添加计算科学函数,如三角函数、对数函数等。

•改进操作方式,使其更加符合人体工程学原理。

•添加储存器,使用户能够将计算结果进行存储和调用。

总结通过本次对基于51单片机的简易计算器的设计与实现,我们深入了解了电子技术的基本概念和硬件搭建原理,并了解到了简单嵌入式系统的工作原理。

虽然该计算器在功能和效率方面还有待改进,但对于初学者来说,其对于电子技术的学习和实验还是很有价值和意义的。

•编写的汇编代码过于繁琐,可考虑使用高级语言编写以提高效率和易读性。

•在电路搭建时需注意布线的合理性,尽量避免出现干扰和信号损失的问题。

综上所述,基于51单片机的简易计算器的设计和实现虽存在一些不足,但还是很有价值的。

基于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.功能强大:该计算器可以进行基本的四则运算,满足大多数日常计算需求。

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

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

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

基于单片机简易计算器的设计在我们的日常生活和工作中,计算器是一个非常实用的工具。

从简单的数学运算到复杂的科学计算,它都能为我们提供快速准确的结果。

而基于单片机设计的简易计算器,不仅具备基本的计算功能,还具有体积小、成本低、易于实现等优点。

一、设计背景随着电子技术的不断发展,单片机的应用越来越广泛。

它在控制、测量、通信等领域都发挥着重要作用。

而将单片机应用于计算器的设计,可以实现更加智能化和个性化的计算功能。

同时,对于学习电子技术的人来说,设计一个基于单片机的简易计算器也是一个很好的实践项目,可以帮助我们更好地理解单片机的工作原理和编程方法。

二、系统总体设计1、功能需求简易计算器应具备基本的四则运算(加、减、乘、除)功能,能够处理整数和小数的运算。

同时,还应具备清零、退位、等号等操作功能。

2、硬件设计硬件部分主要包括单片机最小系统、键盘输入模块、显示模块等。

单片机最小系统是整个系统的核心,负责控制和处理数据。

键盘输入模块用于接收用户的输入指令,显示模块用于显示计算结果。

3、软件设计软件部分主要采用 C 语言进行编程。

通过编写程序,实现对键盘输入的识别和处理,以及对计算结果的输出显示。

三、硬件电路设计1、单片机最小系统单片机选用常见的 STC89C52 芯片,它具有价格低廉、性能稳定等优点。

最小系统包括单片机芯片、晶振电路和复位电路。

晶振电路为单片机提供时钟信号,复位电路用于系统的初始化。

2、键盘输入模块键盘采用4×4 矩阵键盘,通过行列扫描的方式获取用户的输入信息。

键盘上的按键分别对应数字 0-9、四则运算符号、清零、退位和等号等功能。

3、显示模块显示模块选用 1602 液晶显示屏,它可以显示两行字符,每行 16 个字符。

通过单片机的控制,将计算结果和输入的算式显示在屏幕上。

四、软件程序设计1、主程序主程序主要负责初始化系统、扫描键盘、处理输入和计算结果等。

首先,对单片机的各个端口进行初始化设置,然后进入一个无限循环,不断扫描键盘,当检测到有按键按下时,根据按键值进行相应的处理。

(完整)基于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单片机的简易计算器设计的详细步骤和主要函数说明。

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

单片机设计性实验-简易的16键计算器

单片机设计性实验-简易的16键计算器

成绩实验报告实验名称单片机设计性实验___实验班级姓名学号(后两位)指导教师实验日期单片机设计实验一、实验目的1、掌握单片机定时器、中断、键盘扫描、动态显示及数值计算的综合运用能力;2、掌握编程的运用能力;3、设计一只简易的16键计算器。

二、实验内容图5-1 简易16键计算器编程实现图5-1的简易16键4位十进制整数计算器的功能。

要求:1.设计4*4的键盘,其10个数字键0~9,其余6个为“+”“-”“*”“/”“=”和“C”2.设计4位LED接口电路或LCD显示电路3.实现2位数的简单运算三、系统硬件设计电路图四、设计框图和程序:程序源代码:DISPBUF EQU 30H ;主程序的入口地址 ORG 0000H;4个数码管显示"0000"字形数据 START:MOV DISPBUF,#0C0H MOV DISPBUF+1,#0C0H MOV DISPBUF+2,#0C0H MOV DISPBUF+3,#0C0H MOV 37H,#00H ;数值初始化 MOV 27H,#00H MOV 26H,#00H MOV 25H,#00H MOV 24H,#00H MOV 23H,#00H MOV R3,#00H MOV R5,#00H MOV R4,#00H ;调用键盘扫描子程序 LOOP: LCALL KEY MOV R6,27HCJNE R6,#00H,START ;清除键判断 MOV R6,26H;显示数据转换子程序选择 CJNE R6,#00H,FA;调用数码管显示数据转换子程序LCALL CONV ;调用数码管动态显示子程序 FA:LCALL DISPSCAN SJMP LOOPKEY:MOV P2,#0FH ;键盘扫描子程序 MOV A,P2 ANL A,#0FH CJNE A,#0FH,K10 RETK10:JB P2.0,K20 K11:MOV P2,#0EFH JB P2.0,K12 CJNE R5,#00H,L1 MOV R4,#00H INC R5 MOV R3,#1H L1:LJMP CEND K12: MOV P2,#0DFH JB P2.0,K13CJNE R5,#00H,L2 MOV R4,#00HINC R5MOV R3,#2HL2:LJMP CENDK13: MOV P2,#0BFH JB P2.0,K14CJNE R5,#00H,L3 MOV R4,#00HINC R5MOV R3,#3HL3:LJMP CENDK14: MOV P2,#7FH JB P2.0,KILCJNE R5,#00H,L4 MOV R4,#00HINC R5MOV R3,#4HKIL:LJMP KENDL4:LJMP CENDK20:JB P2.1,K30K21:MOV P2,#0EFH JB P2.1,K22LJMP DYUK22:MOV P2,#0DFH JB P2.1,K23MOV 25H,#3H LJMP OPRK23:MOV P2,#0BFH JB P2.1,K24MOV 25H,#6H LJMP OPRK24:MOV P2,#7FH JB P2.1,cctvMOV 25H,#9H LJMP OPRcctv:ljmp kendK30:JB P2.2,K40 K31: MOV P2,#0EFH JB P2.2,K32MOV 25H,#0HLJMP OPRK32:MOV P2,#0DFH JB P2.2,K33MOV 25H,#2HLJMP OPRK33:MOV P2,#0BFH JB P2.2,K34MOV 25H,#5HLJMP OPRK34:MOV P2,#7FHJB P2.2,KENDMOV 25H,#8HLJMP OPRK40:JB P2.3,KENDK41: MOV P2,#0EFH JB P2.3,K42INC 27HLJMP KENDK42:MOV P2,#0DFH JB P2.3,K43MOV 25H,#1HLJMP OPRK43:MOV P2,#0BFH JB P2.3,K44MOV 25H,#4HLJMP OPRK44:MOV P2,#7FHJB P2.3,KENDMOV 25H,#7HLJMP OPROPR: ;键值存储INC R4CJNE R5,#00H,CHANG CJNE R4,#2H,KBK ZHI:MOV A,20HMOV B,#0AHMUL ABMOV 20H,25HADD A,20HCJNE R5,#00H,CZHMOV 23H,ALJMP KENDCZH:MOV 24H,ALJMP KENDKEND:MOV P2,#0FH MOV A,P2ANL A,#0FHCJNE A,#0FH,KENDRETCHANG:CJNE R4,#2H,HONG AJMP ZHIHONG:JNC CENDINC R5MOV 20H,25HMOV 24H,25HLJMP CENDKBK:JNC CENDMOV 20H,25HMOV 23H,25HLJMP CENDDYU: ;结果计算MOV R5,#00HMOV R4,#00HMOV 25H,#00HCJNE R3,#1H,SMOV A,23HADD A,24HMOV 23H,ASJMP CENDS:CJNE R3,#2H,S1 CLR CMOV A,23HCJNE A,#00H,JIANFA MOV 23H,#0EH SJMP CEND JIANFA:SUBB A,24H MOV 23H,ASJMP CENDS1:CJNE R3,#3H,S2 MOV A,23HMOV B,24HMOV A,23HMUL ABMOV R6,BCJNE R6,#00H,CHENG MOV 23H,ASJMP CENDS2:CJNE R3,#4,CEND MOV A,24HCJNE A,#00H,ZY MOV A,#00HSJMP CENDZY:MOV A,23HMOV B,24HDIV ABMOV 23H,ACEND:MOV P2,#0FH MOV A,P2ANL A,#0FHCJNE A,#0FH,CEND RETCHENG:MOV R3,B MOV B,#64HDIV ABMOV 36H,AMOV A,BMOV B,#0AHDIV ABMOV 35H,AMOV 34H,BMOV DPTR,#TABLE XIAN:MOV A,34HADD A,#6HMOV B,#0AHDIV ABMOV 25H,AMOV 34H,BMOV A,BMOVC A,@A+DPTR MOV DISPBUF,A MOV A,35HADD A,#5HADD A,25HMOV B,#0AHDIV ABMOV 25H,AMOV 35H,BMOV A,BMOVC A,@A+DPTR MOV DISPBUF+1,A MOV A,36HADD A,#2HADD A,25HMOV B,#0AHDIV ABADD A,37HMOV 37H,AMOVC A,@A+DPTR MOV DISPBUF+3,A MOV 36H,BMOV A,BMOVC A,@A+DPTR MOV DISPBUF+2,A DJNZ R6,XIAN MOV 26H,#1H AJMP CENDCONV: ;数码管显示数据转换子程序CJNE R5,#02H,BEIMOV A,24HAJMP JINGBEI:MOV A,23HJING:MOV B,#64HDIV ABMOV DPTR,#TABLEMOVC A,@A+DPTRMOV DISPBUF+2,AMOV A,BMOV B,#0AHDIV ABMOVC A,@A+DPTRMOV DISPBUF+1,AMOV A,BMOVC A,@A+DPTRMOV DISPBUF,ARET;数码管动态显示子程序DISPSCAN:MOV R0,#DISPBUF MOV R2,#4HMOV A,#1HSC:PUSH ACCMOV A,@R0MOV P1,APOP ACCMOV P0,ALCALL DELAY1MOV P0,#00HRL AINC R0DJNZ R2,SCMOV P0,#1HRETDEL12:MOV R6,#1EHDEL2:MOV R7,#64H DEL1:DJNZ R7,DEL1 DJNZ R6,DEL2RETDELAY1:MOV R6,#70D2:MOV R7,#100 DJNZ R7,$ DJNZ R6,D2RET;------字符表------TABLE:DB 0C0H,0F9H,0A4H,0B0H,99H DB 92H,82H,0F8H,80H,90HDB 88H,83H,0C6H,0A1H,86HDB 8EHEND五、实验总结。

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

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

单片机简易计算器课程设计一、课程目标知识目标:1. 学生能理解单片机的基本结构及其工作原理,掌握简易计算器的硬件组成。

2. 学生能掌握C语言编程的基本语法,运用其编写简易计算器的程序代码。

3. 学生能了解简易计算器的工作流程,理解其功能模块的设计与实现。

技能目标:1. 学生能够运用所学知识,设计并搭建简易计算器的硬件电路。

2. 学生能够运用C语言编写简易计算器的程序,实现加、减、乘、除等基本运算功能。

3. 学生能够对计算器程序进行调试和优化,解决实际问题。

情感态度价值观目标:1. 学生通过课程学习,培养对单片机及编程的兴趣,激发探究精神。

2. 学生在团队协作中学会沟通、分享,培养合作意识,增强团队精神。

3. 学生能够认识到所学知识在生活中的应用,体会科技改变生活的意义。

课程性质:本课程为实践性较强的课程,要求学生动手操作,结合理论知识进行实际应用。

学生特点:学生已具备一定的电子基础和编程知识,对单片机有一定了解,但实践能力有待提高。

教学要求:注重理论与实践相结合,引导学生主动参与,培养其动手能力和解决问题的能力。

通过课程学习,使学生能够将所学知识运用到实际项目中,提高其综合素质。

二、教学内容1. 硬件知识:- 单片机基本结构:介绍51单片机的内部结构、工作原理及其引脚功能。

- 硬件电路设计:讲解简易计算器的硬件组成,包括按键、显示屏、电源等模块。

2. 软件编程:- C语言基础:复习C语言基本语法,包括变量、数据类型、运算符、控制结构等。

- 编程实践:根据简易计算器的功能需求,编写程序代码,实现基本运算功能。

3. 系统设计与实现:- 系统设计:分析简易计算器的功能模块,设计程序流程图。

- 系统实现:指导学生搭建硬件电路,编写程序代码,实现简易计算器的功能。

4. 调试与优化:- 调试方法:教授程序调试方法,培养学生解决问题的能力。

- 优化策略:讨论程序优化策略,提高计算器性能。

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

简易计算器Simply Calculator1 设计思想此计算器有键盘部分、单片机、显示部分三部分组成,键盘部分主要完成输入功能;单片机主要完成数据处理功能,包括确定按键,完成运算,以及输出数据;显示器部分主要完成单片机输出的显示。

本设计的思路是利用单片机性能好,稳定性强的优点来实现系统的运行。

设计大致可以分为三个步骤:第一步,硬件的选取和设计;第二步,程序的设计和调试;第三步,Protues 系统仿真。

硬件是设计的骨骼,不仅关系到设计总体方向的确定,还要综合考虑节能,环保,以及稳定性和经济性等各种因素。

因此需要花费大量的时间。

硬件的选取最为重要,包括选用的芯片,显示设备的选取,输入设备的选取等。

本设计是通过单片机来实现的,因此选用了ATMEGA16单片机作为主体,输入设备选用矩阵键盘。

程序是硬件的灵魂,是实现设计的中心环节。

本设计使用的程序语言是C语言,在“ICC AVR”中运行,调试,直到运行出正确结果,然后输出后缀名为.HEX格式的文件,以备在Protues中仿真使用。

程序是设计的关键,程序的调试需要大量的时间,耐心,还够要有足的细心才能成功。

本设计中就出现了大量的错误,经过认真修改,最终才能运行出正确结果。

最后的系统仿真是设计是否成功的验证,是设计不可缺少的重要环节。

这就要求能掌握Protues的一些基本操作。

2原理分析矩阵键盘的扫描—》图矩阵键盘图如图所示,单片机的8个I/O口和矩阵键盘相连,用8个I/O口来控制矩阵键盘的16个按键是非常有意思的,首先我们设置单片机的PD0—PD7为输出,且PD0—PD3依次设置为低电平,而PD4—PD7设置为高电平,然后我们设置PD4—PD7为输入,而PD0—PD3仍然为输出,假如此时M1键按下,则PD0与PD4相连,因为PD0是低电平,而PD4是输入,所以PD4会被拉为低电平,同理,如果M2被按下,则PD5会被拉低,M3按下,PD6会被拉低,M4按下,PD7被拉低。

这是判断有无键盘按下的过程,当我们判断是那一个键盘按下时,我们首先设置8个I/O口为输出,输出为FE,即,PD0为低电平,其他全为高电平,然后我们设置PD4—PD7为输入,如果M1被按下,则PD4会比被拉为低电平,此时会变成EE,同理可以知道M2被按下时会变为DE,M3被按下时会变为BE,M4被按下时会变为7E。

同理我们可以设置8个I/O口输出FD来检测M5—M8是否被按下,设置8个I/O口输出FC来来检测M9—M12,设置8个I/O口输出F7来检测M13—M16,如果M1—M4没有被按下,就继续检测M4—M8,一次类推,就可以检测出16个按键了。

在这次设计中,16个按键M1—M16所对应检测值分别为:EE,DE,BE,7E,ED,DD,BD,7D,EB,DB,BB,7B,E7,D7,B7,77。

数字显示与计算本次设计选用的显示器是1602液晶显示器,此液晶显示器能显示32个字符,VSS接地,VDD接电源正极,E为时使能信号,R/W为读写选择端(H/L),RS为数据/命令选择端(H/L),D0—D7为数据I/O口。

首先我们初始化液晶显示器,然后显示出第一个被按下的数,并且使光标右移,如果有第二个数按下,则据继续显示,以此类推,然后把所有显示出来的数换算成一个数,如果按下“+”号,则显示出“+”,并且同理显示出“+”号后面按下的数字,然后调用加子程序,运算出结果,如果按下的是“-”,则调用减子程序,如果按下“*”,则调用乘子程序,如果按下“/”,则调用除子程序。

然后再调用显示结果子程序,显示出结果。

《3程序设计与说明流程图主程序流程图和运算子程序流程图为:图主程序流程图图运算子程序流程图。

键盘扫描流程图为:!,图键盘扫描子程序流程图程序说明本次设计采用模块化设计思想,包括主程序和初始化子程序、延时子程序、输出数据子程序、检测是否有按键按下子程序、确定按键子程序、清第二行屏与显示“Welcome”子程序、换算第一个数子程序、运算子程序、显示结果子程序等子程序。

运行程序后,首先调用子程序清屏第二行并显示“Welcome”,然后检测是否有按键按下,如果没有,继续检测,如果按下,则判断是否是加减乘除键被按下,如果是加减乘除被按下,则显示相应的字符并换算出字符前输入的数据和字符后输入的数字,然后检测是否有等号按下,如果有则完成相应的运算并显示相应的结果,然后检测是否有清屏键按下,如果有则清屏,相应的流程图如图2所示。

其中运算子程序的流程图如图3所示。

4调试!Protues系统仿真打开Protues,按设计思想放相应的零部件并连好线,把HEX文件加载到单片机中运行,检测结果是否正确。

硬件连线图如图所示。

"、图 Protues仿真图调式过程编写完程序后保存程序,在“ICC AVR”中运行,调试,直到运行出正确结果,然后输出后缀名为.HEX格式的文件。

刚开始有错误,是一些语法规则上的错误,不过经过几次的修改,最终输出了后缀名为.HEX格式的文件。

把后缀名为.HEX格式的文件加载到单片机后,刚开始只是显示出“Welcome”的一部分字符,仔细观察发现,程序的前后空格不对称,经过修改,最终得到了预期结果,最终运行结果如图所示。

5总结优缺点分析本计算器能完成加减乘除运算,结构简单,硬件较少,成本较低,另外本程序采用模块化设计思想,可读性强,具有很强的可移植性,便于调用。

在处理多任务时,可以用中断服务来实现多线程,通过设置中断,启动中断服务子程序使其自己执行任务,而CPU 可以做自己的工作,当有停止中断的请求产生时,CPU再停下自己的工作做相应处理。

—但是也有很多不足之处。

首先,程序有很多相同的代码,本来可以用调用的方法实现,减少代码长度,但是考虑到本程序不是很长,而且用调用的方法必然会增加算法的复杂度和逻辑思维强度,所以在这里没有采用!其次,为了节省空间,程序设计的注释部分不够详细,使读程序不是很方便。

再次,本计算器不能完成小数运算,也不能完成科学计算器的一些功能,而要完成这些功能,需要设置更多的键盘,加更多的程序,比较复杂,因为我时间有限,在此不再处理。

心得体会通过课程设计,我掌握了计算器的工作原理以及设计方法,我通过对计算器的几个模块的深入理解,我掌握了计算器的组成和制作过程,并通过自己的努力,制作出了自己的计算器,提高了我的动手能力和实践能力,同时我对单片机有了更深入的理解,也学会了使用单片机的方法,加深了对课本知识的进一步理解。

加强了我思考和解决问题的能力,认识来源于实践,实践是认识的动力和最终目的,实践是检验真理的唯一标准!在设计过程中,经常会遇到一些问题,就是心里想老着这样的接法可以行得通,但实际接上电路,总是实现不了。

所以这几天不管是吃饭还是睡觉,脑子里总是想着如何解决这些问题,功夫不负有心人,我通过认真思考,请教同学,查找资料,最后终于熟练掌握了基本理论知识,而且领悟诸多平时学习难以理解掌握的较难知识,学会了如何思考的思维方式,找到了设计的灵感。

在寻找答案的过程中,我学到了很多平时缺少的东西,对于理论知识学习不够扎实的我深感“书到用时方恨少”!认真思考才能找到出路,当初没有思路,诚如举步维艰,茫茫大地,不见道路。

在对理论知识梳理掌握之后,茅塞顿开,柳暗花明,思路如泉涌,高歌“条条大路通罗马”。

顿悟,没有思考便无出路,雨后才能见彩虹。

失败是成功之母。

不经历多次调试,是不可能得到完好的程序的。

至善至美,是人类永恒的追求。

但是,不从忘却“金无足赤,人无完人”,我们换种思维方式,去恶亦是至善,改错亦为至美。

在课程设计过程中,我们不断发现错误,不断改正,不断领悟,不断获取。

最终的调试环节,本身就是在践行“过而能改,善莫大焉”的知行观。

实践课诚然是一门专业课,给我很多专业知识以及专业技能上的提升,同时又是一门讲道课,一门思辨课,给了我许多道,给了我很多思,给了我莫大的空间。

至于建议,一言以蔽之,大学教育当如此。

我是一个急性子的人,看到那么复杂知识,我就不想做了,不过为了搞好课程设计,我硬是耐心完成每一个细节,我坚持一天呆在实验室10多个小时,虽然晚上眼睛比较酸痛,但是我感觉值。

这么多天的努力没有白费,我最后很好的完成了任务,很有成就感!我相信我在以后的生活和学习中会更耐心,更认真的!—;参考文献:[1]陈冬云等.ATmega 128单片机原理与开发指导.机械工业出版社,2006[2]李群芳等.单片微型计算机及接口技术(第二版).电子工业出版社,2005[3]周航慈.单片机程序设计基础.北航出版社,2005[4]何立民.MCS-51单片机应用系统设计.北航出版社,2002[5]马潮.高档8位单片机ATmega128原理与开发应用指南.北京航空航天大学出版社,2004·、附录程序—#include <>#include <>#include <>const unsigned char tab1[]=" Welcome ";const unsigned char tab3[]="90+-*/= ";unsigned char key[10];unsigned int temp1=0,temp2=0;unsigned char count1 = 0;{unsigned char wei;void delay(unsigned int ms){unsigned int i,j;for(i=0;i<ms;i++){for(j=0;j<1141;j++);} }|void int_port(){DDRA=0XFF;DDRB=DDRB|0X07;PORTB&=~BIT(PB0);DDRD=0XFF;PORTD=0XFF;DDRD=0XF0;;PORTD=PORTD&0X0F;}void com_lcd(unsigned char com) {PORTB&=~BIT(PB2);PORTB&=~BIT(PB1);PORTA=com;)PORTB|=BIT(PB0);delay(1);PORTB&=~BIT(PB0);}void data_lcd(unsigned char data) {PORTB|=BIT(PB2);*PORTB&=~BIT(PB1);PORTA=data;PORTB|=BIT(PB0);delay(1);PORTB&=~BIT(PB0);}unsigned char key_press(){、unsigned char i;DDRD=0XFF;PORTD=0XF0;DDRD=0X0F;i=PIND;if(i==0XF0){{DDRD=0XFF;//没键按下return 0;}else{DDRD=0XFF;//有键按下return 1;#}}unsigned char key_scan()//键检测{unsigned char key1,i=0X7F,j; delay(10);if(key_press()){;do{i=(i<<1|i>>7);PORTD=i;DDRD=0X0F;key1=PIND;j=key1&0XF0;}while(j==0XF0);<while(key_press());switch(key1){case 0xEE:key1=0x0;break;case 0xDE:key1=0x1; @break;case 0xBE:key1=0x2;break;case 0x7E:key1=0x3;break;case 0xED:)key1=0x4;break;case 0xDD:key1=0x5;break;case 0xBD:key1=0x6;break;>case 0x7D:key1=0x7;break;case 0xEB:key1=0x8;break;case 0xDB:key1=0x9;,break;case 0xBB:key1=0xA;break;case 0x7B:key1=0xB;break;case 0xE7:}key1=0xC;break;case 0xD7:key1=0xD;break;case 0xB7:key1=0xE;break;…case 0x77:key1=0xF;break;default:key1=16;}}else\{key1=16;}return key1;}void clear_lcd(){unsigned char i;com_lcd(0x01); //清屏|delay(1);com_lcd(0x38);//5*7,2行显示delay(1);com_lcd(0x06);//文字不动,光标自动右移 delay(1);com_lcd(0x0C);//开显示delay(1);com_lcd(0x81);//第一行首地址#delay(1);for (i=0;i<16;i++){ data_lcd(tab1[i]);delay(5);}}void clear_lcd_2() //清第二行{ unsigned char i;"com_lcd(0xc0);delay(1);for (i=0;i<16;i++){ data_lcd(tab1[1]);delay(1);}}unsigned int qushu(unsigned char m)//第一个数]{ unsigned char i;unsigned int num;unsigned int temp = 0;wei=m-1;//位数for (i=1;i<=wei;i++){if(key[i]==9){ num=0; }[else{num=key[i]+1;}temp=temp*10+num;}return temp;}unsigned int result(unsigned int c,unsigned int d)//运算子程序{ unsigned int result2;unsigned char k;:k=key[wei+1];switch(k){case 0x0a:result2=c+d;break;case 0x0b:result2=c-d;break;case 0x0c:result2=c*d;<break;case 0x0d:result2=c/d;default: ;}return result2;}void disp_result(unsigned int result_num )//显示结果子程序{>unsigned char aa=0;unsigned char i,c;unsigned int n = result_num ;clear_lcd_2();com_lcd(0xc0);delay(1);data_lcd(tab3[14]);com_lcd(0x04);~delay(1);com_lcd(0xcf);delay(1);if(n==0){aa=1;}while(n!=0) //计算结果长度{n=n/10;aa++;}for (i=1;i<=aa;i++)"{c=result_num%10;if(c==0){ c=10; }data_lcd(tab3[c-1]);//显示结果delay(1);result_num=result_num/10;}}.void main(){unsigned char wei2,i;unsigned int result1 = 0;unsigned int num2;int_port();clear_lcd();asm("nop");while(1){if(key_press()){ count1++;key[count1]=key_scan();if((key[count1]==0x0a)|(key[count1]==0x0b)|(key[count1]==0x0c)|(key[count1 ]==0x0d))//当按下+-*/时的处理{temp1=qushu(count1);data_lcd(tab3[key[count1]]);}else if(key[count1]==0x0e)//当按下=号时的处理{wei2=count1-wei-2;for (i=1;i<=wei2;i++){if(key[i]==9){ num2=0; }else{num2=key[i+wei+1]+1;}temp2=temp2*10+num2;}result1=result(temp1,temp2);disp_result(result1);count1=0;}else if(key[count1]==0x0f)//当按下最后一个键清1602第二行{com_lcd(0x06);delay(1);clear_lcd_2();count1=0;temp1=0;temp2=0;result1 = 0;}else{com_lcd(0xc0+count1-1);delay(1);data_lcd(tab3[key[count1]]);delay(1);}} }}。

相关文档
最新文档