基于51单片机的零件计数器设计_第1页
基于51单片机的零件计数器设计_第2页
基于51单片机的零件计数器设计_第3页
基于51单片机的零件计数器设计_第4页
基于51单片机的零件计数器设计_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、题 目 专业 学号 姓名 指导教师学校单片机课程设计报告零件计数器通信工程刘玉宏河海大学常州校区17摘要:零件计数器生产实践中具有很实际的用途,我们所设计的零件计数器的功能是把接在INTO上的单稳信号当作零件信号,每来一个零件,单片机计数一次,当计满10次时,蜂鸣器发出一声警告音,并使继电器闭合一次,产生零件打包动作,要求LED上显示当前一共生产了多少零件,并能通过串口将零件数目发送给PC机。选择这个项目可以帮助我们更加了解中断、定时器及串口是如何工作的,提高对实际问题的动手操作能力以及解决问题的能力。本课程采用C51编写程序,通过KeilC编写为机器代码,烧写入单片机中,在实验箱上进行操作,

2、完成单片机这种实用工具的整体的学习。关键字:单片机零件计数器LED显示串口通信目录一、系统设计1.1 主要组件及电路框图41.2 软件设计方框图及流程图51.3 电路功能7二、实验过程及结果2.1 程序设计92.2 调试过程132.3 问题及解决132.4 调试结果13三、结论3.1 课程设计特点及贡献143.2 改善建议143.3 心得体会14参考文献15附录16系统设计1.1 主要组件及电路框图本课程设计使用的实验箱主要由单片机最小系统,LED数码管显示部分,外部中断控制部分,独立式与行列式键盘按键输入部分,用行口通信部分,蜂鸣器与继电器等部分组成。电路总图与功能如图所示,每当来一次外部中

3、断时,内部计数一次,并将数值通过4位共阴数码管动态显示出来。而单片机的P2可以选择四根不同的数码管来动态显示,通过视觉暂留达到同时显示的效果。同时内部程序检测每当计数十次时,会形成一个继电器闭合的零件打包动作,并通过程序使得蜂鸣器发出警报。1.2 软件设计框图及流程图零件计数器系统由多个函数构成,其中包括主函数,初始化函数,延时函数,串口发送函数,蜂鸣器函数,继电器函数等。串口和外部中断初始化函数显示子函数延时函数蜂鸣器函数继电器函数串口通信函数单片机零件计数器软件系统各个函数框图流程图:初始化零件数为0LED动态显示零件数加1LED动态显示蜂鸣器响一次,继电器闭合,执行零件打包执行串口发送函

4、数1.3 主要电路功能L二:江 TITXE-叁盟寿gk12PP1 P0 口D12345C- 1一;一一 r 一2一上 p p p p pp p P第0:度界屋一 PPPPPP-PP。1 上 3 4 w d ?-11 1 1 I - - 1 PPPPPPPPrlmRM1 ran A1-E.PB部分是单片机的最小系统部分,单片机为内含8KFLAS卅序存储器的STC89C52RCEA接高电平;各并行口都加了10K的上拉电阻;晶振为11.0592M。设置了上电复位和手动复位电路。S1为手动复位按钮。*03LEBL SIS43AH co上口naimiiiiiiinC部分电路由4位一体的数码管LED1单个

5、数码管LED2和8个独立发光二极管L1-L7组成。这3个部分都是共阴结构,并联在一起,连接在P0口上。LED1用于完成LED动态显示实验,各个位选线为P24P27,段码由P0口输出;LED2的COMIS接地,完成LED静态显示实验;L1-L7,可以方便地读出P0输出的二进制数据,亦可做流水灯实验。7407在此起驱动作用。I部分电路为蜂鸣器和继电器电路。蜂鸣器采用9012三极管驱动,其基极接到RD端,当RD端为低电平时,三极管导通,蜂鸣器响。否则关断。继电器采用9013三极管驱动,其基极接到WR端,当WR端为低电平时,三极管关断,继电器不吸合,常闭触点闭合,常开触点打开,D1熄灭;反之则反。ui

