51单片机的简易计算器要点

合集下载

51单片机项目教程项目 15 简易计算器

51单片机项目教程项目 15 简易计算器
.1 矩阵键盘扫描原理 矩阵按键部份由16个轻触按键按照4行4列排列,连接到JP50端口。将行线所 接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。这样,当按 键没有按下时,所有的输出端都是高电平,代表无键按下。行线输出是低电 平,一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可 得知是否有键按下了。
方法一:
逐行扫描:可以通过高四位轮流输出低电平来对矩阵键盘 进行逐行扫描,当低四位接收到的数据不全为1的时候,说明有按键按下,然 后通过接收到的数据是哪一位为0来判断是哪一个按键被按下。 方法二: 行列扫描:可以通过高四位全部输出低电平,低四位输出 高电平。当接收到的数据,低四位不全为高电平时,说明有按键按下,然后通 过接收的数据值,判断是哪一列有按键按下,然后再反过来,高四位输出高电 平,低四位输出低电平,然后根据接收到的高四位的值判断是那一行有按键按 下,这样就能够确定是哪一个按键按下了。
图 15-1 实物连接图
15.3 项目实施
图 15-2
实物连接图
实物操作图 15-3 如下:
图 15-3
实物结果图
项目 15简易计算器
项目目标 了解矩阵键盘检测原理及如何获得键盘扫描。 掌握矩阵键盘的检测和数码管显示混合编程。 建议学时 8 学时 知识要点 1 .了解 4*4 矩阵的工作原理。 2. 掌握数码管显示混合编程。
15.1项目分析
矩阵键盘是单片机外部设备中所使用的排布类似于 矩阵的键盘组。设计制作一个检测 4*4 矩阵键盘的按键 编码的实验,把实际按键的键值的八位编码先转换成从 0000—1111 的编码,再译成数码管能识别的八位编码,

(完整版)基于51单片机的数码管简易计算器

(完整版)基于51单片机的数码管简易计算器

基于51/52单片机的简易计算器制作11级自动化2班王栎斐宋为为闫巨东一、题目利用单片机芯片STC89C52、四位八段共阳数码管及已制作好的电路板等器件设计制作一个计算器。

二、任务与要求要求计算器能实现加减乘除四种运算具体如下1. 加法:四位整数加法计算结果若超过八位则显示计算错误2. 减法:四位整数减法计算结果若超过八位则显示计算错误3. 乘法:多位整数乘法计算结果若超过四位则显示计算错误4. 除法:整数除法5. 有清除功能三、课程设计简述总体设计思路简述1.按照系统设计的功能的要求初步确定设计系统由主控模块、显示模块、键扫描接口电路共三个模块组成。

主控芯片使用STC89C52单片机。

2.键盘电路采用4*4矩阵键盘电路。

3.显示模块采用共阳极数码管构成。

四、硬件电路五、软件编程部份#include<reg52.h>#define uchar unsigned char#define uint unsigned int//uchar code num[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};//共阴极// 0 1 2 3 4 5 6 7 8 9 熄灭-//uchar code loc[]={0xff,0xfe,0xfd,0xfb,0xf7};//uchar code ero[]={0x79,0x50,0x5c};uchar code num[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0x40};//共阳极uchar code loc[]={0x00,0x80,0x40,0x20,0x10};uchar code ero[]={~0x79,~0x50,~0x5c};uint n=0,n1=0,n2=0; //赋初值uchar flag=0; //计算类型选择关键字void delay(int t);void display(int n);void error();main(){while(1){uchar temp;//第一行检测P3=0xfe;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(10);temp=P3;temp=temp&0xfe;if(temp!=0xfe){temp=P3;switch(temp){case 0xee:n1=0;n2=0;n=0;flag=0;break; //清零case 0xde:n1=10*n1+0;n=n1;break;case 0xbe: if(flag==1)n=n2+n1; //=if(flag==2)n=n2-n1;if(flag==3)n=n2*n1;if(flag==4)n=n2/n1;n1=0;break;case 0x7e: // +n2=n1;n1=0;flag=1;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}}}//扫描第二行P3=0xfd;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(10);temp=P3;temp=temp&0xf0;if(temp!=0xf0){temp=P3;switch(temp){case 0xed:n1=10*n1+1;n=n1;break; //4case 0xdd:n1=10*n1+2;n=n1;break; //5case 0xbd:n1=10*n1+3;n=n1;break; //6case 0x7d:// -n2=n1;n1=0;flag=2;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}}}//扫描第三行P3=0xfb;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(10);temp=P3;temp=temp&0xf0;if(temp!=0xf0){temp=P3;switch(temp){case 0xeb:n1=10*n1+4;n=n1;break;case 0xdb:n1=10*n1+5;n=n1;break;case 0xbb:n1=10*n1+6;n=n1;break;case 0x7b: // *n2=n1;n1=0;flag=3;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}}}//扫描第四行P3=0xf7;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(10);temp=P3;temp=temp&0xf0;if(temp!=0xf0){temp=P3;switch(temp){case 0xe7:n1=10*n1+7;n=n1;break; //7case 0xd7:n1=10*n1+8;n=n1;break; //8case 0xb7:n1=10*n1+9;n=n1;break; //9case 0x77: // /n2=n1;n1=0;flag=4;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}}}display(n);}}//延时函数void delay(int t){int x,y;for(x=0;x<t;x++)for(y=0;y<t;y++);}//数码管显示void display(int n){//溢出处理uchar g,s,b,q;int abs;if((n>9999)||(n<-999)) error();//正数if((n>=0)&&(n<=9999)) {g=n%10;s=n/10%10;b=n/100%10;q=n/1000%10;P0=num[g];delay(5);P2=loc[4];delay(2);P2=loc[0];delay(3);if(n>=10){P0=num[s];P2=loc[3];delay(2);P2=loc[0];delay(3);}if(n>=100){P0=num[b];P2=loc[2];delay(2);P2=loc[0];delay(3);}if(n>=1000){P0=num[q];P2=loc[1];delay(2);P2=loc[0];delay(3);}}//负数if((n<0)&&(n>=-999)){abs=-n;g=abs%10;s=abs/10%10;b=abs/100%10;q=abs/1000%10;P0=num[g];P2=loc[4];delay(2);P2=loc[0];delay(2);if((abs/10%10>0)||(abs/100%10>0)){P0=num[s];P2=loc[3];;delay(2);P2=loc[0];delay(2);if((abs/100%10>0)){P0=num[b];P2=loc[2];delay(2);P2=loc[0];delay(2);if((abs/1000%10>0)){P0=num[q];P2=loc[1];delay(2);P2=loc[0];delay(2);}else{P0=num[11];P2=loc[1];delay(2);P2=loc[0];delay(2);}}else{P0=num[11];P2=loc[2];delay(2);P2=loc[0];delay(2);}}else{P0=num[11];P2=loc[3];delay(2);P2=loc[0];delay(2);}}}//溢出显示void error(){P2=loc[1];P0=ero[0];delay(2);P2=loc[0];delay(3);P2=loc[2];P0=ero[1];delay(2);P2=loc[0];delay(3);P2=loc[3];P0=ero[1];delay(2);P2=loc[0];delay(3);P2=loc[4];P0=ero[2];delay(2);P2=loc[0];delay(3); }。

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

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

