基于单片机的计算器的设计与实现.docx
《基于单片机的计算器的设计与实现.docx》由会员分享,可在线阅读,更多相关《基于单片机的计算器的设计与实现.docx(26页珍藏版)》请在冰点文库上搜索。
![基于单片机的计算器的设计与实现.docx](https://file1.bingdoc.com/fileroot1/2023-6/1/d3d2d299-daed-4359-98cf-f90c337dbbc8/d3d2d299-daed-4359-98cf-f90c337dbbc81.gif)
基于单片机的计算器的设计与实现
1绪论
课题背景
现今,科学技术不断进展,人们不断学习新知识、新科学、新技术,社会竞争也日趋猛烈起来。
另外人们生活水平也在不断地提高,电子产品再也不是遥不可及,它已经和咱们的生活息息相关。
关于一些复杂的计算,人的大脑是运算只是来的,而且也比较容易显现错误。
于是用户把计算器作为一种计算工具利用,从而使计算既快速又简便而且错误率低,此刻计算器已成为工作和生活中必不可少的物品之一。
计算器最开始是电子运算机中的一部份,后来由于它常常被用户利用,而且利用方便快捷、操作简单,关于人们日常生活和工作都很方便,因此就把它从运算机独立出来单独制成物品利用,如此利用起来加倍方便快捷。
由于单片机体积微小和本钱极低,因此它被普遍的应用于智能化仪器仪表、家用电子电器、工业自动化操纵、新型智能化汽车电子系统等领域中。
在工业操纵生产进程中,由于单片机在操纵领域有着超级重要的作用,于是单片机也被称为微操纵器,是嵌入式系统中重要且进展迅速的组成部份。
因此本次设计就采纳以AT89C51单片机为核心操纵器来设计计算器的操纵系统,和一些与AT89C51芯片上的I/O口连接外围设备,从而能实现大体四那么运算的功能,因此本设计本钱低廉,操作简单,可用于日常生活中的简单计算。
计算器系统的进展现状
目前市面上流通的计算器通常都是由一核心芯片作为操纵核心,输入模块采纳机械按键键盘运,显示模块采纳LCD液晶屏,和结合一些外围辅助设备组成。
一般的计算器由于其硬件电路和软件程序都很简单,因此一样只能实现带小数点的加、减、乘、除四那么运算,而关于一些相对复杂的数学公式不能运算。
高级计算器一样都采纳途理速度超级快的核心芯片而且软件程序也相对复杂得多,高性能的芯片才能实现各类复杂的运算程序,另外由于存储单元的内存比较大,因此能够寄存较多的程序和数据以实现复杂的数学运算公式和持续运算。
按键是计算器的重要组成部份,一样采纳接触式按键,此刻计算器的按键部份不断地被完善,一样一个按键具有多种功能,如此即能够减小计算器的体积又利用方便。
计算器的输出部份一样采纳由液晶显示器,液晶屏用来显示输入数值和运算结果,另外还通常具有错误指示、溢出指示等功能。
本设计采纳AT89C51单片机作为核心操纵器,运用C语言编程实现操纵硬件电路工作,该系统通过检测机械键盘输入数值,并把检测的数据存储下来,然后通过CUP处置运算,在LCD液晶屏上显示输入数值和计算结果。
该计算器系统的具体执行进程为:
第一存储单元清零,LCD液晶屏初始化,显示初始值“0.”,然后对进行键盘按键扫描并存储输入的按键数值,以后单片机那么对数据进行贮存与相应转换处置,最后通过运算处置送入LCD显示器显示[1]。
本设计将重点分析一般计算器的硬件电路和软件设计,并从实际计算体会做了详细的分析与研究。
2系统设计
设计要求
在本次毕业设计中,不仅需要运用《数字电路》、《模拟电路》、《单片机原理与接口技术》等大体的所学相关知识,还需熟练运用相关的硬件电路设计软件,还需多方面查阅相关资料。
只有具有了上述大体的理论知识才能完成一个简易计算器的设计,为了更好的实现理论与实践相结合,进一步完善所学知识和提高学习能力。
这次毕业设计中,我需对单片机的大体概念和基于单片机的嵌入式系统设计的大体方式进行深切的学习,同时把握必要的设计技术。
在本次设计中,需要完成如下几方面的设计任务:
一、简要论述单片机的最小系统的大体原理和串行接口和LCD液晶屏动态显示和带有PS2协议的机械键盘大体原理。
二、把握AT89C51的最小电路及外围扩展电路的设计方式。
3、需完成功能模块的硬件电路设计和工作进程。
4、用protel软件完成原理电路图的绘制。
在本次设计中依照功能和指示要求,需选用以AT89C51单片机为主控机,通过外围扩展接口电路,实现对简易计算器的设计[2]。
具体的设计要求如下:
一、该设计的简单计算器,能进行大体的四那么运算,而且采纳1601LCD液晶屏显示输入数据和计算结果。
二、键盘输入部份采纳带有PS/2口的机械键盘,其包括数字键、符号键、功能键、和等号键总共20个键。
3、具体执行进程为:
开机LCD初始化显示“0.”,以后等待键盘输入按键值,当按下数字键时,计算器在内部自动执行数值转换与存储并通过LCD显示出来,当按键输入加、减、乘、除符号键时,执行运算功能,以后等待再次输入数字键并存储数值,最后按劣等号键计算器自动计算出结果,并在LCD上显示[1]。
4、错误提示:
当计算数值过大和不符合数学计算原理时,程序执行报错功能,并在LCD上显示相应的提示,当计算器计算数值大于9999999时存储单元会溢出,这时会在LCD上提示“overflow!
”;当除数为0时,因不符合数学计算原理,这时在LCD上会提示错误“Can’tdivby0!
”。
系统设计
本设计采纳以AT89C51单片机为主控单元,外围接口要紧由LCD液晶屏和带有PS/2口的机械键盘组成[2]。
另外还包括:
串行通信接口UART和MAX232,这要紧用来直接能够从电脑上加载程序,方便利用。
设计的简单计算器能够实现7位的带小数点的加、减、乘、除、运算,而且利用Keil编译软件和Protel绘制电路图来实现本课题设计要求。
计算器系统整体设计框图如图2-1所示:
AT89C51
最
小
应
用
系
统
按键电路
晶振电路
复位电路
L
C
D
显
示
图2-1 计算器整体设计框图
计算器整体程序设计如下:
1.开机LCD液晶屏初始化,开INT0外中断,在液晶屏左侧显示“0.”。
2.循环检测键盘上是不是有按键按下,若是当一个键盘按下的时候,按键程序要判定是哪个按键按下,而且存储到按键值变量中,然后挪用途理按键的子程序。
3.通过LCD的子程序来显示,当输入一个数值或符号时要把输入那个的值给通过LCD显示出来,通过运算在按劣等号以后显示出这次运算的结果[3]。
其程序主程序如下:
voidmain()
{
Uchari=0;
lcd_int();
S/2键盘接口与管脚功能概念如表2-1所示:
表2-1 PS/2键盘接口与管脚功能概念表
端口结构
管脚定义
1
数据口
2
未实现,保留
3
电源地
4
电源,+5
5
时钟口
插头
插座
6
未实现,保留
当键盘向主机发送数据时,第一需要检查时钟线是不是为高电平.假设是高时钟线为电平,那么键盘就能够够向主机传输数据了,键盘向主机传送的数据由11位组成,包括起始、应答、停止和DATA0-DATA7,键盘向主机发送数据的时序图如图2-3所示:
图2-3 键盘到主机的通信
主机到键盘的通信,主机需要第一将时钟线和数据线设置为“请求发送”的状态,然后先下拉数据线,最后释放时钟线完成请求要求。
当键盘检测到主机的时钟线和数据线处于以上状态时,键盘就能够够同意主机发送的信号了。
主机到键盘的通信每一帧数据由12位组成,与键盘到主机通信相较增加了“应答”一名[7],主机到键盘通信的时序图如图2-4所示.
图2-4 主机到键盘的通信
与键盘到主机的通信相较,其每一帧数据多了一个应答位,当键盘答接收到主机的应答位时,键盘需拉低数据线产生该位,因此应答位老是为0。
主机到键盘的通信进程中,主机老是在时钟线为低电平常,数据线改变其状态,键盘在时钟上升沿时读入来自数据线的数据。
本次设计中,单片机的口接PS/2数据线;(INT0)口接PS/2时钟线.因为单片机的P一、P3口内部是带上拉电阻的,因此PS/2的时钟线和数据线能够直接与单片机的P一、P3相连接[8]。
PS/2键盘与AT89C51单片机的连接方式如图2-5所示.
图2-5 PS/2键盘与单片机连接图
按键扫描的具体进程为:
开始时,先检测是不是有按键闭合,无按键闭合时,返回继续检测;有按键闭合时,那么需确信是不是有按键按下;假设无按键按下,那么返回继续检测是不是有按键闭合,假设有按键按下,然后判定是哪个按键,然后检测按键是不是释放,假设释放按键完毕,那么返回,假设没有释放按键,那么一直等待按键释放。
其流程图如图2-6所示。
图2-6 机械键盘扫描流程图
依照程序流程图编写PS/2键盘程序如下:
**********PS2接口相关参数***************/
sbitps2_dat=P1^4;
接下来向液晶屏输入命令子函数和数据子函数,通过在液晶屏上显示数组元素和字符串子函数,把数据显示出来,然后判定数据是不是显示完,假设显示完那么返回,假设没有那么继续传送死令和数据。
液晶屏显示流程图如图2-8所示:
N
N
Y
Y
开始
LCD初始化
显示汉字或ACSII码
显示图形
相应功能设置
送地址
送数据
是否显示完
返回
相应功能设置
送行地址和列地址
送数据
是否显示完
N
Y
N
图2-8LCD显示程序流程图
依照流程图LCD液晶屏显示程序如下:
/**********液晶屏相关参数*****************/
#definedata_portP0
in_data('.');
back_light=0;
{
in_data('.');
}
else
{
if(flag==0)
{
in_data('');
{
in_data('.');
}
else
{
if(flag==0)
{
in_data('');,循环用floor和ceil两个函数对浮点数进行检测,直到检测值相等,每次检测结果若是不相等,存小数点的位置的变量加1,浮点数乘以10,然后把方才更改的成整数的浮点数循环除以10取模,并复制到操作数组中,直到浮点数变成零为止[10]。
运算模块的程序流程图如图2-9所示:
数值送显示缓冲
N
加
乘
除
减
Y
Y
错误信息送显示缓冲
除数是否为零
运算结果是否溢出
开始
运算符是?
N
图2-9运算程序设计流程图
运算程序如下:
/*****乘法运算子函数(若是结果大于9999999或小于-9999999返回,不然返回计算结果)*****/
floatmul_operation(floata,floatb)
{
floattemp;
if(((a*b)>9999999)||((a*b)<(-9999999)))
C51单片机原理与应用[M].北京:
清华大学出版社,2020:
424~428
16/32位微型运算机原理及应用[M].北京:
清华大学出版社,2006:
262~269
[3]潘永雄.新编单片机与应用[M].西安:
西安电子科技大学出版社,2003:
2
proteus的电路及单片机系统设计与仿真[M].北京:
北京航空航天大学出版社,2006:
1
[5]刘红玲.邵晓根.微机原理与接口技术[M].北京:
中国电力出版社,2006:
21
[6]冯博琴.微型运算机原理及接口技术[M].北京:
清华大学出版社,200:
222~23
[7]艾德才.微型运算机原理与接口技术[M].北京:
高等教育出版社,2005:
44~45
[8]朱定华.微机原理、汇编与接口技术[M].北京:
清华大学出版社,2005:
71~73
[9]阎石.数字电子电路[M].北京:
中央广播电视大学出版社,1993:
103
[10] 朱运利.单片机技术应用[M].北京:
机械工业出版社,2005:
13
[11]JulioSanchez,MariaprogrammingTheMicrochipPIC[M].NewYork:
CRCPress,2007:
78~93
致谢
通过一番尽力毕业设计终于完成了,我需要感激的人很多。
第一,我需要感激我的毕业设计指导教师:
闫国英教师。
在本论文进行的整个进程中,从题目的选择、前期的预备、最初的初稿、论文的修改,直到论文最后的装订完成都取得了闫国英教师的悉心指导和帮忙。
每当在实验中碰到挫折,闫教师都会帮忙并鼓舞我,不断的为我提供试探问题的方式和解决问题的思路。
在那个进程中闫教师严谨的学术作风,高贵的道德,勤劳的学习适应给了我很深的阻碍,使我在思想上有了专门大的进步。
在完成毕业论文的进程中,从中学习到做学问要严谨、认真,这为我在尔后的学习工作奠定了坚实的基础。
第二,我要感激身旁的同窗,在完成毕业设计的进程中,他们不仅给我精神上的鼓舞而且常常帮我解决电路焊接的问题。
在我人一辈子逆境中帮忙我不失信心,鼓舞我走出窘境。
通过本次的毕业设计,不但加深我对在课程上所学到的单片机理论知识的熟悉和明白得,从头让自己熟悉到了这门学科的在应用方面的广漠前景,而且通过知识与应用于实践的结合加倍丰硕了自己的知识。
扩展了知识面,不但把握了本专业的相关知识,而且对其他专业的知识也有所了解,而且较系统的把握单片机应用系统的开发进程,因此自身的综合素养有了全面的提高。
在完成毕业设计中,我了解到自己在知识储蓄上的不足,这让我熟悉到理论学习和实际运用结合的重要性,只学习理论不参加实践可不能深刻的明白得知识,因此自己动手制作是超级有必要的。
一眨眼的时刻,忙忙碌碌的毕业设计就完成了,这进程中感觉天天都很充实。
这期间我尽管有过失落,有过苦恼,有过舍弃,但最终仍是坚持到了最后顺利地完成了毕业设计。
最后,我以一颗真诚的心向默默地为咱们付出的指导教师和我的伙伴们致以深深的感激与敬意,谢谢大伙儿!
附录
计算器程序:
/****************计算器程序****************/
#include<>
#include<>
#include<>
#defineucharunsignedchar
#defineuintunsignedint
/**********液晶屏相关参数*****************/
#definedata_portP0按下后的通码
#defineps2key_sign0x66
in_data('.');
back_light=0;
{
in_data('.');
}
else
{
if(flag==0)
{
in_data('');
{
in_data('.');
}
else
{
if(flag==0)
{
in_data('');
{
temp1=temp1*10+operand_num[high_bit];
}
high_bit++;
}
temp2=1;
while(dot_location!
=0)
{
temp2*=10;
dot_location--;
}
if(operand_num[index]=='-');
}
else
{
result[index]=temp_int%10;
temp_int/=10;
}
i++;
index--;
}while((temp_int!
=0)||(i<=(dot_location+1)));
if(x<0)
{result[index]='-';}ThedeviceismanufacturedusingAtmel’shigh-densitynonvolatilememorytechnologyandiscompatiblewiththeindustry-standardMCS-51instructionsetandpinout.Theon-chipFlashallowstheprogrammemorytobereprogrammedin-systemorbyaconventionalnonvolatilememoryprogrammer.Bycombiningaversatile8-bitCPUwithFlashonamonolithicchip,theAtmelAT89C51isapowerfulmicrocomputerwhichprovidesahighly-flexibleandcost-effectivesolutiontomanyembeddedcontrolapplications.
Functioncharacteristic
TheAT89C51providesthefollowingstandardfeatures:
4KbytesofFlash,128bytesofRAM,32I/Olines,two16-bittimer/counters,afivevectortwo-levelinterruptarchitecture,afullduplexserialport,on-chiposcillatorandclockcircuitry.Inaddition,theAT89C51isdesignedwithstaticlogicforoperationdowntozerofrequencyandsupportstwosoftwareselectablepowersavingmodes.TheIdleModestopstheCPUwhileallowingtheRAM,timer/counters,serialportandinterruptsystemtocontinuefunctioning.ThePower-downModesavestheRAMcontentsbutfreezestheoscillatordisablingallotherchipfunctionsuntilthenexthardwarereset.
PinDescription
VCC:
Supplyvoltage.
GND:
Ground.
Port0:
Port0isan8-bitopen-drainbi-directionalI/Oport.Asanoutputport,eachpincansinkeightTTLinputs.When1sarewrittentoport0pins,thepinscanbeusedashighimpedance0mayalsobeconfiguredtobethemultiplexedloworderaddress/databusduringaccessestoexternalprogramanddatamemory.InthismodeP0hasinternal0alsoreceivesthecodebytesduringFlashprogramming,andoutputsthecodebytesduringprogramverification.Externalpullupsarerequiredduringprogramverification.
Port1
Port1isan8-bitbi-directionalI/OportwithinternalPort1outputbufferscansink/sourcefourTTL1sarewrittentoPort1pinstheyarepulledhighbytheinternalpullupsandcanbeusedasinputs.Asinputs,Port1pinsthatareexternallybeingpulledlowwillsourcecurrent(IIL)becauseoftheinternal1alsoreceivesthelow-orderaddressbytesduringFlashprogrammingandverification.
Port2
Port2isan8-bitbi-directionalI/OportwithinternalPort2outputbufferscansink/sourcefourTTL1sarewrittentoPort2pinstheyarepulledhighbytheinternalpullupsandcanbeusedasinputs.Asinputs,Port2pinsthatareexternallybeingpulledlowwillsourcecurrent,becauseoftheinternal2emitsthehigh-orderaddressbyteduringfetchesfromexternalprogrammemoryandduringaccessestoexternaldatamemorythatuse16-bitaddresses.Inthisapplication,itusesstronginternalpullupswhenemitting1s.Duringaccessestoexternaldatamemorythatuse8-bitaddresses,Port2emitsthecontentsoftheP2SpecialFunction2alsoreceivesthehigh-orderaddressbitsandsomecontrolsignalsduringFlashprogrammingandverification.
Port3
Port3isan8-bitbi-directionalI/OportwithinternalPort3outputbufferscansink/sourcefourTTL1sarewrittentoPort3pinstheyarepulledhighbytheinternalpullupsandcanbeusedasinputs.Asinputs,Port3pinsthatareexternallybeingpulledlowwillsourcecurrent(IIL)becauseofthe3alsoservesthefunctionsofvariousspecialfeaturesoftheAT89C51aslistedbelow:
Port3alsoreceivessomecontrolsignalsforFlashprogrammingandverification.
RST
Resetinput.A