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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

单片机计数器设计报告.docx

1、单片机计数器设计报告 单片机系统课程设计报告学 院(部): 电气与信息工程学院 专 业: 电气工程及其自动化 学 生姓 名: 指 导老 师: 班 级: 学号 2013年12月单片机系统课程设计报告一:系统设计要求:1最大计数值为:99时59分59秒9/10秒,约100小时。2系统采用2个按键控制输入,其中一个按键用作系统清0,另一个按键用作秒表的启动/停止。3. 系统采用7个LED数码管实现计时显示。4. 电路原理图:使用protel或visio或proteus 绘制。 5. 编程思路,用visio画程序设计流程图,且用文字描述二:系统设计: 1:总体方案的设计数字秒表具有显示直观、读取方便、

2、精度高等优点,在计时中广泛应用。本设计中用单片机和数码管组成数字秒表,力求结构简单。设计中包括硬件电路的设计和系统程序的设计。硬件电路主要有主控制器、控制按钮与显示电路组成。主控制器采用单片机AT89C51,显示电路采用七位共阳极数码管显示计时时间。2.硬件设计2.1.:输出设计: 设计要求在数码管上进行数据显示,输出硬件设计可以采用1个BCD七段译码器74LS47驱动数码管的段选端,输出字形信息,采用38译码器输出作为动态扫描时数码管的位选痛信号。这样在一定程度上节约了单片机的硬件资源,也简化了软件设计时的任务量。在硬件设计时还应当注意一下问题:(1)数码管接口方法与动态扫描原理;(2)时、

3、分、秒计数单元地址的分配及BCD码的调整方法;(3)按键识别与消除抖动的方法。2.2:显示设计: 数码管显示可以分为静态显示和动态显示两种。由于本设计需要采用数码管显示时间,如果静态显示则占用的口线多,硬件电路复杂,所以采用动态显示。 秒表设计原理图如图1.0所示。单片机采用通用的AT89C51芯片,显示器为7个共阳极LED数码管,用1个BCD七段译码器74LS47驱动数码管(74LS47的输入为BCD码,其输出级为集电极开路输出,可直接驱动七段数码管,具有首尾消零等特点),用38译码器74LS138的输出作为动态扫描时数码管的选通信号。因为采用了上述两个芯片,所以在对数码管进行扫描显示时,只

4、需要单片机的7条I/O线就能完成显示功能。 电路图中采用P1.0P1.3作为显示数据值的输出,连接在BCD七段译码器74LSs4的1310管脚上(译码器74LS47的BCD码输入端);P1.4P1.6作为扫描值的输出端连接在3874LS138译码器的输入端(74LS138的A,B,C)。因此,写程序应将P1口的高四位为扫描值,低四位为显示数据值(分离BCD码)。单片机的P0.0P0.1分别接在两个开关上,以控制启动/停止和清零。秒表系统功能如下:(1)开机时,秒表显示从00:00:00:0开始计时。(2)按键S1控制秒表的启动/停止。(3)按键S2控制秒表的清零。硬件电路按总体框图进行设计:7

5、4LS47AT89C51单片机控制开关七位数码管74LS138 图1:硬件电路总体框图三:系统总体电路的设计 AT89C51单片机为主电路的核心部分,各个电路均与单片机相连,由单片机统筹协调各个电路的运行工作。开始键和暂停键使用了检测的方法,所以需要连到单片机的P0.0和P0.1引脚上,对这两个I/O口进行循环扫描,检测是否按下。显示电路由七位数码管组成,采用动态显示方式,因此有8位段控制和7位位控制,并且通过74LS47译码器进行控制8位段控制,接P1口,P1.0P1.3分别控制数码管的a b c d e f g 显示,位控制有38段译码器74LS138进行位控制接在P1.4P1.6的I/O

6、口上,对数码管实现位控制。系统总体电路如下图所示: 图2: 总体电路图四:软件设计4.1主程序设计本系统程序主要模块由主程序、定时中断服务程序、显示子程序和扫描子程序组成。其中主程序是整个程序的主体。可以对各个中断程序进行调用。协调各个子程序之间的关系。 主程序:首先进行初始化。设置秒表的计时初值为00:00:00:0,设置T0高低位初值,且允许T0中断。然后检测S1S2是否按下,当S1按下时,启动T0进行4ms定时,开始进行计时。系统主程序流程图: N主程序置显示初值:00.00.00.0置T0为4ms定时开T0中断Y 启动,停止,清零S1S2按下 图3: 主程序流程图4.2:定时器T0中断