基于51单片机的计算器设计计算器作为一种常用的电子设备,广泛应用于各个领域。

在本文中,我们将基于51单片机来设计一个简单的计算器,并对其进行详细介绍。

一、设计目标我们所设计的计算器需要具备以下功能:1.实现基本的算术运算,包括加、减、乘、除等;2.具备显示功能,能够将输入和运算结果以数字的形式显示在液晶屏上;3.提供清零和删除功能,方便计算器的操作;4.具备较高的计算精度和稳定性。

二、硬件设计计算器的硬件设计主要包括键盘输入、液晶屏输出和计算程序控制三个部分。

1.键盘输入为了简化设计的复杂度,我们采用矩阵键盘来实现输入功能。

矩阵键盘由多个行和多个列交叉连接而成,通过扫描行和列的方式来检测键盘输入的按键信息。

2.液晶屏输出我们选择16x2字符液晶显示屏来作为计算结果的输出设备。

这种液晶屏可以显示16个字符,每个字符由5x8像素点阵组成,具备较好的显示效果。

3.计算程序控制我们将基于51单片机来编写计算器的计算程序,并通过电路连接键盘输入和液晶屏输出设备。

通过读取键盘输入的按键信息,计算程序能够判断用户输入的数字和操作符,并进行相应的计算操作。

最后,计算结果将以数字的形式显示在液晶屏上。

三、软件设计计算器的软件设计主要包括键盘扫描与输入处理、计算程序控制和液晶屏显示三个模块。

1.键盘扫描与输入处理通过循环扫描矩阵键盘的行和列,可以得到按键信息。

根据按键信息的不同,我们可以判断用户输入的数字和操作符,并将其传递给计算程序模块进行处理。

同时,我们需要对一些特殊按键(如清零和删除)做特殊处理。

2.计算程序控制计算程序模块将根据键盘输入的数字和操作符,进行相应的算术运算。

我们可以采用栈的数据结构来处理运算符和运算数,以实现复杂的算术运算。

3.液晶屏显示计算结果将以数字的形式显示在液晶屏上。

我们可以通过51单片机的GPIO口控制液晶显示屏的操作,包括写入指令和写入数据。

通过设定光标位置及写入数字数据,可以将计算结果显示在液晶屏的指定位置上。

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

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

基于51单片机的简易计算器51单片机是一种广泛应用于嵌入式系统中的常用微控制器。

我们可以利用51单片机的强大功能和丰富的外设资源,设计一个简易计算器。

这个计算器可以进行基本的加减乘除运算,并且具备显示结果的功能。

首先,我们需要准备一块51单片机开发板,一块1602液晶显示屏模块,以及一些按键开关和电阻。

我们可以将运算器主要分为以下几个模块:数码管显示模块、键盘输入模块、运算模块和存储模块。

数码管显示模块:我们使用1602液晶显示屏模块来显示计算器的结果。

我们可以通过51单片机的IO口,将计算结果发送给液晶显示屏模块,实现结果的显示。

键盘输入模块:我们可以使用几个按键开关来实现数字和运算符的输入。

通过对按键的检测,我们可以将用户输入的数字和运算符转化为字符形式,并保存到内存中。

运算模块:我们需要根据用户输入的数字和运算符,进行相应的运算。

我们可以使用栈来实现这个功能。

栈是一种常用的数据结构,具有"先进后出"的特点。

