文档库 最新最全的文档下载
当前位置:文档库 › 基于C51简易计算器综述

基于C51简易计算器综述

基于C51简易计算器综述
基于C51简易计算器综述

单片机课程设计

简 易 计 算 器

专 业 班 级 学生姓名 学 号 任课教师 提交日期

JINGCHU UNIVERSITY OF TECHNOLOGY

目录

摘要 (01)

引言 (01)

一、设计任务和要求.............................

1、1 设计要求

1、2 性能指标

1、3 设计方案的确定

二、单片机简要原理.............................

2、1 AT89C51的介绍

2、2 单片机最小系统

2、3 七段共阳极数码管

三、硬件设计...................................

3、1 键盘电路的设计

3、2 显示电路的设计

四、软件设计...................................

4、1 系统设计

4、2 显示电路的设计

五、调试与仿真.................................

5、1 Keil C51单片机软件开发系统

5、2 proteus的操作

六、心得体会....................................

参考文献......................................... 附录1 系统硬件电路图............................ 附录2 程序清单..................................

一、设计任务和要求

1.1 设计要求

本次课程设计,我选择的课题是单片机十进制加法计算器软硬件设计,设计任务为:

设计一键盘显示装置,键盘上除需定义10个十进制数字键外还要相应的功能键,其它键不定义无响应。利用此系统可分别可输入十进制被加数与加数,实现两数相加并将结果以十进制形式显示出来。(扩展:多位10进制数相加)

1.2 性能指标

本课程设计的十进制加法计算器的计算范围为0~255,计算结果全为整数,计算结果溢出结果不显示。

1、加法:三位加法,计算结果超过255溢出不显示

2、减法:三位减法,计算结果若小于零溢出不显示

3、乘法:三位数乘法

4、除法:整数除法

5、有清零功能

1.3 设计方案的确定

按照1.1的设计要求,本课题需要使用数码管显示和扩展4*4键盘,由于

AT89C51芯片的I口不够多,而且为了硬件电路设计的简单化,故选择串行动态显示和用P1口扩展4*4键盘,扩展的4*4键盘定义十个数字键,六个功能键,使用串行动态显示显示运算结果。

主程序进行初始化,采用行列扫描进行查表得出键值,每次按键后调用显示子程序。

二、单片机简要原理

在该课程设计中,主要用到一个AT89C51芯片和串接的共阴数码管。作为

该设计的主要部分,下面将对它们的原理及功能做详细介绍和说明。

2.1 AT89C51的介绍:

图一A T89C51外形结构和引脚分布图

芯片AT89C51的外形结构和引脚图如图一所示。AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL 高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

2.2 单片机最小系统

单片机最小系统就是支持主芯片正常工作的最小部分,包括主控芯片、复位电路和晶振电路。

(一)复位电路

图二复位电路

本设计采用上电与手动复位电路,电阻分别选取100和10K,电容选取10uF,系统一上电,芯片就复位,或者中途按按键也可以进行复位。

(二)晶振电路

图三晶振电路

晶振电路是单片机的心脏,它用于产生单片机工作所需要的时钟信号。单片机的晶振选取11.0592MHz,晶振旁电容选取30pF。

2.3 七段共阳极数码管

图四七段共阳数码管

图为七段共阳数码管的引脚图,从左到右数码管的段码分别为a,b,c,d,e,f,g和小数点dp,低电平时点亮,最右边为位选端。

三、硬件设计

简易数字计算器系统硬件设计主要包括:键盘电路,显示电路以及其他辅助电路。下面分别进行设计。

3.1 键盘电路的设计

键盘可分为两类:编码键盘和非编码键盘。编码键盘是较多按键

(20个以上)和专用驱动芯片的组合,当按下某个按键时,它能够处理按键抖动、连击等问题,直接输出按键的编码,无需系统软件干预。通用计算机使用的标准键盘就是编码键盘。当系统功能比较复杂,按键数量很多时,采用编码键盘可以简化软件设计。但大多数智能仪器和电子产品的按键数目都不太多(20个以内),为了降低成本和简化电路通常采用非编码键盘。非编码键盘的接口电路有设计者根据需要自行决定,按键信息通过接口软件来获取。本课题需要的是16个按键,故选择用非编码键盘。

计算器输入数字和其他功能按键要用到很多按键,如果采用独立按键的方式,在这种情况下,编程会很简单,但是会占用大量的I/O 口资源,因此在很多情况下都不采用这种方式,而是采用矩阵键盘的方案。矩阵键盘采用四条I/O 线作为行线,四条I/O 线作为列线组成键盘,在行线和列线的每个交叉点上设置一个按键。这样键盘上按键的个数就为4×4个。这种行列式键盘结构能有效地提高单片机系统中I/O 口的利用率。

矩阵键盘的工作原理:计算器的键盘布局如图五所示:一般有16个键组成,在单片机中正好可以用一个P口实现16个按键功能,这种形式在单片机系统中也最常用。

具体电路连接如图五所示:

图五4*4键盘接口电路

3.2 显示电路的设计

当系统需要显示少量数据时,采用LED数码管进行显示是一种经济实用的方法。数码管显示有静态显示和动态显示两种方法。为了减少端口的使用,故选择动态显示。电路如下图六所示:

图六三位数码管的显示电路

四、软件设计

在十进制加法计算器的软件规划要求下,简易计算器的程序主要包

括以下功能模块:(1)主模块,为系统的初始化。(2)显示与读键模块,分为判键程序段、运算操作子程序、显示子程序等部分;

4.1 系统设计

(一)系统模块图

单片机

输入模块运算模块

显示模块

图六系统模块图

此系统包括输入、运算和显示模块,由单片机控制。其中通过输入键盘模块将数字0~9和运算符号“+”、“-”、“*”、“/”输入单片机进行运算;运算模块分别根据输入的运算符进行加减乘除运算;显示模块将运算后的数值通过动态扫描使之在数码管上输出。

(二)系统总流程图

主程序主要是用来进行初始化的,调用其他子程序,清空各个标志位,清空缓存区,读取键码,判断功能,在LED上作出回应,主程序流程图如图六所示。

(1)数字送显示缓冲程序设计

简易计算器所显示的数值最大位三位。要显示数值,先判断数值大小和位数,如果是超过三位或大于255,将不显示数字。可重新输入数字,再次计算。(2)运算程序的设计

首先初始化参数,送LED三位显示“0”,其它位不显示。然后扫描键盘看是否有键输入,若有,读取键码。判断键码是数字键、清零键还是功能键,是数值键则送LED显示并保存数值,是清零键则做清零处理,是功能键则又判断是“=”还是运算键,若是“=”则计算最后结果并送LED显示,若是运算键则保存相对运算程序的首地址。

图七 主程序流程图

初始化参数

清零键

LED 显示

输入数值 读取键值

状态清零

数值送显示缓存

开始

按键输入?

分析键值

数字键 等待数值输入

结果送显示缓存

保存结果和功能键

根据上次功能键和输入的数据计算结果

功能键

是数字键

是清零键

是功能键

4.2 显示与按键设计

(一)LED显示程序设计

