西安欧亚学院2014-2015学年第二学期《单片机原理及应用》课程设计报告课程名称:单片机原理及应用项目名称:按键计数器所在分院:信息工程学院班级:统本电信1301组员:刘富强33姜子龙39指导教师:苏智华设计报告成绩评定表:评分内容成绩报告内容的完整性(10%)硬件原理图及说明(20%)程序流程图(20%)程序清单(10%)调试及结果分析(20%)系统改进建议或者方案(10%)格式规范(10%)总分目录一.设计功能......................................1二.系统方案......................................1三.硬件电路......................................3四.软件设计......................................5五.安装调试......................................7六.系统改进方案..................................8七.总结..........................................8附录:.............................................91一.设计功能1.功能及技术指标要求利用AT89S52单片机来制作一个手动按键计数器。2.设计内容在AT89S512单片机的P3.7管脚接一个轻触开关,作为手动计数的按钮,用单片机的P2.0-P2.7接一个共阳数码管,作为00-99计数的个位数显示,用单片机的P0.0-P0.7接一个共阳数码管,作为00-99计数的十位数显示。3.设计思路及关键技术一个完整00~`99手动计数器想当于一个简单的单片机系统,该系统设置电路、单片机、显示电路等构成。单片机是集成IC芯片,只需根据实际设计要求选型。其他部分都需要根据应用要求和性能指标自行设计。二.系统方案1.硬件设计思路00-99加计数器硬件系统主要由AT89S52单片机,数码管,电容,电源等元件组成,利用单片机的P0口、P1口作为输出端,来控制数码管的显示,通过单片中烧入程序,然后利用P3.7口作为输入端,通过点动控制实现开关量的控制和计数,然后再通过数码显示器显示出来。通过调试仿真从而实现00-99加计数。2.软件设计思路实现00-99计数功能,子程序实现将高低电位转化为数码管的十进制数字,实现手动开关计数。通过手动给脉冲信号,实现计数,再加到99时,在手动给脉冲时,回到初始状态00,从而实现00到99加计数。23.系统框图图1系统框图三.硬件电路1.所用芯片AT89S522.管脚说明:①电源引脚Vcc(40脚):典型值+5V。Vss(20脚):接低电平。②外部晶振XTAL1、XTAL2分别与晶振两端相连接。③输入输出口引脚:P0口:I/O双向口。作输入口时,应先软件置“1”。P1口:I/O双向口。作输入口时,应先软件置“1”。P2口:I/O双向口。作输入口时,应先软件置“1”。P3口:I/O双向口。作输入口时,应先软件置“1”。④控制引脚:RST、ALE/-PROG、-PSEN、-EA/Vpp组成了MSC-51的控制单片机显示电路控制时钟电路3总线。RST(9脚):复位信号输入端(高电平有效)。ALE/-PROG(30脚):地址锁存信号输出端。3.AT89C51单片机的P口特点:P0口:是一个8位漏极开路输出型双向I/O端口。作为输出端口时,每位能以吸收电流的方式驱动8个TTL输入,对端口写1时,又可作高阻抗输入端用。在访问外部程序或数据存储器时,它是时分多路转换的地址(低8位)/数据总线,在访问期间将激活内部的上拉电阻。P1口:P1口是一个带有内部上拉电阻的8位双向I/O端口。P1口的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。对端口写1时,通过内部的上拉电阻把端口拉到高电位,这时可作输入口。P2口作输入口使用时,因为内部有上拉电阻,那些被外部信号拉低的引脚会输出一个电流(Iil)。P2口:P2口是一个带有内部上拉电阻的8位双向I/O端口。P2口的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。对端口写1时,通过内部的上拉电阻把端口拉到高电位,这时可作输入口。P2口作输入口使用时,因为内部有上拉电阻,那些被外部信号拉低的引脚会输出一个电流(Iil)。在访问外部程序存储时和16位外部地址的外部数据存储器(如执行MOVX@DPTR)时,P2口送出高8位地址。在访问8位地址的外部数据存储器(如执行MOVX@RI)时,P2口引脚上的内容(就是专用寄存器(SFR)区中的P2寄存器的内容),在整个访问期间不会改变。P3口:P3口是一个带有内部上拉电阻的8位双向I/O端口。P3口的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。对端口写1时,通过内部的上拉电阻把端口拉到高电位,这时可作输入口。P3口作输入口使用时,因为内部有上拉电阻,那些被外部信号拉低的引脚会输出一个电流。4.排阻所谓排阻就是若干个参数完全相同的电阻,它们的一个引脚都连到一起,作为公共引脚。其余引脚正常引出。所以如果一个排阻是由n个电阻构成的,那么它就有n+1只引脚,一般来说,最左边的那个是公共引脚。它在排阻上一般用一4个色点标出来。排阻一般应用在数字电路上,比如:作为某个并行口的上拉或者下拉电阻用。使用排阻比用若干只固定电阻更方便。5.电路总原理图图2电路总原理图四.软件设计实现00-99计数功能,子程序实现将高低电位转化为数码管的十进制数字,实现手动开关计数。通过手动给脉冲信号,实现计数,再加到99时,在手动给脉冲时,回到初始状态00,从而实现00到99加计数。软件设计的程序流程图如图3所示。XTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115U180C51C130pFC230pFX1CRYSTALR210kR11k234567891RP2RESPACK-8C31uF51.程序流程图图3流程图Count初始为0数码显示“00”按键识别成功吗?Count=Count+1Count=100吗?显示Count计数器YNNY开始62.程序代码#includereg51.hsbitk1=P3^7;unsignedcharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};voiddelay(unsignedintt){unsignedinti,j;for(i=0;it;i++)for(j=0;j114;j++);}voiddisplay(unsignedintnum){unsignedcharge,shi;shi=num/10;ge=num%10;P0=table[shi];P2=table[ge];}voidmain(){unsignedinttemp;while(1){if(k1==0){delay(10);if(k1==0){temp++;while(!k1);if(temp==99)temp=0;}}display(temp);}}7五.安装调试硬件调试是通过万用表对时钟电路,按键复位电路,以及电源,按键,显示电路进行测试,测试各节点有无电流通过,焊点有无重合、断点。软件调试是通过对程序的编译、连接、执行来发现程序中存在的语法错误与逻辑错误并加以排除纠正的过程。先在keil4中为所编的程序设置环境,然后输入程序检测并编译,之后用Proteus将编译好的程序输入到已设计好的电路的AT89s52中,开始模拟调试。进一步修改,完成设计,最后调试成功,如图所示。按键加计数一直加到63。图4调试测试图8六.系统改进方案本次设计的按键数码管计数器用了单片机P0口,P2口,占用了16个I/O并行口,有点浪费并口资源,所以我们可以用芯片164来实现串并转换,这样可以大量节省资源,并且在原来的基础上可以加入相应传感器制作成红外传感计数器,每当有一次红外感应时可以计一次数,可以在药品的罐装,食物的数量统计领域应用,并且加入多个按键,组成‘开始’‘结束’‘暂停’等多功能计数器。七.总结通过一周的单片机课程设计,让人感受颇深,虽然有关于单片机的知识,但更重要的是团队合作。刚开始时,我们有点迷茫,我懂得知识理论的知识但要实际操作,总是有差距的,虽然对于我们来说有一定的难度,但是我们经研究从最简单的编程开始,对于80C51单片机的编程,我们使用的是我们所学汇编语言,结合自己所学的及寻找大量资料,我们几个拟定了初步的程序,然后进行修改及用Keil4软件进行调试,然后进一步修改,最终在我们努力下,完成了程序。结束了软件,我们开始进行硬件,我们用Proteus软件进行绘图和仿真,在这一过程中,我们对该软件有了进一步的认识,与此同时,我们从中也学会了许多关于软件方面的知识。在仿真过程中,我们遇到一些问题,如:连线的问题、数码管不显示但通电、寻找合适的器件等问题,但在我们小团队的学习、查询问题缘由、及努力、老师的帮助下,这些问题都一一得到解答。最终在我们的努力及精诚合作下,我们完成了我们的00-99加计数器课程设任务。通过这次的课程设计作品的制作让我对单片机的理论有了更深入的了解,同时在具体的制作过程中我们发现在书本上的知识与实际的应用存在着不小的差距,书本上的知识很多都是理想化后的结论,忽略了很多实际的因素,或者涉及的不全面,可在实际的应用时这些是不能被忽略的,我们不得不考虑这方面问题,这让我们无法根据书上的理论就轻易的得到预想中的结果,有时甚至差别很大。通过这次实践使我们更深刻的体会到了理论联系实际的重要性,我们今后学习工作中会更加注重实际,避免成为只会纸上谈兵。9附录:参考文献:[1]张国锋.主编.单片机原理及应用.北京:机械工业出版社,2009.8[2]皮大能,南光群,刘金华编著.单片机课程设计指导书.北京:北京理工大学出版社,2010.7[3]张靖武,周灵斌编著.单片机原理、应用与PROTEUS仿真北京:电子工业出版社,2008.8[4]林立,张俊亮,曹旭东等编著.单片机原理及应用.北京:电子工业出版社,2009.710元器件清单:元件名称型号数量/个用途单片机AT89S521控制核心晶振12MHZ1晶振电路电容30pf2晶振电路排阻Respack91上位电阻电阻10k1复位电路按键开关BUTTON_11发出信号数码管7SEG-MPX1-CC2显示电路电阻1K1复位电路电解电容10uF1复位电路按键开关BUTTON_21复位电路排针若干连接排线若干连接11小组成员任务及安排:刘富强:主要负责查找资料,软件的设计以及调试,文档的撰写。姜子龙:主要负责硬件电路的焊接,PPT的制作以及答辩。