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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

单片机课程设计报告Word格式.docx

1、f.先用两个数码管动态显示时间,时间范围为0-60s g.用三个独立式按键实现秒表的启动、停止和复位功能。h.A机发送,B机接收3、设计思路1、硬件设计思路a.采用P0 口输出并联控制两个数码管的8 个段选控制端b.用P2.0、P2.1分别控制两个LED 数码管的位选控制端c.动态显示电路接法,LED 采用共阳极数码d.三个按键采用独立式键盘接法,e.两个按键连接到外部中断INT0 、INT1 的输人引脚P3.2和P3.3f.S4按键接到T1的外部脉冲输入引脚P3.5,以中断方式实现键盘输入状态的扫描g.其中S2为启动按钮,S3为停止按钮,S4 清零按钮。h.K1为复位键2、程序设计思路a.根

2、据设计的总体要求划分出各功能程序模块,分别确定主程序、子程序及中断服务程序结构b.对各程序模块占用的单片机资源进行统一调配c.对各模块间的逻辑关系进行细化,优化程序结构d.设计出各模块程序结构流程图e.最后依据流程图编制具体程序f.将整个程序划分为主程序、键盘扫描程序、秒计时程序三大模块g.其中主程序除完成初始化外,主要由动态显示程序构成h.秒计时程序由定时器0中断服务子程序构成i.键盘扫描程序也由各中断服务子程序来实现四、工作原理1、计时表原理图S1:复位按键 S2:启动按键 S3:暂停按键 S4:清零按键 T1(P3.5) INT1(P3.3) INT0(P3.2) 工作原理图如上图所示,

3、单片机所需的晶振频率由振荡电路提供,复位由复位电路实现。其中S2为启动按钮,S3为停止按钮,S4为清零按钮,三个按钮分别连接到外部中断INT0 、INT1 的输人引脚P3.2、P3.3和T1的外部脉冲输入引脚P3.5。 设置外部中断为下降沿触发,当按键未被按下时,其相应的引脚为高电平,而当按键被按下后,变为低电平,因此有下降沿,产生中断,从而执行相应的外部中断服务程序,实现启动和停止的功能。同理,只要设置T1为计数器,因为计数器是对外脉冲的下降沿计数,当按键按下时,产生下降沿,计数值加1,这样,只要选择合适的计数初值,使其只要加1后产生溢出,也会执行T1的中断服务程序,实现清零的功能。而对1S

4、时间的准确控制可以由定时器T0来控制,这样,就实现了T0、T1、INT0、INT1等4个中断源的运用。 对于数码管,采用P0 口输出并联控制两个数码管的8 个段选控制端,而用P2.0、P2.1分别控制两个LED 数码管的位选控制端,这是动态显示的电路接法,LED采用共阳极接法,0-9的共阳极数码管编码如下所示:共阳极数码管编码0xc00xf90xa40xb00x9912340x920x820xf80x800x9056789五、硬件设计图2 电路布线图(protel)图3 PCB图 元器件清单元件名称参数/型号说明封装数量单片机89C51厂家:ATMELDIP-40IC插座DIP40双列直插式/

5、40个引脚孔晶体振荡器12MHZ石英晶体振荡器(非温度补偿式)直插式数码管HS-5101BS2单排针插座/16个引脚孔,间距2.54mm说明:串口下载RS232RS232通讯MAX232DIP普通按键DTS65K复位按键6*6*4.3瓷片电容30pF10电解电容1040.1uF11电阻1k1210k1351014直流电源GM-0501005V/1A15电源插头DC座(中号)与直流电源的插口直径相同16串口接口9针17USB转串口线18三极管901419电源拨动开关单排20制PCB板六、软件设计(含流程图)K3(S4):001BH 方式2计数,中断 , 计数初值:256-1=255,秒计数清0K

6、1(S2):0013H 下降沿中断,启动T0、T1K2(S3):0003H 下降沿中断, 关断T0,暂停计时T0:000BH 方式1,50ms定时中断, 中断20次为1S。1. 两个LED 显示的时间由显示缓冲区31H 、30H 单元中的数据决定。动态显示每位的持续时间为lms ,采用软件延时。2. 1 秒钟的定时采用定时器T0 的方式1 来实现。3. T0每50ms中断一次,每中断一次计数单元R0 内容减1 ;若计满20 次,秒计数单元R4 内容加1。4. R4 单元中的数据采用压缩BCD 码按十进制计数,将该单元中的数据拆成个位和十位两个十进制数据后分别送至显示缓冲区的3OH 、31H 单

