电子钟项目总体设计说明书.doc

上传人:西安人 文档编号:5026145 上传时间:2020-01-29 格式:DOC 页数:21 大小:253.50KB
返回 下载 相关 举报
电子钟项目总体设计说明书.doc_第1页
第1页 / 共21页
电子钟项目总体设计说明书.doc_第2页
第2页 / 共21页
电子钟项目总体设计说明书.doc_第3页
第3页 / 共21页
电子钟项目总体设计说明书.doc_第4页
第4页 / 共21页
电子钟项目总体设计说明书.doc_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《电子钟项目总体设计说明书.doc》由会员分享,可在线阅读,更多相关《电子钟项目总体设计说明书.doc(21页珍藏版)》请在三一文库上搜索。

1、 电子钟项目电子钟项目 总体设计说明书总体设计说明书 编制单位:侏罗纪工作室 作 者:王鹏 版 本:V0.1 发布日期:2011-1-23 审 核 人: 批 准 人: TS006_硬件总体设计说明书 修订历史记录修订历史记录 发布日期发布日期版本版本说明说明作者作者 2011-1-23V0.1 硬件总体设计说明书初稿王鹏 2008-12-20V0.2 按照文档格式要求修改格式王鹏 2011-01-23V0.2 按照需求要求修改文档内容 王鹏 TS006_硬件总体设计说明书 i 目目 录录 1.1.引言引言 1 1 1.1.编写目的: .1 1.2.背景 .1 1.3.定义 .2 1.4.参考资

2、料 .2 2.2.总体设计总体设计 3 3 2.1.开发与运行环境 .3 2.2.硬件功能描述 .3 2.3.硬件结构 .3 3.3.硬件模块设计硬件模块设计 4 4 3.1.描述 .4 3.2.功能 .6 4.4.嵌入式软件设计嵌入式软件设计 7 7 4.1.流程逻辑 .7 4.2.算法 .8 5.5.经验总结经验总结 7 7 5.1.硬件 .7 5.2.软件 .8 6.6.附录附录 7 7 电子钟总体设计说明书 1 1.1. 引言引言 1.1.1.1. 编写目的编写目的: 电子表在生活中的应用,可以说无处不在,在日常生活中我们无时不在使用电子表,给我 们的生活和学习带来了说不尽的方便,使我

3、们的生活更加有节奏和规律。使用二十四时制。 并用实验室的 PCB 制作机器来完成电路板的绘制,尽量使 PCB 小,而且功能齐全,全面练习 了我们的 C 语言工程应用经验和 PCB 板的制作过程和熟练程度。 在本次设计中需要下面的准备工作 复习本学期学过的单片机和上学期学过的 C 语言。 本实验没有用外接时钟源,所以在编写 C 语言时要尽可能的减小程序产生的误差。 列出电子秒表单元电路的测试表格。 列出调试电子表的步骤。 计数器是一个用以实现计数功能的时序部件,它不仅可用来计脉冲数,还常用作数字系统 的定时,分频和执行数字运算以及其它特定的逻辑功能. 计数器种类很多.按构成计数器中的各 触发器是

4、否使用一个时钟脉冲源来分,有同步计数器和异步计数器.根据计数制的不同,分为二 进制计数器,十进制计数器和任意进制计数器.根据计数的增减趋势,又分为加法,减法和可逆计 数器.还有可预置数和可编程序功能计数器等等. 译码器是一个多输入,多输出的组合逻辑电路.它的作用是把给定的代码进行“翻译“,成相 应的状态,使输出通道中相应的一路有信号输出.译码器在数字系统中有广泛的用途,不仅用于 代码的转换,终端的数字显示,还用于数据分配,存贮器寻址和组合控制信号等.不同的功能可选 用不同种类的译码器. 译码器可分为通用译码器和显示译码器两大类.前者又分为变量译码器 和代码变换译码器. 一个LED数码管可用来显

