嘉立创产业服务站群
发作品签到
专业版

四位数计算器

工程标签

121
0
0
0

简介

能进行四位数以内加减乘除计算的计算器

简介:能进行四位数以内加减乘除计算的计算器

开源协议

GPL 3.0

(未经作者授权,禁止转载)
创建时间:2025-06-11 11:46:33更新时间:2025-06-12 03:18:25

描述

单片机课程设计报告

基于单片机的简易计算器

学生姓名:徐梦杰 吴恩昱 张春雷 高传祥 

所在班级:23电气本科1班

所学专业:电气工程及其自动化

指导教师:鞠晓君

完成时间:2025.6.11

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

摘 要

本设计以STC89C52RC单片机作为计算器的微处理器;采用4*4矩阵按键作为数据输入,以LCD1602实现信息交互。矩阵按键的设计:在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。采用低功耗的字符型液晶作为显示器件,1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。显示更为直观。该系统基于可靠地硬件设计和稳定的软件算法实现题目的基本要求。

关键词:STC89C52RC;矩阵按键;LED1602液晶

Design of Simple Calculator Based on 51 Single Chip Microcomputer

Absrtact

In this design, stc89c52rc is used as the microprocessor of calculator, 4 * 4 matrix key is used as data input and LCD1602 is used to realize information exchange. Matrix key design: when there are many keys in the keyboard, in order to reduce the occupation of I / O port, the keys are usually arranged in matrix form. In matrix keyboard, each horizontal line and vertical line are not directly connected at the intersection, but are connected by a key. In this way, a port (such as P1 port) can form 4 * 4 = 16 keys, which is twice as many as using the port line for the keyboard directly. The more lines, the more obvious the difference is. For example, adding another line can form a keyboard with 20 keys, while using the port line directly can only generate one more key (9 keys). Therefore, it is reasonable to use matrix method to do keyboard when there are many keys needed. The character LCD with low power consumption is used as the display device. 1602 LCD is also called 1602 character LCD. It is a kind of dot matrix LCD module specially used to display letters, numbers, symbols, etc. The display is more intuitive. The system is based on reliable hardware design and stable software algorithm to achieve the basic requirements of the topic.

Keywords: reaction speed, clock circuit, register, LED.

目录

前言 1

1.单片机及其应用 1

1.1单片机介绍: 1

1.2单片机的应用 2

1.3 AT89S52单片机 2

2.LCD1602的原理及其应用 5

2.1液晶屏LCD1602的介绍: 5

2.2液晶屏LCD1602的功能及应用 6

2.3 1602LCD的指令说明及时序 6

3设计思路 8

3.1 设计方法 8

3.2 硬件设计 8

3.2.1 键盘设计电路 8

3.2.3 液晶屏LCD1602显示 10

3.2.4单片机下载电路 10

4简易计算器的总电路 10

5软件设计 13

5.1汇编语言和C语言的特点及选择 13

致谢 15

参考文献 17

基于 51 单片机的四则运算指的是利用 51 单片机实现四则运算的功能。51 单片机是一种常用的微控制器,它具有较高的性能和灵活的操作方式。四则运算是数学中基本的运算,包括加法、减法、乘法、除法等。基于 51 单片机的四则运算可以用于实现多种简单的计算任务。

在实现基于 51 单片机的四则运算时,需要使用到一些关键技术,包括如下几点:

寄存器:51 单片机中的寄存器可以用来存储数据,在实现四则运算时可以用来存储运算符和操作数。

指令集:51 单片机的指令集包含了多种指令,可以用来实现四则运算的基本操作。例如,ADD 指令可以用来实现加法运算,SUB 指令可以用来实现减法运算。

算法:为了实现四则运算的功能,需要编写一些算法,用来控制 51 单片机执行相应的指令。例如,为了实现乘法运算,需要编写一个算法来模拟人类手算乘法的过程,即先将两个操作数相乘得到一个中间结果,然后将中间结果与下一个操作数相乘,直到所有操作数都被处理完。

输入/输出:在实际应用中,51 单片机需要与外部设备进行通信,以便获取输入数据和输出结果。例如,在实现基于 51 单片机的四则运算器时,可以使用一个按键来输入操作符和操作数,然后使用一在实际应用中,基于 51 单片机的四则运算可以用于实现各种简单的计算任务。例如,可以编写一个基于 51 单片机的四则运算器,用来计算用户输入的复杂算式。或者,可以利用 51 单片机的四则运算功能来实现一些简单的控制逻辑,例如控制一个机器人走迷宫的运动路径。

