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

上传人:b****3 文档编号:3753736 上传时间:2022-11-25 格式:DOCX 页数:9 大小:109.41KB
下载 相关 举报
单片机课程设计简易计算器设计.docx_第1页
第1页 / 共9页
单片机课程设计简易计算器设计.docx_第2页
第2页 / 共9页
单片机课程设计简易计算器设计.docx_第3页
第3页 / 共9页
单片机课程设计简易计算器设计.docx_第4页
第4页 / 共9页
单片机课程设计简易计算器设计.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

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

《单片机课程设计简易计算器设计.docx》由会员分享,可在线阅读,更多相关《单片机课程设计简易计算器设计.docx(9页珍藏版)》请在冰豆网上搜索。

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

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

xxxxxx大学

 

课程设计报告

 

课程设计名称:

单片机系统综合课程设计

课程设计题目:

简易计算器设计

 

院(系):

专业:

班级:

学号:

姓名:

指导教师:

完成日期:

 

第1章总体设计方案

1.1设计原理

根据课程设计任务书的内容与要求,要实现简易计算器的设计过程,实现计算器的键盘输入,进行加、减、乘、除基本四则运算,并在八段数码管上显示相应的结果,其中加、减、乘、除、等于及清八段数码管功能分别用按键A、B、C、D、E、F表示。

键盘的应用,设计的是4*4键盘,对键盘进行扫描,固定列扫描行,设置相应的按键功能,包括数字键、运算符键及清八段码键。

八段码显示应用,正常输入:

显示相应的数字及运算符(A,B,C,D),按下等于(E)键后显示计算结果,按下清八段码键(F)后八段码全变暗;出现越界输入或输出:

显示ERROR。

1.2设计思路

采用汇编语言程序设计的方法结合硬件电路设计方法,利用AEDK实验箱上已有芯片来实现简易计算器的模拟,利用Protel软件画出硬件电路。

(1).提出方案

首先,实现对键盘的扫描及设置对应按键;其次,实现在八段码上显示键盘输入内容;最后,对输入数据进行基本运算处理并显示相应结果(包括越界显示)。

(2).方案论证

简易计算器的设计主要是键盘扫描和八段码显示。

数据输入利用键盘实现,按要求设计各键值,通过键值判断是数字键还是功能键,通过六位八段码显示输入的相应按键及运算后的结果。

1.3实验环境

·硬件环境:

伟福Lab6000实验箱,PC机。

·软件环境:

WAVE6000应用软件。

·软件环境:

protel99SE应用软件。

第2章详细设计方案

2.1硬件电路设计

硬件电路主要由两部分构成:

键盘扫描电路和八段码显示电路。

硬件电路连线如图2.1所示。

图2.1硬件电路连线图

2.2主程序设计

在主程序中首先调用键盘扫描函数,设一个键盘按键标记量,初值为0,首次按下按键且为数字键,标记为0,在数组中保存键值,标记量自加1。

按键标记为1时有多种情况,对按键进行判断,若输入的为数字键且没越界,则存储并显示相应数据,越界则显示ERROR;若输入的为运算符键,则显示运算符;若输入的为清八段码键,则进行清八段码操作;若输入的为“=”键,则进行相应的运算,运算结果没越界显示相应结果,越界则显示ERROR。

主程序流程图如图2.2所示。

图2.2主程序流程图

2.2功能模块的设计与实现

计算器设计的功能模块有:

键盘扫描函数,八段码显示函数,延时函数。

1)键盘扫描模块的设计与实现

对于的键盘的扫描,先固定键盘的某一列,然后逐行扫描。

流程图如图2.3所示。

图2.3键盘扫描模块

2)八段码显示功能模块的设计与实现

八段码的显示函数,包含输入输出数据的显示,越界错误显示,清八段码显示,运算结果显示。

注意的是,显示是在按键抬起后进行的操作,所以显示函数中有松手检测语句。

正常输入输出时,显示相应数据;越界时,显示错误ERROR;输入运算符时,显示运算符;清八段码时,则八段码不显示任何内容。

具体流程图如图2.4所示。

图2.4八段码显示模块

第3章结果测试及分析

3.1结果测试