5、示一位09十进制数和一个小数点.小型数码管(0.5寸和0.36寸) 每段发光二极管的正向压降,随显示光(通常为红,绿,黄,橙色)的颜色不同略有差别,通常约为 22.5V,每个发光二极管的点亮电流在510mA.LED数码管要显示BCD码所表示的十进制数 字就需要有一个专门的译码器,该译码器不但要完成译码功能,还要有相当的驱动能力. 这些都是最简单的门电路,在设计和制作中可以准确的应用最简单的电路图做出来,相 比较这些门电路功能简单搭建方便。价格相对其他的集成芯片较便宜,整个制作完成价格不 电子钟总体设计说明书 2 超过50元人民币。而且易于制作和方便检查错误,精度较高。 1.2.1.2. 背景背

6、景 a、本次实验主要设计一个带有闹钟和定时功能的电子表。 b、本次实验是在大三第一学期学完单片机的基础上通过 C 语言使用 51 单片机来实现电 子钟,在寒假期间用十天左右来完成制作,在实验室王老师的大力鼓励和支持下我们实验室 大三十七个人一起共同努力每人完成一个,要求是现在单片机开发板上用 C 语言来实现功能, 并自己绘制 PCB 板,由大四的师哥师姐们帮我们完成板子的刻制,并且自己焊元件,调试板 子,来实现自己所要的功能。 项目任务提出者: 项目开发者: 王鹏 软件开发者:王鹏 系统调试: 王鹏 项目用户: 单片机爱好者 系统运行环境:HOT51 单片机开发板、单片机仿真软件 Wave60

7、00、单片机最小系统电路 板。 1.3.1.3. 定义定义 1.3.1 专门术语的定义 四位八段数码管:就是四个单个数码管连在一起的二极管显示器,可以显示从 0 到 9 数 字的显示。 晶振:用来产生单片机工作所需的工作脉冲。 1.2.2 外文首字母组词的原词组 PCB:常称为印刷电路板是用来固定元件并可以导电的电路板。 1.01.7PP::在本文中代表 89C51 单片机的接口,即 I/O 口 P1 口。 1.4.1.4. 参考资料参考资料 1、李朝青.单片机原理及接口技术(第三版)M.北京:北京航空航天大学出版社,2005.9 电子钟总体设计说明书 3 2、谭浩强.c 语言程序设计(第二版

8、). 3、HOT51 增强版单片机开发板资料. 2.2. 总体设计总体设计 2.1.2.1. 开发与运行环境开发与运行环境 2.1.1 系统硬件运行环境 在常温下由电池供电,在基于 89C51 单片机的系统版上运行,最后在自制的 PCB 最小系 统版上运行。 2.1.2 系统软件运行环境 程序使用软件主要是 keil uvision3 中调试、编译、连接,然后由 stc-isp 软件下载到 单片机中,在单片机开发板上运行。 软件运行环境为 Windows XP。 2.2.2.2. 硬件功能描述硬件功能描述 本系统硬件包括 PCB 集成电路板一个(芯片元件集成) 、三个单稳态开关(用于数字 钟对

9、时) ,一个自锁开关(电源开关) 、12MHz 晶振一个,89C51 单片机一个(程序执行) 、蜂 鸣器一个(闹钟报警) 、电源接口一个(电路供电) 、四位一体八段数码管两个(显示时间) 、 1K 排阻一个、发光二极管一个(电源指示灯) 、74HC38 译码器芯片一个、若干导线。 2.3.2.3. 硬件结构硬件结构 硬件端口定义: 数码管片选接至单片机 P0 口,接至数码管引脚图如下: 8657 1234 电子钟总体设计说明书 4 从单片机的 P0 口分别接至数码管的段选口,共八个接口,从单片机的 P2.1、P2.2、P2.3 接位选驱动芯片 74138,驱动芯片输出引脚接数管的位选端。 单稳

