欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    单片机基于C单片机的秒表课程设计.docx

    • 资源ID:16415843       资源大小:1.13MB        全文页数:20页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    单片机基于C单片机的秒表课程设计.docx

    1、单片机基于C单片机的秒表课程设计单片机课程设计报告姓名:学号:班级:1、 单片机原理与接口技术课程设计说明书22、 设计任务23、 设计题目24、 功能分析25、 总体设计24.1 硬件设计34.1.1 80C51单片机34.1.2 晶体振荡电路44.1.3 复位电路44.1.4 按键电路54.1.5 显示电路5 4.2 引脚控制65、电路原理图76、程序流程图及程序代码8 6.1程序流程图8 6.2程序代码107、程序仿真138、实物制作 8.1所需元件138.2所需工具148.3焊接148.4 烧录程序并运行159、心得体会1610、参考文献17单片机原理及接口技术课程设计说明书摘要随着电

    2、子技术的发展,电子技术在各个领域的运用也越来越广泛,人对它的认识也逐步加深。秒表计时器秒表计时器常常用于体育竞赛及各种其他要求有较精确时间的各领域中。其中启/停开关的使用方法与传统的机械计时器相同,即按一下启/停开关,启动计时器开始计时,再按一下启/停开关计时终止。而复位开关可以在任何情况下使用,即使在计时过程中,只要按一下复位开关,计时应立即终止,并对计时器清零。本设计就是利用所学到的电子元器件将脉冲源用数码管显示出来,以制承诺简易的秒表。关键词机械计时器 启/停开关 复位 数码管显示 简易1、设计任务以单片机为核心,设计一个秒表,具有计时功能,按键有启动计时、数据清零、停止、时间显示。2、

    3、设计题目秒表的设计3、功能分析采用3个LED数码管显示时间,计时范围设置为099.9秒,即精确到0.1秒,用按键控制秒表的“开始”、“暂停”、“复位”,按“开始”按键,开始计时;按“暂停”按键,系统暂停计时;再按“开始”键,系统继续计时;数码管显示当前计时值;按“复位”按键,系统清零。4、总体设计本实验利用单片机的定时器/计数器定时和计数的原理,通过采用Proteus仿真软件来模拟实现。模拟AT89C51单片机、LED数码管以及控件来控制秒表的计数以及计时的开启、暂停、继续、与复位。其中有三个数码管来显示数据,两个数码管显示秒(两位),另一个数码管显示十分之一秒,十分之一秒的数码管计数从09,

    4、满十进一后显示秒得数码管的个位加一,并且十分之一秒显示清零重新从零计数。同理当个位满十进一后个位也清零重新计数 ,当计时超过范围(即超过99.9秒)后,所有数码管全部清零重新计数。 4.1硬件设计 4.1.1 89C51单片机MCS-51系列单片机是8位单片机产品,89C51是其中的典型代表,基本模块包括以下几个部分:(1) CPU:89C51的CPU是8位的,另外89C51内部有1个位处理器(2) R0M:4KB的片内程序存储器,存放开发调试完成的应用程序(3) RAM:256B的片内数据存储器,容量小,但作用大(4) I/O口:P0-P3,共4个口32条双向且可位寻址的I/O口线(5) 中

    5、断系统:共5个中断源,3个内部中断,2个外部中断(6) 定时器/计数器:2个16位的可编程定时器/计数器(7) 通用串行口:全双工通用异步接收器/发送器(8) 振荡器:89C51的外接晶振与内部时钟振荡器为CPU提供时钟信号(9) 总线控制:89C51对外提供若干控制总线,便于系统扩展 89C51的引脚如下图:89C51单片机引脚图 4.1.2晶体振荡电路89C51单片机内部的振荡电路是一个高增益反相放大器,引线XTAL1和XTAL2分别为反相振荡放大器的输入及内部时钟工作电路的输入和来自反相振荡器的输出,该反相放大器可以配置为片内振荡器。这里选用51单片机12MHZ的内部振荡方式,电路如下:

    6、C2、C3起稳定振荡频率、快速起振的作用晶振电路4.1.3复位电路采用上电复位,上电后,由于电容充电,使RST持续一段时间的高电平,从而实现上电复位操作。这不仅能使单片机复位,还能是单片机的外围设备同时复位,当程序出现错误时,可以随时使电路复位。电路图如下: 复位电路4.1.4按键电路当按键被按下时,相应的引脚被拉低,经扫描后,获得键值,并执行键功能程序,因此按下不同的按键,将执行不同的功能程序。电路图如下:按键电路4.1.5显示电路采用个LED数码管,LED是七段显示器,内部有7个条形发光二极管和1个小圆点发光二极管,根据各管的亮暗组成字符。在用数码管显示时,有静态和动态两种选择,这里采用L

    7、ED动态显示,用P0、P1、 P2口驱动显示,由于P0口没有上拉电阻,因此P0口需要外接上拉电阻才能输出高电平,这里使用8个4.7k的电阻作为上拉电阻。电路图如下: 显示电路4.2引脚控制 P0.0P0.7、 P2.0P2.7、 P1.0P1.7对应三个数码管的a、b、c、d、e、f、g段和小数点位;P0控制数码管十位的显示,P2控制数码管个位的现实,P1控制小数点后一问的显示,P3.2、P3.3、P3.4分别接按键。5、电路原理图用Proteus软件画出主电路图如下:主电路图6、程序流程图及程序设计6.1程序流程图6.2 程序设计程序的各个组成模块及工作流程描述:(1)秒表的初始化根据程序流

    8、程图,先进行秒表的初始化,即:将I/O口P3全写一,为秒表的控制输入做好准备;将数码管全部置零,使其处于秒表计时的初始状态;将工作寄存器R0R2以及30H初始化,留待后面的计时程序备用;将定时器0置于工作方式1,并为其装入计时预置数D8FE(因为程序运行过程中占用的时间会导致一定误差,此为经实物测试之后的修正值),即将定时器定为每10ms溢出;开总中断允许和定时器0中断允许。初始化完成后,即进入之后的按键扫描程序。(2)按键检测程序轮流检测开始计时(P3.2)、暂停计时(P3.3)、秒表清零(P3.4)三个按键。若发现有一个按键出现低电平(可能被按下),则延时10ms(调用延时子程序DELAY

    9、),延时完成后,若发现低电平消失,则说明该按键实际上未被按下,此时转回按键检测处继续检测;若发现仍然是低电平,则说明此键确实被按下了,此时就跳转至相应的程序标号处,执行相应的功能。(3)开始计时若确认“开始计时”键被按下,则跳转至程序标号“RUN”处,将定时器0计时允许控制位TR0置位,则定时器开始运行。此动作完成后,返回按键检测程序,等待操作者的下一次指令。(4)计时程序定时器0计时至10ms,溢出,引发中断,程序跳转至定时器0中断服务程序入口000BH处执行。程序跳转至中断服务程序TIME0。由于秒表的最小计时单位是0.1s,即100ms,因此需加入软件计时,使定时器0溢出10次之后才改变

    10、数码管的显示状态。因此每来一次中断就将30H中的数加1,若30H中的数没有到10,则给定时器0重新装入预置数,之后中断返回并继续等待中断;到10了,才进入显示程序,改变数码管的显示状态,执行完毕之后中断返回并继续等待中断。(5)显示程序将数码管的段选码放在数表TAB中。每次100ms计时完成后,将R0中的值(初值为0)送入A,然后自加1。.若R0中的值没到10,则使用累加器A查表,并将查得的数码管段选码送入毫秒位数码管。之后将30H中的数置零,中断返回。若发现R0中的数到10了,则将R0置零,并转入秒位进位子程序SECOND,向秒位进位,之后,继续照常向毫秒位送数。在秒位进位子程序SECOND

    11、中,由于要用到累加器A,因此先将其推入堆栈保护。将R1中的值(初值为10)送入A,然后自加1。.若R1中的值没到20,则使用累加器A查表,并将查得的数码管段选码送入秒位数码管。若发现R1中的数到20了,则将R1重置为10,并转入十秒位进位子程序SECOND1,向十秒位进位,之后,继续照常向秒位送数。完成后,弹出ACC和PSW,子程序返回。十秒位进位子程序与秒位进位子程序相似,只是没有向下一位进位的功能。(6)暂停计时若确认“暂停计时”键被按下,则跳转至程序标号“PAUSE”处,将定时器0计时允许控制位TR0置零,则定时器暂停运行。此动作完成后,返回按键检测程序,等待操作者的下一次指令。(7)秒

    12、表清零若确认“秒表清零”键被按下,则跳转至程序标号“STOP”处,将TR0置零,关闭定时器0运行。并且将数码管、工作寄存器、定时器0预置数全部重置,使其处于秒表计时的初始状态。此动作完成后,返回按键检测程序,等待操作者的下一次指令。(8)延时程序用于按键延时防抖,延时10ms。程序清单如下:ORG 0000H ;程序开始AJMP START ;跳转到主程序START ORG 000BH ;定时器0中断的地址入口AJMP TIME0 ;定时器0溢出,跳转到中断程序TIME0START: ;主程序MOV P3,#0FFH ;输入端口P3全写1MOV P0,#3FH ;MOV P1,#3FH ;MO

    13、V P2,#0BFH ;数码管初始化MOV 30H,#00H ;MOV R0,#00H ;MOV R1,#0AH ;MOV R2,#00H ;工作寄存器初始化MOV TMOD,#01H ;定时器0工作于方式1MOV TH0,#0D8H ;MOV TL0,#0FEH ;定时器0预置数(D8FEH=55550D)SETB EA ;开总中断允许SETB ET0 ;开定时器0中断允许READ: ;读键程序L1:JB P3.2,L2 ;LCALL DELAY ;按键延时防抖JB P3.2,L1 ;AJMP RUN ;确认计时键被按下,开始/继续计时L2:JB P3.3,L3 ;LCALL DELAY ;

    14、按键延时防抖JB P3.3,L2 ;AJMP PAUSE ;确认暂停键被按下,暂停计时L3:JB P3.4,L1 ;LCALL DELAY ;按键延时防抖JB P3.4,L3 ;AJMP STOP ;确认清零键被按下,秒表重置RUN: ;计时键按下,跳转至此SETB TR0 ;定时器0开始/继续运行AJMP READ ;PAUSE: ;暂停键按下,跳转至此CLR TR0 ;AJMP READ ; TIME0: ;定时器0溢出,中断,跳转至此INC 30H ;MOV A,30H ;CJNE A,#0AH,TIME1 ;30H单元中的值到10了吗?(计时到10毫秒了吗,也就是说,该向毫秒位送数了吗

    15、?)MOV DPTR,#TAB ;30H中的值到10了,顺序执行MOV A,R0 ;INC R0 ;CJNE R0,#0AH,GET ;R0中的值到10了吗?(该向秒位进位了吗?)MOV R0,#00H ;LCALL SECOND ;到了,R0清零,调用进位子程序SECOND,向秒位进位GET: ;没到,跳过进位子程序MOVC A,A+DPTR ;MOV P1,A ;查表并向数码管毫秒位送数MOV 30H,#00H ;重置30H单元TIME1: ;MOV TH0,#0D8H ;MOV TL0,#0FEH ;给定时器0重新预置数RETI ;中断返回SECOND: ;秒位进位子程序PUSH ACC

    16、 ;PUSH PSW ;将ACC和PSW推入堆栈保护MOV A,R1 ;INC R1 ;CJNE R1,#14H,GET1 ;R1中的值到20了吗,也就是说,该向十秒位进位了吗?MOV R1,#0AH ;LCALL SECOND1 ;到了。R1重置,调用进位子程序SECOND1,向十秒位进位GET1: ;没到,跳过进位子程序MOVC A,A+DPTR ;MOV P2,A ;查表并向数码管秒位送数POP PSW ;POP ACC ;PSW,ACC出栈RET ;子程序返回SECOND1: ;十秒位进位子程序PUSH ACC ;PUSH PSW ;将ACC和PSW推入堆栈保护MOV A,R2 ;IN

    17、C R2 ;CJNE R2,#0AH,GET2 ;R2中的值到10了吗,也就是说,该将此位归零了吗?MOV R2,#00H ;到了,R2清零GET2: ;没到,跳过清零程序MOVC A,A+DPTR ;MOV P0,A ;查表并向数码管十秒位送数POP PSW ;POP ACC ;PSW,ACC出栈RET ;子程序返回STOP: ;清零键按下,跳转至此MOV P3,#0FFH ;MOV P0,#3FH ;MOV P1,#3FH ;MOV P2,#0BFH ;数码管清零MOV 30H,#00H ;MOV R0,#00H ;MOV R1,#0AH ;MOV R2,#00H ;工作寄存器初始化CLR

    18、 TR0 ;计时器0停止计时MOV TH0,#0D8H ;MOV TL0,#0FEH ;定时器0预置数AJMP READ ;DELAY: ;延时10ms子程序MOV R3,#50D ;D1:MOV R4,#100D ;D2:DJNZ R4,D2 ;DJNZ R3,D1 ;RET ;子程序返回TAB: DB 06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,3FH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,87H,0FFH,0EFH,0BFH ;数码管段选码数表END ;程序结束7、程序仿真 将以上程序清单导入先前做好的Proteus仿真电路,汇编之后,按键

    19、开始进行仿真。 仿真结果如下:仿真结果描述:按“开始”键,秒表开始计时;按“暂停”键,秒表暂停计时;再按“开始”键,秒表继续计时;按“清零”键,秒表清零。8、实物制作 8.1所需元件89C52单片机1(型号STC 89C52RC)IC座17段共阴一位数码管3(型号Ark SM420501K)4.7K电阻430pF电容210uF电容1(耐压50V)84.7K排阻312MHz晶振器1七号电池盒2 1.5V七号干电池4(型号 双鹿高性能碳性电池) 按钮3 万能板1,导线若干 8.2 所需工具 电烙铁,松香,焊锡丝,程序烧录器等。8.3 焊接 按照仿真电路图,将元件焊接在万能板上,并用导线将它们联接起

    20、来,。焊接结果如下图: 电路板正面 电路板背面8.4 烧录程序并运行 用编程器将编译好的second watch.hex文件烧录进单片机,再将单片机插入焊接于电路板上的IC座中,接通电源,开始运行秒表。结果显示,秒表运行正常。按照我们的预期实现了计时、暂停和清零的功能。并且计时的准确度很高,计时范围内误差不超过0.1秒。 至此,我们的秒表设计和制作工作就全部完成了。9、心得体会在此次课程设计中,我主要承担程序设计的工作。虽然秒表是一个非常简单的功能,但要在单片机中使用汇编语言来实现这个功能,仍然花了我不少心思。首先是计时的问题,由于单片机计时器最大只能计时65.5ms,因此要实现毫秒位的变化,

    21、我采用了软件计时的方法,单片机只需计时10ms,然后用软件重复10次,即可达到计时100ms的目的。显示方面,为了使编程简单,我使用了静态显示。不过这使得占用I/O口线过多,而且连线复杂繁琐,为实物的制作带来了不便。在以后的学习和应用中我会努力加深动态扫描显示的理解,争取熟练运用。根据书本知识,我们一开始只给P0口加上了上拉电阻,但是实物做成后我们发现P1和P2口得输出显示非常暗,初步确定是驱动能力不足的问题后,我们给二者也加上了上拉电阻,结果使得显示正常了。由此我们了解到,实践才是检验真理的唯一标准,有时候书本上的知识需要经过实践的改进,才能运用到实际中。此次课程设计巩固了我的基础知识,提高了我的应用水平,锻炼了我的动手能力,使我受益匪浅。然而,在吸取经验的同时,我也吃了不少教训。在编程、仿真、焊接方面都走了不少弯路。但是,学则要有所收获,经过此次的锻炼,我在很多方面都已经有所提高,知识也掌握得更加扎实了。 在今后的学习和实践中,我将继续努力钻研,提高自己,争取在学术和记忆上获得更大的进步。


    注意事项

    本文(单片机基于C单片机的秒表课程设计.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开