我们可以将用户输入的数字和运算符按照一定的规则入栈,然后按照相应的顺序进行出栈和运算。

最后将结果保存到内存中。

存储模块:我们可以使用内部RAM来保存运算结果。

51单片机的内部RAM具有一定的存储能力,可以满足我们的基本需求。

在编写程序时,我们可以使用汇编语言或者C语言。

通过合理的编程,我们可以实现计算器的各项功能。

总结一下,基于51单片机的简易计算器主要包括数码管显示模块、键盘输入模块、运算模块和存储模块。

我们可以通过合理的编程,将这些模块相互配合,实现一个功能完善的计算器。

这个计算器不仅可以进行基本的加减乘除运算,还可以显示结果,方便用户进行计算。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

c51单片机设计计算器 设计总结

c51单片机设计计算器 设计总结

c51单片机设计计算器设计总结C51单片机设计计算器是一个复杂的项目,它涉及了微控制器编程、硬件接口、输入/输出等多个方面。

下面是对此项目的总结:1. 功能需求分析:在开始设计计算器之前,首先要明确需要实现的功能。

对于这个项目,基本的计算器功能如加、减、乘、除是必须的,同时考虑到扩展性,也可以加入一些高级功能如平方、立方等。

2. 硬件选择:C51单片机是一种常用的微控制器,其优点包括低功耗、高性能以及丰富的外设接口。

此外,还需要选择合适的显示模块(如LCD)和输入设备(如键盘)。

3. 软件设计:软件设计主要涉及到单片机的编程。

需要编写程序以实现计算器的各种功能。

这包括但不限于输入处理、运算逻辑、结果显示等部分。

4. 调试与测试:在完成硬件和软件的设计后,需要进行大量的测试以确保计算器的功能正常。

这包括基本的四则运算测试,以及一些复杂的测试用例,如溢出测试、边界条件测试等。

5. 性能优化:虽然基本的计算器功能可以运行,但性能和效率方面可能还有优化的空间。

例如,可以通过改进算法或者优化代码来提高计算速度。

6. 扩展性考虑:在设计时,应考虑到未来可能的扩展需求。

例如,可以预留一些接口或者引脚以便未来添加更多功能。

7. 文档与维护:完成项目后,应编写详细的文档以方便后续的维护和修改。

这包括硬件连接图、软件代码注释、测试报告等。

8. 安全与可靠性:对于任何电子设备,安全性和可靠性都是非常重要的。

在设计时,应考虑到各种可能的异常情况,并采取相应的预防措施。

通过这个项目,我们可以更深入地理解单片机的工作原理,以及如何在实际项目中应用这些知识。

同时,这个项目也提高了我们的硬件接口能力、编程技巧以及问题解决能力。

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

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

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

该计算器通过
16位的LCD显示屏实现了基本计算功能,包括加、减、乘、除、取反、开方等。

1. 硬件设计
该计算器的核心部件是STC89C52单片机。

STC89C52是一种
高性能、低功耗的8位单片机,拥有8KB的Flash程序存储器和128字节的内部RAM,可提供多种功能和通讯接口。

通过
I/O口与LCD模块通讯,实现输出功能。

该计算器使用16位的LCD显示屏,显示范围为-99.99~99.99,共有6个数字位。

显示屏使用了ST7920控制器,可通过串行、并行等多种方式控制。

2. 软件设计
该计算器的软件设计主要包括三部分:键盘扫描,计算功能和LCD显示。

键盘扫描:该计算器采用4x5矩阵键盘,通过程序对键盘进行扫描,实现对不同按键的检测。

计算功能:该计算器可以实现基本的四则运算、取反、开方等功能。

对于四则运算,通过栈来实现计算,将运算符压入栈中,然后将操作数从栈中取出进行计算。

LCD显示:该计算器使用16位的LCD显示屏,通过程序控制数据和命令的传输,将计算结果显示在LCD屏幕上。

3. 总结
通过对51单片机简易计算器的设计报告,可以看出该计算器实现了基本的计算功能,通过硬件设计和软件设计相结合,将计算器的功能实现得十分完整。

该计算器的设计初步掌握了51单片机的应用,有助于后续项目的开展。

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

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

基于单片机的简易设计原理专业:通信专业班级:通信1班姓名:刘民学号:1304041127摘要:按下键盘,通过键盘扫描程序,在LCD液晶显示屏上显示按键的操作过程,最终显示计算结果,实现计算器的基本功能。

本文详细介绍LCD显示屏、矩阵键盘与C51单片机接口的应用,并介绍如何通过C51单片机实现计算器的算法。

关键字:C51单片机,键盘,LCD液晶,计算器一、设计任务:本次实验是要以51系列单片机为核心实现一个简易计算器,它的结构简单,外部主要由4*4矩阵键盘和一个液晶显示屏构成,内部由一块STC90C51单片机构成,通过软件编程可实现简单加、减、乘、除、清除结果。

实现对计算器的设计,具体设计如下:1、采用6位显示,最大显示值为“999999”,设计16个按键的矩阵键盘,按键包括‘0~9’、‘+’、‘-’、‘*’、‘/’、‘=’、‘C’。

2、加减法做四字节运算;乘法做双字节运算;除法被除数为四字节,除数为两字节。

3、当运算结果超出显示范围时,显示ERROR!。

4、上述运算输入值均为整数,当结果带有小数时,可以采用四舍五入方式处理,也可以带小数显示。