10、态开关接口 单稳态开关接口为四个引脚,其引脚功能如下图所示: 在开关按下去时 1 和 3 接通,2 和 4 接通,在程序里高电平为有效电平,所以在电路图中用 1 和 3 接口。电源开关为单刀双置开关,当开关按下去时 1 和 2 接通,所以在电路图中所用 1 和 2 引脚。 电路中用到的唯一一个三极管是 9012,是 NPN 的管子,所以其接法和 PNP 刚好相反, E 引脚接电源的正,c 引脚接电源的地,此电路为闹钟部分驱动蜂鸣器,也可以换成 9013 或 是 PNP 的管子,只要能提供比较大的电流就可以。 3.3. 硬件模块设计硬件模块设计 3.1.3.1. 描述描述 3.1.1 89C51

11、 单片机 1、89C51RC:此型号单片机是目前最流行的一款常用单片机,单片机是本系统的心脏, 主要是用来执行二进制代码,实现所需功能的。此单片机的主要参数如下: ROM 为 64KB, RAM 为 3.1.2 PCB 板 1、PCB 板概述: 标准的 PCB 板上头没有零件,常被称为“应刷电路板“。板子本身的基板是由绝缘隔 热、并不易弯曲的材质制作而成。在表面可以看到细小线路是铜箔, ,原本铜箔是覆盖在整个 板子上的,而在制造过程中部分被蚀刻处理掉,留下来的部分就变成了网状的细小线路。这 些线路被称为导线或称布线,并用来提供 PCB 上零件的电路连接。为了将零件固定在 PCB 板 电子钟总体

12、设计说明书 5 上,我们将原件的接脚直接焊在布线上,在最基本的 PCB 上,零件都集中在其中的一面。这 么一来我们就需要在板子上打洞,这样我们才能将引脚穿过板子到另一面,所以零件的焊接 在另一面上的。应为如此,PCB 的正反面被称为零件面与焊接面。如果 PCB 上头有些零件需 要在制作完成后可以拿掉或装回去,那么零件安装时会用到底座。由于底座是直接焊接在板 子上的,零件可以任意的拆装。 PCB 上绿色或是红的的是阻焊漆的颜色,这层是绝缘的防护层,可以保护铜线,也可以 防止零件被焊接到不正确的地方。在阻焊层上另外会应刷上一层网应刷面。通常在这层上面 会印刷上文字与符号,以标示出各零件在板子上的位

13、置。网丝应刷面也被称为图标面。印刷 电路板将零件与零件之间复杂的电路铜线经过细致整齐的规划后蚀刻在一块板子上,提供电 子零件组件在安装与互联时的主要支撑体,是所有电子产品不可或缺的基础零件。印刷电路 板以不导电的材料所制成的平板,在此平板上通常都设计安装孔以安装元件。组件的孔有助 于让预先定义在板子上印制的金属路径以电子方式连接起来,将电子组件的接脚穿过 PCB 后, 再以导电性的金属焊条粘附在 PCB 上而形成电路。PCB 可以分为单面板,双面板,多层板。 2、在本次实验中要求我们自己绘制 PCB 板,并且用实验室所提供的 PCB 刻板机刻制自己 的板子,由于本次实验所用的电路简单,所以用单

14、面板,PCB 设计所用的软件为 DXP PROTELL,因为没有用到高频电路,所以板子的绘制相对简单,但在绘制过程中出现了不少的 问题,详细分析见后,绘制的 PCB 板如下图所示: 电子钟总体设计说明书 6 3.2.3.2. 功能功能 本系统为二十四小时制带有闹钟功能的电子表,可以校对时间和闹钟,可以开启和关闭 闹钟。 本系统共分为四部分,第一部分为显示区,第二部分为按键区,第三部分为闹钟功能区, 第四部分为电源区。 显示区主要是数码管的显示,主要是用来显示结果,走时。本部分还需要驱动芯片和数 码管的动态扫描。 按键区有两部分,一是电源的开关按键,用来接通电源和断开电源。二是电子表校时按 键,