总之,基于 51 单片机的四则运算是一种常用的技术,它能够提高 51 单片机的计算能力,为实现各种复杂的控制逻辑提供便利。

前言

众所周知单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器 CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能集成到一块硅片上构成的一个小而完善的计算机系统。本设计要制作的就是单片机于生活中最为常见的一种应用——简易计算器。本简易计算AT89S52单片机作为核心,可以显示简易的计算,硬件方面由AT89C52单片机,晶振,电源,液晶屏LCD1602。

1.单片机及其应用

单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。

单片机实物图

1.1单片机介绍:

单片微型计算机简称单片机,是典型的嵌入式微控制器,常用英文字母的缩写MCU表示单片机,它最早是被用在工业控制领域。单片机由芯片内仅有CPU的专用处理器发展而来。最早的设计理念是通过将大量外围设备和CPU集成在一个芯片中,使计算机系统更小,更容易集成进复杂的而对体积要求严格的控制设备当中。INTEL的Z80是最早按照这种思想设计出的处理器,从此以后,单片机和专用处理器的发展便分道扬镳,单片机是靠程序运行的,并且可以修改。通过不同的程序实现不同的功能,尤其是特殊独特的一些功能,这是别的器件需要费很大力气才能做到的,有些则是花大力气也很难做到的。一个不是很复杂的功能要是用美国50年代开发的74系列,或者60年代的CD4000系列这些纯硬件来搞定的话,电路一定是一块大PCB板,但是如果要是用美国70年代成功投放市场的系列单片机,结果就会有天壤之别,只因为单片机的通过你编写的程序可以实现高智能,高效率,以及高可靠性。

单片机的硬件特性:单片机集成度高。单片机包括CPU、4KB容量的ROM、128B容量的RAM、2个16位定时/计数器、4个8位并行口、全双工串口行口。系统结构简单,使用方便,实现模块化。

1.2单片机的应用

目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录像机、摄像机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。更不用说自动控制领域的机器人、智能仪表、医疗器械了。因此,单片机的学习、开发与应用将造就一批计算机应用与智能化控制的科学家、工程师。单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域,大致可分如下几个范畴:

(1)在智能仪器仪表上的应用

(2)在工业控制中的应用

(3)在家用电器中的应用

(4)在计算机网络和通信领域中的应用

(5)单片机在医用设备领域中的应用

(6)在各种大型电器中的模块化应用

(7)单片机在汽车设备领域中的应用

此外,单片机在工商,金融,科研、教育,国防航空航天等领域都有着广泛的用途。

1.3 AT89S52单片机

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

AT89S52具有以下标准功能:8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。

引脚结构

主要性能:

1、与MCS-51单片机产品兼容

2、8K字节在系统可编程Flash存储器

3、1000次擦写周期

4、全静态操作:0Hz~33Hz

5、三级加密程序存储器

6、32个可编程I/O口线

7、三个16位定时器/计数器

8、八个中断源

9、全双工UART串行通道

10、低功耗空闲和掉电模式

11、掉电后中断可唤醒

12、看门狗定时器

13、双数据指针

14、掉电标识符

P0口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻辑电平。对P0端口写“1”时,引脚用作高阻抗输入。当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下,P0具有内部上拉电阻。在flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验时,需要外部上拉电阻。

P1口:P1口是一个具有内部上拉电阻的位双向I/O口,p1输出缓冲器能驱动4个TTL逻辑电平。对P1端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。此外,P1.0和P1.2分别作定时器/计数器2的外部计数输入(P1.0/T2)和时器/计数器2的触发输入(P1.1/T2EX),具体如下表所示。在flash编程和校验时,P1口接收低8位地址字节。

引脚号第二功能

P1.0T2(定时器/计数器T2的外部计数输入)、时钟输出;

P1.1T2EX(定时器/计数器T2的捕捉/重载触发信号和方向控制);

P1.5MOSI(在系统编程用);

P1.6MISO(在系统编程用);

P1.7SCK(在系统编程用);

P2口:P2口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。对P2端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX@DPTR)时,P2口送出高八位地址。在这种应用中,P2口使用很强的内部上拉发送1。在使用8位地址(如MOVX@RI)访问外部数据存储器时,P2口输出P2锁存器的内容。在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。

P3口:P3口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。对P3端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。P3口亦作为AT89S52特殊功能(第二功能)使用,如下表所示。在flash编程和校验时,P3口也接收一些控制信号。