二、方案论证经分析,计算器电路包括三个部分:显示电路、、4*4键扫描电路、单片机微控制电路。

具体如下:⒈)LCD显示电路LCD1602作为一个成熟的产品,使用简单,模式固定,便于移植到各种类型的程序,但是初学者往往要注意结合LCD本身的时序图来完善初始化程序。

又以其微功耗、体积小、显示内容丰富、超薄轻巧的诸多优点,故采用LCD.⒉)4*4键盘扫描电路(中断式,扫描式,反转式)用户设计行列键盘接口,一般常采用3 种方法读取键值。

一种是中断式,外两种是扫描法和反转法。

扫描法:对键盘上的某一行送低电平,其他行及列全为高电平,然后读取列值,检查各列线点评的变化,如果某列线电平为低电平,就可以确定此行此列交叉点处的按键被按下,采用延时去抖动。

⒊)单片机微控制电路微控制电路就是以AT89C51为核心的控制核心,主要注意晶振电路的接法和复位电路的接法。

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

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

基于51单片机的简易计算器1、前言:本设计是基于51系列单片机来进展的数字计算器系统设计,可以完成计算器的键盘输入,进展加、减、乘、除根本四则运算,并在LCD上显示相应的结果;设计电路采用STC90C51单片机为主要控制电路,利用MM74C922作为计算器4*4键盘的扫描IC读取键盘上的输入;显示采用字符LCD静态显示;软件方面使用C语言编程,并用PROTUES仿真。

2、设计任务:计算器软件程序要完成以下模块的设计:(1)键盘输入检测模块;〔2〕LCD 显示模块;〔3〕算术运算模块;〔4〕错误处理及提示模块。

3、主体设计局部:〔1〕、系统模块图:2〕、系统总流程图:4、硬件局部单片机局部+矩阵键盘+1602显示如下列图为简易计算器的电路原理图。

P3口用于键盘输入,接4*4矩阵键盘,键值与键盘的对应表如表----所示,p0口和p2口用于显示,p2口用于显示数值的高位,po口用于显示数值的低位。

简易计算器电路原理图矩阵键盘有16个按键,满足对简易计算器的计算实现,显示局部采用LCD1602,第一行显示计算的数值符号,第二行显示计算结果。

LCD显示模块:本设计采用LCD液晶显示器来显示输出数据。

通过D0-D7引脚向LCD写指令字或写数据以使LCD实现不同的功能或显示相应数据。

5、软件局部*include<reg52.h>*include<intrins.h>*define uchar unsigned charsbit lcden=P2^7;sbit lcdrs=P2^6;sbit lcdrw=P2^5;sbit lcdbf=P0^7;uchar temp,key,i,j,flag,fh,k;long a,b,c;uchar code table[]={1,2,3,0,4,5,6,0,7,8,9,0,0,0,0,0};uchar code table2[]="123+456-789*000/"; void delay(uchar ms){uchar *,y;for(*=ms;*>0;*--)for(y=110;y>0;y--);}/*-------------对LCD1602的操作-----------*/ bit busy(void)//判断忙碌{bit res;lcdrs=0;lcdrw=1;lcden=1;_nop_();_nop_();res=lcdbf;lcden=0;return res;}void write_inst (uchar cmd)//写命令{while(busy()==1); //忙碌就等待lcdrs=0;.lcdrw=0;lcden=0;_nop_();_nop_();P0=cmd;_nop_();_nop_();lcden=1;_nop_();_nop_();lcden=0;}void write_(uchar )//写地址{write_inst(|0*80);}void write_date(uchar dat) //写数据{while(busy()==1);lcdrs=1;lcdrw=0;lcden=0;P0=dat;_nop_();_nop_();lcden=1;_nop_();_nop_();lcden=0;}void init() //初始化{lcden=1;write_inst(0*38);//显示8位2行delay(5);write_inst(0*0c);//显示开,光标关,不闪烁delay(5);write_inst(0*06);//增量方式不位移delay(5);write_inst(0*80);//检测忙碌信号delay(5);write_inst(0*01);//delay(5);}/*------------键盘扫描-----------*/void keyscan()//键盘扫描{P3=0*fe;if(P3!=0*fe){delay(100);if(P3!=0*fe){temp=P3&0*f0;switch(temp){case 0*e0:key=0;break;case 0*d0:key=1;break;case 0*b0:key=2;break;case 0*70:key=3;break;}}while(P3!=0*fe);if(key==0||key==1||key==2){if(j!=0){write_inst(0*01);j=0;}if(flag==0){a=a*10+table[key];}if(flag==1){b=b*10+table[key];}write_date(table2[key]);}else{if(k==0){flag=1;k=1;fh=1;write_date(table2[key]);}}}P3=0*fd;if(P3!=0*fd){delay(100);if(P3!=0*fd){temp=P3&0*f0;switch(temp){case 0*e0:key=4;break;case 0*d0:key=5;break;case 0*b0:key=6;break;case 0*70:key=7;break;}}while(P3!=0*fd);if(key==4||key==5||key==6){if(j!=0){write_inst(0*01);j=0;}if(flag==0){a=a*10+table[key];}if(flag==1){b=b*10+table[key];}write_date(table2[key]);}else{if(k==0){flag=1;k=1;fh=2;write_date(table2[key]);}}}P3=0*fb;if(P3!=0*fb){delay(100);if(P3!=0*fb){temp=P3&0*f0;switch(temp){case 0*e0:key=8;break;case 0*d0:key=9;break;case 0*b0:key=10;break;case 0*70:key=11;break;}}while(P3!=0*fb);if(key==8||key==9||key==10) {if(j!=0){write_inst(0*01);j=0;}if(flag==0){a=a*10+table[key];}if(flag==1){b=b*10+table[key];}write_date(table2[key]);}else{if(k==0){flag=1;k=1;fh=3;write_date(table2[key]);}}}P3=0*f7;if(P3!=0*f7){delay(100);if(P3!=0*f7){temp=P3&0*f0;switch(temp){case 0*e0:key=12;break;case 0*d0:key=13;break;case 0*b0:key=14;break;case 0*70:key=15;break;}}while(P3!=0*f7);.switch(key){case 12:{write_inst(0*01);a=0;b=0;flag=0;fh=0;j=0;k=0;} break;case 13:{if(flag==0){a=a*10;write_date(0*30);P1=0;}else if(flag==1){b=b*10;write_date(0*30);}.} break;case 14:{j=1;if(fh==1){write_(0*4f);write_inst(0*04);c=a+b;while(c!=0){write_date(0*30+c%10);c=c/10;}write_date(0*3d);a=0;b=0;flag=0;fh=0;k=0;}else if(fh==2){write_(0*4f);write_inst(0*04);if((a-b)>0)c=a-b;elsec=b-a;if(c==0)write_date(0*30+0);while(c!=0){write_date(0*30+c%10);c=c/10;}if((a-b)*(-1)>0)write_date(0*2d);write_date(0*3d);a=0;b=0;flag=0;fh=0;k=0;}else if(fh==3){write_(0*4f);write_inst(0*04);c=a*b;if(c==0)write_date(0*30+0);while(c!=0){write_date(0*30+c%10);c=c/10;}write_date(0*3d);a=0;b=0;flag=0;fh=0;k=0;}else if(fh==4){write_(0*4f);write_inst(0*04);i=0;c=(long)(((float)a/b)*1000); //计算c的数据if(c==0)write_date(0*30+0);while(c!=0){write_date(0*30+c%10);c=c/10;i++;if(i==3)write_date(0*2e); //写数据}if((a/b)<=0)write_date(0*30);write_date(0*3d);a=0;b=0;flag=0;fh=0;k=0;}} break;case 15:{if(k==0).{write_date(table2[key]);flag=1;k=1;fh=4;}} break;}}}void main(){init();i=0;j=0;.a=0;b=0;c=0;k=0;flag=0;fh=0;while(1){keyscan();}}6、总结通过该计算器的设计我深入学习数码管扫描和键盘控制,提高对了51系列单片机的实际应用能力。