7、元。主程序流程图:1.显示程序开始 KAISHIKAISHI 定时器 T0初始化 秒表初始化 显示初始化 延时 是否显示完? 段码送P0口 位码送P2口 查表显示初始化Y N 开始 保护现场 清除溢出标志位,重置计数初值 秒值除以10 个位、十位送相应缓冲区 秒表加一 设定时器初值 是否60s ? 秒值清0 返回Y查询是否溢出2.查询程序3.按键子程序7、 调试(遇到的问题和解决方法)1、输人源程序。2、先调试主程序,实现基本的显示功能。3、当无键按下时,将一直显示初值“00”。4、再调试查询服务程序。5、当按键S2按下时,程序将会跳转到启动子程序,启动定时器开始计时。7、当按键S3按下时,程

8、序将会跳转到停止子程序,定时器停止计时,秒表显示内容保持不变;当按键S3在次按下时定时器开始计时。8、当按键S4按下时,程序将会跳转到清零停止子程序,停止定时器工作,秒表显示清零。9、最后将各模块联调实现全部功能。遇到的问题和解决方法这次课设我用的是汇编对我来说是一个新的挑战,在程序设计过程中也遇到了很大的困难,开始对编程软件不熟悉,就连很小的问题也调试了很久,后来慢慢的解决了这些问题自己也学到了许多东西。1.在调试时,遇到的最大的问题就是在使用开关查询的时候,对开关进行只按不松也会计时,停止和清零也是这样。后来加了一个按下开关时不计数,弹起来的程序,也就是等待。2.在开始做的时候自己没把原理

9、图看清楚,还是采用以前共阴极的方式来做结果数码管不亮。后来问同学知道这是共阳极的位选要给1、段选给0就可以亮了。 3.设置的暂停键只能暂停,不能恢复,只能重新按启动键才能开始计数。开始就把问题锁定在暂停程序那里,我发现我最开始编写的是按下暂停,则CLR TR0,关闭了启动,后来我改成了CPL TR0,将TR0取反这样再按下去就可以恢复。 4.按键没有消抖在后来调试中通过老师讲的必须消除抖动的不良后果,所以我加了一个延时10ms的子程序,从而消除抖动的影响。8、改进意见 主要是暂停按键按下暂停在按一下启动是有时候有点不灵敏,我想主要的原因可能是在按键扫描时但我们再次按下时CPU没有及时反应过来花

10、费时间在扫描按键上去了,我后来通过自己去查资料去学习问题的所在。我用的是查询方式做的后来自己看书把中断方式也写了通过改进把程序在完善,通过自己的学习编写程序多加一些功能。九、收获及体会通过这次的设计使我认识到我对单片机方面的知识知道的太少了,对于书本上的很多知识还不能灵活运用,有很多我们需要掌握的知识在等着我去学习,我会在以后的学习生活中弥补我所缺少的知识。在做本次课程设计的过程中,为了让自己的设计更加完善,查阅这方面的设计资料是十分必要的,同时也是必不可少的。其次,在这次课程设计中,我们运用到了以前所学的专业课知识,这是我做这次课程设计的又一收获是要做好一个课程设计,就必须做到:在设计程序之

11、前,对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;要有一个清晰的思路和一个完整的的软件流程图;在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便;在设计课程过程中遇到问题是很正常德,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题的课程设计结束了,但是从中学到的知识会让我受益终身。发现、提出、分析、解决问题和实践能力的提高都会受益于我在以后的学习、工作和生活中。设计过程,好比是我们人类成长的

12、历程,常有一些不如意,但毕竟这是第一次做,难免会遇到各种各样的问题。在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。我们通过查阅大量有关资料,若遇到实在搞不明白的问题就会及时请教同学,使自己学到了不少知识,也经历了不少艰辛,但收获同样巨大。通过这次课程设计我也发现了自身存在的不足之处,虽然感觉理论上已经掌握,但在运用到实践的过程中仍有意想不到的困惑,经过一番努力才得以解决。这也激发了我今后努力学习的兴趣,我想这将对我以后的学习产生积极的影响。通过这次设计,我懂得了学习的重要性,了解到理论知识与实践相结合的重要意义,学会了坚持、耐心和努力,这将为自己今后的学

