欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > DOC文档下载  

    课程设计论文-基于89C51单片机的数字电子钟设计.doc

    • 资源ID:3971807       资源大小:342KB        全文页数:28页
    • 资源格式: DOC        下载积分:6
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要6
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

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

    课程设计论文-基于89C51单片机的数字电子钟设计.doc

    数字电子钟数字电子钟 总体设计说明书总体设计说明书 目目 录录 1.1.引言引言1 1.11.1 背景背景.1 1.21.2 参考资料参考资料.2 2.2.总体设计总体设计2 2.12.1 开发与运行环境开发与运行环境.2 2.22.2 硬件功能描述硬件功能描述.2 2.2.1HOT51 增强型单片机开发板2 2.2.2AT89C51 单片机.2 3.3.硬件模块设计硬件模块设计5 3.13.1 系统硬件框图系统硬件框图.5 3.23.2 数据流图数据流图.5 4.4.硬件电路设计硬件电路设计6 4.14.1 晶体振荡器电路晶体振荡器电路.6 4.24.2 蜂鸣器驱动电路蜂鸣器驱动电路.6 4.34.3 复位电路设计复位电路设计.7 4.44.4 位选及数码管驱动电路位选及数码管驱动电路.7 4.54.5 单片机最小系统单片机最小系统.8 4.64.6 电源电路电源电路.8 5.PCB5.PCB 板的制作板的制作.9 5.15.1 PCBPCB 板的制作规则板的制作规则.9 5.25.2 飞线的处理飞线的处理.9 5.35.3 PCBPCB 制作中的注意事项制作中的注意事项.9 5.45.4 制作后的制作后的 PCBPCB 板如下板如下.10 6.6.软件模块的设计软件模块的设计10 6.16.1 数字钟总体设计框图数字钟总体设计框图 11 6.26.2 源程序源程序 14 7.7.设计中的问题分析与解决设计中的问题分析与解决14 8.8.设计总结与心得设计总结与心得15 附录附录 系统源程序系统源程序17 单片机数字钟设计报告 1 附录附录 程序校正程序校正26 1、引言、引言 20 世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几 乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度 的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来 越快。 时间对人们来说总是那么宝贵,工作的忙碌性和繁杂性容易使人忘记当前 的时间。忘记了要做的事情,当事情不是很重要的时候,这种遗忘无伤大雅。 但是,一旦重要事情,一时的耽误可能酿成大祸。 目前,单片机正朝着高性能和多品种方向发展趋势将是进一步向着 CMOS 化、低功耗、小体积、大容量、高性能、低价格和外围电路内装化等几个方面 发展。下面是单片机的主要发展趋势。 单片机应用的重要意义还在于,它从根本上改变了传统的控制系统设计思 想和设计方法。从前必须由模拟电路或数字电路实现的大部分功能,现在已能 用单片机通过软件方法来实现了。这种软件代替硬件的控制技术也称为微控制 技术,是传统控制技术的一次革命。 单片机模块中最常见的是数字钟,数字钟是一种用数字电路技术实现时、 分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械 装置,具有更更长的使用寿命,因此得到了广泛的使用。 数字钟是采用数字电路实现对时,分,秒数字显示的计时装置,广泛用于个 人家庭,车站, 码头办公室等公共场所,成为人们日常生活中不可少的必需品,由 于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远 超过老式钟表, 钟表的数字化给人们生产生活带来了极大的方便,而且大大地 扩展了钟表原先的报时功能。诸如定时自动报警、按时自动打铃、时间程序自 动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种 定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。因此,研究 数字钟及扩大其应用,有着非常现实的意义。 单片机数字钟设计报告 2 1.11.1 背景背景 本次设计以 89C51 单片机为平台,利用 C 语言编程,并充分利用单片机的 优势中断技术,设计并研究了单片机数字钟的设计方法。 设计名称:数字钟 提出者:王全州 设计者:张满归 1.21.2 参考资料参考资料 【1】单片机原理及接口技术(第 3 版)李朝青 编著 北京航空航天大 学出版社 2008 年 5 月 【2】 C 语言编程(第三版) (美)Stephen G.Kochan 著 张小潘译 电子工 业出版社 2006 年 3 月 【3】 51 单片机 C 语言教程 郭天祥 编著 电子工业出版社 2009 年 12 月 2、总体设计、总体设计 2.1 开发与运行环境开发与运行环境 本系统是以单片机为平台,利用 Keil uVision3 开发环境,采用 C 语言编程, 基于 HOT51 增强型单片机开发板来实现的。在单片机开发板上顺利实现之后, 后期还将针对本次设计数字钟小系统做 PCB 板,PCB 板的制作是利用 orCAD 开发环境,画出 PCB 板,通过刻板机实现电路板的制作。 2.2 硬件功能描述硬件功能描述 2.2.1 HOT51 增强型单片机开发板增强型单片机开发板 51 单片机开发板 HOT-51 增强型开发板的标配器件为 STC89C54RC+,但它 完全可以使用于别的 51 系列芯片。开发板上资源丰富,并且可以转接 ARM。 板上芯片有:AD-DA 芯片:PCF8591T ,温度传感器:1-WIRE 协议控制芯片 DS18B20,红外接头:PC 838(配合遥控器做解码试验) ,时钟芯片:SPI 协议控 制芯片 DS1302,储存芯片:I2C 协议控制芯片 AT24C02,通讯芯片: MAX232,USB 转串口芯片:PL2303HX,达林顿管:ULN2003(驱动步进电机, 直流电机,继电器,蜂鸣器) ,三态缓冲门电路:74HC245,三八译码器: 74HC138,锁存器:74HC573,稳压芯片:7805、LM1117-3.3;显示类:彩屏 液晶,八位 LED 灯,八位共阴数码管,8*8 点阵,1602 液晶,12864 液晶(带 汉字字库) ;其他:精致独立按键, 4*4 矩阵键盘,双复位电路,继电器,蜂 鸣器,时钟电池,标准 JTAG 接口等。 2.2.2 AT89C51 单片机单片机 单片机诞生于 20 世纪 70 年代末,经历了 SCM、MCU、SoC 三大阶段。单 片机是嵌入式系统的独立发展之路,向 MCU 阶段发展的重要因素,就是寻求 应用系统在芯片上的最大化解决;因此,专用单片机的发展自然形成了 SoC 化 趋势。随着微电子技术、IC 设计、EDA 工具的发展,基于 SoC 的单片机应用 系统设计会有较大的发展。因此,对单片机的理解可以从单片微型计算机、单 单片机数字钟设计报告 3 片微控制器延伸到单片应用系统。 单片机作为微型计算机的一个重要分支,应 用面很广,发展很快。自单片机诞生至今,已发展为上百种系列的近千个机种。 单片机是通过内部总线把计算机的各主要部件接为一体,其内部总线包括 地址总线、数据总线和控制总线。其中,地址总线的作用是在进行数据交换时 提供地址,CPU 通过它们将地址输出到存储器或 I/O 接口;/数据总线的作用是 在 CPU 与存储器或 I/O 接口之间,或存储器与外设之间交换数据;控制总线包 括 CPU 发出的控制信号线和外部送入 CPU 的应答信号线等。 由于单片机的这种结构形式及它所采取的半导体工艺,使其具有很多显著 的特点,因而在各个领域都得到了迅猛的发展。单片机主要发如下特点: (1)有优异的性能价格比。 (2)集成度高、体积小、有很高的可靠性。单片机把各功能部件集成在一块 芯片上,内部采用总线结构,减少了各芯片之间的连线,大大提高了单片机的 可靠性与抗干扰能力。另外,其体积小,对于强磁场环境易于采取屏蔽措施, 适合在恶劣环境下工作。 (3)控制功能强。为了满足工业控制的要求,一般单片机的指令系统中均有 极丰富的转移指令、I/O 口的逻辑操作以及位处理功能。单片机的逻辑控制功能 及运行速度均高于同一档次的微机。 (4)低功耗、低电压,便于生产便携式产品。 (5)外部总线增加了 I C(Inter-Integrated Circuit)及 SPI(Serial Peripheral Interface)等串行总线方式,进一步缩小了体积,简化了 结构。 (6)单片机的系统扩展和系统配置较典型、规范,容易构成各种规模的应用 系统。 由于单片机具有显著的优点,它已成为科技领域的有力工具,是我们生活 中的得力助手。它的应用遍及各个领域,主要表现在以下几个方面: (1) 单片机在智能仪表中的应用 单片机广泛地用于各种仪器仪表,使仪器仪表智能化,并可以提高测量的自动 化程度和精度,简化仪器仪表的硬件结构,提高其性能价格比。 (2)单片机在机电一体化中的应用 机电一体化是械工业发展的方向。机电一体化产品是指集成机械技术、微电子 技术、计算机技术于一体,具有智能化特征的机电产品,例如微机控制的车床、 钻床等。单片机作为产品中的控制器,能充分发挥它的体积小、可靠性高、功 能强等优点,可大大提高机器的自动化、智能化程度。 (3) 单片机在实时控制中的应用 单片机广泛地用于各种实时控制系统中。例如,在工业测控、航空航天、尖端 武器、机器人等各种实时控制系统中,都可以用单片机作为控制器。单片机的 单片机数字钟设计报告 4 实时数据处理能力和控制功能,可使系统保持在最佳工作状态,提高系统的工 作效率和产品质量。 (4) 单片机在分布式多机系统中的应用 在比较复杂的系统中,常采用分布式多机系统。多机系统一般由若干台功能各 异的单片机组成,各自完成特定的任务,它们通过串行通信相互联系、协调工 作。单片机在这种系统中往往作为一个终端机,安装在系统的某些节点上,对 现场信息进行实时的测量和控制。单片机的高可靠性和强抗干扰能力,使它可 以置于恶劣环境的前端工作。 (5) 单片机在人类生活中的应用 自从单片机诞生以后,它就步入了人类生活,如洗衣机、电冰箱、电子玩具、 收录机等家用电器配上单片机后,提高了智能化程度,增加了功能,倍受人们 喜爱。单片机将使人类生活更加方便、舒适、丰富多彩。 综合所述,单片机已成为计算机发展和应用的一个重要方面。另一方面, 单片机应用的重要意义还在于,它从根本上改变了传统的控制系统设计思想和 设计方法。从前必须由模拟电路或数字电路实现的大部分功能,现在已能用单 片机通过软件方法来实现了。这种软件代替硬件的控制技术也称为微控制技术, 是传统控制技术的一次革命。 单片机引脚图和结果框图如下图 1 和图 2 所示: 单片机数字钟设计报告 5 图 1 AT89C51 引脚图 图 2 内部结构图 3、硬件模块设计、硬件模块设计 3.1 系统硬件框图系统硬件框图 单片机数字钟设计报告 6 其核心部件是 89C51 单片机,由 89C51 单片机内部定时器及循环延时确定 时间,并且通过扫描驱动 8 位数码管来显示计数器时间,还可以通过外部中断 校对时间和设置闹钟,并且检测闹钟开关,如果闹钟时间到,则驱动蜂鸣器。 3.2 数据流图数据流图 80C51 CPU 处理处理 晶晶 振振 外中断外中断 各种按键各种按键 数数 据据 输输 入入 数据输出数据输出 数据输出数据输出 数据输出数据输出 数码管数码管 蜂鸣器蜂鸣器 闹钟闹钟 指示指示 4、硬件电路设计、硬件电路设计 4.1 晶体振荡器电路晶体振荡器电路 晶体振荡器电路给数字钟提供一个频率稳定准确的 12MHz 的方波信号,可保 证数字钟的走时准确及稳定.不管是指针式的电子钟还是数字显示的电子钟都使 用了晶体振荡器电路。给单片机提供时钟的电路图有如下两种: 80C51CPU 电源电源 8 位数码管位数码管蜂鸣器蜂鸣器 复位电路复位电路振荡器振荡器 外部中断对外部中断对 时时/设置闹钟设置闹钟 闹钟设置闹钟设置 及开关控制及开关控制 单片机数字钟设计报告 7 由于我本次设计主要是针对数字钟的设计,并且外部时钟源不好加到电路中, 精度又不是特别高,所以我选用内部时钟方式。 4.2 蜂鸣器驱动电路蜂鸣器驱动电路 为了能在设置的闹钟时间很方便的提示我们,需要通过蜂鸣器的报警来提醒, 由于单片机输出的方波驱动能力太弱,要使蜂鸣器发出的声音更亮些,需要加 上驱动电路。驱动电路我采用 PNP 管 9012,具体电路图如下所示: 4.3 复位电路设计复位电路设计 复位电路分两种方式,分别是上电自动复位和按键手动复位。 上电自动复位电路是在加电瞬间电容通过充电来实现的,其电路图如下所示。 在通电瞬间,电容 C 通过电阻 R 充电,RST 端出现正脉冲,用以复位。只要电 源 VCC 的上升时间不超过 1ms,就可以实现自动上电复位,即接通电源就完成 了系统的复位初始化。 手动复位是指通过一按钮开关,使单片机进入复位状态。系统上电运行后, 若需要复位,一般是通过手动复位来实现的。通常采用手动复位和上电自动复 位组合,其电路如下图所示。 单片机数字钟设计报告 8 a.上电复位 b.按键电平复位 由于设计的数字钟无需上电复位,所以采用按键电平复位,如上 b 图所示。 4.4 位选及数码管驱动电路位选及数码管驱动电路 为了让数码管的显示更清晰,我选用 74HC573 锁存器来驱动数码管。由于 8 位数码管的显示是经过一位一位显示的,当它的扫描频率在 50Hz100Hz 之 间时,我们就不会看出它的位显示,并且显示的亮度正好合适,数码管的位选 我通过 3-8 译码器 74HC138,具体连接关系如下图所示: 4.5 单片机最小系统单片机最小系统 单片机的最小系统由 4 部分构成,分别是:单片机、振荡电路、复位电路、 RAM 和 ROM。具体组成如下所示: 位选 锁存驱动 单片机数字钟设计报告 9 单片机最小系统图 4.6 电源电路电源电路 单片机正常工作是+5V 电压,本次设计不做电源部分,采用 USB 供电,由 于 USB 供电较为稳定,所以不需要稳压部分,直接给单片机供电,这样就减少 了 7805 稳压模快。具体电路如下所示: 5、PCB 板的制作板的制作 本次设计的数字钟系统中由于频率不是特别高,所以在设计 PCB 板时不存 在考虑走线之间频率干扰问题,但由于设计规定了 PCB 板的大小为 7*9cM,并 且是单面板,所以对我们的设计带来了一定的难度,在设计中不得不通过走飞 线的方式完成 PCB 板的制作。 51 PCB 板的制作规则板的制作规则 我在数字钟设计中采用 Orcad 软件平台,完成了 PCB 的制作,在 PCB 的设 计中需注意以下的一些规则: (1) 在 Orcad 中制作 PCB 时一定要注意板层的设置,我们本次设计的是单 面板,所以需将 Bottom 层设为走线层,TOP 层设为丝印层(DOC 层) , 别的板层全部设为不走线层。 (2) 由于本次设计的单面板大小规定为 7*9Cm,所以在开始制定板框大小时, USB 供电供电 单片机数字钟设计报告 10 在 Global 层画边框时,将其设置为规定的大小,然后根据一定的规则 放置元件,放置元件时应让元件间的走线距离最小。 (3) 放置元件时须注意一些规则,例如将单片机的晶振和电容靠近单片机放 置,将电源供电的 USB 接口靠近板框放置等。 (4) 在放置完元件之后,进行布线时需注意一些走线时的设置,最重要的是 元件过孔的孔径设置,为了制作方便,本次制作设为 0.6mm、0.8mm、1.2mm,当然,设置了孔径,还需注意焊盘的大小, 软件默认的焊盘大小一般太小,焊接时不太方便;其次是走线的安全间 距设置,走线间距一般默认为软件的设置,即 0.3mm;下来就是走线的 一些规则设置,如果是自动布线,则可设置布线时的一些规则,如果是 手工布线,则可根据需要进行布线。 (5) 在走线时一定要注意电源走线的设置,电源的走线一定要宽,这样承载 的电流会更大,电流的大小与走线的宽度之间有一定的计算公式,可以 作参考。为了使单面板的布线方便,飞线更少,我们将地线设为敷铜种 子,在敷铜时与大面积的铜相接。 52 飞线的处理飞线的处理 由于制作的是单面板,难免有很多的飞线,在制作完 PCB 板之后,需处理 飞线。经常选取的办法是打过孔,这样在加工之后可以采用飞线将其连接。当 然,飞线的多少取决于布线的水平高低。有时为了减少飞线而走很远的路,这 样带来高频的影响,我觉得这种方法应该避免。 53 PCB 制作中的注意事项制作中的注意事项 (1)要注意焊盘的大小、过孔的大小、走线的安全间距及走线的宽带,在适 当的时候应该用游标卡尺进行测量,保证元器件能够合适的插进去。 (2)对于一些自己制作的原件封装,一定要测量使之合理。 (3)电源走线一定要宽,实际上是越宽越好,但过宽会影响布线的效率。适 当的时候我们可以大概的计算一下,使之更加合理。 (4)在布线时我们一定要弄清楚板层,有时一个放错了板层的字符,会带来 制作时的困难,要想合理的完成制作,必须清楚板层。 (5)首次在 PCB 板上放置 USB 接口,一定要注意正负极不能接反。 (6)如果有必要,可以在每个芯片的 VCC 极和 GND 极之间跨接一个 0.010.1uF 之间的瓷片电容。为了使电源电压稳定,可以在电源电压与 地之间接一个滤波电容,如果电源电压波动较大,则可以使用稳压芯片 来稳压。 (7)在敷完铜之后,需要观察敷铜区域,避免有些接地的敷铜区域形成孤岛。 如果存在孤岛,则需要与最近敷铜区连接起来,经常采用打过孔走飞线 的方式使其连接起来。 (8)在放置元件时,由于设置了安全间距,元件放置较近时会出现报错提示, 但这对 PCB 板的制作是没影响的。 54 制作后的制作后的 PCB 板如下板如下 单片机数字钟设计报告 11 6、软件模块的设计、软件模块的设计 本次设计单片机数字钟,供可选择的语言有汇编语言和 C 语言两种选择, 从总体角度考虑,两种语言各有其优缺点。汇编语言在编写过程中可以较容易 的计算出机器周期,这样可以计算出相应的延时与误差,并且在编译过程中精 度较高,执行效率也较高,是各种语言中执行效率最高的一种。相反,汇编语 言又是一种较为低级的语言,编写起来难度较大,程序量也较大,不易编写大 规模的系统。C 语言它的灵活性较强,语法功能也比较强大,对于同一个设计, 与汇编语言相比,工作量较小,完全可以实现汇编无法实现的一些功能。虽然 C 语言具有强大的功能,但也有不足之处,比如在循环延时时不易计算出相应 的机器周期,还有,采用不同的编译器,可能以不同的方式编译出不同的机器 码。 由于本次设计的单片机数字钟编程量较大,又考虑到后面的工作过程中将 大量使用 C 语言编程,所以本次编写过程采用 C 语言,基于 Kiel C3 软件来完 成软件模块的设计工作。 61 数字钟总体设计框图数字钟总体设计框图 编程设计数字钟大家可能最常用的就是采用单片机中的定时器定时的方法, 由于定时器不能一次定时 1s,所以需采用定时一定的时间,循环叠加的方法, 加到一秒后,将其显示的秒加一,然后判断分和时是否加一,这样就完成了数 字钟的最基本制作。 我在此次设计中采用的方法完全不同于上面的常规方法,主要是受到了 单片机数字钟设计报告 12 EDA 中并行的影响,当然,单片机中是不可能实现并行的,但我们可以用串行 的方式模拟并行,实现数码管的扫描及采用延时粗略计算出 1s 的延时,这样很 多人可能认为不准确,但我们可以分好多的延时,这样在校时时不会出现改一 个数字出现大的变化的情况。 程序设计框图如下: 开开 始始 F0 = 1 设置闹钟的时设置闹钟的时 间间=当前时间当前时间 F0 = 0 F0 = 1 闹钟报警闹钟报警 Y Y N N 闹钟流程图闹钟流程图 单片机数字钟设计报告 13 开开 始始 扫扫 描描 显示时间显示时间 I + + 总延时总延时 1s i=0 秒加一秒加一 分分=60 秒秒=00 分加一分加一 秒秒=60 分分=00 时加一时加一 时时=24 时时=00 Y Y Y Y N N N N 正常走时流程图正常走时流程图 单片机数字钟设计报告 14 开开 始始 给时分秒给时分秒 6 位数分位数分 配配 6 字节静态存储字节静态存储 空间空间 中断优先级设置中断优先级设置 开外中断开外中断 设置闹钟?设置闹钟? 防抖延时防抖延时 设置闹钟?设置闹钟? 开定时器开定时器 0,定时,定时 50ms 定时器中断?定时器中断? 将当前时分秒保将当前时分秒保 存到静态空间存到静态空间 N 时分秒全置零时分秒全置零 扫描显示扫描显示 是否外中断?是否外中断? N 设置闹钟?设置闹钟? Y 保存闹钟设置时间保存闹钟设置时间 中断服务,对时中断服务,对时 及设置闹钟,相及设置闹钟,相 应的时分加一应的时分加一 Y 计数器计数器 m+ Y 取出设闹钟之前保存时间取出设闹钟之前保存时间 加上加上 m*50ms 的设置闹钟耗的设置闹钟耗 时时间,扫描显示正常时间时时间,扫描显示正常时间 Y Y 延时延时 正常走时正常走时 N N N 闹钟设置流程图闹钟设置流程图 单片机数字钟设计报告 15 62 源程序源程序 源程序见附件。 7、设计中的问题分析与解决、设计中的问题分析与解决 由于这是我第一次系统地进行设计,难免会遇到很多的问题。当然,作为 我们初学者来说,遇到问题越多收获也就也多,这就要看我们解决问题能力及 方案了。下面是我在这次设计中所遇到的一些问题总结。 (1)由于此次设计数字钟,主要是由软件来完成的,所以硬件中的问题相对 来说较少。当我们将 PCB 板设计完之后,焊接上元件之后,如果出现不正常工 作的情况,我们可以确定是硬件问题。 解决方案:检查单片机是否正常工作,我们可以使用示波器进行观察单片 机 ALE(第 30 引脚)的输出波形,如果输出波形的频率是晶 振频率的 6 分频,则证明单片机是正常工作的。 如果单片机第 31 引脚没有输出波形,首先应检查晶振的好坏, 我们可以更换晶振看其是否能正常工作。 如果还不正常工作,说明是硬件电路的设计有问题,首先我们 应该检查的是所有芯片的电源是否正常。 (2)我们采用 C 语言,利用单片机中的优点中断和定时器,完成数字钟其 实很容易实现,但要完成精度相当高的数字钟设计,加上实现校时和闹钟功能 之后,我们会遇到很多的问题。首先是怎么避免由按键造成的延时误差,我们 总结的方案有 4 种,分别是: 计算出按键延时的具体时间,按键一次则给定时器加上相应的按键延时 时间,这样虽然可以大大的减小按键延时带来的时间误差,但还是有一定量的 机器周期的延时。例如使用这种方法又需在定时器中添加一些判断语句,当符 合条件时,将会增加一定的机器周期。 通过采用设置优先级的方式可以清除按键防抖延时,在主程序中我们需 要将定时器的中断优先级设为最高,别的中断优先级设为低,这样我们在按键 中断时,如果定时器还未中断,则响应外部中断,这样对定时器的定时没有影 响;如果在响应外部中断的时候,有定时中断,则优先响应定时中断,这样又 对定时器的定时没有影响;如果在响应定时中断时,则别的中断不会影响到定 时器的正常定时。 (3)在设定闹钟时间时,我们要确保定时器的正常工作,如何既要让数码管 显示闹钟设置的相应时间,并且定时器的正常计数不能受到影响,我们应该如 何解决这个矛盾呢? 解决方案:为了使编程更加方便,我们专门设置了一个启动设置闹钟的开关, 当开关设为高电平时,则为闹钟设置,首先数码管上全部显示零,即清零。然 后按相应的校时按钮,则数码管显示被设置的相应时间,在设置闹钟的这期间, 是如何确保相应时间的准确性呢?我是这样解决的,当启动设置闹钟开关之后, 在程序中同时启动另一个定时器开始定时工作,当定到 50ms 时,发生中断, 相应的变量加一,这样我们就可以计算出在设置闹钟时所花费的时间。当设置 闹钟开关置到相应的低电平时,说明设置闹钟结束,在这同时,我们将变量所 记的数与 50ms 相乘,计算出与之对应的秒数,加到闹钟设置之前保存到静态 变量中的数上。这种方法有一定的缺陷,会造成一定的延时,经过软件处理, 延时将在 00.5s 之间随机产生。 (4)在测量数字钟精度时,我们发现了一个问题,在数字钟正常工作时,会 单片机数字钟设计报告 16 出现秒与秒之间不相等的情况,比如在 10 分钟之内我们与标准时间进行比较会 发现,有时发现时间走的快,有时时间走的慢。 解决方案:后面在程序中发现,原因是由于程序中的 if 判断语句,在判断过 程中当满足条件时,会执行更多的语句,这样会有相应的机器周期的延时,所 以会出现时间一会走的快一会走的慢的情况。这种情况只有通过减少 if 语句, 怎么减少 if 语句呢?我们可以充分利用单片机的自身条件,充分利用单片机中 的定时器,定时器不够用时我们可以选用 89c52 系列。 8、设计总结与心得、设计总结与心得 单片机数字钟可以说是一个较小的系统,开始时我们觉得通过 C 语言较容 易实现,确实,只实现一个能够正常走时并且能够校时的数字钟是比较容易的。 但我们想错了,毕竟是第一次从总体角度来考虑地完成一个小系统,好多的实 际性的问题我们没有考虑,所以造成我们最终设计的数字钟精度不高,并且存 在好多问题,当然问题多了对我们来说是好事,这样我们在解决更多问题时学 会更多解决问题的方法,对我们也算是长长经验吧。 最开始我们需要总体设计,这就是常常说的算法。平时的编程实现的都是 小功能,我们按照自己的想法直接写下去就可以实现,但这次不一样,我们不 但要实现数字钟的正常工作,而且需要加上设置闹钟及闹钟到报警和是否已经 设置了闹钟的指示灯提示,这在我们设计时会遇到好多的矛盾,当然矛盾我们 可以一个个的解决,当然更重要的是在解决矛盾时我们要确保时间的准确性, 这又需要我们计算机器周期和处理一些延时程序的延时,这可能是我们本次设 计中最困难的问题,我们在解决这个问题中更深入的理解了单片机的内部结构, 也学会了合理利用单片机中的定时器和中断处理。 除了在编写程序中遇到的问题之外,我对程序又有了更深一层的认识,就 像王老师经常说的那样,人类只是现在还没有弄清楚人类的思维方式,如果有 一天生物科技真正研究通了人类自己的思维方式,机器人将真的会有自己的思 维方式,可能真的就会战胜人类了。在这次设计中,让我真的明白了,只要我 们想明白的事情,我们一定会用程序将其描述出来,不管它有多么的复杂。 接下来就是 PCB 的制作,这次可算是经历了全部过程,从画原理图到 PCB 的导出,最后到生产加工出成品,尤其是 PCB 板的加工生产过程尤为重要,从 生产加工中我们可以学到很多在画 PCB 时的注意事项,也理解了我们在软件中 的各种设置的重要性及 0.2mm 的差距。看着加工机床的机械臂在那儿来回着工 作,就像拉鞋垫一样,一针一线地完成了整个版图。非常震撼的是自动化的强 大。 这次数字钟的设计主要是用单片机来完成的,虽然我们也花了很多时间来 完成它的总体设计,但就像老师说的那样,这只是个开始。从这次设计中我也 觉得自己还对单片机的功能了解只是个皮毛,单片机强大的功能还等着我们去 开发。 在这些天大家总结报告时我发现,我们大家的意识还太低,就像写个报告, 大家总在意的是看谁写了多少页了,看谁的程序多,所占用的页数多,一切似 乎和页数联系上了。我觉得我们更应该去关注一下大家所写的程序,看谁的程 序在完成同样功能的同时,他采用方法新颖,程序占用的内存少,并且精度高。 看来我们大家总被一种错误的观念领导着,面对内存有限的单片机而言,编写 一个数字钟,我们无论采用的哪种方法都不可能用完单片机内部的程序存储器, 我觉得我们现在所做的事都是为我们后面做铺垫的,所以我们现在就应该去关 单片机数字钟设计报告 17 心程序所占用的内存和采用的优于别人的算法。所以我们在程序中减少冗余量, 在此我举几个例子,比如在程序中比较是否闹钟时间到时,我们完全可以采用 单片机没有用的标志位 F0,当闹钟时间和当前时间相同时,将 F0 置 1,然后 判断 F0 是否为 1,如果是 1 则响闹钟,这样我们可以减少变量的定义。利用 C 语言写时,难免会定义一些静态变量,这些静态变量相当于一些寄存器,我们 可以重复利用这些静态变量,这样会减少更多静态变量的定义,即可以节约内 存。 最后我觉得系统的设计需要我们全面着去考虑好多的问题,这对我们的成 长会有更大的帮助。程序的实现不只是功能的实现,还要有可靠的稳定性,占 用的内存也要较小。 单片机数字钟设计报告 18 附录附录 /* *文件名:计数器 1.c *描 述:本次设计一个数字钟,能够较准确的计时, 并能对时,还附有闹钟的功能 *创建人:张满归 *时 间:20110101-20110120 */ #include #include #include #define uchar unsigned char #define uint unsigned int sbit s0=P20; sbit s1=P21; sbit s2=P22; sbit d1=P32; sbit d2=P33; sbit sclk=P10; /设置闹钟 sbit cclk=P11; /关闭闹铃 sbit bell=P12; sbit lclk=P13; static int k1=0; static int k2=0; /秒高位 static int k3=0; static int k4=0; /分高位 static int k5=0; static int k6=0; /时高位 /static int F; /k2*10+k1 static int c2=0; /k4*10+k3 static int c3=0; /k6*10+k5 static int j1,j2,j3,j4,j5,j6; static int c=0; uchar code table= 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f ; /* *名 称:void delay2() *功 能:去抖动延时 *输 入:无 单片机数字钟设计报告 19 *输 出:无 */ void delay2(void) /去抖动 uint i,j; for(i=0; i0;n-) ; /* *名 称:void delay() *功 能:主程序延时,方便计数精确 *输 入:无 *输 出:无 */ void delay(void) uint m; for(m=9;m0;m-); /* *名 称:void EX0_time() *功 能:外部中断 0 服务程序 *输 入:无 *输 出:无 */ void EX0_time() interrupt 0 delay2(); if(d1=0) if(k6=0 | k6=1) if(k5=9) k5=-1; k6+; 单片机数字钟设计报告 20 else if(k6=2) if(k5=3) k6=0; k5=-1; k5+; /* *名 称:void EX1_time() *功 能:外部中断 1 服务程序 *输 入:无 *输 出:无 */ void EX1_time() interrupt 2 delay2(); if(d2=0) if(k3=9) k3=-1; if(k4=5) k4=-1; k4+; k3+; /* *名 称:void bell_call() *功 能:闹钟服务程序 *输 入:无 *输 出:无 */ /*void bell_call(void) TMOD=0x10; TH0=0xFF; /1ms TL0=0xFF; TR1=1; ET1=1; EA=1;*/ /* *名 称:void T1_bell() *功 能:T1 中断服务程序,输出方波驱动蜂鸣器 *输 入:无 单片机数字钟设计报告 21 *输 出:无 */ /*void T1_bell() interrupt 3 TR1=0; bell=bell; */ /* *名 称:void shaomiao() *功 能:8 位数码管扫面显示 *输 入:无 *输 出:无 */ void shaomiao(void) if(F0=1) bell=bell; while(s0=0 delay1(); P0=0x00; s0=1;s1=0;s2=0; while(s0=1 delay1(); P0=0x00; s0=0;s1=1;s2=0; while(s0=0 delay1(); P0=0x00; s0=1;s1=1;s2=0; while(s0=1 delay1(); P0=0x00; s0=0;s1=0;s2=1; while(s0=0 P0=tablek3; delay1(); P0=0x00; s0=1;s1=0;s2=1; while(s0=1 delay1(); P0=0x00; s0=0;s1=1;s2=1; while(s0=0 delay1(); P0=0x00; s0=1;s1=1;s2=1; while(s0=1 delay1(); P0=0x00; s0=0;s1=0;s2=0; if(F0=1) bell=bell; /* *名 称:void set_clk() *功 能:设置闹钟时开定时 器 0 和类压栈 *输 入:无 *输 出:无 */ void set_clk(void) TMOD=0x01; TH0=0x3C; /50ms TL0=0xB0; TR0=1; ET0=1; 单片机数字钟设计报告 23 EA=1; j1=k1;j2=k2;j3=k3; /相当于压栈 j4=k4;j5=k5;j6=k6; k1=0;k2=0;k3=0;k4=0;k5=0;k6=0; /*

    注意事项

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

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




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开