基于单片机的简易计算器设计原理图及程序代码

合集下载

简易计算器(1602加矩阵键盘)

简易计算器(1602加矩阵键盘)

一、原理图:二、程序#include<reg51.h> //包含单片机寄存器的头文件#include<intrins.h> //包含_nop_()函数定义的头文件#include<math.h>sbit RS=P2^0; //寄存器选择位,将RS位定义为P2.0引脚sbit RW=P2^1; //读写选择位,将RW位定义为P2.1引脚sbit E=P2^2; //使能信号位,将E位定义为P2.2引脚sbit BF=P1^7; //忙碌标志位,#define NO_KEY_PRESS 0xff/********************************************************************************************************/unsigned char code tab[]={0xb7,0xee,0xde,0xbe,0xed,0xdd,0xbd,0xeb,0xdb,0xbb};unsigned long num1,num2,alg;unsigned char flag;void delay1ms(){unsigned char i,j;for(i=0;i<10;i++)for(j=0;j<15;j++);}/********************************************************************************************************/void delay(unsigned char n){unsigned char i;for(i=0;i<n;i++)delay1ms();}/*****************************************************函数功能:判断液晶模块的忙碌状态返回值:result。

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

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

摘要近几年单片机技术的发展很快,其中,电子产品的更新速度迅猛。

计算器是日常生活中比较常见的电子产品之一。

如何才能使计算器技术更加的成熟,充分利用已有的硬件和软件条件,设计出更出色的计算器。

本设计是以STC89C52单片机为核心的计算器模拟系统设计,输入采用4*4矩阵键盘,可以进行加、减、乘、除带符号数字运算(六位整数、两位小数),并在液晶显示屏LCD1602上静态显示操作过程及结果。

本设计的操作过程是利用SCTT89C51的来控制LXD1602显示器,SCT89C51有共四个端口,作为数据的输入端和输出端,其中两个端口作为输出端,两个端口作为输出端,两个特殊的端口XTAL2和XTAL1,则作为外部振荡器的输入端和输出端。

四个端口的作用是:一个输入端接4*4矩阵键盘,另一个数据输入端接显示屏LCD1602的三个特殊端口,而另外两个端口作为输出端口,一个端口接显示屏LCD1602的数据端口,另一个端口作为振荡电路的输入端和输出端,连接好电路,接通电源,则可在液晶显示屏LCD1602显示加、减、乘、除的运算过程及结果,这是计算机的设计总过程。

关键词:单片机;C语言;计算器Simple calculator design based on single chipABSTRACTSingle-chip computer technology developing rapidly in recent years, among them,electronic product update speed is fast. The calculator is one of the electronic products are common in everyday life. How can you make the calculator technology more mature, make full use of existing hardware and software conditions, design a better calculator.This design is based on STC89C52 single-chip microcomputer as the core of calculator simulation system design, input use 4 * 4 matrix keyboard, could add, subtract, multiply and divide signed number-crunching six (integer, two decimal places), and static on the LCD display LCD1602 display operation process and results. This design process is controlled by using SCTT89C51 LXD1602 display, SCT89C51 has a total of four ports, as the data input terminal and output terminal, two of the port as the output side, the two ports as the output side, and two special port XTAL1 and XTAL2, as external oscillator input end and output end. Four port is: a 4 * 4 matrix keyboard input, another data input termination display LCD1602 three specific ports, and the other two ports as output port, a port display LCD1602 data port, another port as oscillation circuit input end and output end, good connection electric circuit, switch on the power, can be in the LCD display LCD1602 display of add, subtract, multiply and divide operation process and result, this is the computer's design process.Key words:Single chip microcomputer; The C language; Calculating machine目录序言 (1)1. 方案论证 (1)1.1 芯片 (1)1.1.1 方案一 (1)1.1.2 方案优点 (2)1.2 输入模块 (2)1.2.1 方案一 (2)1.2.2 方案的优点 (2)1.3 显示模块 (2)1.3.1 方案一 (2)1.3.2 方案的应用 (3)2. 计算器硬件设计 (3)2.1 系统组成及硬件框图 (3)2.2 元器件简介 (3)2.2.1 STC89C52特点 (3)2.2.2 LCD1602液晶显示屏 (8)3. 计算器设计原理分析 (11)3.1 设计方案一 (11)3.2 计算器硬件方案及硬件资源分配 (11)3.2.1 硬件资源分配 (11)3.2.2 系统的硬件设计 (11)3.2.3 键盘电路的设计 (12)3.2.4 显示电路的结构 (13)4. 计算器软件设计 (13)4.1 计算器的软件规划 (13)4.2 主模块的程序设计 (13)4.3 显示模块的程序设计 (15)4.4 键盘模块的程序设计 (16)结论 (18)参考文献 (19)附录一电路原理图 (20)附录二软件程序 (20)致谢 (27)基于单片机的简易计算器的设计序言随着社会的发展,科学的进步,人们的生活水平在逐步地提高,尤其是微电子技术的发展犹如雨后春笋般的变化。

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

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