15、共有三个按键,S1 是功能选择,从电子钟的小时校对、分钟校对、闹钟的小时校对、分 钟校对。S2 是加校对按键,在相应的功能选择下加。S3 是减校对按键,在相应的功能选择下 电子钟总体设计说明书 7 减。 闹钟功能区是闹钟的功能电路,主要是在闹钟时间到时开始响闹钟。 电源区是电源接通显示,用一个发光二极管,当发光二极管亮表示电源接通,反之则表 示电源未接通。 4.4. 嵌入式软件设计嵌入式软件设计 4.1.4.1. 流程逻辑流程逻辑 程序用 tab数组来定义共阴数码管的显示状态; 用定时器 0 来实现电子钟的走时; 用定时器 1 来实现数码管的动态扫描; 用外部键盘扫描来实现电子钟的校准,查询方

16、式如下: 定义电子钟的初始值为 23:59:00。 程序流程图如下: 开始 初始化 T0,T1 设置为 16 位 计数器模式 允许 T0,T1 中断 显示程序 外部按键中断 功能程序 电子钟总体设计说明书 8 查询方式流程图查询方式流程图 本次试验,用到单片机外部中断,也就是按键,使用按键最主要的就是防抖动,防抖动 的方法很多我使用的方法为延时,就是重新定义一个函数,功能是延时一定的时间,在按键 程序中调用此函数。 void delay(unsigned int cnt) /延时函数 while(-cnt); 4.2.4.2. 算法算法 定时器工作模式控制字 TMOD 本次实验用到了单片机的所