计算器的测试包括正常输入输出测试和越界输入输出测试。

若输入正确且结果没越界:

(1)加法测试:

输入数字,如23,按下加法运算符“A”,再按下数字,如456,按下等于符号“E”,则显示正确结果479;

(2)减法测试:

输入数字,如3578,按下加法运算符“B”,再按下数字,如214,按下等于符号“E”,则显示正确结果3364;(3)乘法测试:

输入数字,如12,按下加法运算符“C”,再按下数字,如15,按下等于符号“E”,则显示正确结果180;(4)除法测试:

输入数字,如1478,按下加法运算符“D”,再按下数字,如81,按下等于符号“E”,则显示正确结果18。

输入输出越界测试:

输入一个大于9999的数时显示ERROR,或当计算结果越界时显示ERROR,如9999+1=ERROR,1234*378=ERROR,479/0=ERROR。

3.2结果分析

对于上述的运行结果和操作过程,达到了课程设计任务书中的要求。

设计的为4位数的简易计算器,对于除法运算只做输出结果取整情况。

若输入或输出越界时则显示ERROR。

参考文献

[1]张毅刚,刘杰.MCS51单片机原理及应用[M].哈尔滨:

哈尔滨工业大学出版社,2008

[2]高峰.单片微型计算机原理与接口技术[M].北京:

科技出版社,2007

[3]胡汉才.单片机原理及其接口技术[M].北京:

清华大学出版社,2004

[4]谭浩强.C语言程序设计[M].北京:

清华大学出版社,2005

[5]王忠民.微型计算机原理[M].西安:

西安电子科技大学出版社,2003

[6]沈美明,温冬婵.IBM-PC汇编语言程序设计[M].北京:

清华大学出版社,2001

附录I程序源代码

/******简单计算器试验:

用A,B,C,D,E,F分别表示+,-,*,/运算******/

#include

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

uchartable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,

0x77,0x7c,0x39,0x5e,0x79,0x71};//八段码

uinttablenum[]={1,10,100,1000};

ucharxdata*p1=0x08001;//定义键盘行地址

ucharxdata*p2=0x08002;//定义键盘列地址

ucharxdata*q1=0x08002;//定义位码输出地址

ucharxdata*q2=0x08004;//定义段码输出地址

uintnum;//键盘按键

uinty1,y2;//延时程序所用变量

uintshu;

uintkey;//标记数字键

uinta;//记录按键按下的次数

uintnumber1[4];//存放数字

uintnumber2[4];//存放数字

uintnum1;

uintnum2;

uintdelay(uinty1);//延时函数

voidkeyscan();//键盘扫描函数

voiddisplay(intb);//键盘显示函数

voidmain()

{

intnumber;

inti;

key=0;

a=0;

*q1=0x00;//数码管不显示

while

(1)

{

*p1=0xff;

if((*p1&0x0f)!

=0x0f)//判断是否有按键按下

{

keyscan();

if(key==0&&num>=0&&num<10)//按下第一个数字键

{

number1[0]=num;//把按键数值存放在数组number1[0]中

display

(1);

key++;

}

elseif(key==1)

{

if(num<10)//此时按下的按键为0-9数字键

{

a++;

if(a>3)

display(20);//出现越界显示ERROR

else

{

number1[a]=num;

display(a+1);

}

}

elseif(num==15)//按下清屏键

{

display(15);

a=0;

key=0;

}

elseif(num>9&&num<14)//按下的按键为加或减或乘或除

{

num2=0;

for(i=0;i<=a;i++)

{

num2+=number1[i]*tablenum[a-i];

}

delay(5);

display(num);//显示是什么运算

shu=num;//把按下的键值传递给变量shu

a=0;

key=0;

}

elseif(num==14)//此时按下的按键为E等于按键

{

*q1=0x00;

for(i=0;i<=a;i++)

{

num1+=number1[i]*tablenum[a-i];

}

switch(shu)//判断运算后做相应的运算

{

case10:

num2+=num1;break;

case11:

num2-=num1;break;

case12:

num2*=num1;break;

case13:

if(num1>0)num2/=num1;elsenum2=-1;break;

}

if(num2>9999||num2<0)//判断运算是否产生越界

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 司法考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1