LED显示器由七段发光二极管组成,排列成8字形状,因此也称为七段LED显示器。为了显示数字或符号,要为LED显示器提供代码,即字形代码。七段发光二极管,再加上一个小数点位,共计8段,因此提供的字形代码的长度正好是一个字节。简易计算器用到的数字0~9的共阳极字形代码如下表:

显示字型g f e d c b a段码

001111110c0h

100001100f9h

210110110a4h

310011110b0h

4110011099h

5110110192h

6111110182h

700001110f8h

8111111180h

9110111190h

表一共阳极数码管段码对照表

(二)读键子程序设计

为了实现键盘的数据输入功能和命令处理功能,每个键都有其处理子程序,为此每个键都对应一个码——键码。为了得到被按键的键码,现使用行扫描法识别按键。其程序框图如图八:

读键程序使用的是反转法读键,不管键盘矩阵的规模大小,均进行两次读键。第一次所有列线均输出低电平,从所有读入键盘信息(行信息);第二次所有行线均输出低电平,从所有行线读入键盘信息(列信息)。将两次读键信息进行组合就可以得到按键的特征编码,然后通过查表得到按键的顺序编码。将各特征编码按希望的顺序排成一张表,然后用当前读得的特征码来查表。当表中有该特征码时,它的位置就是对应的顺序编码;当表中没有该特征码时,说明这是一个没有定义的键码,与没有按键(0FFH)同等看待。

图八计算键值子程序流程图

五、调试与仿真

下面用KEIL uVision3与proteus仿真软件介绍十进制加法计算器的仿真与调试。

5.1 Keil C51单片机软件开发系统

(一)系统的整体结构

C51工具包的整体结构中,其中uVision是C51 for Windows的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。然后分别由C51编译器编译生成目标文件(.OBJ)。目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目

标板进行调试,也可以直接写入程序存贮器如EPROM中。

(二)采用KEIL 开发的89c51单片机应用程序步骤:

1. 在uVision 集成开发环境中创建新项目(Project),扩展文件名为.UV2,并为该项目选定合适的单片机CPU器件(本设计采用ATMEL 公司下的AT89C51)

2. 用uVision 的文本编辑器编写源文件,可以是汇编文件(.ASM),也可以使C语言文件(扩展名.C),并将该文件添加到项目中去。一个项目文件可以包含多个文件,除了源程序文件外,还可以是库文件、头文件或文本说明文件。

3. 通过uVision 3 的相关选择项,配置编译环境、连接定位器以及Debug 调试器的功能。

4. 对项目中的源文件进行编译连接,生成绝对目标代码和可选的HEX文件,如果出现编译连接错误则返回到第2步,修改源文件中的错误后重构整个项目。

5. 对没有语法错误的程序进行仿真调试,调试成功后将HEX文件写入到单片机应用系统的ROM中。

5.2 proteus的操作

(一)硬件电路图的接法操作

1.放置选择(删除)元器件

2.移动元器件

3.缩放视图

4.连接导线

5.仿真,调试

(二)单片机系统PROTEUS设计与仿真过程

Proteus强大的单片机系统设计与仿真功能,使它可成为单片机系统应用开发和改进手段之一。全部过程都是在计算机上通过Proteus来完成的。其过程一般也可分为三步:

1.在ISIS平台上进行单片机系统电路设计、选择元器件、接插件、连接电路和电气检测等,简称Proteus电路设计。

2.在Keil平台上进行单片机系统程序设计、编辑、汇编编译、代码级调试,最后生成目标代码文件(*.hex)。简称Proteus源程序设计和生成目标代码文件。

3.在ISIS平台上将目标代码文件加载到单片机系统中,并实现单片机系统的实时交互、协同仿真。它在相当程度上反映了实际单片机系统的运行情况。简称Proteus仿真。

(三) Proteus中课程设计的仿真结果

在Proteus中将硬件电路全部接好以后,将Keil中生成的.hex文件导入到单片机中,点击开始仿真按钮,电路开始仿真。可以观察到:数码管显示“000”;分别依次按下按键“5”、“+”、“6”和“=”,可以看到数码管显示“11”;也可以分别调试其它功能键,结果发现调试结果与预期的理论值相吻合,即本次课设已成功。

总的仿真原理电路图见附录1图九。

六、心得体会

为期一周的单片机课程设计终于结束了,通过紧张的工作,完成了我们的设计任务-十进制加法计算器。总的来说,这次课程设计是比较成功的。当然,这其中也经历了许多坎坷,但是在我的坚持不懈下,在老师的细心指导下,在同学们的热情帮助下,最终克服了种种困难,取得了成功。

刚开始接到这个计算器的课程设计任务时,因为以前做过类似的题目,于是在脑海中初步构建了编写程序的一些控制程序。但是由于缺乏编写大量程序的经验,不能如行云流水般的将全部的各部分代码写出,于是去网上查找相关资料,了解计算器的输入控制原理、运算处理以及显示的原理。了解之后自己尝试编写程序,在此过程中,其中键盘扫描和动态扫描显示扫描程序困扰了我很久,经过三四天的辛苦工作,终于初步把所需要的程序编好了,于是就用Keil uversion3进行仿真,在仿真期间也发现了许多错误,基本上都是平日容易犯的错误,比如忘记了子程序标号、死循环程序、标点符号的漏写等。经过反复的编译差错,仿真编译通过后,于是开始在Proteus中连硬件电路,全部接完电路之后将Keil生成的.Hex文件导入进行仿真,发现软件与硬件不能够对应协调工作,于是分别对软件和硬件进行检查,经过反复的仿真调试,并且在同学的帮助和自己对每个子程序进行仿真观察下,终于在课设快结束时成功的调试出结果了。这就是我这一周课设的经过,看似简单,过程却曲折艰辛。

通过这次课程设计,我进一步加深了对电子自动控制的了解。并进一步熟练了对Keil和Proteus软件的操作。在编写程序的过程中,遇到了很多问题,使我发现自己以前学习上存在的不足,对以前所学过的知识理解得不够深刻,掌握得不够牢固,对单片机汇编语言掌握得不够好。通过与同学探讨和请教老师,终于把问题都解决了,并加深了对计算器工作的原理的了解。同时也掌握了做课程设计的一般流程,为以后的设计积累了一定的经验。做课程设计时,先查阅相关知识,把原理吃透,确定一个大的设计方向,在按照这个方向分模块的把要实现的功能用流程图的形式展示。学会了怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪。总之,通过这次的设计,进一步了解了单片微型计算机及应用原理,收获很大,对软件编程、排错调试、查阅资料等方面得到较全面的锻炼和提高。

同时通过本次课程设计的学习,掌握了一种系统的研究方法,可以进行一些简单的编程,我还深深的体会到设计课的重要性和目的性所在。为了完成项目,在网络上找到了许多相关的资料,大大扩充自己的知识面,使许多以前想解决却无法解决的困难迎刃而解。将书本上的理论知识和实际有机地结合起来,从理论中得出结论。锻炼了实际分析问题和解决问题的能力,提高了适应实际的能力,为今后的学习和实践打下了良好的基础。此次课设还巩固和综合运用所学过的原理知识,从而提高自己的实际动手能力和独立思考的能力。

