毕业设计基于C单片机的简易计算器的设计演示PPT课件
- 格式:ppt
- 大小:2.26 MB
- 文档页数:33
摘要近几年单片机技术的发展很快,其中,电子产品的更新速度迅猛。
计算器是日常生活中比较常见的电子产品之一。
如何才能使计算器技术更加的成熟,充分利用已有的硬件和软件条件,设计出更出色的计算器。
本设计是以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.原理介绍单片机简易计算器的原理是通过单片机对输入的数字和运算符进行解析,然后利用内部的算法进行计算,最后将结果显示在输出设备上。
该计算器主要包括输入模块、解析模块、计算模块以及显示模块四个部分。
3.输入模块输入模块主要包括键盘和显示屏。
键盘用于用户输入数字和运算符,显示屏用于显示输入和计算结果。
在单片机上,键盘和显示屏一般通过矩阵按键扫描和数码管显示等方式实现。
4.解析模块解析模块负责解析用户的输入,并将其转化为内部可以处理的格式。
例如,用户输入的数字和运算符将被解析为二进制码或其他表示形式。
解析模块一般通过状态机等方式实现。
5.计算模块计算模块是单片机简易计算器的核心部分,主要负责对输入的数字和运算符进行计算,并生成计算结果。
计算模块可以使用常见的算法,如加法、减法、乘法、除法,也可以实现特殊的运算功能,如开方、幂运算等。
6.显示模块显示模块负责将计算结果显示在输出设备上。
单片机简易计算器一般采用数码管显示,可以显示整数和小数。
在显示过程中,还需要考虑显示精度和位数等问题。
7.程序设计单片机简易计算器的程序设计需要考虑输入和输出的实时性和准确性。
需要设计相应的中断处理函数,实现按键的响应和显示的更新。
程序设计还需要考虑算法的优化和计算结果的溢出等问题。
8.功能扩展单片机简易计算器还可以进行功能的扩展,如添加转换功能、存储功能等。
例如,可以添加进制转换功能,实现十进制与二进制、八进制、十六进制之间的转换;还可以添加存储功能,实现计算结果的存储和读取。
基于单片机简易计算器的设计说明一、设计目的计算器是人们日常生活中常用的工具之一,而基于单片机的简易计算器则是计算器的一种应用形式。
本设计旨在利用单片机的强大功能,实现一款功能简单但使用方便的计算器。
二、设计原理1.硬件部分本设计使用单片机作为计算器的核心处理器,通过外接的键盘进行输入,然后通过液晶显示屏进行结果的输出。
电路部分需要将键盘和液晶显示屏与单片机相连接,通过单片机与外设之间的通信实现输入和输出。
2.软件部分计算器的软件部分主要包括输入处理和输出显示两个模块:(1)输入处理:根据键盘输入的按键,通过单片机进行扫描和判断,根据按键的不同采取不同的策略进行处理。
例如,如果输入的是数字键,则将其添加到当前输入的数字序列中;如果输入的是运算符号,则判断当前表达式是否符合运算规则,如果符合则进行计算。
并通过液晶显示屏实时显示输入的数字和表达式。
(2)输出显示:根据输入处理模块的计算结果,通过液晶显示屏进行显示。
根据液晶显示屏的大小和显示效果,进行合适的显示格式和布局,保证计算结果的清晰可读。
三、设计要点1.按键输入处理在设计按键输入处理模块时,需要考虑按键的布局和功能划分。
可以根据计算器的基本功能,将按键分为数字键、运算符键和功能键等,然后根据功能的不同设置不同的处理策略。
2.表达式的计算计算器的核心功能是根据输入的表达式进行实时计算和显示结果。
在设计表达式计算模块时,需要考虑多种表达式的情况,例如加减乘除、括号等,以及运算的优先级和顺序等。
可以利用栈等数据结构来实现表达式的计算。
3.结果的显示设计结果的显示模块时,要考虑到数字的位数以及小数的精确度。
可以设置合适的显示格式,例如科学计数法等,以保证计算结果的准确性和可读性。
四、设计优点1.功能简单:本设计主要实现了计算器的基本功能,包括数字输入、四则运算和结果显示等。
不涉及复杂的高级运算,使得计算器的使用更加简单方便。
2.使用方便:由于采用了单片机进行处理,使得计算器的体积小巧且可以携带,用户可以随时进行计算,满足各种场合的需求。
计算器(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来做为核心元器件。
图3-1所示为简易计算器的电路原理图。
P3口用于键盘输入,接4*4矩阵键盘,键值与键盘的对应表如表----所示,p0口和p2口用于显示,p2口用于显示数值的高位,po口用于显示数值的低位。
图3-1 简易计算器电路原理图键值与功能对应表键值0 1 2 3 4 5 6 7 8 9 + - ×/ = ON/C 功能0 1 2 3 4 5 6 7 8 9 + - ×÷= 清零表3-13.2 计算器的软件设计#include<reg51.h> //头文件#define uint unsigned int //#define uchar unsigned charsbit lcden=P2^3; //定义引脚sbit rs=P2^4;sbit rw=P2^0;sbit busy=P0^7;char i,j,temp,num,num_1;long a,b,c; //a,第一个数b,第二个数c,得数float a_c,b_c;uchar flag,fuhao;//flag表示是否有符号键按下,fuhao表征按下的是哪个符号uchar code table[]={7,8,9,0,4,5,6,0,1,2,3,0,0,0,0,0};uchar code table1[]={7,8,9,0x2f-0x30,4,5,6,0x2a-0x30,1,2,3,0x2d-0x30,0x01-0x30,0,0x3d-0x30,0x2b-0x30};void delay(uchar z) // 延迟函数{uchar y;for(z;z>0;z--)for(y=0;y<110;y++);}void check() // 判断忙或空闲{do{P0=0xFF;rs=0; //指令rw=1; //读lcden=0; //禁止读写delay(1); //等待,液晶显示器处理数据lcden=1; //允许读写}while(busy==1); //判断是否为空闲,1为忙,0为空闲}void write_com(uchar com) // 写指令函数{P0=com; //com指令付给P0口rs=0;rw=0;lcden=0;check();lcden=1;}void write_date(uchar date) // 写数据函数{P0=date;rs=1;rw=0;lcden=0;check();lcden=1;}void init() //初始化{num=-1;lcden=1; //使能信号为高电平write_com(0x38); //8位,2行write_com(0x0c); //显示开,光标关,不闪烁*/write_com(0x06); //增量方式不移位显竟獗暌贫柚? write_com(0x80); //检测忙信号write_com(0x01); //显示开,光标关,不闪烁num_1=0;i=0;j=0;a=0; //第一个参与运算的数b=0; //第二个参与运算的数c=0;flag=0; //flag表示是否有符号键按下,fuhao=0; // fuhao表征按下的是哪个符号}void keyscan() // 键盘扫描程序{P3=0xfe;if(P3!=0xfe){delay(20); 延迟20msif(P3!=0xfe){temp=P3&0xf0;switch(temp){case 0xe0:num=0;break;case 0xd0:num=1;break;case 0xb0:num=2;break;case 0x70:num=3;break;}}while(P3!=0xfe);if(num==0||num==1||num==2)//如果按下的是'7','8'或'9 {if(j!=0){write_com(0x01);j=0;}if(flag==0)//没有按过符号键{a=a*10+table[num];}else//如果按过符号键{b=b*10+table[num];}}else//如果按下的是'/'{flag=1;fuhao=4;//4表示除号已按}i=table1[num];write_date(0x30+i);}P3=0xfd;if(P3!=0xfd){delay(5);if(P3!=0xfd){temp=P3&0xf0;switch(temp){case 0xe0:num=4;break;case 0xd0:num=5;break;case 0xb0:num=6;break;case 0x70:num=7;break;}}while(P3!=0xfd);if(num==4||num==5||num==6&&num!=7)//如果按下的是'4','5'或'6' {if(j!=0){write_com(0x01);j=0;}if(flag==0)//没有按过符号键{a=a*10+table[num];}else//如果按过符号键{b=b*10+table[num];}}else//如果按下的是'/'{flag=1;fuhao=3;//3表示乘号已按}i=table1[num];write_date(0x30+i);}P3=0xfb;if(P3!=0xfb){delay(5);if(P3!=0xfb){temp=P3&0xf0;switch(temp){case 0xe0:num=8;break;case 0xd0:num=9;break;case 0xb0:num=10;break;case 0x70:num=11;break;}}while(P3!=0xfb);if(num==8||num==9||num==10)//如果按下的是'1','2'或'3' {if(j!=0){write_com(0x01);j=0;}if(flag==0)//没有按过符号键{a=a*10+table[num];}else//如果按过符号键{b=b*10+table[num];}}else if(num==11)//如果按下的是'-' {flag=1;fuhao=2;//2表示减号已按}i=table1[num];write_date(0x30+i);}P3=0xf7;if(P3!=0xf7){delay(5);if(P3!=0xf7){temp=P3&0xf0;switch(temp){case 0xe0:num=12;break;case 0xd0:num=13;break;case 0xb0:num=14;break;case 0x70:num=15;break;}}while(P3!=0xf7);switch(num){case 12:{write_com(0x01);a=0;b=0;flag=0;fuhao=0;}//按下的是"清零" break;case 13:{ //按下的是"0"if(flag==0)//没有按过符号键{a=a*10;write_date(0x30);P1=0;}else if(flag==1)//如果按过符号键{write_date(0x30);}}break;case 14:{j=1;if(fuhao==1){write_com(0x80+0x4f);//按下等于键,光标前进至第二行最后一个显示处write_com(0x04); //设置从后住前写数据,每写完一个数据,光标后退一格c=a+b;while(c!=0){write_date(0x30+c%10);c=c/10;}write_date(0x3d); //再写"="a=0;b=0;flag=0;fuhao=0;}else if(fuhao==2){write_com(0x80+0x4f);//光标前进至第二行最后一个显示处write_com(0x04); //设置从后住前写数据,每写完一个数据,光标后退一格(这个照理说顺序不对,可显示和上段一样)if(a-b>0)c=a-b;c=b-a;while(c!=0){write_date(0x30+c%10);c=c/10;}if(a-b<0)write_date(0x2d);write_date(0x3d); //再写"="a=0;b=0;flag=0;fuhao=0;}else if(fuhao==3){write_com(0x80+0x4f);write_com(0x04);c=a*b;while(c!=0){write_date(0x30+c%10);c=c/10;}write_date(0x3d);a=0;b=0;flag=0;fuhao=0;}else if(fuhao==4){write_com(0x80+0x4f);write_com(0x04);i=0;c=(long)(((float)a/b)*1000);while(c!=0){write_date(0x30+c%10);c=c/10;i++;if(i==3)write_date(0x2e);}if(a/b<=0)write_date(0x30);write_date(0x3d);a=0;b=0;flag=0;fuhao=0;}}break;case 15:{write_date(0x30+table1[num]);flag=1;fuhao=1;} break;}}}main(){init();while(1){keyscan();}}第4章仿真和调试下面用KEIL uVision与porteus仿真软件实现简易计算器的仿真与调试。
单片机设计简易计算器单片机是指将整个计算机系统集成在一块芯片上的微处理器。
设计一个简易计算器,可以使用单片机实现各种基本运算,如加、减、乘、除以及开方等。
首先,我们需要选择单片机的类型和开发环境。
常用的单片机有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)1.1 设计总体思路 (1)1.2基本原理 (1)1.3设计框图 (1)1.3.1硬件原理图 (1)1.3.2软件流程图 (2)二、单元函数设计 (2)2.1 单片机模块 (2)2.2键盘控制模块 (2)2.3 LCD显示模块 (3)三、程序调试与结果 (4)3.1加法调试 (4)3.2幂运算调试 (4)3.3报错调试 (4)四、总结与体会................................ 错误!未定义书签。
附录. (4)参考文献 (21)一、设计总体思路,基本原理和框图1.1 设计总体思路本电路设计采用AT89S52单片机为核心,利用晶振产生频率为1HZ 的时钟脉冲信号,利用液晶屏LCD1602显示计算信息,通过对AT89S52单片机的编程控制液晶屏LCD1602的显示。
显示计算和简易计算的信息同在LCD1602,通过按键切换选。
1.2基本原理图1-11.3设计框图1.3.1硬件原理图图1-2AT89C51 单片机 模块 1602LCD 液晶显示矩阵键盘1.3.2软件流程图图1-3二、单元函数设计2.1 单片机模块本次设计采用AT89C51单片机,以下为其标准功能:4k 字节Flash 闪速存储器,128字节内部RAM,32 个I/O 口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。
同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。
空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。
掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位2.2键盘控制模块本次设计使用的是PROTUES中的KEYPAD键盘。
使用此键盘的难度在于它的数据是分散的,并且不是由小到大排列的,这就要求我们在编写程序的时候对键值进行处理。
基于单片机简易计算器的设计在我们的日常生活和工作中,计算器是一个非常实用的工具。
从简单的数学运算到复杂的科学计算,它都能为我们提供快速准确的结果。
而基于单片机设计的简易计算器,不仅具备基本的计算功能,还具有体积小、成本低、易于实现等优点。
一、设计背景随着电子技术的不断发展,单片机的应用越来越广泛。
它在控制、测量、通信等领域都发挥着重要作用。
而将单片机应用于计算器的设计,可以实现更加智能化和个性化的计算功能。
同时,对于学习电子技术的人来说,设计一个基于单片机的简易计算器也是一个很好的实践项目,可以帮助我们更好地理解单片机的工作原理和编程方法。
二、系统总体设计1、功能需求简易计算器应具备基本的四则运算(加、减、乘、除)功能,能够处理整数和小数的运算。
同时,还应具备清零、退位、等号等操作功能。
2、硬件设计硬件部分主要包括单片机最小系统、键盘输入模块、显示模块等。
单片机最小系统是整个系统的核心,负责控制和处理数据。
键盘输入模块用于接收用户的输入指令,显示模块用于显示计算结果。
3、软件设计软件部分主要采用 C 语言进行编程。
通过编写程序,实现对键盘输入的识别和处理,以及对计算结果的输出显示。
三、硬件电路设计1、单片机最小系统单片机选用常见的 STC89C52 芯片,它具有价格低廉、性能稳定等优点。
最小系统包括单片机芯片、晶振电路和复位电路。
晶振电路为单片机提供时钟信号,复位电路用于系统的初始化。
2、键盘输入模块键盘采用4×4 矩阵键盘,通过行列扫描的方式获取用户的输入信息。
键盘上的按键分别对应数字 0-9、四则运算符号、清零、退位和等号等功能。
3、显示模块显示模块选用 1602 液晶显示屏,它可以显示两行字符,每行 16 个字符。
通过单片机的控制,将计算结果和输入的算式显示在屏幕上。
四、软件程序设计1、主程序主程序主要负责初始化系统、扫描键盘、处理输入和计算结果等。
首先,对单片机的各个端口进行初始化设置,然后进入一个无限循环,不断扫描键盘,当检测到有按键按下时,根据按键值进行相应的处理。