7、服务子程序: 中断服务子程序的作用是进行“时”、“分”、“秒”的计时与显示。定时器T0用于定时,定时周期设为4ms,中断累计25次(即0.1秒),对0.1秒计数单元进行加1操作。时间计数值分别存放在2DH(0.1秒)、2CH(秒)、2BH(分)、2AH(时)内存单元中。在计数单元中采用组合BCD码计数,0.1秒是满10进位,时、分、秒满60进位。0.1S计时采用内部中断方式计时,通过内部中断设置4ms的定时溢出中断,单片机的频率为12MHz,则机器周期为1us,要实现4ms的定时,在4ms内需要计数N次: :N=4ms1us=4000次令定时器/计数器0工作方式1下,此时计数初值X为: :X=

8、最大计数值M-计数次数N =65536-4000=61536=0F060H即向TH0写入计数初值0F0H,向TL0写入计数计数初值60H。TMOD初始化:TMOD=00000001B=01H。GATE=0,C/T=0,M1=0,M0=1.TCON初始化:TR0=1,启动T0。IE初始化:开放中断EA=1,允许定时器T0中断ET0=1。定时器T0中断服务程序流程图如图所示: 图4:TO中断服务流程图显示子程序DISP:DISP子程序的作用是分别将时间计数单元2DH(0.1秒)、2CH(秒)、2BH(分)、2AH(时)中的十进制时间值(组合BCD码)转化为个位和十位(分离BCD码)并分别存放在显示

9、缓冲中。显示缓冲区的地址为20H26H。其中20H中存放0.1秒数据,21H22H中存放秒数据,23H24H中存放分钟数据,25H26H中存放小时数据。由于每一个地址单元内均为分离BCD码,用BCD七段译码器74LS47直接进行译码,因此不需要软件方式对BCD码数据进行译码。 扫描子程序SCAN:SCAN的作用是把显示缓冲区中的数据依次送往显示器显示。把扫描值作为高4位,显示数值作为低4位,输出到P1口,以完成显示。因为采用38译码器74LS138作为扫描输出,故用28H单元存放扫描指针,即28H单元中存放的是数码管的序号。显示时,只需取出20H26H某一地址中的数据,并从P1口的低4位输出,

10、同时P1口的高四位作为扫描值输出,这样就能保证数码管正常工作。4.3 系统调试Proteus ISIS是英国Labcenter公司开发的电路分析与实物仿真软件,它可以仿真、分析各种模拟器件和集成电路。该软件的主要特点为:实现了单片机仿真和SPICE电路仿真相结合的功能,支持目前主流单片机系统的仿真,提供了软件调试的功能,具有强大的原理图绘制功能。总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大。在电子领域中起到了很大的作用,它的出现仿真不需要先焊接电路板,可以先仿真调试通过之后再焊接电路,节省了不少在硬件调试上花费的时间。打开已经画好的Proteus DSN文件,双击图

11、中的AT89C51芯片,就弹出一个窗口,在program file项中通过路径选择在keil中生成hex文件,双击选中后确定,这样仿真图中的AT89C51芯片就已经读取了本设计中的hex文件。然后进行仿真,仿真图如下所示: 图5:proteus仿真图五:源程序ORG 0000HJMP STARTORG 000BHJMP TIM0START:MOV SP,#70HMOV 28H,#00MOV 2AH,#00HMOV 2BH,#00MOV 2CH,#00MOV 2DH,#00 MOV P1,#0F0HMOV R5,#1MOV TMOD,#01HMOV TH0,#0F0HMOV TL0,#60HMO

12、V IE,#82HMOV R4,#25LOOP:JB P0.0,N2CALL DELAYSETB TR0MOV A,R5CPL AMOV R5,AN1:JNB P0.0,$CALL DELAYN2:JB P0.1,LOOPCALL DELAYCJNE R5,#0,LOOPCLR TR0JMP START N3:JNB P0.1,$CALL DELAYJMP LOOPTIM0:MOV TH0,#0F0HMOV TL0,#60HPUSH ACC PUSH PSWDJNZ R4,X2MOV R4,#25CALL CLOCK CALL DISPX2:CALL SCANPOP PSWPOP ACCRET

13、ISCAN:MOV R0,#28HCJNE R0,#7,X3MOV R0,#00X3:MOV A,R0ADD A,#20HMOV R1,AMOV A,R0SWAP A ORL A,R1MOV P1,AINC R0RETCLOCK:CJNE R5,#1,X4MOV A,2DHADD A,#1DA AMOV 2DH,ACJNE A,#10H,X4MOV 2DH,#00MOV A,2CHADD A,#1DA AMOV 2CH,ACJNE A,#60H,X4MOV 2CH,#00MOV A,2BHADD A,#1DA A MOV 2BH,ACJNE A,#60H,X4MOV 2BH,#00MOV A,