引脚号第二功能

P3.0RXD(串行输入);

P3.1TXD(串行输出);

P3.2INT0(外部中断0);

P3.3INT0(外部中断0);

P3.4T0(定时器0外部输入);

P3.5T1(定时器1外部输入);

P3.6WR(外部数据存储器写选通);

P3.7RD(外部数据存储器写选通);

RST:复位输入;

晶振工作时,RST脚持续2个机器周期高电平将使单片机复位。看门狗计时完成后,RST脚输出96个晶振周期的高电平。特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能无效。DISRTO默认状态下,复位高电平有效。ALE/PRO:G地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8位地址的输出脉冲。在flash编程时,此引脚(PROG)也用作编程输入脉冲。在一般情况下,ALE以晶振六分之一的固定频率输出脉冲,可用来做为外部定时器或时钟使用。然而,特别强调,在每次访问外部数据存储器时, ALE脉冲将会跳过。如果需要,通过将地址为8EH的SFR的第0位置“1”,ALE操作将无效。这一位置“1”,ALE仅在执行MOVX或MOVC指令时有效。否则,ALE将被微弱拉高。这个ALE使能标志位(地址为8EH的SFR的第0位)的设置对微控制器处于外部执行模式下无效。PSEN:是外部程序存储器选通信号(PSEN)是内部程序存储器选通信号。

2.LCD1602的原理及其应用

2.1液晶屏LCD1602的介绍:

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

2.2液晶屏LCD1602的功能及应用

1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表1所示:

编号

符号

引脚说明

编号

符号

引脚说明

1

VSS

电源地

9

D2

数据

2

VDD

电源正极

10

D3

数据

3

VL

液晶显示偏压

11

D4

数据

4

RS

数据/命令选择

12

D5

数据

5

R/W

读/写选择

13

D6

数据

6

E

使能信号

14

D7

数据

7

D0

数据

15

BLA

背光源正极

8

D1

数据

16

BLK

背光源正极

表1:引脚接口说明表

第1脚:VSS为地电源。

第2脚:VDD接5V正电源。

第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。

第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。

第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。

第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。

第7~14脚:D0~D7为8位双向数据线。

第15脚:背光源正极。

第16脚:背光源负极。

2.3 1602LCD的指令说明及时序

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

序号

指令

RS

R/W

D7

D6

D5

D4

D3

D2

D1

D0

1

清显示

0

0

0

0

0

0

0

0

0

1

2

光标返回

0

0

0

0

0

0

0

0

1

*

3

置输入模式

0

0

0

0

0

0

0

1

I/D

S

4

显示开/关控制

0

0

0

0

0

0

1

D

C

B

5

光标或字符移位

0

0

0

0

0

1

S/C

R/L

*

*

6

置功能

0

0

0

0

1

DL

N

F

*

*

7

置字符发生存贮器地址

0

0

0

1

字符发生存贮器地址

8

置数据存贮器地址

0

0

1

显示数据存储地址

9

读忙标志或地址

0

1

BF

计数器地址

10

写数到CGRAM或DDRAM)

1

0

要写的数据内容

11

从CGRAM或DDRAM读数

1

1

读出的数据内容

表2:控制命令表

1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。 (说明:1为高电平、0为低电平)

指令1:清显示,指令码01H,光标复位到地址00H位置。

指令2:光标复位,光标返回到地址00H。

指令3:光标和显示模式设置I/D:光标移动方向,高电平右移,低电平左移S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。

指令4:显示开关控制。 D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。

指令5:光标或显示移位S/C:高电平时移动显示的文字,低电平时移动光标。

指令6:功能设置命令DL:高电平时为4位总线,低电平时为8位总线N:低电平时为单行显示,高电平时双行显示F:低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。

指令7:字符发生器RAM地址设置。

指令8:DDRAM地址设置。

指令9:读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。

指令10:写数据。

指令11:读数据。

与HD44780相兼容的芯片时序表如下:

读状态

输入

RS=L,R/W=H,E=H

输出

D0—D7=状态字

写指令

输入

RS=L,R/W=L,D0—D7=指令码,E=高脉冲

输出

读数据

输入

RS=H,R/W=H, E=H

输出

D0—D7=数据

写数据

输入

RS=H,R/W=L, D0—D7=数据, E=高脉冲

输出

3设计思路

3.1 设计方法

