简易计算器设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1602液晶显示计算器
设计报告
2016年10月
一、摘要
计算器是人们的日常生活最常见的电子产品之一,应用广泛,功能强大。本次我们小组设计制作了一个简易计算器,能够在-9999999~9999999的范围内进行整数、小数的四则运算运算,并求解ax+e x=b类型方程。该计算器以AT89C51单片机芯片作为核心,采4*4矩阵键盘作为输入,将数据输入单片机内部处理,用LCD1602工业字符液晶显示出运算和结果。进行显示。经过检验能够实现预设功能,具有很高的实用价值。
关键词:
单片机;简易计算器;AT89C51;LCD1602。
本设计具有以下功能:
1、能够实现-9999999~9999999范围内整数,小数的基本运算(超出范围后报错)。
2、储存运算结果,掉电不丢失。
3、实现6位及以上有效数字。
4、解ax+e x=b方程。
5、能够连续运算,即上次运算结果作为下次的输入。
6、能够在一次操作中连续运算。
二、方案论证
方案描述:
方案一:以51单片机为核心,4*4矩阵键盘输入,数码管显示输入数字和运算结果。
方案二:以51单片机为核心,4*4矩阵键盘输入,LCD1602显示输入数字和运算结果。
方案比较与选择:
LCD1602作为一个成熟的产品,使用简单,模式固定,便于移植到各种类型的程序,又有微功耗、体积小、显示内容丰富超薄轻巧等优点,而数码管虽然亮度高,但是操作复杂、能耗高、且不能显示符号,本设计对亮度要求不是特别高,故采用方案二。
三、解方程算法
ax+e x=b为非线性方程,采用牛顿法迭代求解。原理是利用泰勒公式在X0处展开,且展开到一阶,即f(X)=f(X0)+(X- X0)f’(X0),求解X=X1= X0-f(X0)/f’(X0),进而推出Xn+1=Xn-f(Xn)/f’(Xn)。通过迭代,这个式子必然在f(x)=0的时候收敛,进而得到方程的解。
四、电路与程序
系统组成:
电源系统,复位电路,晶振电路,4*4矩阵键盘,独立按键,STC80C52,LCD1602。
具体设计如下:
1、复位电路
2、键盘电路
3、晶振电路
S17 1K
4、1602显示屏
1602
5、STC89C52电路
6、电源电路
系统软件与流程图:1)、总流程图
使用说明:
1、接入电源,按下电源开关后进入上次关闭时的界面(计算或解方程界面)。
2、计算时,输入数字和符号,按等号键输出结果,超出运算范围则报错,按AC 键退出;
3、解方程时,先输入参数a,b,按等号键确认,后输出ax+e x=b的解。按任意键继续解方程。
4、在任意时刻短按mode键进入菜单界面,按1进入计算界面,按2进入解方程界面。
5、长按mode键为记忆功能,即显示上次的计算结果。
测试方案及结果:
1、菜单界面
2、加法运算
3、减法运算
4、乘法运算
5、除法运算
6、连续运算
7、上次运算结果作为下次输入
8、报错
9、解方程
10、记忆功能
参考书目
《新概念51单片机C语言教程》电子工业出版社
附录
源代码:
//键盘接P3,1602接P0,STC89C58RC
//by-FCY 2016-10
#include
#include
#include
#include
#include
#define uchar unsigned char
#define uint unsigned int
#define RdCommand 0x01 //定义ISP的操作命令#define PrgCommand 0x02
#define EraseCommand 0x03
#define Error 1
#define Ok 0
#define WaitTime 0x01 //定义CPU的等待时间sfr ISP_DATA=0xe2; //寄存器申明
sfr ISP_ADDRH=0xe3;
sfr ISP_ADDRL=0xe4;
sfr ISP_CMD=0xe5;
sfr ISP_TRIG=0xe6;
sfr ISP_CONTR=0xe7;
sbit lcden=P1^1; //定义1602能使端和数据命令选择端
sbit lcdrs=P1^0;
/*
sbit lcden=P3^4; //TX开发板调试
sbit lcdrs=P3^5;
sbit dula=P2^6;
sbit wela=P2^7;
*/
sbit mode=P1^2; //定义功能键
sbit led=P1^5; //定义1602背光K
uchar time; //定义中断计时时间
char cnumf[14];
char csign[5]={'.','+','-','*','/'}; //定义整数,小数,符号数组
float num1,num2;//定义运算数字
uchar key_value,sign_value=11,fun_value=1; //定义键值,符号值,功能值void delay(uint z); //函数声明
uchar keyscan();
void function_choose();
void write_com(uchar com);
void write_data(uchar date);
void memoryread();