13、习和工作做出了最好的榜样。我觉得作为一名自动化专业的学生,单片机的课程设计是很有意义的。 更重要的是如何把自己平时所学的东西应用到实际中。我认为这个收获应该说是相当大的。本次的设计使我从中学到了一些很重要的东西,那就是如何从理论到实践的转化,怎样将我所学到的知识运用到我以后的工作中去。在大学的课堂的学习只是在给我们灌输专业知识,而我们应把所学的用到我们现实的生活中去,此次的设计给我奠定了一个实践基础,我会在以后的学习、生活中磨练自己,使自己适应于以后的竞争。10、 源程序(含注释) 简易时钟(时分秒) ORG 0000H ;初始化程序入口地址 AJMP MAIN ;主程序 ORG 0030H

14、;程序入口地址MAIN: MOV TMOD,#01H ;定时器T0工作于方式1 MOV DPTR,#TABLE ;DPTR指向TABLE表首地址 MOV R1, #59 ;秒表时间置初值 MOV R2, #59 ;分钟时间置初值 MOV R3, #23 ;小时时间置初值LP1: MOV R0, #20 ;软件计数器置初值LP2: MOV TH0, #3CH ;置50ms定时初值高位 MOV TL0, #0B0H ;置50ms定时初值低位LP3:LCALL DISP ;调用显示程序 JNB P3.2, K1 ;判断启动键是否按下 JNB P3.3, K2 ;判断停止键是否按下 JNB P3.5,

15、 K3 ;判断清零键是否按下 JNB TF0, LP3 ;判断中断标志位是否溢出 CLR TF0 ;定时50到ms,则中断标志位清零 DJNZ R0, LP2 ;中断二十次 MOV R0,#20 ;重新装软件计数器初值 INC R1 ;1秒时间到,秒表数加一 CJNE R1,#60,LP1 ;与60比较,小于60就跳转 MOV R1, #0 ;若秒表数加到60秒,则清零 INC R2 ;60秒时间到,分钟数加一 MOV A,R2 ;R2地址里面的数赋给A CJNE A,#60, LP1 ; MOV R2, #0 ;若秒表数加到60分钟,则清零 INC R3 ;60分钟时间到,小时数加一 MOV

16、 A,R3 ;R3地址里面的数赋给A CJNE A,#24, LP1 ;与24比较,小于24就跳转 MOV R3, #0 ;若秒表数加到24小时,则清零K1: LCALL DELAY ;按下,调用显示子程序 LCALL DISP ;消除抖动 JB P3.2, LP3 ;判断启动键是否释放 SETB TR0 ;启动T0 LJMP LP3 ;跳转到启动键是否按下的指令段,不断判断K2: LCALL DISP ; JB P3.3, LP3 ;判断暂停键是否释放 CPL TR0 ;取反TR0 跳转到暂停键是否按下的指令段,不断判断K3: LCALL DELAY ; JB P3.5, LP3 ;判断清零

17、键是否释放 CLR TR0 ;关闭T0 MOV R1, #0 ;秒表时间清零分钟时间清零 MOV R4, #0 ;小时时间清零LJMP LP3 ;跳转到清零键是否按下的指令段,不断判断 DISP: MOV A,R1 ;显示程序,先将秒表计时值给累加器作为被除数 MOV B,#10 ;除数为10,存放在B累加器 DIV AB ;当前值除以10 MOV 20H,A ;得出的商送给十位 MOV 21H,B ;得出的余数送给个位 MOV A,20H ;十位显示 MOVC A,A+DPTR ;查表找个位数段码 MOV P0,A ;将个位段码送给P0口 SETB P2.4 ;用第一个数码管显示十位数延时

18、CLR P2.4 ;清零 MOV A,21H ;个位显示 MOVC A,A+DPTR ; MOV P0,A ; SETB P2.5 ;用第二个数码管显示十位数 LCALL DELAY ; CLR P2.5 ; MOV A,R2 ;显示程序,先将分钟计时值给累加器作为被除数 MOV B,#10 ;同理秒表显示程序 DIV AB MOV 30H,A MOV 31H,B MOV A,30H MOVC A,A+DPTR MOV P0,A SETB P2.2 LCALL DELAY CLR P2.2 MOV A,31H MOVC A,A+DPTR MOV P0,A SETB P2.3 CLR P2.3 MOV A,R3 ;显示程序,先将小时计时值给累加器作为被除数 MOV 40H,A MOV 41H,B MOV A,40H SETB P2.0 CLR P2.0 MOV A,41H SETB P2.1 CLR P2.1 RETDELAY: MOV R5,#10 ;延时子程序(1ms)DL0: MOV R4,#50 DJNZ R4,$ DJNZ R5,DL0 RET ;延时子程序返回TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H ;共阳极0-9显示代码 DB 92H,82H,0F8H,80H,90H END

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

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