本电路设计采用AT89S52单片机为核心,利用晶振产生频率为1HZ的时钟脉冲信号,利用液晶屏LCD1602显示计算信息,通过对AT89S52单片机的编程控制液晶屏LCD1602的显示。显示简易计算的信息在LCD1602。

3.2 硬件设计

本系统以AT89S52单片机为核心,本系统选用12MHZ的晶振,使得单片机有合理的运行速度。起振电容30pF对振荡器的频率高低、振荡器的稳定性和起振的快速性影响较合适,复位电路为按键高电平复位。

3.2.1 键盘设计电路

QQ截图20191212201039

键盘原理图

本设计选用的是非编码键盘。键盘是单片机系统中最常用的人机对话输入设备,用户通过键盘向单片机输入数据或指令。键盘控制程序需完成的任务有:监测是否有键按下,有键按下时,在无硬件去抖时,应用软件延时方法消除按键抖动影响;当有多个键同 时按下时,只处理一个按键,不管一次按键持续多长时间,仅执行一次按键功能程序。矩阵按键扫描程序是一种节省IO口的方法,按键数目越多节省IO口就越可观,思路:先判断某一列(行)是否有按键按下,再判断该行(列)是那一只键按下。但是,在程序的写法上,采用了最简单的方法,使得程序效率最高。本程序中,如果检测到某个键按下了,就不再检测其它的按键,这完全能满足绝大多数需要,又能节省大量的CPU时间。

本键盘扫描程序的优点在于:不用专门的按键延时程序,提高了CPU效率,也不用中断来扫描键盘,节省了硬件资源。另外,本键盘扫描程序,每次扫描占用CPU时最短,不论有键按下或者无键按下都可以在很短的时间完成一次扫描。键盘是单片机系统中最常用的人机对话输入设备,用户通过键盘向单片机输入数据或指令。键盘控制程序需完成的任务有:监测是否有键按下,有键按下时,在无硬件去抖时,应用软件延时方法消除按键抖动影响;当有多个键同时按下时,只处理一个按键,不管一次按键持续多长时间,仅执行一次按键功能程序。

QQ截图20191212200315

键盘功能图

矩阵按键扫描程序是一种节省IO口的方法,按键数目越多节省IO口就越可观,思路:先判断某一列(行)是否有按键按下,再判断该行(列)是那一只键按下。但是,在程序的写法上,采用了最简单的方法,使得程序效率最高。本程序中,如果检测到某个键按下了,就不再检测其它的按键,这完全能满足绝大多数需要,又能节省大量的CPU时间。本键盘扫描程序的优点在于:不用专门的按键延时程序,提高了CPU效率,也不用中断来扫描键盘,节省了硬件资源。另外,本键盘扫描程序,每次扫描占用CPU时最短,不论有键按下或者无键按下都可以在很短的时间完成一次扫描。

3.2.3 液晶屏LCD1602显示

QQ截图20191212201208

3.2.4单片机下载电路

QQ截图20191212201152

4简易计算器的总电路

4.1系统的硬件设计

为了更好的实现系统得功能,硬件电路的设计应该遵循以下原则:

1、优化硬件电路

采用软件设计与硬件设计相结合的方法;尽管采用软件来实现硬件系统的功能时,也许响应时间会比单纯使用硬件时长,而且还要占用微处理器(MCU)的时间;但是,用软件实现硬件的功能可以简化硬件结构,提高电路的可靠性。所以,在设计本系统得时候,在满足可靠性和实时性的前提下,尽可能的通过软件来实现硬件功能。

2、可靠性及抗干扰设计

根据可靠性设计理论,系统所用芯片数量越少,系统的平均无故障时间越长。而且,所用芯片数量越少,地址和数据总线在电路板上受干扰的可能性也就越小。因此,系统的设计思想是在满足功能的情况下力争使用较少数量的芯片。

3、灵活的功能扩展

功能扩展是否灵活是衡量一个系统优劣的重要指标。一次设计往往不能完全考虑到系统的各个方面,系统需要不断完善以及进行功能升级。进行功能扩展时,应该在原有设计的基础上,通过修改软件程序和少量硬件完成。对于本系统而言,就是要求在系统硬件不变的情况下,能够通过修改软件程序,完成功能的升级和扩展。

根据第提出的系统设计方案,结合以上三条原则,确定了系统硬件的设计。计算器主要由以下一些功能模块构成:非编码键盘模块、LCD液晶显示屏模块等。

该系统的硬件设计采用了模块化的设计方法。AT89S52 单片机与LCD液晶显示屏显示电路是整个电路的核心,它们实现系统的功能要求。