14、2AHADD A,#1MOV 2AH,ACJNE A,#99H,X4MOV 2AH,#00X4:RETDISP:MOV R1,#20HMOV A,2DHMOV R1,2DHINC R1MOV A,2CHMOV R1,AMOV B,#10DIV ABMOV R1,BINC R1MOV R1,AINC R1INC R1MOV A,2BHMOV B,#10HDIV ABMOV R1,BINC R1MOV R1,AINC R1MOV A,2AHMOV B,#10HDIV ABMOV R1,BINC R1MOV R1,ARETDELAY:MOV R6,#60HD1:MOV R7,#248DJNZ R7,

15、$DJNZ R6,D1RETEND六:总结 经过两个星期紧张而充实的单片机实训,老师所要求的程序最终在自己的努力下调试出来了,并且通过了老师的验收,这次实训让我有了很大的收获。从刚开始接到课题:一个计数到99小时59分59秒0.9秒的计时秒表如何实现。所需的数码管有七位,直接利用单片机的I/O口显然很难实现,通过老师的指导,通过利用扫描方式来控制八段数码管,这样既能节省很多硬件资源,又可以在排线布局方面节省很多时间,使整体电路简洁明了。因此:如何实现扫描控制成为了本次课题的重点突破目标。在前期的准备过程之中,通过认真翻阅课本,分析单片机的内部工作原理和每条语句的功能。对单片机内部的组成结构和单

16、片机指令运用上应当注意的问题,认真查找参考书,翻阅资料。有些指令虽然能够使用,但比较复杂,如何更的使用指令,并且更加合理的利用指令方面有所欠缺。因此,我从图书馆借来许多单片机设计方面的书籍来看,认真分析程序,从程序中结合自己所学过的知识认真分析,如何把指令更好的运用到自己到自己的设计之中去。在秒表设计的另一设计中:中断计时功能也十分重要。如何正确使用指令完成所需要的功能,都需要对程序进行很好的分析。通过认真调试才能更好的运用。平时书上所学的零碎的只是进行整理,各种语句的功能和使用方法,只有通过多学多调试,进行仿真才能真正掌握。在设计过程中出现的问题也是挺多的:首先由于对程序的编写设计量不足,容

17、易出现不知如何入手的情况,通过对程序多分析,然后自己从一些简单的程序开始编译调试,逐渐熟悉,由简单到复杂,每个程序都是有很多语句组合在一起来实现其功能的,这样在编写时可以减少很多的麻烦。其次:有时候,在理论上编程没有什么错误,但是在调试和仿真的时候出现错误,通过查阅资料得知,单片机内部执行程序的有些区域是有限制的,超出区域会出现运行错误。在仿真时与在理论上也有很多的差别,因为要考虑硬件部分的因素。通过查找问题出现在哪一部分,并且近一步分析一些相同指令的功能,进行替换之后进行仿真是是否符合仿真电路,解决问题。在使用proteus绘制电路图示,如何布局才能使整体更合理,如何更好地使用各个单片机的I

18、/O口都需要知晓其原理。另外,在proteus中如何快速查找各种元件,节约时间绘制电路图时间,都是需要多查阅资料的。第三:在编写软件过程中,如何运用编程思想去解决问题,也十分关键。刚开始编程是,对于如何实现一个键控制秒表的启动和停止,我想了许久,最后想到利用计数奇、偶的不同来控制。后来在其他资料上看到利用奇偶校验和取反等许多中方法,能够实现相同的功能,但是程序要简洁很多。让我在学习中不对积累,不断丰富自己的知识。通过自己的努力,最终实现了软件仿真调试的成功。虽然在答辩的时候我的表现不够好,说明我的知识还很多欠缺。但是,通过自己编写程序并进行调试,让我的单片机知识有了很大的提升。看到只有两位同学

19、采用汇编编写的程序,而我是其中之一,让我为我的努力和收获而高兴。在很多时候,调试出问题时,自己也想放弃,但是坚持下来才可能成功,我这样告诫自己。通过本次设计,不仅让我的自主的学习能力有了很大的提升,锻炼了我查阅资料解决问题的能力,而且对自己的毅力也是一次考验。让我在自己的学习道路上有了更多的积累,为以后的工作打下良好的基础,付出决定收获!参考资料:1 欧伟明.单片机原理与应用.北京:电子工业出版社,2009.72 杜树春.基于Proteus和Keil C51的单片机设计与仿真.北京:电子工业出版社, 2012.23 李忠国,陈刚.单片机应用技能实训.北京:人民邮电出版社,2006.114 冯育长.单片机系统设计与实例分析.西安:西安电子科技大学出版社,2007.55 任万强.单片机原理与应用.北京:中国电力出版社,2007.16 倪志莲.单片机应用技术.北京:北京理工大学出版社,2007.6

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

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