首页 倒计时器

倒计时器

举报
开通vip

倒计时器倒计时器 郑州科技学院 专科毕业设计,论文, 题 目 微机控制倒计时器 学生姓名 自己改 专业班级 自己改 学 号 007 所 在 系 自己改 指导教师 自己改 完成时间 年 月 日 微机控制倒计时器 摘 要 随着科学技术的不断发展,人类对单片机在工业以及民间的应用越来越广泛,在市场上有一种数字的万年历深受消费者的青睐,在这里我将运用MCS-51单片机设计一款新颖的同时具有万年历功能和倒计时功能的倒计时系统。我采用数码管作为本系统的显示器件,根据需要,可以使用尺寸更大的数码管,以使本系统可以应用到公园...

倒计时器
倒计时器 郑州科技学院 专科毕业设计,论文, 题 目 微机控制倒计时器 学生姓名 自己改 专业班级 自己改 学 号 007 所 在 系 自己改 指导教师 自己改 完成时间 年 月 日 微机控制倒计时器 摘 要 随着科学技术的不断发展,人类对单片机在工业以及民间的应用越来越广泛,在市场上有一种数字的万年历深受消费者的青睐,在这里我将运用MCS-51单片机设计一款新颖的同时具有万年历功能和倒计时功能的倒计时系统。我采用数码管作为本系统的显示器件,根据需要,可以使用尺寸更大的数码管,以使本系统可以应用到公园或者某些广场作为重大事件的一个倒计时。同时我采用DS1302时钟芯片作为本系统的时钟,并且设计有蜂鸣器作为倒计时结束的报警信号,并且设计有几个按键作为本系统的输入设备,可以对时间和倒计时的时间进行设定。 关键词 MCS-51单片机/倒计时器/DS1302 Microcomputer Control Timer Abstract With the continuous development of science and technology, human right microcontroller applications in industry and civil society more widely in the market there is a digital calendar favored by consumers, where I will use the MCS-51 microcontroller to design a novel at the same time with a calendar function and countdown function, the countdown system. I used the digital control system, as the display device, if necessary, you can use the larger of the digital control, so that the system can be applied to the park or some square, as a countdown events. At the same time I used the DS1302 clock chip as the system clock, and the design of the alarm buzzer as the countdown to the end of the signal, and the design of a few keys as the system input device, you can right time and the countdown time to set up. KEYWORD MCS-51, Microcontroller ,Timer DS1302 1.绪论 1(1课题背景 目前市场上有一种数字万年历深受消费者的青睐。这些万年历的体积有大有小,对于数码管尺寸大的,往往被人们安放到一些旅游景点以及一些公园或者广场,一方面可以作为一个时钟来方便大家了解时间,同时可以作为某些重大事件的倒计时,例如当年对奥运会开幕式的倒计时。在这里我将根据所学的理论知识结合查阅的相关资料来设计一个价格低廉的具有时钟显示功能的倒计时器,在倒计时结束时可以发出报警。 1.2设计要求 1 基于8051系列单片机设计一款位机控制倒计时器,能够显示年份、时、分、秒以及距离倒计时还有多少天。 2 有三个按键,可以对时间以及倒计时的时间进行设定。 3 设计出奔系统的电路原理图以及单片机的程序 2.硬件电路设计 2.1 8051单片机核心简介 80C5l内部组成方框图如图2-1所示,内部总体结构框图如图2所示。 图2-1 80C51单片机组成方框图 80C51主要包括算术,逻辑部件ALU、累加器A(有时也称ACC)、只读存储器ROM、随机存储器RAM、指令寄存器IR、程序计数据PC、 图2-2 80C51总体结构框图 定时器,计数据、 I,O接口电路、程序状态寄存器PSW、寄存器组,此外,还有堆栈寄存器SP、数据指针寄存器DPTR等部件。这些部件集成在一块芯片上,通过内部总线连接,构成完整的微型计算机。下面按其部件功能分类予以介绍。 2.1.2 寄存器和存储器 微处理器中的寄存器是学习指令系统和程序设计中常会接触到的、寄存器是由触发器组成的,8位寄存器由8个触发器组成,16位寄存器由16个触发器组成。MCS—51中的寄存器较多,大体可分为通用寄存器和专用寄存器两类。 图2-3 微处理器存储器结构 MCS—51存储器配置:微型计算机必须配置一定数量的存储器,但不同的微型计算机存储器的配置不同。一种是程序与数据共用一个 存储器,如图3(a)所示。一般的通用计算机都采用此种形式。另一种是将程序与数据分别放在两个存储器内,一个称程序存储器,另一个称数据存储器,如图3(b)所示。MCS—5l单片机属于此类。这是由单片机的应用特点所决定的,因为单片机往往是为某个特定对象服务的,这是与通用计算机不同的一个显著特点。它的程序设计调试成功后,一般是固定不变的,因而程序(包括常数 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf )可以而且也应该一次性地永久放到单片机内。这样不仅省去了每次开机后台程序重新装入步骤,还可以有效地防止围掉电和其它干扰而引起的程序丢失的错误。MCS—51片内集成有一定容量的程序存储器(8031,80c31,8032除外)和数据存储器并具有较大的外部存储器扩展能力。物理上,MCS—51有4个存储器空间:片内程序存储器、片外程序存储器,片内数据存储器、片外数据存储器。 2.1.3 单片机各口及其负载能力、接口要求 MCS—51单片机有4个口,共32根I/O线。所有4个端口都是双向口,每口都包含一个锁存器,即专用寄存器P0--P3,一个输出驱动器和输入缓冲器。为了方便起见,我们把4个端口和其中的锁存器(即专用寄存器)都笼统地表示为P0—P3。 MCS-51在访问外部存储器时,地址由P0、P2口送出,数据则通过P1口传送,这时P0口是分时多路转换的双向总线。无外部存储器的系统中,所有4个端口都可以作为准双向口使用。 P0口是8位双向三态输入,输出接口,如图2-4所示。P0口既可作地址,数据总线使用(又可作通用I,O口用。连接外部存储器时,P0口一方面作为8位数据输入,输出口,另一方面用来输出外部存储器的低8位地址。作输出口时,输出漏极开路,驱动NMOS电路时应外接上拉电阻;作输人口之前,应先向锁存器写1,使输出的两个场效应管均关断,引脚处于“浮空”状态,这样才能做到高阻输入,以保证输人数据的正确。正是由于该端口用作I,O口,输入时应先写l,故称为准双向口。当P0口作地址,数据总线使用时,就不能再把它当通用I/O口使用。 P1口是8位准双向口,作通用输入,输出口使用,如图2-4(b)所示。在输出驱动器部分,Pl口有别于P0口,它接有内部上拉电阻。 P1口的每以一位可以独立地定义为输人或者输出,因此,P1口既可作为8位并行输入,输出口,又可作为8位输入,输出端。CPU既可以对P1口进行字节操作,又可以进行位操作。当作输入方式时,该位的锁存器必须顶写1。 (c)所示。P2口可作P2口是8位准双向输入,输出接口,如图5 通用I,0口使用与P1口相同。当外接程序存储据时,P2口给出地址的高8位,此时不能用作通用,I,O口。当外按数据存储器时,若RAM小于256KB,用R0、R1作间址寄存器,只需要P0口送出地址低8位,P2口可以用作通用I,O ;若RAM大于256KB,必须用16位寄存器DPTR作间址寄存器(则P2口只能在一定限度内作一股I,O 口使用。 P3口也是一个8位的准双向输入,输出接口,如图2-4(d)所示。它具有多种功能。一方面与P1口一样作为一般准双向输入,输出接口,具有字节操作和位操作二种工作方式;另一方面8条闲人,输出线可以独立地作为串行输入,输出口和其它控制信号线。 图2-4 I/O一位锁存器和缓冲器结构 P0—P3端口的负载能力及接口要求 P0口的输出级与P1-P3口的输出级在结构上是不同的,因此它们的负载能力和接口要求也各不相同。P0口的每一位输出可驱动8个LSTTL输入,但把它当通用口使用时,输出级是开漏电路,故用它驱动NM0S输入时需外接上拉电阻;把它当地址,数据总线时,则需接外部上拉电阻。P1—P3口的输出级接有内部上拉电阻,它们的每一位输出可驱动4个LSTTL输入。CHMOS端口只能提供几毫安的输出电流,故当作为输出口去驱动一个普通晶体管的基极时,应在端口与晶体管基极间串联一个电阻,以限制高电平输出时的电流。 I/O口的读一修改一写特性由图5可见,每个I,O端口均有两种读人方法,读锁存器和读引脚,并有相应的指令,那么如何区分读端口的指令是读锁存器还是读引脚呢?读锁存器指令是从锁存器中读取数据,进行处理,并把处理以后的数据重新写入锁存器中这类指令称为“读一修改一写”指令。当目的操作数是一个I,O端口或I,O端口的某一位时,这些指令是读锁存器而不是读引脚,即为“读一修改一写”指令,下面是一些“读一修改一写”指令。 ANL (逻辑与,例如 ANL P1,A) ORL (逻辑或,例如 ORL P2,A) XRL (逻辑异或,例如 XRL P3,A) JBC (若位=1,则转移并清零,例如 JBC P1.1,LABEL) CPL (取反位,例如CPL,P3.0) INC (递增,例如INC P2) DEC (递减,例如DEC P2) DJNZ (递减,若不等于0则转移,例如DJNZ P3,LABEL) MOV P1.7 C(进位位送到端口P1的位7) CLR P1.4 (清零端口P1的位4) SETB P1.2 (置位端口P1的位2) 读引脚指令一般都是以I,O端口为原操作数的指令,执行读引脚指令时,打开三态门,输人口状态。例如,读P1口的输入状态时,读引用指令为;MOV A,P1。"读一修改一写"指令指向锁存器而不是引脚,其理由是为了避免可能误解引脚上的电平。例如,端口位可能 用于驱动晶体管的基极,在写1至该位时,晶体管导通,若CPU随后在引脚处而不是在锁存器处读端口位,则它将读回晶体管的基极电压,将其解释为逻辑0。读该锁存器而不是引脚将返回正确值逻辑1。 2.1.4 MCS—51单片机的引脚功能 MSC-51单片机采用40引脚的双列直插封装(DIP)方式。图6为其引脚及逻辑符号图。 在40条引脚中,有2条专用于主电源的引脚,2条外接晶体的引脚,4条控制引脚,3I/O引脚。下面分别叙述各引脚的功能。 1、主电源引脚Vss和Vcc Vss(20):接地;Vcc(40):正常操作时接十5V电源 2 、外接晶体引脚XTAL1和XTAL2 当外接晶体振荡器时,XTAL1和XTAL2分别接在外接晶体两端,当采用外部时钟方式时,XTAL1接地,XTAL2接外来振荡信号。 图2-5 MCS—51单片机引脚图及逻辑符号图 3、控制引脚 RST/Vpp(9):当振荡器正常运行时,在此引脚上出现二个机器周期以上的高电平使单片机复位。Vcc掉电期间,此引脚可接备用电源, 以保持内部RAM的数据。当Vcc下降掉到低于规定的水平,而VPD在其规定的电压范围内,VPD就向内部RAM提供备用电源。 ALE(30):当访问外部存储器时,由单片机的P2口送出地址的高8位,P0口送出地址的低8位,数据也是通过P0口传送。作为P0口某时选出的信息到底是低8位地址还是传送的数据,需要有一信号同步地进行分别。当ALE信号(允许地址锁存)为高电平(有效)(P0口送出低8位地址,通过ALE信号锁存低8位地址。即使不访问外部存储器,ALE端仍以不变的频率周期性地出现正脉冲信号,此频率为振荡器频率的1,6,因此可用作对外输出的时钟。但需注意:当访问外部数据存储器(执行MOVX指令)时,将跳过一个ALE脉冲。ALE端可驱动8个LSTTL输入。 PSEN(29):程序存储器读选通信号,低电平有效。 MCS—51单片机可以外接程序存储器及数据存储器,它们的地址可以是重合的。MCS—5l单片机是通过相应的控制信号来区别到底P2口和P0口送出的是程序存储器还是数据存储器地址。从外部程序存储器取指令(或常数)期间,每个机器周期两次 有效,此时地址总线上送出地址为程序存储器地址;如果访问外部数据存储器,这两次有效的P5EN信号将不出现。外部数据存储器是靠 (读)及 (写)信号控制的。同样可以驱动8个LSTTL输入。 EA,Vpp(31):当EA保持高电平时,访问内部程序存储器(4K8),但当PC(程序计数器)值超过OFFFH时,将自动转向执行外部程序存储器内的程序当EA保持低电平时,则只访问外部程序存储器(从0000H地址开始),不管单片机内部是否有程序存储器。 对于EPROM型单片机,在EPROM编程期间,此引脚用于施加21V的编程电源(Vpp)。 输入输出引脚 P0.0—P0.7(39—32):P0口是一个漏极开路型准双向I,O口。在访问外部存储器时,它是分时多路转换的地址(低8位)和数据总线,在访问期间激活了内部的上拉电阻。在E—PROM编程时,它接收指令字节,而在验证程序时,则输出指令字节。验证时,要求外接上拉电阻。 P1.0—P1.7(1—8):P1口是带内部上拉电阻的8位双向I,O口。 在EPROM编程和程序验证时,它接收低8位地址。 P2.0—P2.7(21—28):P2口是一个带内部上拉电阻的8位双向I,O口。在访问外部存储器时,它送出高8位地址。在对EPROM编程和程序验证期间,它接收高8位地址。 P 3.0—P3.7(10—17):P3口是一个带内部上拉电阻的8位 双向I,O口。在MCS—5l中,这8个引脚还兼有专用功能,这些功能见表1。 这些专用功能的口线,在与外部设备接口、外接数据存储器等方面具有非常重要的作用。 表1 P3 各口线与专用功能 2.1.5 单片机最小系统的设计 1.采用一个10K的电阻与一个22UF的电解电容组成一个RC串联电路,电解电容的负极接地,电阻端接电源+5V,这样在系统上电的时候,可以为单片机的复位引脚提供一个可靠的复位低电平信号,使单片机复位。 2. 时钟电路采用一个12M的晶振,并且配两个30PF的瓷片电容 作为谐振电容,为单片机提供基本的时钟信号。 3. 基于51单片机P0口的内部特殊架构,在作为普通IO口使用时,无法输出高电平,再次我给P0口接了一个10K的上拉排阻,解决了这个不能输出高电平的问题。 如下图所示,是单片机的外围最小系统电路 图2-6 最小系统外围电路 2.2电源电路设计 2.2.1 电源的设计原理 电网供电电压交流220V(有效值)50Hz,要获得低压直流输出,首先必须采用电源变压器将电网电压降低获得所需要交流电压。降压后的交流电压,通过整流电路变成单向直流电,但其幅度变化大(即 脉动大)。脉动大的直流电压须经过滤波电路变成平滑,脉动小的直流电,即将交流成份滤掉,保留其直流成份。滤波后的直流电压,再通过稳压电路稳压,便可得到基本不受外界影响的稳定直流电压输出,供给负载RL。 直流稳压电源原理 直流稳压电源是一种将220V工频交流电转换成稳压输出的直流电压的装置,它需要变压、整流、滤波、稳压四个环节才能完成,其中,电源变压器:是降压变压器,它将电网220V交流电压变换成符合需要的交流电压,并送给整流电路,变压器的变比由变压器的副边电压确定;整流电路:利用单向导电元件,把50Hz的正弦交流电变换成脉动的直流电;滤波电路:可以将整流电路输出电压中的交流成分大部分加以滤除,从而得到比较平滑的直流电压;稳压电路:稳压电路的功能是使输出的直流电压稳定,不随交流电网电压和负载的变化而变化。整流电路常采用二极管单相全波整流电路,在桥式整流电路中,每个二极管都只在半个周期内导电,所以流过每个二极管的平均电流等于输出电流的平均值的一半 。在设计中,常利用电容器两端的电压不能突变和流过电感器的电流不能突变的特点,将电容器和负载电容并联或电容器与负载电阻串联,以达到使输出波形基本平滑的目的。选择电容滤波电路后,直流输出电压:U=(1.1,1.2)U,o12直流输出电流: (I是变压器副边电流的有效值。),稳压电路可2 选集成三端稳压器电路。 经整流滤波输出的电压通常是不稳定的,不能直接对系统供电,因此需要经过稳压电路将电压稳定到单片机系统所需的要求。 对任何稳压电路都应从两个方面考察其稳压特性,一是设电网电压波动,研究起输出电压是否稳定;二是设负载变化,研究其输出电压是否稳定。 直流稳压电路分为串联型稳压电路和开关型稳压电路,本设计采用串联型稳压电路。稳压器一般包括单管稳压器和集成稳压器。常用的集成稳压器有固定式三端稳压器和可调式三端稳压器,本设计使用固定式三端稳压器W7805输出5V电压。 稳压电源的技术指标可以分为两大类:一类是特性指标,如输出电压、输出电流及电压调节范围;另一类是质量指标,反映一个稳压电源的优劣,包括稳定度、等效内阻(输出电阻)、波纹电压及温度系数等。 2.2.2 对电源的性能要求 对稳压电源的性能,主要有以下四个方面的要求: 1、稳定性好 当输入电压Usr(整流、滤波输出电压)在规定范围内变动时,输出电压Usc的变化一般要求很小。 由于输入电压变化而引起输出电压变化的程度,称为稳定度指标,长用稳压系数S来表示:S的大小,反映一个稳压电源克服输入电压变化的能力。在同样的输入电压变化条件下,S越小,输出电压的变化越小,电源的稳定度越高。通常S约为10-2,10-4。 2、输出电阻小负载变化时(从空载到满载),输出电压Usr应基本保持不变,其这方面的性能可用输出电阻表征。输出电阻(又称等效内阻)用rn表示,他等于输出电压变化量和负载电流变化量之比,即rn反映负载变动时,输出电压维持恒定的能力,rn越小,则Ifz变化时输出电压的变化也越小。性能优良的稳压电源,输出电阻可小到1Ω,甚至0.01Ω。 3、电压温度系数小 当环境温度变化时,会引起输出电压的漂移。良好的稳压电源,应在环境温度变化时,有效地抑制输出电压的漂移,保持输出电压稳定,输出电压的漂移用温度系数KT来表示。 4、输出电压纹波小 所谓纹波电压,是指输出电压中50Hz或100Hz的交流分量,通常用有效值或峰值表示。经过稳压作用,可以使整流滤波后的纹波电压大大降低,降低的倍数反比于稳压系数S。 以下是在本系统中的电源原理图: 图2-7 电源原理图 2.3 对时钟电路的设计 2.3.1 时钟电路的 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 研究 由于本系统需要显示年份、月份、日期以及时间,根据以往的经验,在单片机系统中进行时钟的显示,通常用两种方法。第一种方法是利用单片机的定时器进行定时,例如,通过一个定时器定时10毫秒,每当是毫秒到后就对一个变量进行累加,当这个变量累加到100的时候,也就产生了一秒的定时。利用这种方法来做时钟功能具有节约成本,简化电路的优点,但是也具有很大的缺点,一方面,通过自身的定时器来产生一秒的定时,会产生误差,经过一段时间后,误差累计,从而导致时间会不准,令一个缺点就是在系统断电后重新工作时,由于单片机掉电后内存中的数据全部不能保存,因此时间会重置,增加了设备的不稳定因素。基于以上考虑,我没有利用定时器来做时钟功能,而是引入市场上技术较成熟且廉价的DS1302时钟芯片来完成时钟功能的设计。 2.3.2 DS1302的硬件研究 DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V,5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。 DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1,0.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768kHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc>2.0V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向),后面有详细说明。SCLK为时钟输入端。 下图为DS1302的引脚功能图: 图2-8 DS1302引脚图 在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。 在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。 DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字见表1。 图2-9 控制寄存器 此外,DS1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。 DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H,FDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。 DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1,0.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768kHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在 Vcc?2.5V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向),后面有详细说明。SCLK始终是输入端。 下图是本系统中时钟电路的原理图: 图2-10 DS1302电路图 2.4 系统的输入设备 在倒计时器系统中,在使用时,我们需要对系统的时间、倒计时的时间进行设定,因此必须要有输入设备,考虑到输入的数据量不是太大,因此我只设计了三个按键,分别是功能键、增大键、减小键。由于按键数量少,因此占用口线也少,一共就占用三根口线。因此为了简化程序和电路,我直接将三个按键接到单片机的四个I/O口上,并且在三个口线都加上10K的上拉电阻,这样可以保证在按键不按下的情况下,单片机的引脚上会产生一个稳定的高电平,以此来增强系统的稳定性,避免不必要的误动作。按键的另一端全部都接地,这样,在某个按键按下的时候,会将对应口线的点位拉低位0;因此我只要 通过程序,时刻对四个接有按键的引脚的电平进行扫描,我便可以得知是哪个按键被按下,然后再通过程序进行相应的预算即可。 下图是本系统中按键的设计原理图: 图2-11 按键电路原理图 2.5 显示电路的设计 2.5.1 显示电路的方案研究 对于显示电路来进行设计,我们首先应该弄清楚需要需要显示的信息是什么,同时我们要明白,我们将来要把现实器件安放在什么地方,显示器件周围的环境如何。 在我们的微机控制倒计时器系统中,我们需要显示的信息全部都是0—9十个数字,因此我首先就排除了用液晶来做显示器件。因为液晶显示器价格昂贵,通常用在需要显示的数据量较大,并且还需要显示汉字或者字符的情况下。同时考虑到,我所设计的微机控制倒计时器将来可能会被安放到某个广场上,在白天日光比较充足的情况下,利用液晶显示器的亮度也难以满足人类的视觉要求,因此,使用合适尺寸的数码管显示器来作为本系统的显示器件是非常合适的。 2.5.2 数码管的分类 数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按能显示多少个“8”可分为1位、2位、4位等等数码管;按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。当某一字段的阴极为高电平时,相应字段就不亮。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。当某一字段的阳极为低电平时,相应字段就不亮。 2.5.3 数码管的驱动方式 数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数字,因此根据数码管的驱动方式的不同,可以分为静态式和动态式两类。 1. 静态显示驱动:静态驱动也称直流驱动。静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示则需要5×8,40根I/O端口来驱动,实际应用时必须增加译码驱动器进行驱动,增加了硬件电路的复杂性。 2. 动态显示驱动:数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为1,2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。 2.5.4 数码管显示 设计方案 关于薪酬设计方案通用技术作品设计方案停车场设计方案多媒体教室设计方案农贸市场设计方案 的确定 具体分析我所设计的微机控制倒计时器,由于要显示的数据比较多,因 此这个系统要用到的数码管的数量较多,因此权衡用静态显示方式驱动数 码管的优缺点,由于要占用太多的口线,因此就排除了静态显示的方案, 最终选择用动态扫描方式来驱动数码管完成显示工作。 我采用共阳极数码管作为显示器件,同时用一个PNP的三极管来工作 在开关状态,作为每一个数码管的选通与驱动装置。我将所有的数码管的 数据端全部并联接到单片机的P0口,然后将每一个数码管的位选端通过三极管的基极接到单片机不同的IO口上。 下面是我所设计的数码管驱动电路: 图2-12 数码管驱动电路 当我需要让某个数码管显示某个数字的时候,我将其余数码管的三极管的基极加上高电平,三极管就会处于截止状态,相对应的数码管就不会得到电源,因此只有三极管的基极加有低电平的数码管才会显示数据。然后我再将需要显示的数字所对应的码值加到p0口上,这样,这个数码管就会显示出这个数值。 2.6 报警电路设计 由于本倒计时器系统设计有倒计时到提醒功能,因此我需要选择一 个发声元件作为产生报警信号的执行器件,在这里我选择蜂鸣器。 2.6.1 蜂鸣器的简介 1. 蜂鸣器的应用范围 蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于 计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、 定时器等电子产品中作发声器件。 2(蜂鸣器的分类 蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。 3. 蜂鸣器的工作原理 (1)压电式蜂鸣器 压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。有的压电式蜂鸣器外壳上还装有发光二极管。 多谐振荡器由晶体管或集成电路构成。当接通电源后(1.5~15V直流工作电压),多谐振荡器起振,输出1.5~2.5kHZ的音频信号,阻抗匹配器推动压电蜂鸣片发声。 压电蜂鸣片由锆钛酸铅或铌镁酸铅压电陶瓷材料制成。在陶瓷片的两面镀上银电极,经极化和老化处理后,再与黄铜片或不锈钢片粘在一起。 (2)电磁式蜂鸣器 电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。 接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场。振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。 4.有源蜂鸣器与无源蜂鸣器 现在市场上出售的一种小型蜂鸣器因其体积小、重量轻、价格低、结构牢 靠,而广泛地应用在各种需要发声的电器设备、电子制作和单片机等电路 中。 下面是有源蜂鸣器与无源蜂鸣器的图片: 图2-13 蜂鸣器 从表面上看,两种蜂鸣器好像一样,但仔细看,两者的高度略有区别,有源蜂鸣器a,高度为9mm,而无源蜂鸣器b的高度为8mm。如将两种蜂鸣器的引脚郡朝上放置时,可以看出有绿色电路板的一种是无源蜂鸣器,没有电路板而用黑胶封闭的一种是有源蜂鸣器。 迸一步判断有源蜂鸣器和无源蜂鸣器,还可以用万用表电阻档Rxl档测试:用黑表笔接蜂鸣器 "+"引脚,红表笔在另一引脚上来回碰触,如果触发出咔、咔声的且电阻只有8Ω(或16Ω)的是无源蜂鸣器;如果能发出持续声音的,且电阻在几百欧以上的,是有源蜂鸣器。 有源蜂鸣器直接接上额定电源就可连续发声;而无源蜂鸣器则和电磁扬声器一样,需要接在音频输出电路中才能发声。 2.6.2 蜂鸣器驱动电路的设计 为了简化系统的硬件电路和程序的复杂性,在本系统中我选用有源的蜂鸣器作为 报警信号的产生器件。 我采用一个PNP三极管作为蜂鸣器的驱动器件。这个三极管工作在开关状态, 当基极接低电平的时候,三极管导通,这样就使有源蜂鸣器接通了电源,蜂鸣器 就会发出报警。这个时候我们若想停止蜂鸣器的报警,我们只需将三极管的基极 电平置为高电平,这样三极管就会截止,从而使蜂鸣器的电源切断,蜂鸣器便停 止鸣叫。 下图是蜂鸣器的驱动电路原理图: 图2-14 蜂鸣器驱动电路 3.程序设计 3.1 程序流程图 系统初始化 关闭所有数码管 DS1302初始化 读取当前时间并显示 N 按键执行程序 按键扫描程序 判断报警程序 Y 程序 清单 安全隐患排查清单下载最新工程量清单计量规则下载程序清单下载家私清单下载送货清单下载 : #include #include #define uchar unsigned char #define uint unsigned int #define led_off P2=0x00 #define led_off1 P3=0x00 uchar flag1; sbit led1=P2^0; sbit led2=P2^1; sbit led3=P2^2; //年 sbit led4=P2^3; sbit led5=P2^4; //月 十位 sbit led6=P2^5; sbit led7=P2^6; //日 十位 sbit led8=P2^7; sbit led9=P3^0; sbit led10=P3^1; sbit led11=P3^2; sbit led12=P3^3; sbit led13=P3^4; sbit led14=P3^5; sbit k1=P1^5; //功能键 sbit k2=P1^6; //增加 sbit k3=P1^7; //减小 sbit reset = P1 ^ 2; //DS1302 sbit sclk = P1 ^ 0; sbit io = P1 ^ 1; unsigned char code display[] = { 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90 }; unsigned char init[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; unsigned char init1[] = { 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,0x33 }; 时, 日, 月,星期,年 //秒, 分, void delayms(unsigned int ms) { unsigned char y; while (ms--) { for (y = 0; y < 114; y++) ; } } void delayus(unsigned char x) { unsigned char i; while (x--) { for (i = 0; i < 14; i++) { ; } } } void delayNOP() { _nop_(); _nop_(); _nop_(); _nop_(); } void write_byte(unsigned char inbyte) { unsigned char i; for (i = 0; i < 8; i++) { sclk = 0; delayNOP(); inbyte = inbyte >> 1; //右移一位,最低位移入CY io = CY; //写入CY sclk = 1; delayNOP(); } } unsigned char read_byte() { unsigned char i, temp = 0; io = 1; //设置为输入口 for (i = 0; i < 8; i++) { sclk = 0; delayNOP(); temp = temp >> 1; //右移一位,最高位补"0" if (io == 1) //读 temp = temp | 0x80; //最高位补"1" sclk = 1; delayNOP(); } return (temp); } void write_ds1302(unsigned char cmd, unsigned char indata) { reset = 0; delayNOP(); sclk = 0; //为低电平时 delayNOP(); reset = 1; //才能置为高电平 delayNOP(); write_byte(cmd); //先写地址 write_byte(indata); //然后再写数据 sclk = 1; reset = 0; } unsigned char read_ds1302(unsigned char addr) { unsigned char backdata; reset = 0; delayNOP(); sclk = 0; //为低电平时 delayNOP(); reset = 1; //才能置为高电平 delayNOP(); write_byte(addr); //先写地址 backdata = read_byte(); //然后再读数据 sclk = 1; reset = 0; return (backdata); } void set_ds1302(unsigned char addr, unsigned char *p, unsigned char n) //写入n个数据 { write_ds1302(0x8e, 0x00); //写控制字,允许写操作 for (; n > 0; n--) { write_ds1302(addr, *p); p++; addr = addr + 2; } write_ds1302(0x8e, 0x80); //写保护,不允许写 } void read_nowtime(unsigned char addr, unsigned char *p, unsigned char n) { for (; n > 0; n--) { *p = read_ds1302(addr); p++; addr = addr + 2; } } void init_ds1302() { reset = 0; sclk = 0; write_ds1302(0x8e, 0x00); //写控制字,允许写操作 write_ds1302(0x80, 0x00); //时钟启动 write_ds1302(0x90, 0xa6); //一个二极管,4K电阻充电 write_ds1302(0x8e, 0x80); //写控制字,禁止写操作 } void Play_nowtime() { read_nowtime(0x81, init, 7); //读出当前时间,读出7个字节 led9=1; P0=display[(init[2] &0xf0) >> 4]; delayms(1); led_off; led_off1; //显示小时的十位 led10=1; P0=display[init[2] &0x0f]; delayms(1); led_off; led_off1; //小时个位 led11=1; P0=display[(init[1] &0xf0) >> 4]; delayms(5); led_off; led_off1; //分 十位 led12=1; P0=display[init[1] &0x0f]; delayms(1); led_off; led_off1; //分 个位 led13=1; P0=display[(init[0] &0x70) >> 4]; delayms(1); led_off; led_off1; //秒 十位 led14=1; P0=display[init[0] &0x0f]; delayms(1); led_off; led_off1; //秒 个位 led5=1; P0=display[(init[4] &0xf0) >> 4]; delayms(1); led_off; led_off1; //月 十位 led6=1; P0=display[init[4] &0x0f]; delayms(1); led_off; led_off1; //月 个位 led7=1; P0=display[(init[3] &0xf0) >> 4]; delayms(1); led_off; led_off1; //日 十位 led8=1; P0=display[(init[3] &0x0f)]; delayms(1); led_off; led_off1; //日 个位 led3=1; P0=display[(init[6] &0xf0) >> 4]; delayms(1); led_off; 年 十位 led_off1; // led4=1; P0=display[init[6] &0x0f]; delayms(1); led_off; led_off1; //年 十位 led1=1; P0=display[2]; delayms(1); led_off; 年 千位 led_off1; // led2=1; P0=display[0]; delayms(1); led_off; led_off1; //年 百位 } void key(void) { if(k1==0) { delayms(20); if(k1==0) { flag1++; } } } void tiaojie(void) { while(flag1!=0) { led_off; led_off1; led3=1; P0=display[init1[6] &0x0f]; } } void main(void) { init_ds1302(); //初始化ds1302 while(1) { key(); tiaojie(); Play_nowtime(); } } 致谢 参考文献 附录:
本文档为【倒计时器】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_833902
暂无简介~
格式:doc
大小:297KB
软件:Word
页数:35
分类:生活休闲
上传时间:2017-09-20
浏览量:152