参考文献

[1]周航慈.单片机应用程序设计技术(修订版).北京航空大学出

版社

[2] 张志良.单片机原理与控制技术.第2版. 机械工业出版社

[3] 康华光.电子技术基础(第5版). 高等教育出版社出版,2006

[4]蒋力培.单片微机系统实用教程(第1版).机械工业出版社

[5] 姜志海、刘连鑫.单片微型计算机原理及应用.电子工业出版社,2011

附录 1 系统硬件电路图

图九总电路原理图

附录2 程序清单

YJ EQU 50H ;结果存放

YJ1 EQU 51H ;中间结果存放

GONG EQU 52H ;功能存放

ORG 00H

START: MOV R3,#0 ;初始化显示为空

MOV GONG,#0

MOV 32H,#00H

MOV 33H,#00H

MOV 34H,#00H

MLOOP: CALL DISP ;调显示子程序

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

NEXT13: CJNE A,#13,NEXT14

LJMP E2

NEXT14: CJNE A,#14,NEXT15

LJMP E2

NEXT15: LJMP E3 ;判断是否清除键

E1: CJNE R3,#1,N1 ;判断第几次按键LJMP E11 ;为第一个数字

N1: CJNE R3,#2,N2

LJMP E12 ;为第二个数字

N2: CJNE R3,#3,N3

LJMP E13 ;为第三个数字

N3: LJMP E3 ;第四个数字转溢出E11: MOV R4,A ;输入值暂存R4

MOV 34H,A ;输入值送显示缓存

MOV 33H,#00H

MOV 32H,#00H

LJMP MLOOP ;等待再次输入

E12: MOV R7,A ;个位数暂存R7 MOV B,#10

MOV A,R4

MUL AB ;十位数

ADD A,R7

MOV R4,A ;输入值存R4

MOV 32H,#00H ;输入值送显示缓存

MOV 33H,34H

MOV 34H,R7

LJMP MLOOP

E13: MOV R7,A

MOV B,#10

MOV A,R4

MUL AB

JB OV,E3 ;输入溢出

ADD A,R7

JB CY,E3 ;输入溢出

MOV R4,A

MOV 32H,33H ;输入值送显示缓存

MOV 33H,34H

MOV 34H,R7

LJMP MLOOP

E3: MOV R3,#0 ;按键次数清零

MOV R4,#0 ;输入值清零

MOV YJ,#0 ;计算结果清零

MOV GONG,#0 ;功能键设为零

MOV 32H,#00H ;显示清空

MOV 33H,#00H

MOV 34H,#00H

LJMP MLOOP

E2: MOV 34H,#00H

MOV 33H,#00H

MOV 32H,#00H

MOV R0,GONG ;与上次功能键交换

MOV GONG,A

MOV A,R0

CJNE A,#10,N21 ;判断功能键

LJMP JIA ;"+"

N21: CJNE A,#11,N22

LJMP JIAN ;"-"

N22: CJNE A,#12,N23

LJMP CHENG ;"*"

N23: CJNE A,#13,N24

LJMP CHU ;"/"

N24: CJNE A,#0,N25

LJMP FIRST ;首次按功能键

N25: LJMP DEN ;"="

N4: LJMP E3

FIRST: MOV YJ,R4 ;输入值送结果

MOV R3,#0 ;按键次数清零

LJMP DISP1 ;结果处理

JIA: MOV A,YJ ;上次结果送累加器

ADD A,R4 ;上次结果加输入值

JB CY,N4 ;溢出

MOV YJ,A ;存本次结果

MOV R3,#0 ;按键次数清零

LJMP DISP1

JIAN: MOV A,YJ

SUBB A,R4 ;上次结果减输入值

JB CY,N4 ;负数溢出

MOV YJ,A

MOV R3,#0

LJMP DISP1

CHENG: MOV A,YJ

MOV B,A

MOV A,R4

MUL AB ;上次结果乘输入值

JB OV,N4 ;溢出

MOV YJ,A

LJMP DISP1

CHU: MOV A,R4

MOV B,A

MOV A,YJ

DIV AB ;上次结果除输入值

MOV YJ,A

MOV R3,#0

LJMP DISP1

DEN: MOV R3,#0

LJMP DISP1

DISP1: MOV B,#10

MOV A,YJ ;结果送累加器

DIV AB ;结果除10

MOV YJ1,A ;暂存"商"

MOV A,B ;取个位数

MOV 34H,A ;个位数送显示缓存

MOV A,YJ1

JZ DISP11 ;结果是否为一位数

MOV B,#10

MOV A,YJ1

DIV AB

MOV YJ1,A

MOV A,B

MOV 33H,A ;十位送显示缓存

MOV A,YJ1

JZ DISP11 ;结果是否为二位数

MOV 32H,A ;百位数送显示缓存DISP11: LJMP MLOOP

DISP: MOV R0,#34H

DIR1: MOV DPTR,#SEGTAB

MOV A,@R0

MOVC A,@A+DPTR

MOV P0,A

CJNE R0,#34H,DIR2

SETB P2.0

CALL D1MS

CLR P2.0

DEC R0

SJMP DIR1

DIR2: CJNE R0,#33H,DIR3

SETB P2.1

CALL D1MS

CLR P2.1

DEC R0

SJMP DIR1

DIR3: SETB P2.2

CALL D1MS

CLR P2.2

RET

D1MS: MOV R7,#02H

DMS: MOV R6,#0F0H

DJNZ R6,$

DJNZ R7,DMS

RET

SEGTAB: DB 0C0H, 0F9H, 0A4H, 0B0H

DB 99H, 92H, 82H, 0F8H

DB 80H, 90H, 88H, 83H

DB 0C6H, 0A1H, 86H, 8EH

TESTKEY:ACALL DISP

MOV P1,#0FH ;读入键状态

MOV A,P1

CPL A

ANL A,#0FH ;高四位不用

RET

KEYTABLE:

DB 0EEH,0EDH,0DDH,0BDH ;键码定义

DB 0EBH,0DBH,0BBH,0E7H

DB 0D7H,0B7H,0DEH,0BEH

DB 07EH,07DH,07BH,077H

GETKEY: MOV R6,#10 ;读键子程序

ACALL DELAY

MOV P1,#0FH

MOV A,P1

CJNE A,0FH,K12

LJMP MLOOP

K12: MOV B,A

MOV P1,#0EFH

MOV A,P1

CJNE A,#0EFH,K13

MOV P1,#0DFH

MOV A,P1

CJNE A,#0DFH,K13

MOV P1,#0BFH

MOV A,P1

CJNE A,#0BFH,K13

MOV P1,#07FH

MOV A,P1

CJNE A,#07FH,K13

LJMP MLOOP

K13: ANL A,#0F0H

ORL A,B

MOV B,A

MOV R1,#16

MOV R2,#0

MOV DPTR,#KEYTABLE

K14: MOV A,R2

MOVC A,@A+DPTR

CJNE A,B,K16

MOV P1,#0FH

K15: MOV A,P1

CJNE A,#0FH,K15