基于单片机简易计算器的设计说明一、设计目的计算器是人们日常生活中常用的工具之一,而基于单片机的简易计算器则是计算器的一种应用形式。

本设计旨在利用单片机的强大功能,实现一款功能简单但使用方便的计算器。

二、设计原理1.硬件部分本设计使用单片机作为计算器的核心处理器,通过外接的键盘进行输入,然后通过液晶显示屏进行结果的输出。

电路部分需要将键盘和液晶显示屏与单片机相连接,通过单片机与外设之间的通信实现输入和输出。

2.软件部分计算器的软件部分主要包括输入处理和输出显示两个模块:(1)输入处理:根据键盘输入的按键,通过单片机进行扫描和判断,根据按键的不同采取不同的策略进行处理。

例如,如果输入的是数字键,则将其添加到当前输入的数字序列中;如果输入的是运算符号,则判断当前表达式是否符合运算规则,如果符合则进行计算。

并通过液晶显示屏实时显示输入的数字和表达式。

(2)输出显示:根据输入处理模块的计算结果,通过液晶显示屏进行显示。

根据液晶显示屏的大小和显示效果,进行合适的显示格式和布局,保证计算结果的清晰可读。

三、设计要点1.按键输入处理在设计按键输入处理模块时,需要考虑按键的布局和功能划分。

可以根据计算器的基本功能,将按键分为数字键、运算符键和功能键等,然后根据功能的不同设置不同的处理策略。

2.表达式的计算计算器的核心功能是根据输入的表达式进行实时计算和显示结果。

在设计表达式计算模块时,需要考虑多种表达式的情况,例如加减乘除、括号等,以及运算的优先级和顺序等。

可以利用栈等数据结构来实现表达式的计算。

3.结果的显示设计结果的显示模块时,要考虑到数字的位数以及小数的精确度。

可以设置合适的显示格式,例如科学计数法等,以保证计算结果的准确性和可读性。

四、设计优点1.功能简单:本设计主要实现了计算器的基本功能,包括数字输入、四则运算和结果显示等。

不涉及复杂的高级运算,使得计算器的使用更加简单方便。

2.使用方便:由于采用了单片机进行处理,使得计算器的体积小巧且可以携带,用户可以随时进行计算,满足各种场合的需求。

基于单片机的简易计算器编程

