基于MCS51单片机的简易计算器的设计与实现毕业设计论文Word格式文档下载.docx
- 文档编号:3661606
- 上传时间:2023-05-02
- 格式:DOCX
- 页数:38
- 大小:568.07KB
基于MCS51单片机的简易计算器的设计与实现毕业设计论文Word格式文档下载.docx
《基于MCS51单片机的简易计算器的设计与实现毕业设计论文Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于MCS51单片机的简易计算器的设计与实现毕业设计论文Word格式文档下载.docx(38页珍藏版)》请在冰点文库上搜索。
、÷
)、清除键和等号键,故只需要16个按键即可,设计中采用集成的计算键盘。
(3)执行过程:
开机显示零,等待键入数值,当键入数字,通过LCD显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当再键入数值后将显示键入的数值,按等号就会在LCD上输出运算结果。
(4)错误提示:
当计算器执行过程中有错误时,会在LCD上显示相应的提示,如:
当输入的数值或计算得到的结果大于计算器的表示范围时,计算器会在LCD上提示溢出;
当除数为0时,计算器会在LCD上提示错误。
2.3MCS-51单片机及开发环境介绍
2.3.1MCS-51系列单片简介
MCS-51单片机较之前的单片机相比,功能增强许多,就其指令和运行速度而言,超过了Intel8085的CPU和Z80的CPU,成为工业控制系统中较为理想的机种。
目前与MCS-51单片机兼容的一些单片机的时钟频率达到40MHz甚至更高。
51系列单片机的特点:
(1)8位cpu;
(2)片内带振荡器,频率范围为1.2MHz~12MHz;
(3)片内带128M的数据存储器;
(4)片内带4KB的程序存储器;
(5)程序存储器的寻址空间为64KB;
(6)片外数据存储器的寻址空间为64KB;
(7)128个用户位寻址空间;
(8)21个字节特殊功能寄存器;
(9)4个8位的I/O并行接口:
P0、P1、P2、P3;
(10)两个16位定时、计数器;
(11)两个优先级别的五个中断源;
(12)一个全双工的串行I/O接口,可多机通信;
(13)111条指令,包含乘法指令和除法指令;
(14)片内采用单总线结构;
(15)有较强的位处理能力;
(16)采用单一+5V电源
图2-1MCS-51结构图
2.3.2MM74C922芯片
为了进一步节省单片机I/O口资源,我们在设计中使用了MM74C922芯片。
MM74C922是一款4*4键盘扫描IC,它可检测到与之相连的4*4键盘的按键输入,并通过数据输出口将按键相应的编码输出。
其引脚图如图2-2所示:
图2-2MM94C922硬件图
MM74C922引脚说明:
(1)Y1~Y4(脚1~脚4):
4*4键盘第一列至第四。
(2)X1~X4(脚11、10、8、7):
4*4键盘第一行至第四行。
(3)DOA~DOD(DataoutA~D,脚14~17):
按键之BCD码输出,其中DOA为LSB,DOD为MSB。
(4)VCC(脚18):
电源脚,+3V~+15V。
(5)GND(脚9):
接地管脚。
(6)OSC(Oscillator,脚5):
键盘扫描电路之频率所需外加电容的连引脚。
(7)KBM(KeyboardMask,脚6):
内部消除开关弹跳电路所外加电容的引脚。
(8)OE(OutputEnable,脚13):
芯片使能脚,接低电位可使芯片使能。
(9)DA(DataAvailable,脚12):
数据有效输出脚。
任一按键按下时,此脚位会输出高电位,按键释放后此脚又会恢复为低电位。
MM74C922对各按键的响应如下表所示:
图2-3MM74C922对各按键的响应
第三章硬件设计
3.1硬件电路设计
3.1.1电路设计原理
单片机采用AT89C51单片机,它能够满足数据的采集、控制和数据处理的需求。
结合时钟电路、复位电路、键盘输入完成简易计算器总电路设计。
图3-1电路设计原理
3.1.2硬件电路设计
图3-2总电路设计
3.2时钟电路
时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统的稳定性。
在MCS-51单片机片内部有一个高增益的反相放大器,它的的输入端为引脚XTAL1,输出端为引脚XTAL2,由该放大器构成的振荡电路和时钟电路一起构成了单片机的时钟方式,晶振频率均为30pF。
根据硬件电路的不同,单片机的时钟连接方式可分为内部时钟方式和外部时钟方式。
我们采用内部时钟方式。
在内部方式时钟电路中,必须在XTAL1和XTAL2引脚两端跨接石英晶体振荡器和两个微调电容构成振荡电路。
图3-3时钟电路连接图
3.3复位电路
单片机复位是使CPU和系统中的其他功能部件都处在一个确定的初始状态,并从这个状态开始工作。
无论是单片机刚开始接上电源时,还是断电后或者发生故障后都要复位。
所以,必须弄清楚MCS-51单片机复位的条件、复位电路和复位后的状态。
复位信号从单片机的RST引脚输入,高电平有效,其有效电平应维持至少2个机器周期。
复位操作有上电自动复位与按键手动复位两种方式,为了方便系统的硬件初始化,我们采用按键手动复位。
图3-4复位电路连接图
3.4输入模块:
键盘接口电路
计算器输入数字和其他功能按键要用到很多按键,如果采用独立按键的方式,在这种情况下,编程会很简单,但是会占用大量的I/O口资源,因此在很多情况下都不采用这种方式,而是采用矩阵键盘的方案。
矩阵键盘采用四条I/O线作为行线,四条I/O线作为列线组成键盘。
在行线和列线的每个交叉点上设置一个按键。
这样键盘上按键的个数就为4*4个。
这种行列式键盘结构能有效地提高单片机系统中I/O口的利用率。
计算器的键盘布局如图3-5与图3-6所示:
一般有16个键组成,在单片机中正好可以用一个P口实现16个按键功能,这种形式在单片机系统中也最常用。
图3-5矩阵键盘布局图
图3-6矩阵键盘内部电路图
如下图3-7所示,在本设计中,计算器输入键盘的4条行线、列线分别连接到MM74C922的X1~X4、Y1~Y4引脚,MM74C922的数据输出口与单片机的P2口相连,MM74C922的DA引脚经过一个非门连接到单片机的/INT0脚,当MM74C922检测到键盘输入时,DA产生高电平,与之相连的/INT0检测到低电平,给单片机一个中断,单片机从P2口的低四位读入键盘上按下的键的值。
图3-7键盘接口电路图
第四章软件设计
本设计主要包含主程序、外部中断0程序。
4.1主程序设计
主程序函数表示:
允许中断;
初始化键盘接口连接、LCD显示、LCD、LCD输入数据函数。
图4-1主程序流程图
4.2外部中断0处理程序
有键按下时,单片机响应外部中断0,转入外部中断0中断处理函数,在中断处理函数中完成对按键的判断,以进行下一步的程序处理。
其中调用键值转化函数、算术运算函数。
图4-2外部中断0函数流程图
4.2.1键值转化为键盘上按键值程序
该程序函数的作用是将输入的键值转化为数值或符号。
图4-3键值转化为键盘上按键值流程
4.2.2算术运算程序
在外部中断函数对键值进行判断后,进行加、减、乘、除运算,运算后的数值如果超出范围规定,则数值溢出处理。
图4-4算术运算程序
4.3LCD显示程序
利用LCD静态显示,通过程序向LCD写指令字或数据使LCD完成不同功能或显示相应数据。
/**************LCD初始化函数*************/
voidinit_LCM()
{
write_com(0x30);
write_com(0x38);
write_com(0x08);
write_com(0x01);
write_com(0x06);
write_com(0x0e);
}
/***********LCD写数据函数*************/
voidwrite_data(charddata)
RS=1;
/*写指令*/
R_W=0;
EN=1;
/*使能信号开*/
P1=ddata;
/*将数据送入p1口*/
EN=0;
/*使能信号关*/
check_BF();
/***********LCD写指令函数*************/
voidwrite_com(charcommand)
{
RS=0;
P1=command;
/************LCD检查忙碌函数***********/
voidcheck_BF()
chari,x=0x80;
P1=0xff;
while(x&
0x80)
{
R_W=1;
x=P1;
for(i=0;
i<
10;
i++);
}
/*关闭使能信号*/
/**********LCD清屏函数**********/
voidclearLCD()
write_com(0x01);
/**********LCD显示函数**********/
voiddisplay(longa)
longtemp,b,c=-1;
intlenth=1,i,j;
clearLCD();
if(a<
0)
a=a*c;
write_data('
-'
);
}
temp=a;
while((temp=temp/10)!
=0)
lenth++;
for(i=lenth;
i>
0;
i--)
b=1;
for(j=0;
j<
i-1;
j++)
b=b*10;
write_data(0x30+a/b);
a=a%b;
第五章开发体会
5.1Keil软件调试
1.首先在电脑上正确的下载keil软件。
2.在keil集成开发环境中创建新项目(Project),扩展文件名为.UV2,并为该项目选定合适的单片机CPU器件(本设计采用ATMEL公司下的AT89C51)。
3.用keil的文本编辑器编写源文件,可以是汇编语言,也可以为c语言,完成后将该文件添加到项目中去。
注意保存的时候如果是c语言编写程序必须在后面加.C。
4.通过keil的相关选择项,配置编译环境、连接定位器以及Debug调试器的功能。
5.对项目中的源文件进行编译连接,生成绝对目标代码和可选的HEX文件,如果出现编译连接错误则返回到第2步,根据软件中的错误提示进行修改源文件,切记不要浮躁,一步一步修改直到最后提示没有差错最终生成hex文件。
6.对没有语法错误的程序进行仿真调试,调试成功后将HEX文件写入到单片机应用系统的ROM中。
5.2Protues软件仿真
1.首先在电脑里下载正确的软件,此软件主要是对硬件部分进行模拟。
2.进入软件后蓝色框内就是工作区域,可以在里面随意选择元器件,移动元器件。
正确的进行导线连接。
3.完成所有连接后,双击单片机把生成的HEX文件进行导入。
4.最后如果程序和连图都没有问题就可以进行仿真了。
图5-1系统仿真总图
第六章总结
通过这次的毕业论文设计我学习到了很多知识,平时在学校觉得自己好像对专业知识还是比较了解的。
可是遇到这次设计完全没有思绪,找不到切入点。
然后我就通过询问老师与跑图书馆查资料、确定基本设计方案、对所用芯片功能进行查找、调试、上机仿真等,经历了一次次的困难,却积累了很多宝贵的经验。
在整个设计的过程中遇到的问题主要有以下三点,第一:
基础知识掌握的不牢固,主要表现在一些常用的电路的形式和功能不清楚,对书本上的内容理解不够透彻。
第二:
对一些常用的应用软件缺少应用,体现在画电路图和系统的仿真的时候,对这些软件的操作不熟练,浪费了很多时间。
第三:
相关知识掌握的不够全面,缺少系统设计的经验。
这次设计进一步端了我的学习态度,学会了实事求是,严谨的作风,对自己要严格要求,不能够一知半解,要力求明明白白。
如果省略了那些必要的步骤,急于求成,不仅会浪费时间,还会适得其反。
我觉得动手之前,头脑里必须清楚该怎么做,这一点是很重要的。
在此次的毕业设计中我最大的体会就是进一步认识到了理论联系实践的重要性。
一份耕耘,一份收获。
通过这段时间的设计,让我明白科学的思维方法和学习方法是多么重要,只有这样才能够有很高的效率,才能够让自己的工作更完美。
总而言之,此次毕业设计让我学到了好多平时在课堂上学不到的东西,增加了我的知识运用能力,增强我的实际操作能力。
谢谢老师给我们提供这么好的机会,为我们之后走向社会奠定了一个好的基础。
参考文献
[1]胡辉.《单片机原理与应用》.北京中国水利水电出版社.2007
[2]何立.《单片机高级教程》.北京航空航天大学出版社.2006
[3]赵克林.《C语言实例教程》.北京人民邮电出版社.2007
[4]张义和,许宏昌,余春长.《例说51单片机》.人民邮电出版社.2008
[5]康维新.《MCS-51单片机原理与应用》.北京中国轻工业出版社.2009.1
[6]陈立周,陈宇.《单片机原理及其应用(第2版)》.北京机械工业出版社.2008.5
[7]徐爱钧.《单片机原理实用教程:
基于Protues虚拟仿真》.北京电子工业出版社.2009
(1)
致谢
起初接触毕业设计的时候,我对于这篇论文完全不知道该怎么着手,可是通过刘老师耐心的给我讲解,同时查阅各类专业书籍,让我对论文有了一个初步构思,知道该怎么去一步步的完成它。
在完成初稿时也遇到了很多问题,对于仿真软件运用的陌生,还有就是对于计算器的硬件选择的错误。
最后都是在刘老师的帮助下我克服了这些问题,成功的把毕业设计做完了并完成了仿真。
我要正式的向刘老师致谢,如果没有刘老师的帮助我是不可能完成毕业设计的,这次毕业设计我所学到的不仅仅是书本上的知识,还有坚持一路向前坚持的精神。
这将为我以后的人生道路做好指引,我将受益一生。
附录
#include<
reg51.h>
math.h>
#defineucharunsignedchar
#defineuintunsignedint
chartranslate(intkeycode);
voidarithmetic();
voidinit_LCM();
voidwrite_data(charddata);
voidwrite_com(charcommand);
voidcheck_BF();
voidclearLCD();
voiddisplay(longa);
voiddealerror();
voiddataoverflow();
longx=0,y=0,num=0;
intoperators,input,iny=0;
charkey;
charerror[5]="
error"
;
charoverflow[8]="
overflow"
sbitEN=P3^4;
sbitR_W=P3^5;
sbitRS=P3^6;
main()
EA=1;
EX0=1;
IT0=1;
P2=0xff;
display(0);
init_LCM();
write_data(0x30);
while
(1)
/**********键值转化为键盘上按键值函数*************/
chartranslate(intkeycode)
switch(keycode)
case0:
return'
7'
break;
case1:
4'
case2:
1'
case3:
c'
case4:
8'
case5:
5'
case6:
2'
case7:
0'
case8:
9'
case9:
6'
case10:
3'
case11:
='
case12:
/'
case13:
*'
case14:
case15:
+'
}
/***********外部中断0处理函数*************/
voidINT_0(void)interrupt0using0
key=translate(P2&
0x0f);
if(key<
&
key>
)//判断按下的键是否为数值
num=num*10+(key-'
if(operators>
{
y=num;
iny=1;
}
else
x=num;
if(num<
134217728&
num>
-134217728)//当前数值是否超出限定范围
{
display(num);
dataoverflow();
else
switch(key)
case'
:
x=0;
y=0;
num=0;
iny=0;
operators=0;
break;
arithmetic();
if(operators)
operators=1;
operators=2;
operators=3;
if(operators)
operators=4;
/**********算术运算函数*****
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 MCS51 单片机 简易 计算器 设计 实现 毕业设计 论文