MOV R6,#10

ACALL DELAY

MOV A,R2

RET

K16: INC R2

DJNZ R1,K14

AJMP MLOOP

;10ms延时子程序

DELAY: MOV R7,#10

TS1: MOV R6,#0FFH

TS2: NOP

NOP

DJNZ R6,TS2

DJNZ R7,TS1

RET

END

附录三原器件

1个A T89C51

17个普通开关1个51芯片插槽两个30pF瓷片电容电容3个一千欧电阻1个10uf电解电容

12MHZ晶振一个

1个100欧和1个10K电阻

1个四位七段共阳极数码管

1块万能板

AT89C51单片机简易计算器的设计

AT89C51单片机简易计算器的设计 单片机的出现是计算机制造技术高速发展的产物,它是嵌入式控制系统的核心,如今,它已广泛的应用到我们生活的各个领域,电子、科技、通信、汽车、工业等。本设计是基于51系列单片机来进行的数字计算器系统设计,可以完成计算器的键盘输入,进行加、减、乘、除六位数范围内的基本四则运算,并在LCD上显示相应的结果。设计电路采用AT89C51单片机为主要控制电路,利用MM74C922作为计算器4*4键盘的扫描IC读取键盘上的输入。显示采用字符LCD静态显示。软件方面使用C语言编程,并用PROTUES仿真。 一、总体设计 根据功能和指标要求,本系统选用MCS-51系列单片机为主控机。通过扩展必要的外围接口电路,实现对计算器的设计。具体设计如下:(1)由于要设计的是简单的计算器,可以进行四则运算,为了得到较好的显示效果,采用LCD 显示数据和结果。 (2)另外键盘包括数字键(0~9)、符号键(+、-、×、÷)、清除键和等号键,故只需要16 个按键即可,设计中采用集成的计算键盘。 (3)执行过程:开机显示零,等待键入数值,当键入数字,通过LCD显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当再键入数值后将显示键入的数

值,按等号就会在LCD上输出运算结果。 (4)错误提示:当计算器执行过程中有错误时,会在LCD上显示相应的提示,如:当输入的数值或计算得到的结果大于计算器的表示范围时,计算器会在LCD上提示溢出;当除数为0时,计算器会在LCD 上提示错误。 系统模块图: 二、硬件设计 (一)、总体硬件设计 本设计选用AT89C51单片机为主控单元。显示部分:采用LCD 静态显示。按键部分:采用4*4键盘;利用MM74C922为4*4的键盘扫描IC,读取输入的键值。 总体设计效果如下图:

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

目录 引言 (1) 第一章设计原理及要求 (2) 1.1设计方案的确定 (2) 1.2系统的设计方案 (2) 1.3系统的设计要求 (2) 第二章硬件模块设计 (4) 2.1单片机AT89C51 (4) 2.1.1 AT89C51芯片的特点 (5) 2.1.2 管脚说明 (5) 2.1.3 振荡器特性 (7) 2.1.4 芯片擦除 (7) 2.2键盘控制模块 (7) 2.2.1 矩阵键盘的工作原理 (8) 2.2.2 键盘电路主要器件介绍 (8) 2.3LCD显示模块 (10) 2.3.1 显示电路 (11) 2.3.2 LCD1602主要技术参数 (11) 2.3.3 引脚功能说明 (11) 2.4运算模块(单片机控制) (12) 第三章软件设计 (14) 3.1功能介绍 (14) 3.2系统流程图 (14) 3.3程序 (16) 第四章系统调试 (17) 4.1软件介绍 (17) 4.1.1 Keil uVision2仿真软件简介 (17) 4.1.2 protues简介 (17)

4.2软件调试 (18) 4.2.1 软件分析及常见故障 (18) 4.2.2 仿真结果演示 (20) 4.3硬件调试 (21) 结束语 (23) 参考文献 (24) 附录 (25) 致谢 (36)

引言 计算工具最早诞生于中国,中国古代最早采用的一种计算工具叫筹策,也被叫做算筹。这种算筹多用竹子制成,也有用木头,兽骨充当材料的,约二百七十枚一束,放在布袋里可随身携带。另外直到今天仍在使用的珠算盘,是中国古代计算工具领域中的另一项发明,明代时的珠算盘已经与现代的珠算盘几乎相同。 17世纪初,西方国家的计算工具有了较大的发展,英国数学家纳皮尔发明的“纳皮尔算筹”,英国牧师奥却德发明了圆柱型对数计算尺,这种计算尺不仅能做加、减、乘、除、乘方和开方运算,甚至可以计算三角函数、指数函数和对数函数。这些计算工具不仅带动了计算器的发展,也为现代计算器发展奠定了良好的基础,成为现代社会应用广泛的计算工具。1642年,年仅19岁的法国伟大科学家帕斯卡引用算盘的原理,发明了第一部机械式计算器,在他的计算器中有一些互相联锁的齿轮,一个转过十位的齿轮会使另一个齿轮转过一位,人们可以像拨电话号码盘那样,把数字拨进去,计算结果就会出现在另一个窗口中,但是它只能做加减运算。1694年,莱布尼兹在德国将其改进成可以进行乘除的计算。此后,一直到20世纪50年代末才有电子计算器的出现。

51单片机简易计算器程序

#include <reg51.h>#include <intrins.h> #include <ctype.h> #include <stdlib.h> #define uchar unsigned char #define uint unsigned int uchar operand1[9], operand2[9]; uchar operator; void delay(uint); uchar keyscan(); void disp(void); void buf(uint value); uint compute(uint va1,uint va2,uchar optor); uchar code table[] = {0xc0,0xf9,0xa4,0xb0,0x99, 0x92,0x82,0xf8,0x80,0x90,0xff}; uchar dbuf[8] = {10,10,10,10,10,10,10,10}; void delay(uint z) { uint x,y; for(x=z;x>0;x--)

