文档库 最新最全的文档下载
当前位置:文档库 › 简易计算器设计说明书概要

简易计算器设计说明书概要

简易计算器设计说明书概要
简易计算器设计说明书概要

摘要

单片机的出现是计算机制造技术高速发展的产物,它是嵌入式控制系统的核心。如今,它已广泛的应用到我们生活的各个领域,电子、科技、通信、汽车、工业等。计算器的出现给我们的生活带来了巨大的便利,计算器在我们的生活中随处可见,也是我们日常生活中不可缺少的工具。本设计是基于51系列单片机来进行的数字计算器系统设计,可以完成计算器的键盘输入,进行加、减、乘、除简单的基本四则运算,并在LCD上显示相应的结果。设计电路采用AT89C51单片机为主要控制电路,利用按键作为计算器的键盘的输入。显示采用字符LCD 静态显示。软件方面使用C语言编程,并用PROTUES仿真。

单片微型计算机简称单片机。它是在一块芯片上集成中央处理器(CPU)、随机存取存储器(RAM)、只读存储器(ROM)、定时/计数器及I/O接口电路等部件,构成一个完整的微型计算机。它的特点是:高性能,高速度,体积小,价格低廉,稳定可靠,应用广泛。单片机比专用处理器最适合应用于嵌入式系统,因此它得到了最多的应用。本文介绍了单片机的产生发展、功能特点、应用开发等内容。

【关键词】简单计算器单片机 LCD 应用发展

背景

近年来,单片机以其体积小、价格廉、面向控制等独特优点,在各种工业控制、仪器仪表、设备、产品的自动化、智能化方面获得了广泛的应用。与此同时,单片机应用系统的可靠性成为人们越来越关注的重要课题。影响可靠性的因素是多方面的,如构成系统的元器件本身的可靠性、系统本身各部分之间的相互耦合因素等。其中系统的抗干扰性能是系统可靠性的重要指标。

本设计采用80c51 芯片,实现了利用单片机进行了一个简单计算器设计。允许对输入数据进行加减乘除运算及LCD 显示.如果设计对象是更为复杂的计算器系统,其实际原理与方法与本设计基本相同。LCD液晶显示器是Liquid Crystal Display 的简称,LCD 的构造是在两片平行的玻璃基板当中放置液晶盒,下基板玻璃上设置TFT(薄膜晶体管),上基板玻璃上设置彩色滤光片,通过TFT上的信号与电压改变来控制液晶分子的转动方向,从而达到控制每个像素点偏振光出射与否而达到显示目的。

现在LCD已经替代CRT成为主流,价格也已经下降了很多,并已充分的普及。故采用LCD.设计的关键所在,必须非常熟悉单片机的原理与结构,同时还要对整个设计流程有很好的把握,将单片机和其他模块完整的衔接。本设计是基于51系列单片机来进行的数字计算器系统设计,可以完成计算器的键盘输入,进行加、减、乘、除基本四则运算,并在LCD上显示相应的结果;设计电路采用AT89C51单片机为主要控制电路,显示采用字符LCD静态显示;软件方面使用C 语言编程,并用PROTUES仿真i。

目录

摘要 .................................................................................................................................................... 背景 ....................................................................................................................................................

1.绪论 (1)

1.1设计的目的意义 (1)

1.2.设计的任务和要求 (1)

1.3 计算器设计所用的方法 (1)

2. 方案设计 (2)

2.1方案论述 (2)

2.2 方案论证 (3)

3.整体设计 (3)

4.硬件系统框架 (4)

4.1 Lcd1602显示器 (4)

4.2单片机 (6)

4.3复位电路 (7)

4.4 按键电路 (7)

5. 软件设计程序框图 (8)

5.1程序流程图 (8)

5.2 程序模块化编写 (9)

5.3主函数程序设计 (10)

6软件仿真与调试 (12)

6.1 Proteus 仿真软件的介绍 (12)

6.2 Proteus 电路仿真图 (12)

6.3 软件调试 (13)

6.4 测试分析 (13)

总结 (14)

【参考文献】..................................................................................................................................... 附录 ....................................................................................................................................................

1.绪论

1.1设计的目的意义

随着社会的发展,科学的进步,人们的生活水平在逐步的提高,尤其是微电子技术的发展,犹如雨后春笋般的变化。电子产品的更新速度快就不足惊奇了, 单片机的应用已经越来越贴近生活,电子计算器在我们的生活中随处可见,给我们的生活带来了巨大的便利,随着技术的不断更新,用单片机来实现一些电子设计也变得容易起来。

通过本次项目设计,应用所学相关知识资料,来完成简易计算器的设计,以达到理论与实际更好相结合进一步提高综合运用所学知识和设计能力的目的。通过本次设计的训练,可以使我在基本思路和基本方法上对基于51 单片机的嵌入式系统有一个比较感性的认识,并具备一定程度的设计能力。

1.2.设计的任务和要求

为了满足计算器的基本要求,可以基本的运算(加减乘除),数据归零和出错警告提示,我们采用基于单片机设计计算器,并用LCD字符液晶显示器显示数据,4*4 的矩阵键盘实现数据输入.分别对键盘输入检测模块;LCD显示模块;算术运算模块;按键处理及提示模块进行设计,并用设计了系统方框图,同时使用了KeiluVision4与Proteus软件进行了仿真分析其设计结果

1.3 计算器设计所用的方法

①以单片机为控制器件,采用c语言进行程序设计,采用单片机智能控制,

结合外围电子电路,可以进行“加、减、乘、除”四则运算。

②使用单片机最小系统设计计算器系统,系统以单片机为主控单元,

③借助Proteus软件,进行仿真,对设计原理、检测方法进行验证。

④借助了KeiluVision4软件对程序进行了调试和修改。

⑤在基于51单片机的开发板上进行了测试。

2.方案设计

2.1方案论述

①方案一

根据功能和指标要求,本系统选用MCS-51系列单片机AT89C51为主控机。通过扩展必要的外围接口电路,实现对计算器的设计。计算器电路包括三个部分:显示电路、4*4键扫描电路、单片机微控制电路。用七段数码管作为显示电路,矩阵键盘作为输入电路。模块图如图1.1所示。

图2.1.1 方案一模块图

②方案二

根据计算器的功能要求,选择AT89C51为主控机,通过扩展必要的外围接口电路,实现对计算器的设计。外部主要由4*4按键键盘和一个液晶显示屏构成,内部由一块AT89C51单片机构成。计算器电路包括四个部分:选用LCD作为显示部分,键盘作为输入部分,运算模块,单片机控制部分。模块图如图2.2所示。

图2.1.2 方案二模块图

2.2 方案论证

方案一:这种方案功能简单,在生活中使用较少,缺乏实际于运用价值,用数码管显示,不能显示字符,所以不能显示运算过程。

方案二:此种方案较为经济,方便,具有模块化的特点,因为将计算运算电路全部集成在了51单片机上,具有高效率,运算功能强大。lcd1602字

符液晶显示器可以显示运算过程,便于计算,随着价格的下降,已经

成为了生活中计算器的主流配置。

综上所述:所以我们小组采用方案二,采用89c51单片机为运算处理模块,使用lcd1602字符液晶显示器来做显示模块,矩阵键盘为输入模块,这种

设计便于观看,大大提升了我们使用计算器的便利度。

3.整体设计

根据简易计算器的功能和指标要求,本设计系统选用MCS-51系列单片机

AT89C51为主控机。通过扩展必要的外围接口电路,实现对简易计算器的设计。计算器电路包括三个部分:显示电路、4*4按键电路、单片机微控制电路。

具体设计如下:

(1)由于要设计的是简单的计算器,可以进行四则运算,为了得到较好的显示效果,采用lcd1602字符液晶显示器,显示数据和结果。

(2)另外键盘包括数字键(0~9)、符号键(+、-、×、÷)、.和等号键,故只需要16 只按键即可。

(3)执行过程:开机显示零,等待键入数值,当键入数字,通过LCD显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,

并等待再次键入数值,当再键入数值后将显示键入的数值,按等号就

会在LCD上输出运算结果。