17、有的定时器中断,T0 用来实现电子钟的计时,T1 用来实现数 码管的动态扫描。当用计时器 0 时给 TMOD 赋值为 0X01,用定时器 1 时给 TMOD 赋值为 0X10, 也可以一次性赋值为 0X11。 定时器是一种中断响应的工作方式,所以在使用定时器时必须给定时器赋初值,当定时 器达到初值时向 CPU 申请中断,来处理中断。在电子钟计时要求是要很准确的,在定时器工 作在方式一最大的计时为 2 216 16,当使定时器定时为 20mm 时根据如下据算公式: 定时器的定时时间计算公式为 t=(2t=(216 16 T0T0 初值初值)振荡周期振荡周期1212 在用定时器 0 计时,系统晶振

18、为 12MHz,算出初值为 3CB0H,也就是把定时器中断循环 50 次刚好是一秒。 电子钟总体设计说明书 9 同样用定时器 1 动态扫描数码管时根据公式 2.063ms 扫描一次,初值定义为 F8F0H,再 循环 20 次调用一次显示程序,这样就实现数码管动态扫描。 5 5经验总结经验总结 本次实验主要是正对单片机的应用和在 C 语言的基础上设计完成,在制作和设计过 程中遇到了很多问题,也暴露出了自己的很多不足。本次实验主要一部分还是 PCB 板的 制作,由于是初次制作 PCB 板,所以大四的师哥师姐门给了我们很多的帮助。下面就针 对每一部分出现的问题做进一步的探讨。 1、软件设计软件设计

19、软件部分在设计中用的是 C 语言,具体的思路和设计方法在前面已经提到,现在 主要来说一下在设计过程中遇到的问题。在软件设计过程中遇到的首要问题是数码管的 动态扫描,因为我们用的数码管位选芯片是 74HC138,此芯片四 COMS 芯片,信号比较 稳定,属于高电平有点,我用 51 单片机的 P2.0、P2.1、P2.2 通过 3-8 译码器位选择数码 管。单片机用的是 12MHz 的晶振,在数码管扫描的时候频率大概是 1/40 的晶振频率, 用单片机 T1 中断,但在起初设计时我把数码管的扫描程序加载数码管的段选程序中, 结果出现了问题,数码管的扫描很不稳定,只有电子钟的秒不断地加,而电子钟的其

20、他 全都显示的是初始时间,不变。在参考了单片机开发板的程序后发现要把数码管的扫描 程序单独写成函数,然后调用函数,这要数码管的段选和位选分开,互不干扰。结果问 题消失,这就像王老师说的,在 C 程序中要尽可能的使程序模块化,这样在以后的修改 和添加新的功能是就方便很多,也便于程序的优化。 在程序设计中遇到的最棘手的问题就是电子钟的时间误差,由于是用 C 语言编写, 所以很难准确的算出每一个代码所执行的时间,所以要消除电子钟的误差,需要在硬件 电路设计出来后通过更改软件了消除。电子钟引起误差的因素很多,但有些是可以避免 的,有些事无法消除的,所以我在设计过程中主要是通过软件来使电子钟走时准确。在

21、 刚开的表误差是 12 个小时差 2 分钟,这对于我们日常所用的表来说误差太大。设计要求 是 12 个小时误差要控制在 30 秒之内,我起初使用改变计时中断循环次数来消除误差, 但其精度远远不够,最后实验室所有队员共同商量,分析解决问题的方法,其方法见后 面的附录部分。 2、硬件设计硬件设计 电子钟总体设计说明书 10 (1)问题一 首先,我们本次实验是设计一个电子钟,主要涉及的是数码管的驱动和数码管的动 态扫描,起初我们根据单片机开发板我们用的是 74LS258,但是在设计过程中我们要求; 绘制的 PCB 板要尽可能的小,所以我把数码管驱动芯片换成了 2003,由于自己的粗心 和设计缺乏经验

22、,没有考虑到驱动芯片的工作电压,由于单片机用的是 5V 的电压,所 以在电源供电使用电池,但 2003 芯片的工作电压时 15V,所以在调试电路的时候数码管 没有让任何显示,在经过查找资料,终于找出了问题的原因,由于制作的电路板已经成 型,所以改变电路时很困难的,所以直接把 2003 芯片短路,数码管显示问题解决。但是 数码管由于没有驱动芯片,所以显示很暗,限于电路结构没法调整,只能修改至此。如 果需要彻底解决问题,就需要另找驱动芯片,然后重新封装,再制作一个符合要求的 PCB,再次调试。 (2)问题二 在使用 PROTEL 软件制作 PCB 板的时候由于第一次画 PCB,所以很多主意事项没

23、有重视,以至于在后期使用实验室的 PCB 制作机器时线路走线很不科学,饶了很多弯路, 在有些地方可以直线连接,但在自动布线时软件饶了很长的线路,自己也没有一根一根 检查,所以浪费了电线,并且使电路工作稳定性不是很高。在制作 PCB 时很多电子元件 封装没有或是和实物对不上,所以要自己画封装,在制作封装时先使用游标卡尺测量实 物的引脚间距,实物的边缘尺寸。还有焊盘直径和过孔直径,线路的宽度。由于实验室 的 PCB 制作机器刻刀只有 0.2mm,0.3mm,0.6mm,0.7mm,0.8mm,0.9mm,1.0mm,所以为了在 刻线时刻刀走宽度的整数倍,所以在画 PCB 板时线路只能选择 0.6m

24、m1.0mm,起初我 认为 0.6mm 的线因该能够满足我电路的需要,忽视了在后期调试电路板时需要手工改变 一些走线,以至于在后期调试电路板时很难再加一些线路。对我后期完成实验出现了很 多困难。在电子钟调试好后八段数码管只没有用小数点,就在我调试程序准确性的时候 王老师要求我们的电子表要对闹钟有控制即有闹钟开关功能和闹钟开关的标志,所以我 想用一个数码管的小数点来显示闹钟的开启和关闭状态。在 PCB 板上只能飞线。用单片 机的 P0.7 来接数码管的小数点,连接三根飞线。在做完 PCB 后拿到板子才知道自己做 的很多封装都和实际不相符合。尤其是电路板的走线、焊盘大小、线宽度。一般情况下 导线的

25、宽度是 0.8mm,焊盘大小是 1.4mm,过孔直径是 0.8mm。但在本次实验的时候由 于缺乏经验,焊盘太小,导致在焊接元件的时候很困难,有些地方焊盘太小在电烙铁一 电子钟总体设计说明书 11 接触焊盘就掉落。在封装过孔直径的时候没有测量实际的引脚宽度,导致元件无法插上。 在走线的时候线宽度设置成 0.6mm,在板子实际刻出来后导线太细,导致电阻太大,致 使信号的稳定度太低或是电阻太大致使信号太弱。 6 6附录附录 附录一附录一 用软件校正由中断冲突引起的延时误差用软件校正由中断冲突引起的延时误差 根据中断处理过程,和在中断嵌套的原则,具体思路是在按键的时候不影响电子钟的计 时,应为电子钟计

26、时是由定时器 0 的中断实现的,在默认状态下外部中断优先级比定时 器优先级高,所以在软件中设置定时器优先级最高,这样在两个同时申请中断或在响应 外部中断的时候定时器申请中断,马上响应定时器中断,这样电子钟走时就会更加准确。 中断处理流程图 由于电子钟的时间误差,消除误差有好几种方法,我采用控制中断优先级的方法来实现 电子钟的走时准确。在程序中我用计时中断来实现电子钟的位选扫描和电子钟的走时。 所以中断有个先后次序。电子钟的按键也是由外部中断响应的,在设计软件时用定时器 0 的中断来计时,20mm 然后循环 50 次达到一秒的计时时间。但是外部中断 0 的优先级比 定时器 0 的要高,也就是说当

27、定时器 0 和外部中断同时向 cpu 申请中断时 cpu 会先响应 外部中断,这样定时器 0 会等待 cpu 的中断响应,所以在软件设计中要使计时中断优先 电子钟总体设计说明书 12 级最高,在两个同时申请中断时先响应定时器 0 的请求。把定时器中断设置成高级中断, 而把外部中断设置成低级中断,中断响应如下图所示,在两个同时申请中断时先响应定 时中断,这样就不影响电子钟正常走时。 用软件实现中断优先级设置时使用中断有限设置位 中断优先级控制位 PS串行口中断优先级控制位。 PT1定时器/计数器 T1 中断优先级控制位。 PX1外部中断 1 中断优先级控制位。 PT0定时器/计数器 T0 中断优

28、先级控制位。 PX0外部中断 0 中断优先级控制位。 在软件中设计中断优先级时实际上就是给优先控制字负值,根据如上所述的控制字要实 现所需功能,就给 IP 幅值 0AH,即 00001010B。 在实际应用中把 IP=0AH 写在主函数中,完成程序的误差更改。把本修给的程序下载到芯 片中后让电子钟走时 12 小时,在没修改以前的 12 小时误差 1min26seco 减少到 12 小时 误差 48seco,效果不是特别理想。根据具体的电路和程序分析,总结原因主要如下: 1、电路的晶振不是特别准确,有系统误差。 2、在没有按键的情况下本次做的误差校准是不起作用的,没有从程序的根本上解决问题。 电

29、子钟总体设计说明书 13 3、分析程序,发现在有中断的情况下每次执行的程序代码是不定的,也就是说程序的执 行时间不确定,这也就导致走时不准确。 附录二附录二 系统源程序系统源程序 #include sbit KEY1=P32; sbit KEY2=P33; sbit KEY3=P34; sbit a=P23; sbit a1=P35; sbit a2=P36; sbit b=P37; sbit led=P11; code unsigned char tab=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f; /共阴数码管 0-9 unsigne

30、d char StrTab8; /定义缓冲区 unsigned char minute=59,hour=23,second; /时间定义并且初始化值 unsigned char minute1=00,hour1=00;/second1; /闹钟定义并且初始化值 unsigned char flag=0; unsigned char num; unsigned int count; unsigned int h1; unsigned int flag1=0; void delay(unsigned int cnt)/延时函数 while(-cnt); void play(void) StrTab

31、7=tabhour/10; /显示正常时间 StrTab5=tabhour%10; StrTab1=0x40; StrTab4=tabminute/10; StrTab3=tabminute%10; StrTab6=h1; StrTab2=tabsecond/10; StrTab0=tabsecond%10; void nplay(void) StrTab7=tabhour1/10; /显示闹钟时间 StrTab5=tabhour1%10; StrTab1=0x40; StrTab4=tabminute1/10; StrTab3=tabminute1%10; 电子钟总体设计说明书 14 Str

32、Tab6=h1; StrTab2=tab0/10; StrTab0=tab0%10; main()/主函数 TMOD =0x01;/定时器 0 12M crystal 用于计时 TH0=0x3c; TL0=0xb0; ET0=1; TR0=1; TMOD =0x10; /定时器 1 用于动态扫描 TH1=0xF8; TL1=0xf0; ET1=1; TR1=1; EA =1; play(); while(1)/主循环 if(!KEY1) /按键 1 去抖以及动作 delay(10000); if(!KEY1) flag+; if(flag=1) if(!KEY2) delay(10000);

33、if(!KEY2) hour+;if(hour=24)hour=0; /正常时间 小时 加 1 play(); if(!KEY3) delay(10000); 电子钟总体设计说明书 15 if(!KEY3) hour-;if(hour=0)hour=23; /正常时间 小时 减 1 play(); if(flag=2) if(!KEY2) /按键去抖以及动作 delay(10000); if(!KEY2) minute+;if(minute=60)minute=0;/分加 1 play(); if(!KEY3) /按键去抖以及动作 delay(10000); if(!KEY3) minute-

34、;if(minute=0)minute=59; /分减 1 play(); if(flag=3) /闹钟对时 if(!KEY2) delay(10000); if(!KEY2) hour1+;if(hour1=24)hour1=0; /闹钟时间 小时 加 1 nplay(); if(!KEY3) delay(10000); if(!KEY3) 电子钟总体设计说明书 16 hour1-;if(hour1=0)hour1=23; /闹钟时间 小时 减 1 nplay(); if(flag=4) if(!KEY2) /按键去抖以及动作 delay(10000); if(!KEY2) minute1+

35、;if(minute1=60)minute1=0;/闹钟分加 1 nplay(); if(!KEY3) /按键去抖以及动作 delay(10000); if(!KEY3) minute1-;if(minute1=0)minute1=59; /闹钟分减 1 nplay(); void nz() /闹钟控制 if(minute=minute1 else a=1; if(!KEY2 if(flag1=1) h1=0x40; if(flag1=0) h1=0xc0; if(flag1=2) flag1=0; 电子钟总体设计说明书 17 if(flag=5) flag=0; /*/ /* 定时中断 1

36、*/ /*/ void time1_isr(void) interrupt 3 /定时器 1 用来动态扫描 ,l,l TH1=0xF8;/重入初值 TL1=0xf0; switch (num) case 0:P2=0;P0=StrTabnum;break; /分别调用缓冲区的值进行扫描 case 1:P2=1;P0=StrTabnum;break; case 2:P2=2;P0=StrTabnum;break; case 3:P2=3;P0=StrTabnum;break; case 4:P2=4;P0=StrTabnum;break; case 5:P2=5;P0=StrTabnum;bre

37、ak; case 6:P2=6;P0=StrTabnum;break; case 7:P2=7;P0=StrTabnum;break; default:break; nz(); num+; /扫描 8 次,使用 8 个数码管 if(num=8) num=0; /*/ /* 定时中断 0 */ /*/ void tim(void) interrupt 1 /using 1 TH0=0x3c; TL0=0xb0; count+; switch (count) case 0: case 20: if(flag=1 | flag=2 | flag=0) /隔一定时间调用显示处理 play(); break; case 40: if(flag=3 | flag=4) 电子钟总体设计说明书 18 nplay(); break; case 60: case 80: default:break; if (count=159) count=0; second+;/秒加 1 if(second=60) second=0; minute+; /分加 1 if(minute=60) minute=0; hour+; /时加 1 if(hour=24) hour=0;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 研究报告 > 商业贸易


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