for(y=110;y>0;y--); } uchar keyscan() { uchar skey; P1 = 0xfe; while((P1 & 0xf0) != 0xf0) { delay(3); while((P1 & 0xf0) != 0xf0) { switch(P1) { case 0xee: skey = '7'; break; case 0xde: skey = '8'; break; case 0xbe: skey = '9'; break; case 0x7e: skey = '/'; break; default: skey = '#'; }

AT89C51单片机C实现简易计算器

AT89C51单片机简易计算器的设计 一、总体设计 根据功能和指标要求,本系统选用MCS-51系列单片机为主控机。通过扩展必要的外围接口电路,实现对计算器的设计。具体设计如下:(1)由于要设计的是简单的计算器,可以进行四则运算,为了得到较好的显示效果,采用LCD 显示数据和结果。 (2)另外键盘包括数字键(0~9)、符号键(+、-、×、÷)、清除键和等号键,故只需要16 个按键即可,设计中采用集成的计算键盘。 (3)执行过程:开机显示零,等待键入数值,当键入数字,通过LCD显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当再键入数值后将显示键入的数值,按等号就会在LCD上输出运算结果。 (4)错误提示:当计算器执行过程中有错误时,会在LCD上显示相应的提示,如:当输入的数值或计算得到的结果大于计算器的表示范围时,计算器会在LCD上提示溢出;当除数为0时,计算器会在LCD 上提示错误。 系统模块图:

二、硬件设计 (一)、总体硬件设计 本设计选用AT89C51单片机为主控单元。显示部分:采用LCD 静态显示。按键部分:采用4*4键盘;利用MM74C922为4*4的键盘扫描IC,读取输入的键值。 总体设计效果如下图:

(二)、键盘接口电路 计算器输入数字和其他功能按键要用到很多按键,如果采用独立按键的方式,在这种情况下,编程会很简单,但是会占用大量的I/O 口资源,因此在很多情况下都不采用这种方式,而是采用矩阵键盘的方案。矩阵键盘采用四条I/O 线作为行线,四条I/O 线作为列线组成键盘,在行线和列线的每个交叉点上设置一个按键。这样键盘上按键的个数就为4×4个。这种行列式键盘结构能有效地提高单片机系统中I/O 口的利用率。 矩阵键盘的工作原理: 计算器的键盘布局如图2所示:一般有16个键组成,在单片机中正好可以用一个P口实现16个按键功能,这种形式在单片机系统中也最常用。 图 2 矩阵键盘布局图 矩阵键盘内部电路图如图3所示:

单片机简易计算器设计

单片机简易计算器设计 Company Document number:WTUT-WT88Y-W8BBGB-BWYTT-19998

一、设计要求 1.设计4*4的键盘,其中10个数字键0~9,其余6个为“+”“-”“*”“/”“=”和“C” 2.设计2位LED接口电路 3.实现1位数的简单运算 二、硬件系统设计 1、LED接口电路 简易计算器需要2位8段码LED显示电路。用8031单片机经8255A扩展2位8段码LED显示器,用8255A的A口作为段码(字形代码)数据口,PB0和PB1作为位控制端口。在位控制口加集电极开路的反相高压驱动器74LS06以提供驱动LED显示器所需的足够大的电流,然后接至各数码显示器的共阴极端。同理,在段码数据口集电极开路的正相高压驱动器74LS07提供足够大的电流,然后接到数码显示器的各段。逻辑电路结构如下:

2、键盘接口电路 简易计算器需要4*4的行列式键盘。用8031单片机经8255A扩展4*4行列式键盘,8255A的B口和C口用于扩展键盘接口,B口高4位作为输出口,C口低4位作为输入口。逻辑电路结构如下: 3、计算器逻辑电路图 将LED接口电路和键盘接口电路结合到一起就是简易计算器的逻辑电路图,如下: 三、软件设计 1、LED显示程序设计 LED显示器由七段发光二极管组成,排列成8字形状,因此也成为七段LED显示器,器排列形状如下图所示:

为了显示数字或符号,要为LED显示器提供代码,即字形代码。七段发光二极管,再加上一个小数点位,共计8段,因此提供的字形代码的长度正好是一个字节。简易计算器用到的数字0~9的共阴极字形代码如下表: 0~9七段数码管共阴级字形代码 2位LED显示的程序框图如下: 2、读键输入程序设计 为了实现键盘的数据输入功能和命令处理功能,每个键都有其处理子程序,为此每个键都对应一个码——键码。为了得到被按键的键码,现使用行扫描法识别按键。其程序框图如下: 3、主程序设计 (1)数值送显示缓冲程序设计 简易计算器所显示的数值最大位两位。要显示数值,先判断数值正负,如果是负值,则符号位显示“-”,然后将数值除以10,余数送显最最低位,判断商是否为0,若为0则返回,若不为0,则将商除以10,将余数送显高位。程序框图如下: (2)运算主程序设计

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

2013 - 2014 学年_一_学期 山东科技大学电工电子实验教学中心 创新性实验研究报告 实验项目名称__基于51单片机的简易计算器设计_ 2013 年12 月27 日

四、实验内容

2、实验内容 (一)、总体硬件设计 本设计选用AT89C52单片机为主控单元。显示部分:采用六位LED动态数码管显示。按键部分:采用2*8键盘;利用2*8的键盘扫描子程序,读取输入的键值。 (二)、键盘接口电路 计算器输入数字和其他功能按键要用到很多按键,如果采用独立按键的方式,在这种情况下,编程会很简单,但是会占用大量的I/O 口资源,因此在很多情况下都不采用这种方式,而是采用矩阵键盘的方案。矩阵键盘采用两条I/O 线作为行线,八条I/O 线作为列线组成键盘,在行线和列线的每个交叉点上设置一个按键。这样键盘上按键的个数就为2×8个。这种行列式键盘结构能有效地提高单片机系统中I/O 口的利用率。 矩阵键盘的工作原理: 计算器的键盘布局如图2所示:一般有16个键组成,在单片机中正好可以用一个P口和另一个P口的两个管脚实现16个按键功能,这种形式在单片机系统中也最常用。 矩阵键盘布局图: 矩阵键盘内部电路图如下图所示:

(三)、LED显示模块 本设计采用LED数码显示来显示输出数据。通过D0-D7引脚向LED写指令字或写数据以使LED实现不同的功能或显示相应数据。 (四)运算模块(单片机控制) MCS-51 单片机是在一块芯片中集成了CPU、RAM、ROM、定时器/计数器和多功能I/O等一台计算机所需要的基本功能部件。如果按功能划分,它由如下功能部件组成,即微处理器(CPU)、数据存储器(RAM)、程序存储器(ROM/EPROM)、并行I/O 口、串行口、定时器/计数器、中断系统及特殊功能寄存器(SFR)。 单片机是靠程序运行的,并且可以修改。通过不同的程序实现不同的功能,尤其是特殊的独特的一些功能,通过使用单片机编写的程序可以实现高智能,高效率,以及高可靠性!因此我们采用单片机作为计算器的主要功能部件,可以很快地实现运算功能。

51单片机简易计算器代码

#include"reg52.h" #define uchar unsigned char #define uint unsigned int sbit busy=P0^7; void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } char i,j,temp,num; long a,b,c; //a,第一个数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,0 x2b-0x30}; //按键显示编码表 sbit lcden=P2^2; sbit lcdwrite=P2^1; sbit lcdrs=P2^0; //lcd的写指令 void write_com(uchar com) { lcdrs=0; lcden=0; P0=com; delay(1); lcden=1; delay(1); lcden=0; } //lcd的写数据 void write_date(uchar da) { lcdrs=1; lcden=0; P0=da; delay(1); lcden=1; delay(1); lcden=0; } //初始化

void init() //初始化 { uchar num; num=-1; lcdwrite=0; lcden=0; write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01); delay(500);//延时0.5s write_com(0x01); i=0; j=0; a=0; //第一个参与运算的数 b=0; //第二个参与运算的数 c=0; flag=0; //flag表示是否有符号键按下, fuhao=0; // fuhao表征按下的是哪个符号 } void keyscan() // 键盘扫描程序 { P3=0xfe; if(P3!=0xfe) { delay(10); //延迟20ms if(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==1)//确认一次计算完毕,清屏 { write_com(0x01);

单片机设计简易计算器

简易计算器 Simply Calculator 1 设计思想 此计算器有键盘部分、单片机、显示部分三部分组成,键盘部分主要完成输入功能;单片机主要完成数据处理功能,包括确定按键,完成运算,以及输出数据;显示器部分主要完成单片机输出的显示。 本设计的思路是利用单片机性能好,稳定性强的优点来实现系统的运行。设计大致可以分为三个步骤:第一步,硬件的选取和设计;第二步,程序的设计和调试;第三步,Protues 系统仿真。 硬件是设计的骨骼,不仅关系到设计总体方向的确定,还要综合考虑节能,环保,以及稳定性和经济性等各种因素。因此需要花费大量的时间。硬件的选取最为重要,包括选用的芯片,显示设备的选取,输入设备的选取等。本设计是通过单片机来实现的,因此选用了ATMEGA16单片机作为主体,输入设备选用矩阵键盘。程序是硬件的灵魂,是实现设计的中心环节。本设计使用的程序语言是C语言,在“ICC AVR”中运行,调试,直到运行出正确结果,然后输出后缀名为.HEX格式的文件,以备在Protues中仿真使用。程序是设计的关键,程序的调试需要大量的时间,耐心,还够要有足的细心才能成功。本设计中就出现了大量的错误,经过认真修改,最终才能运行出正确结果。最后的系统仿真是设计是否成功的验证,是设计不可缺少的重要环节。这就要求能掌握Protues的一些基本操作。2原理分析 2.1矩阵键盘的扫描 图2.1 矩阵键盘图

如图2.1所示,单片机的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被拉低。这是判断有无键盘按下的过程,当我们判断是那一个键盘按下时,我们首先设置8个I/O口为输出,输出为FE,即,PD0为低电平,其他全为高电平,然后我们设置PD4—PD7为输入,如果M1被按下,则PD4会比被拉为低电平,此时会变成EE,同理可以知道M2被按下时会变为DE,M3被按下时会变为BE,M4被按下时会变为7E。同理我们可以设置8个I/O口输出FD来检测M5—M8是否被按下,设置8个I/O口输出FC来来检测M9—M12,设置8个I/O口输出F7来检测M13—M16,如果M1—M4没有被按下,就继续检测M4—M8,一次类推,就可以检测出16个按键了。在这次设计中,16个按键M1—M16所对应检测值分别为:EE,DE,BE,7E,ED,DD,BD,7D,EB,DB,BB,7B,E7,D7,B7,77。 2.2 数字显示与计算 本次设计选用的显示器是1602液晶显示器,此液晶显示器能显示32个字符,VSS接地,VDD接电源正极,E为时使能信号,R/W为读写选择端(H/L),RS为数据/命令选择端(H/L),D0—D7为数据I/O口。 首先我们初始化液晶显示器,然后显示出第一个被按下的数,并且使光标右移,如果有第二个数按下,则据继续显示,以此类推,然后把所有显示出来的数换算成一个数,如果按下“+”号,则显示出“+”,并且同理显示出“+”号后面按下的数字,然后调用加子程序,运算出结果,如果按下的是“-”,则调用减子程序,如果按下“*”,则调用乘子程序,如果按下“/”,则调用除子程序。然后再调用显示结果子程序,显示出结果。

51单片机的简易计算器要点

华侨大学厦门工学院单片机控制系统课程设计报告 题目:基于51单片机的简易计算器 专业、班级: 学生姓名: 学号: 指导教师: 2014年 5 月20 日

目录 一、设计任务目的 (2) 二、计任务要求 (2) 三、设计方案选取与论证 (2) 四、电路设计 (3) 4.1总体电路图 (3) 4.2 硬件设计 (4) 4.2.1 矩阵按键 (4) 4.2.2 AT89C52主芯片 (4) 4.2.3 LCD显示 (7) 4.3软件设计 (7) 4.3.1 键盘模块 (8) 4.3.2 计算模块 (8) 4.3.3 显示模块 (9) 五.制作及调试过程 (10) 5.1 制作过程 (10) 5.2 软件调试 (10) 5.3 硬件调试 (11) 结论 (12) 致谢 (13) 参考文献 (13)

一、设计任务目的 设计一个计算器,可以进行简易的四则运算。 二、计任务要求 1、能够进行简单的四则运算,包括带负数的运算。用LCD显示数据和结果(6位即可) 2、采用键盘输入方式,键盘包括数字键(0~9)、符号(+、-、×、÷)、清除键(c)和等号键(=),故只需要16 个按键即可。 3、在执行过程中,开机显示零,等待键入数值,当键入数字,通过LCD显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当再键入数值后将显示键入的数值,按等号就会在LCD上输出运算结果。 4、错误提示:当计算器执行过程中有错误时,会在LCD上显示相应的提示,如:当输入的数值或计算得到的结果大于计算器的表示范围时,计算器会在LCD 上提示OV;当除数为0时,计算器会在LCD上提示ERR。 三、设计方案选取与论证 1、单片机部分 单片机以AT89C51来做为核心元器件。 2、按键部分 设计思路:采用4*4行列式键盘,分别设定数字键和功能键,采用查询方式,每次有键按下时,先判断是实数字键还是功能键。但是这种方式采用了大量的I/O口线。 3、显示部分 在单片机应用系统中,使用的显示器主要有LED(发光二极管显示器)、LCD液晶显示器以及CRT接口。 思路:使用液晶显示器来显示。液晶是介于固态和液态间的有机化合物,将其加热会变成透明液态,冷却后变成结晶的混浊固态。在电的作用下,产生冷热变化,从而影响它的透光性,来达到显示的目的。LCD还具有以下几个优点(1)低压、微功耗(2)显示信息量大(3)长寿命(4)无辐射,无污染。 其系统结框图如下:

51单片机简易计算器 (可算小数)

51单片机简易计算器

#include #include #define uchar unsigned char #define uint unsigned int sbit beep=P2^3; sbit dula=P2^6; sbit wela=P2^7; sbit rw=P1^1; sbit rs=P1^0; sbit lcden=P2^5; void yunsuan(); void keyinput(char s); void write_data(char ddata);

void write_com(char command); void display(long a); void init(); void dealerror(); void dataoverflow(); void welcome(); char code table1[]={0xee,0xde,0xbe,0x7e, 0xed,0xdd,0xbd,0x7d, 0xeb,0xdb,0xbb,0x7b, 0xe7,0xd7,0xb7,0x77}; char code table2[]="789/456*123-.0=+"; char j,k,temp,temp1,temp2,key,mchar,m,flag2=0,flag3=0; long x,y,num; int operators,input,iny; char error[5]="error"; char overflow[8]="overflow"; char welcome_[16]="welcome to use !"; void delay(uint x)//延时 { uint a,b; for(a=x;a>0;a--)

单片机简易计算器设计(汇编语言)

KEYBUF EQU 40H ;键号存放单元 ORG 0000H LJMP MAIN ORG 0030H MAIN: MOV KEYBUF,#0 ;初始键号设位0,也可以为任意值 MOV R0,#30H ;显示首地址 MOV R2,#0CH ;计算数据存放单元个数 CLR A QING: MOV @R0,A;将数据存放单元清零 INC R0 DJNZ R2,QING MOV P0,#8FH ;关闭显示 MOV R1,#30H ;将显示首地址存放R1里 ;=============================================== ;五位无符号显示子程序 DIS1: MOV R0,#30H ;把显示数据第一位放在R0里 MOV R2,#04H ;把显示的位码放在R2里 MOV R3,#05H ;把显示的长度放在R3里 DIS2: MOV A,@R0 ANL A,#0FH ;屏蔽显示数据的高四位 MOV B,A MOV A,R2 ANL A,#0FH ;屏蔽位码的高四位 SW AP A ORL A,B MOV P0,A;送总显示数据到P0显示 LCALL DELY4ms ;调用延时4ms INC R0 ;取下一个显示数据 DEC R2 DJNZ R3,DIS2 ;四位显示晚后重新开始显示 ;=================================================== ;键盘扫描子程序 WAIT: MOV P1,#0FFH ;P1口送高电平 CLR P1.0 ;第一行清零 MOV A,P1 ;读P1口 ANL A,#0F0H ;低位屏蔽 XRL A,#0F0H ;判断低位是否有低电平,即判断是否有按键按下 JZ NOKEY1 ;地位有低电平继续扫描,否者跳到第而行去扫描 LCALL DELY10ms ;延时10ms去抖在进行判断是否有按键按下 MOV A,P1 ;继续读P1口 ANL A,#0F0H ;判断低位是否有低电平 CJNE A,#0E0H,NK1 ;如果扫描数据不为0E0H就转到NK1 MOV KEYBUF,#0 ;否者判断为0号键 AJMP DK ;转DK1查表程序

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

基于单片机的简易计算器设计 摘要 (2) 关键字:80C51 LCD1602 4*4矩阵键盘计算器 (2) 第一章绪论 (3) 1.1系统开发背景 (3) 1.2系统开发意义 (3) 1.3设计目的 (3) 1.4设计任务 (3) 第二章单片机发展现状 (4) 2.1目前单片机的发展状况 (4) 2.1.1单片机的应用场合 (4) 2.2计算器系统现状 (5) 2.3简易计算器系统介绍 (5) 第三章系统硬件设计及说明 (6) 3.1系统组成及总体框图 (7) 3.2AT89S52单片机介绍 (7) 3.3其它器件介绍及说明 (10) 3.3.1 LCD1602液晶显示 (10) 3.3.2 4*4矩阵扫描按键 (13) 第四章 PROTEUS模拟仿真 (14) 第五章系统硬件设计及说明 (16) 第六章软件设计 (17) 6.1汇编语言和C语言的特点及选择 (17) 6.2源程序代码 (17)

摘要 近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,但仅单片机方面的知识是不够的,还应根据具体硬件结构、软硬件结合,来加以完善。 计算机在人们的日常生活中是比较常见的电子产品之一。可是它还在发展之中,以后必将出现功能更加强大的计算机,基于这样的理念,本次设计主要以80C51单片机为控制芯片,用C语言进行编程实现,通过4*4矩阵键盘控制,输出用液晶屏LCD1602显示,该计算器可以实现一般的加减乘除四则混合运算。 关键字:80C51 LCD1602 4*4矩阵键盘计算器

单片机简易计算器课程设计

单片机简易计算器课程设计 课程设计 题目名称________________ 简易计算器设计____________ 课程名称_____________ 单片机原理及应用____________ 学生姓名________________

班级学号________________ 2018年6月20日

目录 一设计目的 (2) 二总体设计及功能介绍 (2) 三硬件仿真图 (3) 四主程序流程图 (4) 五程序源代码 (5) 六课程设计体会 (28)

设计目的 本设计是基于51系列单片机来进行的简单数字计算器设计,可以完成计算器的键盘输入,进行加、减、乘、除六位整数数范围内的基本四则运算,并在LED上显示相应的结果。软件方面使用C语言编程,并用PROTUE仿真。 二总体设计及功能介绍 根据功能和指标要求,本系统选用MCS-51 系列单片机为主控机,实现对计算器的设计。具体设计及功能如下: 由于要设计的是简单的计算器,可以进行四则运算,为了得到较好的显示效果,采用LED显示数据和结果; 另外键盘包括数字键(0?9)、符号键(+、-、x、十)、清除键和等号键,故只需要16个按键即可,设计中采用集成的计算键盘;

执行过程:开机显示零,等待键入数值,当键入数字,通过LED显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当再键入数值后将显示键入的数值,按等号就会在LED上输出运算结果。 三硬件仿真图 硬件部分比较简单,当键盘按键按下时它的那一行、那一列的端口为低电平。因此,只要扫描行、列端口是否都为低电平就可以确定是哪个键被按下。

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

摘要 近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,但仅单片机方面的知识是不够的,还应根据具体硬件结构、软硬件结合,来加以完善。 计算机在人们的日常生活中是比较常见的电子产品之一。可是它还在发展之中,以后必将出现功能更加强大的计算机,基于这样的理念,本次设计是用AT89S51单片机、LCD显示器、控制按键为元件来设计的计算器。利用此设计熟悉单片机微控制器及C语言编程,对其片资源及各个I/O端口的功能和基本用途的了解。掌握Microsoft Visual C++ 6.0应用程序开发环境,常用的LCD显示器的使用方法和一般键盘的使用方法。 关键词:51单片机;LCD;控制按键

目录 1 课程设计内容 (1) 1.1任务内容 (1) 1.2任务分析 (2) 2计算器设计基本原理 (3) 2.1 MCS-51系列单片机简介 (3) 2.2 74LS373简介 (7) 2.3 Intel 6264简介 (8) 2.4 LCD显示模块 (9) 2.5 运算模块 (10) 2.6键盘接口电路 (10) 3 主程序设计 (11) 4 硬件调试分析 (15) 5 系统仿真图 (16) 5.1 计算机硬件连线图 (17) 5.2 仿真结果 (17) 结论 (19) 参考文献 (20)

1. 课程设计内容 1.1 任务内容 当今社会,随着人们物质生活的不断提高,电子产品已经走进了家家户户,无论是生活或学习,还是娱乐和消遣几乎样样都离不开电子产品,大型复杂的计算能力是人脑所不能胜任的,而且比较容易出错。计算器作为一种快速通用的计算工具方便了用户的使用。计算器可谓是我们最亲密的电子伙伴之一。本设计着重在于分析计算器软件和开发过程中的环节和步骤,并从实践经验出发对计算器设计做了详细的分析和研究。 单片机由于其微小的体积和极低的成本,广泛的应用于家用电器、工业控制等领域中。在工业生产中。单片微型计算机是微型计算机的一个重要分支,也是颇具生命力的机种。单片微型计算机简称单片机,特别适用于控制领域,故又称为微控制器。 本系统就是充分利用了8051芯片的I/O引脚。系统以采用MCS-51系列单片机Intel8051为中心器件来设计计算器控制器,实现了能根据实际输入值显示并存储的功能,计算程序则是参照教材。至于位数和功能,如果有需要可以通过设计扩充原系统来实现。 根据功能和指示要求,本系统选用以MCS-51单片机为主控机。通过扩展必要的外围接口电路,实现对计算器的设计。 具体设计如下: 1、由于要设计的是简单的计算器,可以进行四则运算,为了得到教好的显示效果,采用LCD显示数据和结果。 2、另外键盘包括数字键(0-9)、符号键(+、-、*、/)、清除键和等号键,故只需要16个按键即可,设计中采用集成的计算机键盘。 3、执行程序:开机显示零,等待键入数值,当键入数字,通过LCD显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值后将显示键入的数值,按等号就会在LCD上输出运算结果。 4、错误提示:当单片机执行程序中有错误时,会在LCD上显示相应的提示,如:当输入的数值或计算器得到的结果大于计算器的显示范围时,计算器会在LCD上提示溢出;当除数为0时,计算器会在LCD上提示错误。

单片机C语言简易计算器

课程设计报告 课程名称单片机原理及应用设计题目简易计算器设计专业班级 姓名 学号

1.项目概述 中国古代最早采用的一种计算工具叫算筹。这种算筹多用竹子制成,也有用木头,兽骨充当材料的。约二百七十枚一束,放在布袋里可以随身携带。17世纪初,西方国家的计算工具有了较大的发展,英国数学家纳皮尔发明的“纳皮尔算筹”,英国牧师奥却德发明了圆柱形对数计算尺,这种计算尺不仅能做加减乘除,乘方,开方运算,甚至可以计算三角函数,指数函数和对数函数,这些计算工具不仅带动了计算器的发展,也为现代计算器发展奠定了良好的基础,成为现代社会应用广泛的计算工具。 2.项目要求 基于AT89C51单片机的简易计算器,设计要求如下: (1)计算器至少能正常显示8位数。 (2)开机时,显示“0” (3)计算器能对整数进行简单的加减乘除四则运算,在做除法时能自动舍去小数部分 (4)运算结果超过可显示的位数时能进行出错提示。 3.小组人员组成及分工

4.系统设计 1.框图设计 5.硬件设计 (1)电路原理图:

(2)元件清单: 6.软件设计(1)算法流程图: 主函数

显示函数 按键函数

(2)程序清单: #include /***按键程序***/ char keyscan(); /***显示程序***/ void display(); char dsp[9]={0,0,12,12,12,12,12,12,12}; //初始化显示数组 /***计算程序***/ void calculate(char k,char c1[8],char c2[8]); /***片选***/ unsigned char code Select[]= {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; /***码选***/ unsigned char code LED_CODES[]= {0xC0,0xF9,0xA4,0xB0,0x99, //0-4 0x92,0x82,0xF8,0x80,0x90, //5-9 0x86,0xAF,0xFF,0x7F,0xBF,}; //E,r,空格,.,- /***main函数***/ void main(void) { char i,j,k,c; char a[8],b[8]; /***定时1ms***/ TMOD=0; //TL0=-(1000/256); //TH0=-(1000%256); EA = 1; //总中断开关

单片机课程设计报告简易计算器

单片机实训报告 ———简易计算器 姓名 *** 学号 *** 专业 *** 学校 *** 指导教师 *** 实训时间 目录 中文摘要............................................................1关键词.............................................................1 1 实训任务.........................................................1 1.1 主要功能设计................................................1 1.2 任务目的....................................................1 2 整体设计方案.....................................................1 2.1 方案论证....................................................1 2.2 系统框图....................................................2

3 控制软件设计....................................................2 3.1 程序时序总图...............................................2 3.2 液晶显示软件设计............................................3 3.3 键盘输入软件设计...........................................5 3.4 计算函数设置...............................................7 4 软件调试........................................................8 个人小结...........................................................8参考文献...........................................................9附录...............................................................9

新基于51单片机的简易计算器

基于51单片机的简易计算器 1、前言: 本设计是基于51系列单片机来进行的数字计算器系统设计,可以完成计算器的键盘输入,进行加、减、乘、除基本四则运算,并在LCD上显示相应的结果;设计电路采用STC90C51单片机为主要控制电路,利用MM74C922作为计算器4*4键盘的扫描IC读取键盘上的输入;显示采用字符LCD静态显示;软件方面使用C语言编程,并用PROTUES仿真。 2、设计任务: 计算器软件程序要完成以下模块的设计:(1)键盘输入检测模块;(2)LCD显示模块;(3)算术运算模块;(4)错误处理及提示模块。 3、主体设计部分: (1)、系统模块图: (2)、系统总流程图:

4、硬件部分 单片机部分+矩阵键盘+1602显示

如图所示为简易计算器的电路原理图。P3口用于键盘输入,接4*4矩阵键盘,键值与键盘的对应表如表----所示,p0口和p2口用于显示,p2口用于显示数值的高位,po口用于显示数值的低位。 简易计算器电路原理图 矩阵键盘有16个按键,满足对简易计算器的计算实现,显示部分采用LCD1602,第一行显示计算的数值符号,第二行显示计算结果。

LCD显示模块: 本设计采用LCD液晶显示器来显示输出数据。通过D0-D7引脚向LCD写指令字或写数据以使LCD实现不同的功能或显示相应数据。 5、软件部分 #include #include #define uchar unsigned char sbit lcden=P2^7; sbit lcdrs=P2^6;

sbit lcdrw=P2^5; sbit lcdbf=P0^7; uchar temp,key,i,j,flag,fh,k; long a,b,c; uchar code table[]={1,2,3,0, 4,5,6,0, 7,8,9,0, 0,0,0,0}; uchar code table2[]="123+456-789*000/"; void delay(uchar ms) { uchar x,y; for(x=ms;x>0;x--) for(y=110;y>0;y--); } /*-------------对LCD1602的操作-----------*/ bit busy(void)//判断忙碌 {

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

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

课程设计(论文)说明书 题目:基于单片机简易计算器的设计院(系): 专业: 学生姓名:

学号: 指导教师: 职称: 2011年12月18日 摘要 简易计算器是一种非常广泛日常工具,对现代社会越来越流行。它可以进行一些简易的计算。本系统提供详细的时、分、秒、年、月、日的时间信息,同时还可进行简易的计算信息,还具有时间校准等功能。该电路采用AT89S52单片机作为核心,功耗小,能在3V的低压工作,电压可选用3~5V电压供电。本系统硬件部分由AT89S52单片机、LCD1602液晶屏、键盘、指示灯系统等部分构成。软件部分在keil环境下用C51语言编写,包括时间设置、时间显示、简易计算显示等。 关键字:AT89S52;液晶屏LCD1602;键盘 Abstract Simple calculator is a very broad everyday tool for modern society is more and more popular. It can carry on some simple calculation. This system provides detailed, minutes and seconds, year, month, day time information, and at the same time but also for simple calculation information, but also has time calibration etc. Function. This circuit AT89S52 SCM as the core, power consumption is small, can be in 3 V of low-pressure work, voltage can choose 3 ~ 5 V voltage power supply. This system hardware part AT89S52 SCM by LCD1602 LCD screen, keyboard, indicator system, part. Software in under the environment of keil with C51 language, including time set,

相关文档
相关文档 最新文档