ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:858.73KB ,
资源ID:565125      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/565125.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于51单片机的零件计数器设计1.docx)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于51单片机的零件计数器设计1.docx

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

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

3、组成。电路总图与功能如图所示,每当来一次外部中断时,内部计数一次,并将数值通过4位共阴数码管动态显示出来。而单片机的P2口可以选择四根不同的数码管来动态显示,通过视觉暂留达到同时显示的效果。同时内部程序检测每当计数十次时,会形成一个继电器闭合的零件打包动作,并通过程序使得蜂鸣器发出警报。1.2 软件设计框图及流程图零件计数器系统由多个函数构成,其中包括主函数,初始化函数,延时函数,串口发送函数,蜂鸣器函数,继电器函数等。 单片机零件计数器软件系统各个函数框图流程图:否是否是是否1.3 主要电路功能B部分是单片机的最小系统部分,单片机为内含8K FLASH程序存储器的STC89C52RC,EA接

4、高电平;各并行口都加了10K的上拉电阻;晶振为11.0592M。设置了上电复位和手动复位电路。S1为手动复位按钮。C部分电路由4位一体的数码管LED1、单个数码管LED2和8个独立发光二极管L1-L7组成。这3个部分都是共阴结构,并联在一起,连接在P0口上。LED1用于完成LED动态显示实验,各个位选线为P24P27,段码由P0口输出;LED2的COM端接地,完成LED静态显示实验;L1L7,可以方便地读出P0输出的二进制数据,亦可做流水灯实验。7407在此起驱动作用。I部分电路为蜂鸣器和继电器电路。蜂鸣器采用9012三极管驱动,其基极接到RD端,当RD端为低电平时,三极管导通,蜂鸣器响。否则

5、关断。继电器采用9013三极管驱动,其基极接到WR端,当WRD端为低电平时,三极管关断,继电器不吸合,常闭触点闭合,常开触点打开,D1熄灭;反之则反。2、实验过程与结果2.1 程序设计#include#define uint unsigned int#define uchar unsigned char/*LED 的字模,共阴数码管0-9*/ uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40; uint count1 = 0; /定义计数变量uint count2 = 0;uint Leout4;sb

6、it Beep = P37; /定义蜂鸣器对应单片机引脚sbit RELAY = P36; /定义继电器对应单片机引脚/*延时函数*/void delay(uint z) uint i、j; for(i=z; i 0; i-) for(j = 110; j 0; j-);/*数码管动态显示函数*/void display() uchar i; LedOut3 = tablecount2%10000/1000; LedOut2 =tablecount2%1000/100; LedOut1 = tablecount2%100/10; LedOut0 = tablecount2%10; for( i

7、=0; i4; i+) P0 = LedOuti; switch(i) case 0:P2 = 0x7f;break; case 1:P2 = 0xbf;break; case 2:P2 = 0xdf;break; case 3:P2 = 0xef;break; delay(5); /*蜂鸣器函数*/void beep() Beep = 0; delay(100); Beep = 1;/*继电器函数*/void relay() RELAY = RELAY;/*串口发送函数*/void send() uchar LedOut14; LedOut13 = count2%10000/1000 + 0

8、x30; 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(!TI); TI = 0; SBUF = LedOut10; while(!TI); TI = 0; SBUF = n; while(!TI); TI = 0;/*外部中断0函数*/void count

9、er() interrupt 0 EX0=0; count1+; /中断计数 count2+; send(); EX0=1;/*串口初始化函数*/void initUart(void) TMOD|=0x20; SCON=0x50; PCON&=0x7f; TH1=0xfd; TL1=0xfd; TR1=1;/*主函数*/void main() initUart(); IT0=1; /下降沿触发 EA=1; /开外部中断 EX0=1; while(1) display(); if(count1=10) count1 = 0; beep(); relay(); 2.2调试过程由于单片机实验箱的存在

10、,因此硬件部分无需做过多准备,主要是进行软件程序方面的调试。程序的调试我们是分一个一个模块进行的,具体的顺序是先进行数码管动态显示模块的调试,然后是蜂鸣器和继电器的调试,最后是串口通信的调试。这样调试的好处是,当某一个功能没有实现时,我们可以知道是哪一段程序出了问题,可以迅速地对其修改,直到每个模块都能正确而准确地完成各自的功能为止。等到所有的模块调试完毕,就能实现零件计数器的功能。这样与整体调试相比,等到出现问题,再一个个地去找是哪一段程序发生了错误,大大地提高了工作效率,节省了时间。2.3问题与解决问题一:蜂鸣器的声音太小,几乎无法听到。解决方案:改变蜂鸣器的延时时间,直到合适为止。问题二

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

12、上显示零件个数。三、结论3.1 本课程设计的主要特点及贡献 本次课程设计的主要特点是利用C51编程实现基于单片机的零件计数器,而非使用汇编语言。在编程中,要学会写出各种子程序,然后合理的调用它们,还要根据实际显示结果不断地去修改和完善,使其最终显示出符合要求的结果。设计中用到烧写工具以及串口助手等软件工具,无需考虑硬件设计,只需完成软件设计部分。本次课程设计完成了基于单片机的零件计数器的设计,不仅考察了我对于单片这门课的学习掌握情况,还考察了我对C语言的基础知识是否扎实,让我们学会将各学科的知识融会贯通。3.2 改善建议本课程设计中还有一些需要改善的方面:1、当零件计满10个时,继电器闭合一次,产生零件打包动作,却不能够显示打包的次数,可以设计一段可以显示打包次数的程序。2、可以通过一些记忆芯片,实现当前计数结果的保存,一共查询及对数据的相关处理。3.3 心得体会

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

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