(4)数据溢出或出现错误,会进行出错提示。

整体设计框图如下图所示

图1.3 线路原理框图

4.硬件系统框架

4.1 Lcd1602显示器

4.1.1 LCD1602显示器

LCD1602已很普遍了,具体介绍我就不多说了,市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的。字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样。如下图:

图 4.1.1 LCD1602显示器

4.1.2 引脚功能

图4.1.2 引脚功能图

液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,目前已经被广泛应用在便携式电脑、数字摄像机、PDA移动通信工具等众多领域。

4.1.3 LCD1602的指令说明及时序

1602液晶模块内部的控制器共有11条控制指令,如下表所示:

图4.1.3 控制指令

4.14 液晶显示模块

液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙判别标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,图4.1.4是1602的内部显示地址。

图4.1.4 1602LCD内部显示地址

4.2单片机

AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash 存储器。使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使AT89S51为众多嵌入式控制应用系统提供高灵活、更有效的解决方案。引脚结构如下图

图4.2 引脚结构

4.3复位电路

当单片机工作于内部时钟模式的时候,只需在XTAL1和XTAL2引脚连接一个晶体振荡器或者陶瓷振荡器,并接两个电容后接地即可,在使用时对于电容的选择有一定的要求:

当外接晶体振荡器的时候,电容值一般选择C1=C2=30+10pF或30-10pF;

当外接陶瓷振荡器的时候,电容值一般选择C1=C2=40+10pF或40-10pF;

图4.3 复位电路

4.4 按键电路

在按键输入方面,我们采用4*4的矩阵键盘来实现,具体连接电路如图4.4所示。通过基于状态机的按键扫描程序设计可实现4*4矩阵键盘的按键监控。

图4.4 按键输入电路

5.软件设计程序框图5.1程序流程图

5.1.1主流程图和算术运算流程图

图5.1.1 (1 )主流程图

图5.1.1 (2) 算术运算流程

5.1.2 键盘输入流程图

图5.1.2 键盘输入流程图

5.2 程序模块化编写

Keil uVision4是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,使用接近于传统c语言的语法来开发,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用,而且大大的提高了工作效率和项目开发周期

程序采用模块化编写,分为了主程序模块、lcd1602显示模块、键盘程序模块和延时程序模块。如下图所示:

图5.2 程序模块化

5.3主函数程序设计

#include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

#include

#include"1602.h"

#include"delay.h"

#include"keyboard.h"

sbit beep=P2^0;

sbit led=P2^1;

/*-------主程序-----------*/

main (){

unsigned char num,i,sign;

unsigned char temp[16]; //最大输入16个

bit firstflag;

float a=0,b=0;

unsigned char s;

LCD_Init(); //初始化液晶屏

DelayMs(10); //延时用于稳定,可以去掉

LCD_Clear(); //清屏

LCD_Write_String(0,0,"Welcome to use!"); //写入第一行信息,主循环中不再更改此信息,所以在while之前写入

LCD_Write_String(0,1,"cxk,wxx,zyc"); //写入第二行信息,提示输入

for(s=0;s<25;s++)//延时5s

DelayMs(40);

LCD_Clear();

LCD_Write_String(0,0," LCD calculator"); //写入第一行信息,主循环中不再更改此信息LCD_Write_String(0,1,"press butten..."); //写入第二行信息,提示输入

while (1) {

num=KeyPro(); //扫描键盘

if(num!=0xff) //如果扫描是按键有效值则进行处理

{ beep=0; led=0;

DelayMs(500);

beep=1;led=1;

if(i==0) //输入是第一个字符的时候需要把改行清空,方便观看

LCD_Clear();

if(('+'==num)|| (i==16) || ('-'==num) || ('x'==num)|| ('/'==num) || ('='==num))//输入数字最大值16,输入符号表示输入结束

{ i=0; if(firstflag==0) //如果是输入的第一个数据,赋值给a,并把标志位置1,到下一个数据输入时可以跳转赋值给b

{

sscanf(temp,"%f",&a);

firstflag=1;

}

else sscanf(temp,"%f",&b);

相关文档