51单片机实现的简易计算器

51单片机实现的简易计算器

51单片机实现的简易计算器1. 4X4键盘输入,点阵字符型液晶显示。

2. 由于所采用的浮点程序库的限制(MCU平台只找到这个……),浮点运算采用3字节二进制补码表示,有效数字6位。

对于输入输出,采用3字节BCD码浮点数格式,有效数字只有4位,因此最终有效数字只有4位。

3. 可进行连续输入,例如:1.23+4.56*8.23/234.8 ,但是运算结果为从左到右,这也是8位简易计算器的方式。

4. 可进行错误判断,溢出、除零等错误将显示一个字符E 。

5. 由于键盘只有16个按键,安排如下:+---------------+| 7 | 8 | 9 | + || 4 | 5 | 6 | - || 1 | 2 | 3 | * || 0 | . | = | / |+---------------+6. 按键的缺少导致取消了一些特殊函数,即开根号,三角函数(sin, cos, tan, ctg)的实现,由于这些函数在浮点程序库中均已提供,如果硬件允许,在原来的框架上添加这些附加功能是很容易的(可以看作和+, -, *, /等价的按键操作,调用不同的子程序进行运算即可)7. 按两次= 等于清灵。

因为按键实在太少,才采用了这个做法。

8. 相应举例:按键结果说明- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -123+= 123 按下等号而没有第二个操作数,保留第一个操作数并认为此次运算结束(等号的功能)123+321/111 4.0 等价于(123+321) / 1112.3+5.4=/0.1+ 77 等号后直接按 / ,则将前面的运算结果作为第一个操作数1/0= E 错误显示9. 不足使用3字节的浮点数表示,不可避免的带来了数表示的不精确,加上有效数字比较少,因此计算结果很容易产生误差,尤其是进行连续多次运算后,结果和精度较高的科学计算器的误差会很快达到0.01以上,当然这个差距和所测试的用例也有关系,4位有效数字导致了数字123456只能表示为123400,最后两位有效数字被摒弃了。

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单片机的简单计算器设计与仿真基于单片机的简易计算器设计与仿真设计题目:基于单片机的简易计算器设计与仿真一、设计实验条件:地点:自动化系实验室实验设备:PC机(装有Keil;Protues;Word ;Visio )二、设计任务:本系统选用AT89C51单片机为主控机。

通过扩展必要的外围接口电路,实现对计算器的设计,具体设计如下:(1)由于设计的计算器要进行四则运算,为了得到较好的显示效果,经综合分析后,最后采用LCD 显示数据和结果。