6、nt count1 = 0;uint count2 = 0;uint Leout4;sbit Beep = P3A7;sbit RELAY = P3A6;二、实验过程与结果2.1 程序设计#include#defineuintunsignedint#defineucharunsignedchar/*LED的字模,共阴数码管0-9*/ucharcodetable尸0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40;/定义计数变量/定义蜂鸣器对应单片机引脚定义继电器对应单片机引脚/*延时函数*/voiddelay(uintz)uinti、j

7、;for(i=z;i0;i-)for(j=110;j0;j-);/*数码管动态显示函数*/voiddisplay。uchari;LedOut3=tablecount2%10000/1000;LedOut2=tablecount2%1000/100;LedOut1=tablecount2%100/10;LedOut0=tablecount2%10;for(i=0;i4;i+)P0=LedOuti;switch(i)case0:P2=0x7f;break;case1:P2=0xbf;break;case2:P2=0xdf;break;case3:P2=0xef;break;delay(5);/*蜂

8、鸣器函数*/voidbeep()Beep=0;delay(100);Beep=1;/*继电器函数*/voidrelay()RELAY=RELAY;/*串口发送函数*/voidsend()ucharLedOut14;LedOut13=count2%10000/1000+0x30;LedOut12=count2%1000/100+0x30;LedOut11=count2%100/10+0x30;LedOut10=count2%10+0x30;SBUF=LedOut13;while(!TI);TI=0;SBUF=LedOut12;while(!TI);TI=0;SBUF=LedOut11;while