基于单片机的简易计算器编程
if(t[j]==0x33) { DispCharacter(0,k--,'3');}
if(t[j]==0x34) { DispCharacter(0,k--,'4');}
if(t[j]==0x35) { DispCharacter(0,k--,'5');}
if(t[j]==0x36) { DispCharacter(0,k--,'6');}
}
for(i=r-2;i>=0;i--)
{
tx=u;
u=u+(( unsigned long )(t[i]-48)*(pow(r-i-2)));
if(u<tx) { systemerror();}
}
}
void hou( ) //计算符号后面的数值
{
int j,flash=0; //标志位:从不是零的高位开始显示!
int k=12;
for(j=3;j>=0;j--)
{
if(f3==0) { break; }
if(m[0]==0x30&&m[1]==0x30&&m[2]==0x30) { f3=0; break; }
PinRW=0;
PinE=0;
PinData = data1;
PinE=1;
ShortDelay(10);
PinE=0;
PinRW=1;
PinRS=0;
}
void WriteInstruc(char Instruc)
{
while(StatusCheck());
if(m[j]==0x32) { DispCharacter(1,k++,'2'); flash++;}

单片机简易计算器设计

单片机简易计算器设计

单片机简易计算器设计English Answer:## Design of a Simple Calculator Using a Microcontroller.### Introduction.Microcontrollers are widely used in various electronic applications, including embedded systems, industrial automation, and consumer electronics. They offer a powerful and cost-effective solution for performing complex tasks. In this article, we will design a simple calculator using a microcontroller.### Hardware Requirements.The following hardware components are required for this project:Microcontroller.LCD display.Keypad.Resistors.Capacitors.### Microcontroller Selection.For this project, we will use an 8-bit microcontroller such as the ATmega328 or PIC16F887. These microcontrollers have sufficient memory and processing power to perform basic arithmetic operations.### LCD Display Interface.The LCD display is used to display the calculator's results. We will use a character-based LCD display with a 16x2 character resolution. The LCD display is interfacedwith the microcontroller using a parallel interface.### Keypad Interface.The keypad is used to enter numbers and operators. We will use a 4x4 keypad with 16 keys. The keypad is interfaced with the microcontroller using a multiplexed input/output (I/O) interface.### Circuit Design.The circuit diagram for the simple calculator is shown below:[Image of circuit diagram]The circuit consists of the following components:Microcontroller.LCD display.Keypad.Resistors.Capacitors.The microcontroller is connected to the LCD display and keypad using parallel interfaces. The resistors and capacitors provide voltage regulation and filtering.### Software Development.The software for the simple calculator is written in C language. The software consists of the following modules:Main Program: This module initializes the microcontroller, LCD display, and keypad. It also handles the main loop of the calculator.Input Module: This module reads input from the keypad and processes it.Arithmetic Module: This module performs basic arithmetic operations on the input data.Output Module: This module displays the calculator's results on the LCD display.### Conclusion.In this article, we designed a simple calculator using a microcontroller. The calculator is capable of performing basic arithmetic operations and displaying the results on an LCD display. The project is a good example of how microcontrollers can be used to create useful and practical applications.Chinese Answer:## 使用单片机设计简易计算器。

单片机设计简易计算器

单片机设计简易计算器

单片机设计简易计算器(共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被拉低。

毕业设计(论文)-基于AT89C51单片机的简易计算器设计

毕业设计(论文)-基于AT89C51单片机的简易计算器设计

计算器(Calculator)是微型电子计算机的一种特殊类型。

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

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

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

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

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

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

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

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

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

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

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

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

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

引言 (1)目录 (2)1.简易计算器的设计方案 (3)1.1硬件部分设计方案 (3)1.2软件部分设计 (3)1.3 硬件设计原理图 (4)2. 简易计算器部分电路设计 (5)2.1 AT89C51常用指令 (5)2.2 显示及显示接口 (11)2.3 键盘、液晶显示的组合接口 (15)2.4 算术逻辑运算处理 (18)3.总设计电路及调试 (19)致谢 (21)参考文献 (22)1.简易计算器的设计方案1.1硬件部分设计方案1 单片机部分单片机以AT89C51来做为核心元器件。

基于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为核心的控制核心,主要注意晶振电路的接法和复位电路的接法。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
r[2]=10;
r[3]=12;
r[4]=12;
r[5]=12;
r[6]=12;
r[7]=12;
}
else
{
x=x/y;
r[0]=x%10;
r[1]=(x%100)/10;
r[2]=(x%1000)/100;
r[3]=(x%10000)/1000;
r[4]=(x%100000)/10000;
r[5]=(x%1000000)/100000;
{
do
{
dsp[0]=keyscan();
if(dsp[0]==14||dsp[0]<10)
{
BEEP=1;
dsp[1]=0;
for(i=2;i<9;i++)
dsp[i]=12;
c=0;
}
}while((dsp[0]==15)&&(c==0));
}
else if(dsp[0]==14)
{
BEEP=1;
switch(KeyL | KeyR)
{
case 0xb7:{return 0;break;}
case 0x7e:{return 1;break;}
case 0xbe:{return 2;break;}
case 0xde:{return 3;break;}
case 0x7d:{return 4;break;}
c=0;
}
}
}while(dsp[0]==14);
do
{
if(c==0)
{
k=dsp[0];
for(i=0;i<8;i++)
{
a[i]=dsp[i+1];
}
dsp[1]=0;
for(i=2;i<9;i++)
dsp[i]=12;
c=1;
goto KSC;
}
else if(c==1)
{
for(i=0;i<8;i++)
{0xc0,0xf9,0xa4,0xb0,0x99,//0-4
0x92,0x82,0xf8,0x80,0x90,//5-9
0x86,0xaf,0xff,0x7f,0xbf};//E,r,不显,.,-
void delay11(unsigned int i)
{
while(i--);
}
char keyscan()
case 0xbd:{return 5;break;}
case 0xdd:{return 6;break;}
case 0x7b:{return 7;break;}
case 0xbb:{return 8;break;}
case 0xdb:{return 9;break;}
case 0xee:{return 10;break;}//加法
case 0xed:{return 11;break;}//减法
case 0xeb:{return 12;break;}//乘法
case 0xe7:{return 13;break;}//除法
case 0xd7:{return 14;break;}//清零
case 0x77:{return 15;break;}//等于
r[3]=(x%10000)/1000;
r[4]=(x%100000)/10000;
r[5]=(x%1000000)/100000;
r[6]=(x%10000000)/1000000;
r[7]=x/10000000;
}
}
if(k==13)
{
if(y==0)
{
BEEP=0;
r[0]=11;
r[1]=11;
原理图:
#include<reg52.H>
sbit BEEP=P3^7;
char dsp[9]={0,0,12,12,12,12,12,12,12};
unsigned char code Select[]=
{0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char code LED_CODES[]=
P2=0xff;
}
}
ET0=1;
}c=0;}Fra bibliotekelse if(c==2&&dsp[0]>9)
{
c=0;
}
if(dsp[0]==0&&dsp[1]==0&&dsp[2]==12)
{
goto KSC;
}
else if(dsp[0]>9) break;
else
{for(j=i;j>0;j--)
dsp[j]=dsp[j-1];
}
}
if(i==9)
r[0]=11;
r[1]=11;
r[2]=10;
r[3]=12;
r[4]=12;
r[5]=12;
r[6]=12;
r[7]=12;
}
else
{
r[0]=x%10;
r[1]=(x%100)/10;
r[2]=(x%1000)/100;
r[3]=(x%10000)/1000;
r[4]=(x%100000)/10000;
x=10000*x;
x=x+a[0]+a[1]*10+a[2]*100+a[3]*1000+a[5]*100000+a[6]*1000000+a[7]*10000000;
y=b[4];
y=10000*y;
y=y+b[0]+b[1]*10+b[2]*100+b[3]*1000+b[5]*100000+b[6]*1000000+b[7]*10000000;
r[6]=(x%10000000)/1000000;
r[7]=x/10000000;
}
}
for(i=7;i>0;i--)
{
if(r[i]==0)
r[i]=12;
else
break;
}
for(i=0;i<8;i++)
{
dsp[i+1]=r[i];
}
}
void main(void)
{
char i,j,k,c;
{
char KeyL;
char KeyR;
P1=0xf0;
do
{
do
{
P1=0xF0;
P1=P1|0xF0;
if(P1!=0xF0)
{
KeyL=P1;
P1=0x0F;
P1=P1|0x0F;
KeyR=P1;
}
}while(KeyL==0xF0||KeyR==0x0F);
delay11(300);
}while(P1!=0x0F);
r[3]=(x%10000)/1000;
r[4]=(x%100000)/10000;
r[5]=(x%1000000)/100000;
r[6]=(x%10000000)/1000000;
r[7]=x/10000000;
}
}
if(k==11)
{
if(x<y)
{
x=y-x;
if(x>9999999)
{
BEEP=0;
r[5]=(x%1000000)/100000;
r[6]=(x%10000000)/1000000;
r[7]=x/10000000;
for(i=7;i>0;i--)
{
if(r[i]==0&&r[i-1]!=0)
{
r[i]=14;
break;
}
}
}
}
else
{
x=x-y;
r[0]=x%10;
r[1]=(x%100)/10;
if(k==10)
{
x=x+y;
if(x>99999999)
{
BEEP=0;
r[0]=11;
r[1]=11;
r[2]=10;
r[3]=12;
r[4]=12;
r[5]=12;
r[6]=12;
r[7]=12;
}
else
{
r[0]=x%10;
r[1]=(x%100)/10;
r[2]=(x%1000)/100;
}
}
void calculate(char k,char a[8],char b[8])
{
char r[8];
long i;
long x,y;
i=0;
x=0;
y=0;
for(i=7;i>0;i--)
{
while(a[i]==12)a[i]=0;
while(b[i]==12)b[i]=0;
}
x=a[4];
{
x=0;
}
else if(x>99999999||x<i)
{
BEEP=0;
r[0]=11;
r[1]=11;
r[2]=10;
r[3]=12;
r[4]=12;
r[5]=12;
r[6]=12;
r[7]=12;
}
else
{
r[0]=x%10;
r[1]=(x%100)/10;
r[2]=(x%1000)/100;
goto KSC;
while(1);
}
void display() interrupt 1
相关文档
最新文档