(2)采用键盘输入方式,键盘包括数字键(0~9)、符号键(+、-、×、÷)、清除键(on\c)和等号键(=),故只需要16 个按键即可,设计中采用集成的计算键盘。

(3)在执行过程中,开机显示零,等待键入数值,当键入数字,通过LCD显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当再键入数值后将显示键入的数值,按等号就会在LCD上输出运算结果。

(4)错误提示:当计算器执行过程中有错误时,会在LCD上显示相应的提示,如:当输入的数值或计算得到的结果大于计算器的表示范围时,计算器会在LCD 上提示overflow;当除数为0时,计算器会在LCD上提示error。

设计要求:分别对键盘输入检测模块;LCD显示模块;算术运算模块;错误处理及提示模块进行设计,并用Visio画系统方框图,keil与protues仿真分析其设计结果。

三、设计时间与设计时间安排:1、设计时间:6月27日~7月8日2、设计时间安排:熟悉课题、收集资料: 3天(6月27日~ 6月29日)具体设计(含上机实验): 6天(6月30日~ 7月5日)编写课程设计说明书: 2天(7月6日~ 7月7日)答辩: 1天(7月8日)四、设计说明书的内容:1、前言:(自己写,组员之间不能相同,写完后将红字删除,排版时注意对齐)本设计是基于51系列单片机来进行的数字计算器系统设计,可以完成计算器的键盘输入,进行加、减、乘、除基本四则运算,并在LCD上显示相应的结果;设计电路采用AT89C51单片机为主要控制电路,利用MM74C922作为计算器4*4键盘的扫描IC读取键盘上的输入;显示采用字符LCD静态显示;软件方面使用C语言编程,并用PROTUES仿真。

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

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

基于51单片机简易计算器课程设计报告(一)

基于51单片机简易计算器课程设计报告(一)

基于51单片机简易计算器课程设计报告(一)基于51单片机简易计算器课程设计报告1. 介绍在本次课程设计中,我设计了一个基于51单片机的简易计算器。

本报告将会详细介绍该计算器的设计思路、功能实现以及课程设计中遇到的问题与解决方法。

2. 设计思路功能需求•支持基本的加、减、乘、除运算•具备数字输入与显示功能•具备清零和等于功能•具备连续计算功能硬件设计本计算器的硬件设计主要包括51单片机、LCD显示模块以及按键输入模块。

其中,51单片机负责控制计算器的逻辑,LCD显示模块用于显示计算结果和用户输入,按键输入模块用于接收用户的输入。

软件设计计算器的软件设计主要分为以下几个部分: - 初始化:初始化51单片机、LCD模块以及按键模块。

- 按键扫描:通过扫描按键模块,获取用户的输入。

- 数字输入与显示:根据用户输入,将数字显示在LCD上。

- 运算逻辑:根据用户输入的运算符和数字,执行相应的计算操作,并将结果显示在LCD上。

3. 功能实现初始化在初始化阶段,我们需要初始化51单片机的GPIO口、LCD模块以及按键模块。

具体的初始化代码如下:// 初始化51单片机的GPIO口// 初始化LCD模块// 初始化按键模块按键扫描为了获取用户的输入,我们需要通过按键模块进行扫描。

具体的按键扫描代码如下:// 扫描按键模块// 如果检测到按键按下,则进行相应的处理数字输入与显示当用户按下数字键时,我们将获取到的数字输入缓存起来,并将其显示在LCD上。

具体的数字输入与显示代码如下:// 获取按键输入的数字// 将数字添加到输入缓存// 将输入缓存显示在LCD上运算逻辑当用户按下运算符键时,我们需要根据输入的数字和运算符执行相应的计算操作,并将结果显示在LCD上。

具体的运算逻辑代码如下:// 获取运算符输入// 根据运算符和输入的数字执行相应的计算操作// 将计算结果显示在LCD上清零和等于功能为了提升用户体验,我们还可以添加清零和等于功能。

51单片机简易计算器设计

51单片机简易计算器设计

51单片机简易计算器设计一、引言计算器是一种通过输入和输出数字信号进行数学运算的电子设备。

在现代社会,人们对计算器有着广泛的需求,因此设计一款简单而实用的计算器对于我们理解计算器的工作原理和学习单片机编程非常有帮助。

本文将介绍一种基于51单片机的简易计算器设计,涵盖了相关的硬件设计和软件编程。

二、设计思路本计算器设计的主要思路如下:1.使用数码管显示输入的数字和计算结果。

2.使用按键输入数字和操作符。

3.通过软件编程实现数字的输入、运算和结果的显示。

三、硬件设计1.数码管:使用4位共阴数码管,通过BCD-7段译码器将数字信号转化为数码管显示。

2.按键:使用独立按键输入数字和操作符。

3.电源:使用适当的电源电路提供电压和电流。

四、软件设计1.初始化:设置数码管显示方式、按键输入方式和端口状态。

2.输入数字:通过按键输入数字,并将数字显示在数码管上。

可以采用按键扫描的方式实现,每次按键触发时读取按键值,并将对应的数字显示在数码管上。

3.输入操作符:通过按键输入操作符,并将操作符显示在数码管上。

同样采用按键扫描的方式实现。

4.数字运算:根据输入的操作符和数字进行相应的运算,得出结果。

5.显示结果:将运算结果显示在数码管上。