9、(!TI);TI=0;SBUF=LedOut10;while(!TI);TI=0;SBUF=n;while(!TI);TI=0;/*外部中断 0函数*/errupt0EX0=0;count1+;/中断计数count2+;send();EX0=1;/*串口初始化函数*voidinitUart(void)TMOD|=0x20;SCON=0x50;PCON&=0x7f;TH1=0xfd;TL1=0xfd;TR1=1;*-j-*voidmain()initUart();IT0=1;下降沿触发EA=1;开外部中断EX0=1;while(1)display。;if(count

10、1=10)countl=0;beep();relay();2.2 调试过程由于单片机实验箱的存在,因此硬件部分无需做过多准备,主要是进行软件程序方面的调试。程序的调试我们是分一个一个模块进行的,具体的顺序是先进行数码管动态显示模块的调试,然后是蜂鸣器和继电器的调试,最后是用口通信的调试。这样调试的好处是,当某一个功能没有实现时,我们可以知道是哪一段程序出了问题,可以迅速地对其修改,直到每个模块都能正确而准确地完成各自的功能为止。等到所有的模块调试完毕,就能实现零件计数器的功能。这样与整体调试相比,等到出现问题,再一个个地去找是哪一段程序发生了错误,大大地提高了工作效率,节省了时间。2.3 问题

11、与解决问题一:蜂鸣器的声音太小,几乎无法听到。解决方案:改变蜂鸣器的延时时间,直到合适为止。问题二:数码管动态显示的调试时,显示的数字闪的比较厉害。经过多次调试,最终取得了比较好的显示效果。解决方案:是因为数码管显示延迟的时间太短,改变延时的时间,直到调试成功。问题三:进行的串口调试时,PC机但发现收到的数据是乱码,不是发送的数据。解决方案:把发送的数据由十六进制显示改为字符显示,在程序中也有所调整后,发现PC机收到的数据即是当前的计数数据。2.4 调试结果经过反复调试,最终解决了遇到的问题,较好地实现了零件计数器的功能:1、每来一个零件,单片机计数一次,LED上显示当前一共生产了多少零件;2

12、、当计满10次时,蜂鸣器发出一声警告音,并使继电器闭合一次,产生零件打包动作;3、可以通过串口在PC上显示零件个数。三、结论3.1 本课程设计的主要特点及贡献本次课程设计的主要特点是利用C51编程实现基于单片机的零件计数器,而非使用汇编语言。在编程中,要学会写出各种子程序,然后合理的调用它们,还要根据实际显示结果不断地去修改和完善,使其最终显示出符合要求的结果。设计中用到烧写工具以及串口助手等软件工具,无需考虑硬件设计,只需完成软件设计部分。本次课程设计完成了基于单片机的零件计数器的设计,不仅考察了我对于单片这门课的学习掌握情况,还考察了我对C语言的基础知识是否扎实,让我们学会将各学科的知识融

13、会贯通。3.2 改善建议本课程设计中还有一些需要改善的方面:一、当零件计满10个时,继电器闭合一次,产生零件打包动作,却不能够显示打包的次数,可以设计一段可以显示打包次数的程序。二、可以通过一些记忆芯片,实现当前计数结果的保存,一共查询及对数据的相关处理。3.3 心得体会通过这学期对单片机这门课程的学习,我对单片机的原理和运用有了一定的了解。但是当自己动手去设计零件计数器时,还是遇到了很多的问题。程序出现了许多错误,使得调试时无法成功。我们选择的零件计数器考功能是当来一次外部中断时,内部计数一次,并将数值通过4位共阴数码管动态显示出来。而单片机的P2口可以选择四根不同的数码管来动态显示,通过视

14、觉暂留达到同时显示的效果。同时内部程序检测每当计数十次时,会形成一个继电器闭合的零件打包动作,并通过程序使得蜂鸣器发出警报。考查的主要是中断、定时器、串口通信部分的内容。考试后对单片机的许多内容都有了一点生疏,经过这段时间的学习,我对过去所学的知识进行了温习,对我的课题零件计数器所用到的知识也进行了专门的梳理和消化。这次课程设计使我对单片机的C语言编程有了更深刻的认识和更扎实的掌握,通过不断修改,不断尝试,我对源代码各个模块的函数都有了一个非常深入的掌握。我懂得了从书本上学到的知识是什么有限的,只有自己真正地动手去做,才能知道自己还有许许多多的不足,对这门课程的掌握还是远远不够。书本上的知识是

15、死的,只有通过实践和具体的实例运用,才能真正掌握知识、取得进步。在自己实际操作时,发现错误并且解决错误的这样一个过程时十分重要的,这也是能够最快提高我们对专业知识的掌握的方法。我们都知道理论与实际相结合是很重要的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。通过这次课程设计,我了解到各学科之间的知识是融会贯通的,所以打好基础十分重要,我也知道了自己的不足。这次动手操作的机会对我来说十分重要,我感觉我又了解了许多我以前不知道的东西。今后我也会更加注意动手能力的培养,再实践中巩固自己的理专业知识。参考文献1张友德,赵志英.

16、单片微型机原理、应用与实验第五版.复旦大学出版社2刘玉宏.单片机实验和课程设计任务书3丁海军、何坤金、王林等编著,程序设计基础(C语言).北京航空航天大学出版社附录一、烧写程序S-TC-ISP-http:r/mIHV-PjBMry.cm 收小支# : 1 冲之即平)Ve,SH匚尊文件值眩|_ ;|工蛆4,:* Mfhr i v D-ie*LtlffifrK HTSl法勤僧.呼. ?.:. i ; .,. 5l .i;*-St-pUWx 总GitsK 鞋舞基片I件等*2伊*: Qm Fili / 口讦复件使悻麻匿用市用了陋前2MhWf Mit 楂型*cm im圣帕出辑._卬“ 11rMi f!.

17、ifi.声行口呆曲出构本OB:庐前 三吊图0*就 2SI0O :一港置因I mt事*m禺戒总率,才崛e率:际3Si4H* EH* 7*BiWl a.N. I下次, Ft;用PE用坦月酎喝打!、口:弁晦Ji.FUiSr.:JL41,JS由M9上电宣怪-冷磨曰伟:ih骷Jt人已打肝在flh,c1啊m,万圣母国笄需“白日讦次我,工更比配自ZATP+开立固定:三下*/e* 力可霜U=殍 Cflffetwriv i:工,飞械 7刖|*r:,访S.小史沙14霍中 能胆4OOCK0 OOM1QP 000030 KW7O 1MHCHOOOOMO 4Kom ocxmo TOO OOOQA0 TOOKI (nma Dooa ga OCOOTO AL I A. Eg再clEccGnMolM K 依ffigwss 3 ssssssss iiTSn2BMolcclocnMcfQOacEa

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论