简易计算器主要包括:键盘电路,显示电路。

下图为总体硬件结构。(如图所示为整个系统的原理图)

仿真图:

QQ截图20191212200205

原理图:

QQ截图20191212200626

PCB图:

实物图:

5软件设计

5.1汇编语言和C语言的特点及选择

本设计是硬件电路和软件编程相结合的设计方案,选择合适的编程语言是一个重要的环节。在单片机的应用系统程序设计时,常用的是汇编语言和C语言。机硬件,程序可读性和可移植性比较差。而C语言虽然执行效率没有汇编语言高,但语言简洁,使用方便,灵活,运算丰富,表达化类型多样化,数据结构类型丰富,具有结构化的控制语句,程序设计自由度大,有很好的可重用性,可移植性等特点。

由于现在单片机的发展已经达到了很高的水平,内部的各种资源相当的丰富,CPU的处理速度非常的快。用C语言来控制单片机无疑是一个理想的选择。所以在本设计中采用C语言编写软件程序。

致谢

首先,感谢学校和老师安排这一次的单片机课程设计,在大学期间,做这类的课程设计是非常有必要的,特别是对我们大三的学生,有利于我们将理论与实践联系起来。在两周的课程设计时间里,经过努力拼搏,查阅了很多资料和文献,终于完成了基于单片机的计算器的设计。在设计的过程中,不仅巩固了以前学过的理论知识,而且还学会了很多书本上没有的知识,最重要的是把理论和实际结合起来,提高了自己的动手和独立思考的能力。在本设计中,由于时间和能力有限,难免会有不足的地方还望老师批评指正,以便在以后的设计中改正。这次课程设计得以顺利完成,少不了老师的指导和周围同学的指教,在此表示深切的感谢!

参考文献

[1]杨欣.电路设计与仿真[M].清华大学出版社.2006

[2]谭浩强.从语言程序设计(第三版).北京:清华大学出版社.2005
[3]康光华.电子技术基础-数字部分[M].5版.北京;高等教育出版社;1997
[4]康光华.电子技术基础-模拟部分[M].5版.北京;高等教育出版社;1997
[5]陈瑜.电子技术应用实验教程[M].成都;电子科技大学出版社;2011
[6]左现刚、刘艳昌、贾蒙等.[M].西安;西安电子科技大学出版社;2016

程序

#include "reg52.h"

#include "string.h"

#include "stdio.h"

#include "lcd1602.h"

#include "keyboard.h"

#define keydeng 14

#define keyzuoyi 12

code unsigned char KeyDisPlaybuf[16] =

{

'1', '2', '3', '+',\

'4', '5', '6', '-',\

'7', '8', '9', '*',\

'<', '0', '=', '/'

};

long Count(char *ch, char len)//简单计算器 仅支持+-*/

{

unsigned char i = 0;

char Operation;

long Num1=0,Num2=0;

while(i

{

Num1*=10;

Num1+=ch[i]-'0';

i++;

}

Operation=ch[i++];

while(i

{

Num2*=10;

Num2+=ch[i]-'0';

i++;

}

switch(Operation)

{

case'+':return Num1+Num2;

case'-':return Num1-Num2;

case'*':return Num1*Num2;

case'/':return Num1/Num2;

}

return 0;

}

void EasyCounter(void)

{

unsigned char buff[30];

unsigned char text[30];

unsigned char key;

unsigned char i = 0;

do

{

key = keycan();//读取键值

if(key!=0xff)//键值不等于0

{

text[i++]=KeyDisPlaybuf[key];//记录键值对应的字符

text[i]='\0';

LCD_ShowStr(0,0," ");

LCD_ShowStr(16-strlen(text),0,text);

}

if(key==keyzuoyi&&i>0)//按下"<"时删除一位

i-=2;

}while(key!=keydeng);//按下'='时结束输入

sprintf(buff, "%ld", Count(text, strlen(text)));

LCD_ShowStr(0,1," ");

LCD_ShowStr(15,1,"E");

}

void main(void)

{

LCD_Init();

while(1)

{

EasyCounter();

}

}

设计图

未生成预览图,请在编辑器重新保存一次

BOM

暂无BOM

附件

序号文件名称下载次数
1
简易计算器1.docx
6
克隆工程
添加到专辑
0
0
分享
侵权投诉

评论

全部评论(1)
按时间排序|按热度排序
粉丝0|获赞0
相关工程
暂无相关工程

底部导航