五、程序流程图具体的程序流程图如下:六、程序实现以下是51单片机计算器的简单代码实现:```C#include<reg51.h>sbit LED=P1^0;sbit KEY=P3^0;void delay(int n)int i=0, j=0;for(i=0; i<n; i++)for(j=0; j<123; j++);void mainwhile(1)if(KEY==0)LED=0;elseLED=1;delay(10);}```七、测试和结果在硬件设计完成并烧录完程序后,我们可以进行测试。

通过按下按键,观察数码管是否正确显示输入的数字和运算结果。

如果显示正确,则说明程序设计成功。

基于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)。

华侨大学厦门工学院单片机控制系统课程设计报告题目:基于51单片机的简易计算器专业、班级:学生姓名:学号:指导教师:2014年 5 月20 日目录一、设计任务目的 (2)二、计任务要求 (2)三、设计方案选取与论证 (2)四、电路设计 (3)4.1总体电路图 (3)4.2 硬件设计 (4)4.2.1 矩阵按键 (4)4.2.2 AT89C52主芯片 (4)4.2.3 LCD显示 (7)4.3软件设计 (7)4.3.1 键盘模块 (8)4.3.2 计算模块 (8)4.3.3 显示模块 (9)五.制作及调试过程 (10)5.1 制作过程 (10)5.2 软件调试 (10)5.3 硬件调试 (11)结论 (12)致谢 (13)参考文献 (13)一、设计任务目的设计一个计算器,可以进行简易的四则运算。

二、计任务要求1、能够进行简单的四则运算,包括带负数的运算。

用LCD显示数据和结果(6位即可)2、采用键盘输入方式,键盘包括数字键(0~9)、符号(+、-、×、÷)、清除键(c)和等号键(=),故只需要16 个按键即可。

3、在执行过程中,开机显示零,等待键入数值,当键入数字,通过LCD显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当再键入数值后将显示键入的数值,按等号就会在LCD上输出运算结果。

4、错误提示:当计算器执行过程中有错误时,会在LCD上显示相应的提示,如:当输入的数值或计算得到的结果大于计算器的表示范围时,计算器会在LCD 上提示OV;当除数为0时,计算器会在LCD上提示ERR。

三、设计方案选取与论证1、单片机部分单片机以AT89C51来做为核心元器件。

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

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

3、显示部分在单片机应用系统中,使用的显示器主要有LED(发光二极管显示器)、LCD液晶显示器以及CRT接口。

思路:使用液晶显示器来显示。

液晶是介于固态和液态间的有机化合物,将其加热会变成透明液态,冷却后变成结晶的混浊固态。

在电的作用下,产生冷热变化,从而影响它的透光性,来达到显示的目的。

LCD还具有以下几个优点(1)低压、微功耗(2)显示信息量大(3)长寿命(4)无辐射,无污染。

其系统结框图如下:选取此种设计方案,可以基本满足任务要求,并且在电路板焊接中更清晰明了的知道该如何去焊接电路。

但是,这种方案还是存在着不足,如:①按键的缺少导致取消了一些特殊函数的实现。

和我们真正可以的计算器有很大的差距,功能的单一,在实际中没有使用价值。

②使用3字节的浮点数表示,不可避免的带来了数表示的不精确,加上有效数字比较少,因此计算结果很容易产生误差,尤其是进行连续多次运算后。

四、电路设计4.1总体电路图根据方案的选取,其硬件的电路图在protues软件中设计如下图所示,本电路图可以满足设计要求。

4.2 硬件设计4.2.1 矩阵按键键盘是单片机系统中最常用的人机对话输入设备,用户通过按键向单片机输入指令和数据。

该模块利用16个的小按键,提供 0-9, +、-、*、/、 =、清零键。

键盘控制程序需完成的任务有:给电路提供输入的符号,让LCD显示屏显示输入的按键是什么。

在编写的程序中,可以检查是否有按键按下,有键按下时,如无硬件去抖动电路时,应用软件延时方法消除按键抖动;当有多个按键按下时,只响应一个按键,不管持续多长时间,仅执行一次按键功能程序。

其结构图如下所示:矩阵键盘结构图4.2.2 AT89C52主芯片AT89C52是一种带8K字节闪烁可编程可檫除只读存储器(FPEROM-Flash Programable and Erasable Read Only Memory )的低电压,高性能COMOS8的微处理器,俗称单片机。

该器件采用ATMEL搞密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

ST89C52单片机包含中央处理器、程序存储器、数据存储器、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线。

时钟电路:STC89C52内部有一个用于构成振荡器的高增益反相放大器,引脚RXD和TXD分别是此放大器的输入端和输出端。

时钟可以由内部方式产生或外部方式产生。

内部方式的时钟电路如图4—2(a) 所示,在RXD和TXD引脚上外接定时元件,内部振荡器就产生自激振荡。

定时元件通常采用石英晶体和电容组成的并联谐振回路。

晶体振荡频率可以在1.2~12MHz之间选择,电容值在5~30pF之间选择,电容值的大小可对频率起微调的作用。

外部方式的时钟电路如图4—2(b)所示,RXD接地,TXD接外部振荡器。

对外部振荡信号无特殊要求,只要求保证脉冲宽度,一般采用频率低于12MHz 的方波信号。

片内时钟发生器把振荡频率两分频,产生一个两相时钟P1和P2,供单片机使用。

(a)外部方式时钟电路(b)内部方式时钟电路复位及复位电路:(1)复位操作,复位是单片机的初始化操作。

