基于单片机实现的四则运算计算器
姓名
学号:
班级:
专业名称:测控技术与仪器
指导教师:
东北大学
2016年1月
课程设计(论文)任务书课程设计(论文)题目:基于单片机实现的四则运算计算器
基本内容和设计要求:
1、主机的矩阵键盘输入数和运算符号,从机显示运算结果。
2、主从单片机串行通信系统,并在LCD上显示运算内容及结果。
3、计算结果超过十位数字则显示错误。
4、运算除法时,结果只取整数,不是四舍五入。
5、有清零功能。
目录
课程设计(论文)任务书................................................................................................ i i 摘要 (1)
第1章绪论 (2)
1.1计算器简介 (2)
1.2设计主要内容 (2)
第2章系统硬件设计 (4)
2.1硬件组成 (4)
2.2输入模块 (4)
2.3输出模块 (5)
2.4运算模块 (5)
第3章系统软件设计 (7)
3.1 主程序 (7)
3.1.1主程序框图及初始化 (7)
3.1.2LCD程序框图及初始化 (8)
3.1.3键盘程序框图及初始化 (9)
3.1.4运算程序框图 (10)
第4章调试测试与实验分析 (11)
4.1 计算器调试 (11)
参考文献 (12)
心得体会 (13)
附录硬件原理图及PCB图 (14)
附录程序清单 (15)
附录实物照片 (28)
摘要
单片机的出现是计算机制造技术高速发展的产物,它是嵌入式控制系统的核心,如今,它已广泛的应用到我们生活的各个领域,电子、科技、通信、汽车、工业等。本设计是基于89C52RC单片机来进行的四则运算计算器系统设计,可以完成计算器的键盘输入,进行加、减、乘、除的基本四则运算,并在LCD1602液晶显示屏上显示相应的结果。本电路采用89C52RC单片机为主要控制电路,利用4*4矩阵键盘作为计算器以及运算符的输入。显示采用字符LCD静态显示。软件用C语言编程,并用开发板进行演示。
关键词:计算器,89C52RC单片机,LCD,矩阵键盘
第1章绪论
1.1计算器简介
计算器是现代人们发明的可以进行数字运算的电子机器。现代的电子计算器能进行数学运算的手持电子机器,除显示计算结果外,还常有溢出指示、错误指示等,拥有集成电路芯片,但结构比电脑简单得多,可以说是第一代的电子计算机(电脑),且功能也较弱,但较为方便与廉价,可广泛运用于商业交易和学习计算中,是必备的学习和办公用品之一[1]。
1.2设计主要内容
1.2.1设计概述
本系统使用89C52RC单片机作为主控芯片,通过矩阵键盘输入,进行运算,并在LCD 上显示相应的数字和结果,主要功能如下:
(1) LCD第一行显示运算符号之前的数字,第二行显示运算符号和运算符号之后的数字,按下等号键得到结果。
(2)在任何时候按下清零键则清零。
(3)当运算完第一次完整的计算之后,可以在不按任何键的情况下,进行新的一轮计算。
1.2.2设计思路
本系统采用MCS-52系列单片机作为主控机,通过拓展必要的外围电路,实现对计算器的设计,具体设计如下:
(1)因为想显示运算符号,用数码管不能很好的显示出来,所以采用LCD1602液晶显示器作为显示模块。
(2)计算器一般包含数字键(0~9),符号键(+,—,*,/),等号键,清零键。故采用4*4矩阵键盘结合键盘扫描技术来达到要求。
(3)开机后1602显示‘0’,等待按键输入,当键入数字,在LCD上显示出来,计算器内部把数据储存起来,并等待下一按键输入,当键入运算符号时,计
算器内部步数加1,然后等待再次输入数值,按等于号就在LCD上显示结果。
(4)清零功能:在运算的任何时候键入清零键,则把数据清零,等待下一次运算。
1.2.3电路图设计
根据给的开发板的原理图在protel中设计并连接电路图,分析电路图的正确性,
输出PCB图。
1.2.4软件的编程
利用C语言编程,分模块测试板子的好坏,然后编写程序,在keil中进行调试。
第2章系统硬件设计
2.1硬件组成
硬件以89C52单片机为核心,外部扩展用LCD实现显示功能,用4*4矩阵键盘实现输入功能。
基本硬件结构图如图2.1所示。
4*4矩阵键盘
输入
C51
单片机
运算模块LCD显示
图2.1 四则运算计算器基本硬件结构图
2.2输入模块
计算器输入数字和其他功能按键要用到很多按键,如果采用独立按键的方式,在这种情况下,编程会简单,但I/0口不够用,所以采用矩阵键盘形式,本次采用4*4矩阵键盘的形式,采用四条I/O 线作为行线,四条I/O 线作为列线组成键盘。在行线和列线的每个交叉点上设置一个按键,这样键盘上按键的个数就为4×4个。
图2-2输入模块电路图
矩阵键盘功能:预设16个键位,分别是0~9数字键,加减乘除,等于和清零功能。单片机不停扫描键盘当发现有按键按下时,若为数字键则在lcd上显示,功能键则实现对应的功能。例如,按下5时,lcd上显示数字5,按下加号,即实现加法功能也在lcd 上显示加号。
2.3输出模块
采用LCD1602来显示字符和数字,1602能够同事显示16*02即32个字符。1602液晶模块内部的字符发生储存器已经储存了160个不同的点阵字符图形,这些字符有:阿拉伯数字,英文字母大小写,常用的符号等,每一个字符有一个固定的代码。在对液晶模块的初始化中要先设置其显示模式,在液晶模块显示字符时光标是自动右移的。每次输入指令前都要判断液晶模块是否处于忙的状态。
图2-3输出模块电路图
lcd1602能够同时显示16*2个字符,用它接收单片机送来的信号,然后在上边显示相应的数字或符号,实现显示功能。
2.4运算模块
单片机是靠程序运行的,并且可以修改。通过不同的程序实现不同的功能,尤其是特殊的独特的一些功能,通过上网查找运算代码作参考,然后对单片机进行程序编写,
从而实现运算功能。
第3章系统软件设计3.1 主程序
3.1.1主程序框图及初始化
主程序框图如图3.1所示
开始
初始化参数
初始化LCD显示
有键输入?LCD显示
读取键值
分析键码
数字键清零键功能键
输入键值状态清零
根据上次功能键和输
入的数值计算结果
数值送显示
缓存
结果送显示
缓存
等待数值输
入
Y
N
图3.1 主程序框图
主程序说明:接通电源后,先让lcd显示屏初始化显示0,然后通过键盘扫描看是否有键按下,若有键按下,则分析按下键的性能,若为数字键或清零键则通过lcd显示,若为功能键,实现功能然后lcd显示。
3.1.2LCD程序框图及初始化
开始
初始化为0
是否有键按
下?
数字键?功能键?LCD显示0
显示键值
等号键?显示计算结果
等待输入
N
Y
Y N
Y N
Y
N
图3.2 LCD程序框图
Lcd初始化显示0,开始后判断是否有键按下,有键按下判断是否是数字键,若为数字键则显示键值,若不是,则为功能键,再判断功能键是否是等号,若为等号,则显示计算结果,若不是实现功能,等待输入。
3.1.3键盘程序框图及初始化
开始
扫描键盘
是否有键按
下?
是否为等号?
计算并显示最
终结果
结束
是否为计算符?
读进内存
计算是否有
计算符?
先计算显示暂
时结果
读进内存并显
示程序
N
Y
N Y
N
Y
Y
N 图3.3 键盘程序框图
开始后,扫描键盘,若没有键按下则继续扫描,有键按下,若为等号键则显示结果然后结束,若不是看是否是计算符,不是计算符则读入内存然后lcd显示,若是计算符读进内存,等待输入。
3.1.4运算程序框图
开始
运算符是?
加乘减除
运算结果溢出?
除数为0?
LCD 显示-1
数值送LCD 显示
Y
N
Y
N
图3.4 运算程序框图
运算程序:先判断运算符,若为加或乘则要判断运算结果是否溢出,若溢出,则lcd 显示-1表示运算错误,若为除号,判断除数是否为0,若为0,则lcd 显示-1表示运算错误,其他情况则可直接送至lcd 显示。
东北大学课程设计报告第4章调试测试与实验分析第4章调试测试与实验分析
4.1 计算器调试
(1)问题:将已编好的程序用烧录进开发板后,发现开发板上LCD显示屏只发光但是没有任何数字。
(2)分析:这种现象可能存在两个问题:
1)LCD显示屏有问题
2)程序存在错误
(3)解决方案:重新检查开发板元器件,将开发版资料已给的1602液晶显示程序烧录开发板中,发现LCD仍然只发光不显示任何东西,初步判定是LCD未调节好或者故障,经检测是LCD显示字符的亮度未调节合适,拿螺丝刀调节,LCD就能显示字符。
(4)再次检测:再次将已编好的程序烧录进开发板,打开开发板电源,LCD上先显示‘0’字符。矩阵键盘输入‘3*4’进行计算,发现显示屏上第一行显示‘3’,第二行显示‘4’和‘*’,然后在键盘上输入‘=’,显示屏上得出结果12。
东北大学课程设计报告参考文献
参考文献
[1]李小坚郝晓丽.protel DXP电路设计与制版实用教程[J].人民邮电出版社, 2015,
10.
[2]张秋菊刘继超. 单片机应用实训教程[J]. 化学工业出版社, 2015,10.
东北大学课程设计报告心得体会
心得体会
周二早上开始选课题的时候,感觉我们的能力不是很强,所以想选一个简单一点的题目,然后就选了一个四则运算计算器,这个题目硬件上的确不难,但是软件上却令我们很困扰,很头疼。周二下午写计划的时候,看到被老师打回来这么多份计划,我们就想自己好好的写一写,可是还是改了两遍,也用了一晚上的时间,但是这个计划却对我们之后几天的工作有一个很好的指导。
第二天学习protel,老师没有怎么讲,我们一开始也不会用,只能是哪里不会哪里百度,但是有的元件还是没有找到,周四早上才知道原来资料里有单片机上的元件库,于是把那个元件库导入,画图便容易多了。我们硬件没有什么东西,于是第三天下午便开始编程了,可是我们对着程序看了一下午也没有什么头绪,反而整得自己要发疯了一样,对课设也失去了信心。后来老师来检查的时候告诉我们要一步一步的调试,不可能一口吃个大胖子,我们就把程序分开来调试,通过从图书馆借来的资料一步一步的来,程序中不懂的地方便查书或者通过网络解决。
这几天的确是蛮痛苦的,天天早晨起来到教室里,一坐一天,感觉比上课累多了,可也有了自己的收获,没有老师指导,需要的东西基本上要自己来查找,也锻炼了自己的能力。实物的焊接也锻炼了我们的动手能力,课程设计对于我们的益处是很大的。也希望自己通过知识与实际的结合不断的提高自己。
附录 硬件原理图及PCB 图
P1.0/T2
1P1.1/T2EX 2P1.2/ECI 3P1.3/CEX04P1.4/CEX15P1.5/CEX26P1.6/CEX37P1.7/CEX48RST 9P3.0/RxD 10P3.1/TxD 11P3.2/INT012P3.3/INT113P3.4/T014P3.5/T115P3.6/WR 16P3.7/RD
17XTAL2
18
XTAL119VSS
20
P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427P2.7/A15
28
PSEN
29ALE/PROG 30EA/VPP 31P0.7/AD732P0.6/AD633P0.5/AD534P0.4/AD435P0.3/AD336P0.2/AD237P0.1/AD138P0.0/AD039VCC
40U1
P89C51RC2BN/01
C1Cap
C2Cap 1
2Y1XTAL
R1
Res2
VCC
123456789
RP1
MYRESPACK
P 10
P 11P 12P 13P 14P 15P 16P 17VCC
C3Cap
GND 1
VCC 2VEE 3RS 4R/W 5EN 6D07D18D29D310D411D512D613LED-A 15D714LED-K 16J13
LCD1602
VCC A 1
B 2
TAP
3VR2
RESISTOR TAPPED
P10
P11P12P00P01P02P03P04P05P06P07VCC
VCC
P20
P21
P22
P23
P24
P25
P26
1234
S13MYSW-PB 123
4
S11MYSW-PB 123
4
S12MYSW-PB 123
4
S21MYSW-PB 123
4
S8
MYSW-PB 1234
S9MYSW-PB 1234
S10MYSW-PB 1234
S18MYSW-PB 123
4
S5
MYSW-PB 1234
S6MYSW-PB 1234
S7MYSW-PB 1234
S16MYSW-PB 123
4
S2
MYSW-PB
1234
S3MYSW-PB
1234
S4MYSW-PB
1234
S14MYSW-PB
附录程序清单
LCD1602
#include
#define LCD1602_DB P0
sbit LCD1602_RS = P1^0;
sbit LCD1602_RW = P1^1;
sbit LCD1602_E = P1^2;
/* 等待液晶准备好*/
void LcdWaitReady()
{
unsigned char sta;
LCD1602_DB = 0xFF;
LCD1602_RS = 0;
LCD1602_RW = 1;
do {
LCD1602_E = 1;
sta = LCD1602_DB; //读取状态字
LCD1602_E = 0;
} while (sta & 0x80); //bit7等于1表示液晶正忙,重复检测直到其等于0为止}
/* 向LCD1602液晶写入一字节命令,cmd-待写入命令值*/
void LcdWriteCmd(unsigned char cmd)
{
LcdWaitReady();
LCD1602_RS = 0;
LCD1602_RW = 0;
LCD1602_DB = cmd;
LCD1602_E = 1;
LCD1602_E = 0;
}
/* 向LCD1602液晶写入一字节数据,dat-待写入数据值*/
void LcdWriteDat(unsigned char dat)
{
LcdWaitReady();
LCD1602_RS = 1;
LCD1602_RW = 0;
LCD1602_DB = dat;
LCD1602_E = 1;
LCD1602_E = 0;
}
/* 设置显示RAM起始地址,亦即光标位置,(x,y)-对应屏幕上的字符坐标*/ void LcdSetCursor(unsigned char x, unsigned char y)
{
unsigned char addr;
if (y == 0) //由输入的屏幕坐标计算显示RAM的地址
addr = 0x00 + x; //第一行字符地址从0x00起始
else
addr = 0x40 + x; //第二行字符地址从0x40起始
LcdWriteCmd(addr | 0x80); //设置RAM地址
}
/* 在液晶上显示字符串,(x,y)-对应屏幕上的起始坐标,str-字符串指针*/ void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str)
{
LcdSetCursor(x, y); //设置起始地址
while (*str != '\0') //连续写入字符串数据,直到检测到结束符
{
LcdWriteDat(*str++);
}
}
/* 区域清除,清除从(x,y)坐标起始的len个字符位*/
void LcdAreaClear(unsigned char x, unsigned char y, unsigned char len) {
LcdSetCursor(x, y); //设置起始地址
while (len--) //连续写入空格
{
LcdWriteDat(' ');
}
}
/* 整屏清除*/
void LcdFullClear()
{
LcdWriteCmd(0x01);
}
/* 初始化1602液晶*/
void InitLcd1602()
{
LcdWriteCmd(0x38); //16*2显示,5*7点阵,8位数据接口
LcdWriteCmd(0x0C); //显示器开,光标关闭
LcdWriteCmd(0x06); //文字不动,地址自动+1
LcdWriteCmd(0x01); //清屏
}
矩阵键盘
#include
sbit KEY_IN_1 = P2^4;
sbit KEY_IN_2 = P2^5;
目录 第一章引言 (3) 1.1 简述简易计算器 (3) 1.2 本设计主要任务 (3) 1.3 系统主要功能 (4) 第二章系统主要硬件电路设计 (4) 2.1 系统的硬件构成及功能 (4) 2.2 键盘电路设计 (5) 2.3 显示电路设计 (6) 第三章系统软件设计 (7) 3.1 计算器的软件规划 (7) 3.2 键盘扫描的程序设计 (7) 3.3 显示模块的程序设计 (8) 3.4 主程序的设计 (9) 3.5 软件的可靠性设计 (9) 第四章调试 (9) 第五章结束语 (10) 参考文献 (11) 附录源程序 (11)
第一章引言 1.1 简述简易计算器 近几年单片机技术的发展很快,其中电子产品的更新速度迅猛。计算器是日常生活中比较的常见的电子产品之一。如何才能使计算器技术更加的成熟,充分利用已有的软件和硬件条件,设计出更出色的计算器呢? 本设计是以AT89S52单片机为核心的计算器模拟系统设计,输入采用4×6矩阵键盘,可以进行加、减、乘、除9位带符号数字运算,并在LCD1602上显示操作过程。 科技的进步告别了以前复杂的模拟电路,一块几厘米平方的单片机可以省去很多繁琐的电路。现在应用较广泛的是科学计算器,与我们日常所用的简单计算器有较大差别,除了能进行加减乘除,科学计算器还可以进行正数的四则运算和乘方、开方运算,具有指数、对数、三角函数、反三角函数及存储等计算功能。计算器的未来是小型化和轻便化,现在市面上出现的使用太阳能电池的计算器, 使用ASIC设计的计算器,如使用纯软件实现的计算器等,未来的智能化计算器将是我们的发展方向,更希望成为应用广泛的计算工具。 1.2 本设计主要任务 以下是初步设定的矩阵键盘简易计算器的功能: 1.扩展4*6键盘,其中10个数字,5个功能键,1个清零 2.强化对于电路的焊接 3.使用五位数码管接口电路 4. 完成十进制的四则运算(加、减、乘、除); 5. 实现结果低于五位的连续运算; 6. 使用keil 软件编写程序,使用汇编语言; 7. 最后用ptoteus模拟仿真; 8.学会对电路的调试
简单的四则运算计算器程序
注:1、报告内的项目或内容设置,可根据实际情况加以调整和补充。 2、教师批改学生实验报告时间应在学生提交实验报告时间后10日内。
附件:程序源代码 // sizheyunsuan.cpp : Defines the entry point for the console application. #include
吉首大学课程设计 课程设计名称:简单的计算器 专业班级: 10 网络工程 学生姓名:胡申城唐茂林赖佳 学号:20104045049 20104045006 201040450 指导教师:鲁荣波老师 课程序设计时间:2011.12.18-2011.12.25
目录 一内容 (1) 二.设计要求 (2) 三.计算器的算法 (2) 四..流程图 (5) 五.源程序 (7) 六.执行结果 (8) 七.课程设计总结 (3) 八.参考书目 (3)
一、内容 编写一个功能基本完善的计算器程序,支持四则运算、乘方开方、指数对数等运算,支持带括号的表达式。 二、设计要求 1) 程序采用字符界面 2) 显示功能菜单,用户指定键即可进入相应功能 3) 每次计算完成后输出一个提示符,要计算的数字或表达式由用户在提示后面输入 4) 用户输入完按回车立即显示计算结果 三、计算器的算法 我们现在用的计算器多是一个数一个运算符的输入输出的。一个比较具有现实意义的计算器,应该具有如下功能: 1.能够实现整数的四则运算:如:1+6-9*4+4/3 2.能够实现小数的四则运算:如:0.2+7-4 这样的计算器基本可以使用在我们生活中。如果我们按照栈的使用来描述一下表达式的进栈出栈问题: 表达式例如:1+9*4/4-5。 假设有栈D和数组S;S中放运算数,D栈放入运算符,优先级高的现运算,四则运算中,*和/优先级最高。 第一步:扫描到‘1’,是运算数,放入S; 第二步:扫描到‘+‘进入D
第三步:扫描到9;进S 第四步:扫描‘*’,因为乘比加优先级高,所以9出栈实现:9*4,把结果入S, 第五步:扫描到/,同样计算S的栈顶元素出栈,实现36/4,把结果如S 第六步:扫描到—,进入D栈; 第七步:扫描到‘5’,进S 第八步:扫描到‘\0’,为结束符;把S栈顶元素栈S1,D顶元素出栈,然后S栈顶元素在出栈,实现减操作,接着S栈顶元素出栈,实现加操作。 具体进出栈如图: Next 为下一个字符或数字,run表示运行,空为不操作S[] D S[] D S[] D S[] D S[] D S[] top t top 9 top 36 top 4 - -1 top base 1 + 1 + 1 + 1 + 1 + 0 top top next + 9 * 4 / 4 - 5 = run 9*4 36/4 4-5 -1+1 表1-1 运算数运算符进栈、出栈
DBUF EQU 30H TEMP EQU 40H YJ EQU 50H ;结果存放 YJ1 EQU 51H ;中间结果存放GONG EQU 52H ;功能键存放 ORG 00H START: MOV R3,#0 ;初始化显示为空MOV GONG,#0 MOV 30H,#10H MOV 31H,#10H MOV 32H,#10H MOV 33H,#10H MOV 34H,#10H MLOOP: CALL DISP ;PAN调显示子程序WAIT: CALL TESTKEY ; 判断有无按键JZ WAIT CALL GETKEY ;读键 INC R3 ;按键个数 CJNE A,#0,NEXT1 ; 判断就是否数字键 LJMP E1 ; 转数字键处理NEXT1: CJNE A,#1,NEXT2 LJMP E1 NEXT2: CJNE A,#2,NEXT3 LJMP E1 NEXT3: CJNE A,#3,NEXT4 LJMP E1 NEXT4: CJNE A,#4,NEXT5 LJMP E1 NEXT5: CJNE A,#5,NEXT6 LJMP E1 NEXT6: CJNE A,#6,NEXT7 LJMP E1 NEXT7: CJNE A,#7,NEXT8 LJMP E1 NEXT8: CJNE A,#8,NEXT9 LJMP E1 NEXT9: CJNE A,#9,NEXT10 LJMP E1 NEXT10: CJNE A,#10,NEXT11 ;判断就是否功能键LJMP E2 ;转功能键处理NEXT11: CJNE A,#11,NEXT12 LJMP E2 NEXT12: CJNE A,#12, NEXT13 LJMP E2
基于单片机实现的四则运算计算器 姓名 学号: 班级: 专业名称:测控技术与仪器 指导教师: 东北大学 2016年1月
课程设计(论文)任务书课程设计(论文)题目:基于单片机实现的四则运算计算器 基本内容和设计要求: 1、主机的矩阵键盘输入数和运算符号,从机显示运算结果。 2、主从单片机串行通信系统,并在LCD上显示运算内容及结果。 3、计算结果超过十位数字则显示错误。 4、运算除法时,结果只取整数,不是四舍五入。 5、有清零功能。
目录 课程设计(论文)任务书................................................................................................ i i 摘要 (1) 第1章绪论 (2) 1.1计算器简介 (2) 1.2设计主要内容 (2) 第2章系统硬件设计 (4) 2.1硬件组成 (4) 2.2输入模块 (4) 2.3输出模块 (5) 2.4运算模块 (5) 第3章系统软件设计 (7) 3.1 主程序 (7) 3.1.1主程序框图及初始化 (7) 3.1.2LCD程序框图及初始化 (8) 3.1.3键盘程序框图及初始化 (9) 3.1.4运算程序框图 (10) 第4章调试测试与实验分析 (11) 4.1 计算器调试 (11) 参考文献 (12) 心得体会 (13) 附录硬件原理图及PCB图 (14) 附录程序清单 (15) 附录实物照片 (28)
摘要 单片机的出现是计算机制造技术高速发展的产物,它是嵌入式控制系统的核心,如今,它已广泛的应用到我们生活的各个领域,电子、科技、通信、汽车、工业等。本设计是基于89C52RC单片机来进行的四则运算计算器系统设计,可以完成计算器的键盘输入,进行加、减、乘、除的基本四则运算,并在LCD1602液晶显示屏上显示相应的结果。本电路采用89C52RC单片机为主要控制电路,利用4*4矩阵键盘作为计算器以及运算符的输入。显示采用字符LCD静态显示。软件用C语言编程,并用开发板进行演示。 关键词:计算器,89C52RC单片机,LCD,矩阵键盘
HTML5+JavaScript: