您的当前位置:首页正文

用c语言设计一个多功能计算器

2024-10-18 来源:威能网
路漫漫其修远兮,吾将上下而求索 -

用C语言设计一个多功能计算器 实现功能:

1)具备整型数据、浮点型数据的算术(加、减、乘、除)运算功能。

依次输入第一个运算数、运算符(+,-,*,/),第二个运算数,然后输出结果。 结果可以作为下一个运算的第一运算数。按‘C’清屏,按‘X’退出。 例如:输入:2 + 5

输出:7

2)实现单运算符表达式计算的功能。

输入的操作数可以包含整数或浮点数。如果遇到错误的表达式,应输出错误提示信息。

输入表达式如下: 例如:输入:2+5 输出:7

目 录

摘要..................................................1

第一章 引言..........................................3

1.1 计算器概述...................................3

第二章 设计任务及要求................................5

2.1 设计任务.....................................5

2.2 设计要求.....................................6

第三章 计算器硬件设计................................7

3.1 方案说明.....................................7

3.2 设计单片机主体电路图.........................8

第四章 软件设计......................................9

4.1 模块介绍.....................................9

4.2 程序流程图..................................10 11

路漫漫其修远兮,吾将上下而求索 -

4.3 程序部分....................................11

第五章 总结.........................................16

参考文献.............................................17

摘要:[目录]一、课程设计题目及任务要求二、设计思路三、部分程序介绍四、程序框图五、汇编程序六、参考资料[原文]一、课程设计题目及任务要求请设计十进制加减法计算器。要求能(不同时)显示3位输入和4位输出。二、设计思路1、操作显示设备显示设备采用八片七段共阴极LED显示器,共设置16 个键,其中数字键0~9 共十个,接下来依次是加号键、减号键、等于号、清除键。操作设备是两行八列共16键的简单键盘。第一行从左至右分别为0、1、2、3、4、5、6、7,第二行分别为8、9、A(+)、B(-)、C(=)、D(清除键)、E(清除键)、F(清除键),“清除键”表示程序初始化,为下次输入准备。2、程序实现功能(1)十进制加减法计算:输入范围为(1~999),该程序输入两个定点数,每个3位,输出4位;A为加,B为减,C为等于,输出为四位计算结果。数据输入采用规范化输入,即必须输入3个数才算完成一个运算数的输入,两个运算数之间输入运算符A或者B,输入完成按C显示计算结果;(2)计算机复位功能:DEF均为清零重启,任何时候按下DEF中一个将重新开始;三、部分程序介绍(1)主程序(START)程序开始运行初始化程序,设置输入输出口PA、PB、PC,扫描键盘,输入两个待求数据和运算符,存入寄存器,等待输入等号同时显示第二个数,运行计算程序,并将计算结果分离,输出到显示器;(2)读键子程序(RD_KB)程序分别扫描两行键盘,若有键按下则通过移位的方式计算键码;若无键按下,则将键码缓存设置为10H,判断后进行相应的跳转。具体实现形式见程序的注释。(3)计算子程序(CACULATE)程序是在按下等号的时候通过判断计算标志符的大小来跳转至乘法和除法两个分支。由于需要保持一位小数,所以在计算之前要对被乘数和被除数分别乘以10来保证计算不需要小数计算。如果计算的小数位数过多则计算结果就是零。

关键词:AT89S52,8155, 计算器,矩阵键盘

第1章 引 言

目前,51系列单片机在我国的各行各业得到了广泛应用,各大专院校、职业培训学校,均开设了单片机原理与应用方面的课程,这是一门技术性和实践性很强的学科,必须通过一系22

路漫漫其修远兮,吾将上下而求索 -

列的软硬件实验、理论联系实际,才能学好、学懂,取得较好的学习效果。

1.1 计算器概述

1、加数和被加数的输入位数固定为4位; 2、相加结果显示要考虑进位的输出显示; 3、注意对“0”——“9”、“+”、“-” 、“*”、“/”、“=”以外按键输入的处理; 4、注意对相加结果进行十进制处理;

5、输入加数和被加数时,显示器上显示的数字要像平时用的计算器输入一样,即:每输入一个数字,原来显示的数字要往左移。

2.2 设计要求

(1)基本功能:

利用89c51作为主控器组成一个四则运算的计算器。

(2)发挥部分:

增加一种以上的科学计算功能。

(3)可选器件:

51系列单片机、6264、7段LED数码管、74LS244或74LS240、与非门等

第四章 软件设计

4.1模块介绍

该计程计价系统的软件设计分为以下几个模块:

(1)主程序模块

主程序主要完成初始化、检查有无按键按下、计算求答、以及调用显示等等。主程序的流程图如下所示。

(2)键盘扫描及识别子程序 33

路漫漫其修远兮,吾将上下而求索 -

键盘采用查询的方式,放在主程序中,当没有按键按下的时候,单片机循环主程序,一旦有按键按下,便转向相应的子程序处理,处理结束再返回。其程序流程如图所示.

(3)显示子程序

采用动态显示,一位一位的轮流显示各显示管。我们采用了8155扩展,所以只须用PA口控制字段,PB口的低位控制其位段。

(4)计算程序

根据输入的符号采取不同的算法,当然也是本程序的关键所在。对应输入数值,计算出输入量,供显示子程序使用,而对符号量则根据前次和后次的数值计算其结果。

4.3程序部分

#include

#include

#define COM8155 XBYTE [0x7ff0]

#define PA8155 XBYTE [0x7ff1]

#define PB8155 XBYTE [0x7ff2]

#define PC8155 XBYTE [0x7ff3]

Code unsigned char ledmap[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,

0x7d,0x07,0x7f,0x6f};

unsigned char keydata,rr,k,flag2,fuhao;

int count,number,num;

int ge,shi,bai,qian;

void key_scan(void); //键盘函数定义段;

unsigned char key_tab(unsigned char k); 44

路漫漫其修远兮,吾将上下而求索 -

void delay(void);

void key_in(unsigned char k);

、单片机计算器 基本功能介绍:

简单的加减乘除的运算。

时间显示功能,而且能实现计算器模块和时间模块之间的任意切换。 按键音却换功能。 原理;

多功能单片机计算器是一个实现加减乘除的和时间功能的计算器,主要的硬件组成由,一个AT89s52单片机芯片,一个LED液晶(1602液晶),一个4*4键盘,和4个特殊功能按键。 一个时钟芯片(DS1302),一个蜂鸣器。 单个硬件模块个的介绍 AT89S52:

主要控制芯片,它是由8kflash,256BRAM,6个中断源,详情参考AT89S52的技术文档. 1602液晶

1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”,而且可以实现一些复杂的字符操作:1:清显示,光标复位到地址00H位置,2:光标和显示模式设置 光标移动方向,高电平右移,低电平左移,屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效 3:显示开关控制,控制整体显示的开与关,高电平表示开显示,低电平表示关显示,控制光标的开与关,高电平表示有光标,低电平表示无光标,控制光标是否闪烁,高电平闪烁,低电平不闪烁4:光标或显示移位,高电平时移动显示的文字,低电平时移动光标5:功能设置命令 DL:高电平时为4位总线,低电平时为8位总线 N:低电平时为单行显示,高电平时双行显示 F: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符(高低电平在相应的指令上实现),详情可参考1602的技术文档。

1602采用标准的16脚接口: 第1脚:VSS为地电源第2脚:VDD接5V正电源第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。 第7~14脚:D0~D7为8位双向数据线。 第15~16脚:空脚。 1602液晶和单片机的接法

4*4键盘,和4个特殊功能按键 55

路漫漫其修远兮,吾将上下而求索 -

K(切换键) No(复位键) (时间设置键) C(清除键) + 1 2 3 — 4 5 6 *

7 8 9 %(除) —/+ 0 。 =

前4个为特殊功能键,

后十六个采用键盘扫描接法,

扫描原理:

首先给p3口赋11111110(0xfe),然后再读取p3口的值,如果为11101110(0xee)说明是第一排第一个被按下,如果是11011110(0xde)说明是第一排第二个被按下,如果是10111110(0xbe)说明是第一排第三个被按下,如果是0111110(0x7e)说明是第一排第四个被按下, 判断二三四排的按键,都采用同样的方法,只要分别给P3口赋不同的值即可,在读取p3口的值,在判断。用这样的方法即可实现4*4键盘的扫描,只要有键按下,就可以知道是那个键按下,通过这种方法可大大节省单片机的io口的资源。详情可参考网上的键盘扫描原理

时钟芯片(DS1302)

DS1302 是DALLAS 公司推出的涓流充电时钟芯片内含有一个实时时钟/日历和31 字节静态RAM ,通过简单的串行接口与单片机进行通信实时时钟/日历电路提供秒分时日日期月年的信息每月的天数和闰年的天数可自动调整时钟操作可通过AM/PM 指示决定采用24 或12 小时格式DS1302 与单片机之间能简单地采用同步串行的方式进行通信仅需用到三个口线1 RES 复位2 I/O 数据线3 SCLK串行时钟时钟/RAM 的读/写数据以一个字节或多达31 个字节的字符组方式

实时时钟具有能计算2100 年之前的秒分时日日期星期月年的能力还有闰年调整的能力(详情可参考DS1302的技术文档 管脚描述

X1 X2 32.768KHz 晶振管脚 GND 地 RST 复位脚

I/O 数据输入/输出引脚 SCLK 串行时钟

Vcc1,Vcc2 电源供电管脚

66

因篇幅问题不能全部显示,请点此查看更多更全内容