其主要功能是把PC初始化为0000H,使单片机从0000H单元开始执行程序。

除了进入系统的正常初始化之外,当由于程序运行出错或操作错误使系统处于死锁状态时,为摆脱困境,也需按复位键重新启动。

除PC之外,复位操作还对其他一些寄存器有影响,;(2)复位信号及其产生,RST引脚是复位信号的输入端。

复位信号是高电平有效,其有效时间应持续24个振荡周期(即二个机器周期)以上。

若使用颇率为6MHz的晶振,则复位信号持续时间应超过4us才能完成复位操作。

整个复位电路包括芯片内、外两部分。

外部电路产生的复位信号(RST)送至施密特触发器,再由片内复位电路在每个机器周期的S5P2时刻对施密特触发器的输出进行采样,然后才得到内部复位操作所需要的信号。

复位操作有上电自动复位相按键手动复位两种方式。

本系统的复位电路采用上电复位方式。

AT89C52具体介绍如下:①主电源引脚(2根)VCC(Pin40):电源输入,接+5V电源 GND(Pin20):接地线②外接晶振引脚(2根)XTAL1(Pin19):片内振荡电路的输入端 XTAL2(Pin20):片内振荡电路的输出端③控制引脚(根) RST/VPP(Pin9):复位引脚,引脚上出现2个机器周期的高电平将使单片机复位。

ALE/PROG(Pin30):地址锁存允许信号 PSEN(Pin29):外部存储器读选通信号 EA/VPP(Pin31):程序存储器的内外部选通,接低电平从外部程序存储器读指令,如果接高电平则从内部程序存储器读指令。

④可编程输入/输出引脚(32根) STC89C52单片机有4组8位的可编程I/O口,分别位P0、P1、P2、P3口,每个口有8位(8根引脚),共32根。

PO口(Pin39~Pin32):8位双向I/O口线,名称为P0.0~P0.7 P1口(Pin1~Pin8):8位准双向I/O口线,名称为P1.0~P1.7 P2口(Pin21~Pin28):8位准双向I/O口线,名称为P2.0~P2.7,P3口(Pin10~Pin17):8位准双向I/O口线,名称为P3.0~P3.7AT89C52的外部结果如下图:AT89C52主要功能:4.2.3 LCD显示本次设计在显示部分采用的是LCM1602B,它是一个双行显示的液晶显示器。

其中采用标准的16脚接口,其中:LCD结构图第1脚:VSS为地电源第2脚:VDD接5V正电源第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。

第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。

当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。

第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。

第7~14脚:D0~D7为8位双向数据线。

第15~16脚:分别为背光灯正负极,A接正极,K接负极。

它的读写操作、屏幕和光标的操作都是通过指令编程来实现的。

(说明:1为高电平、0为低电平)4.3软件设计软件设计和硬件设计一样也由三部分组成,其中包括:键盘模块、显示模块、计算模块,现分别对这三部分分别介绍。

4.3.1 键盘模块矩阵按键扫描程序是一种节省IO口的方法,按键数目越多节省IO口就越可观,思路:先判断某一列(行)是否有按键按下,再判断该行(列)是那一只键按下。

但是,在程序的写法上,采用了最简单的方法,使得程序效率最高。

本程序中,如果检测到某键按下了,就不再检测其它的按键,这完全能满足绝大多数需要,又能节省大量的CPU时间。

本键盘扫描程序的优点在于:不用专门的按键延时程序,提高了CPU效率,也不用中断来扫描键盘,节省了硬件资源。

另外,本键盘扫描程序,每次扫描占用CPU时最短,不论有键按下或者无键按下都可以在很短的时间完成一次扫描。

矩阵键盘需要初始化,并且分别对其行、列进行扫描,在扫描过程中判断是否有键按下,根据以上要求,键盘模块设计的流程图:4.3.2 计算模块AT89C52单片机是一块芯片中集成了CPU、RAM、ROM、定时器、计数器、和多功能I/O等一台计算器所需要的基本功能部分。

如果按功能划分,它由如下功能部分组成,即微处理器(CPU)、数据处理器(RAM)、程序处理器(ROM/CPROM)、并行I/O口、串行口、定时器、计数器、中断系统及特殊功能寄存器(SFR)。

单片机是靠程序运行的,并且可以修改。

通过不同的程序实现不同的功能,尤其是特殊一些功能,通过使用单片机编写的程序可以凸显高智能、高效率以及高可靠性!因此我们采用单片机作为计算器的主要功能部件,可以很快实现运算功能。

在计算模块中,必须保证按键按下的数和LCD液晶显示的数保持一致,则需要把+、-、*、/等字符转换成数据,根据以上要求,计算模块的程序流程图:4.3.3 显示模块本电路采用的是 LCD 液晶显示输出数据,在流程图中应包括对LCD液晶显示器初始化,取要显示的数据,要是有两位数据需要显示,则在显示完第一位数据后需要进行延迟来显示第二位数据,则根据以上要求,显示模块的流程图如图:五、制作及调试过程5.1 制作过程根据设计的电路图焊接电路板,操作注意事项有:①保持烙铁头的清洁,因为焊接时烙铁头长期处于高温状态,其表面很容易氧化并沾上一层黑色杂质形成隔热层,使烙铁头失去加热作用。

相关文档
最新文档