基于单片机的数字钟的设计--毕业设计(论文).doc_第1页
基于单片机的数字钟的设计--毕业设计(论文).doc_第2页
基于单片机的数字钟的设计--毕业设计(论文).doc_第3页
基于单片机的数字钟的设计--毕业设计(论文).doc_第4页
基于单片机的数字钟的设计--毕业设计(论文).doc_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

毕业设计(论文)题目:基于单片机的数字钟的设计学院:自动化学院 专业:自动化起止时间:2010年 3月 21日至2010年 6月 25日摘要这次毕业设计通过对单片机的学习、应用,以AT89S51芯片为核心,辅以必要的电路,设计了一个简易的电子时钟,它主要通过DP-51PROC单片机综合仿真实验仪实现,通过数码管能够准确显示时间,调整时间,它的计时周期为24小时,从而到达学习、设计、开发软、硬件的能力。主要实现功能为显示时间,时间校准调时(采用手动按键调时),闹铃功能(设置定时时间,到点后闹铃发出响声)。通过键盘可以进行校时、定时。闹铃功能使用I/O 口定时翻转电平驱动的无源蜂鸣器。本文主要介绍了工作原理及调试过程。关键词:单片机 电子时钟 单片机综合仿真实验仪AbstractThe MCU through graduation learning applications to AT89S51 chip as the core, supplemented by the necessary circuitry to design a simple electronic clock, it is mainly through the DP-51PROC Single Chip Experimental Device to achieve, through the digital control can be accurately show time, adjustment time, its time period is 24 hours, so get to learn, design, development hardware and software capabilities. Main achieved function to show time, the time when calibration transfer (using the manual button adjustment time), alarm clock (set the regular time, the point to issue after the alarm sound). When the keyboard can be school, regularly. Alarm clock using the I / O port level drivers regularly turn passive buzzer. This paper describes the working principle and the debugging process.Keywords:MCU electronics clock DP-51PROC目 录摘 要2Abstract3第一章概述5第二章方案论证与比较62.1数字时钟方案62.2数码管显示方案62.3闹铃方案6 2.4校准方案.7第三章系统设计73.1总体设计73.1.1系统说明73.2模块设计73.2.1电源部分83.2.2复位电路83.2.3程序下载接口83.2.4位选部分93.2.5数码管的连接电路93.2.6控制部分10 3.2.7蜂鸣器驱动电路.11第四章原理12 4.1系统总体方案选择与说明124.2工作原理.13 4.3各单元硬件设计说明及计算方法14 4.4软件设计与说明14第五章软件设计155.1主程序流程155.2闹铃程序165.3中断程序.16第六章 调试过程.23 6.1使用的元件与元件特性.23 6.2电路连接.25 6.3使用Keil uVision3编写程序26 6.4运行程序.32第七章总结207.1设计总结48结束语49参考文献50第一章 概述本论文主要介绍用单片机内部的定时/计数器来实现电子时钟的方法,本设计由单片机AT89S51芯片和LED数码管为核心,辅以蜂鸣器电路,构成了一个单片机电子时钟。由于单片机芯片上引脚数目有限,为了解决实际引脚数和需要的信号线的矛盾,采用了引脚功能复用的方法,引脚处于何种功能,可由指令来设置或由机器状态来区分。显示时间功能:显示时,分,秒。具有校时功能: 能对时、分、秒按实际时间进行手动校正。闹铃功能:到时播放音乐。我使用的是DP-51PROC单片机综合仿真实验仪。我将先介绍一下显示电路、闹铃电路的内部工作原理,及本次设计中51单片机是如何实现任务要求的,主要有设计思路,设计框图,设计过程。最后我将介绍使用DP-51PROC单片机综合仿真实验仪及电脑实现任务要求的过程及成果。 主要内容包括方案论证与比较、系统设计、设计原理、软件设计、调试过程。第二章 方案论证与比较 2.1数字时钟方案数字时钟是本设计的最主要的部分。根据需要,可利用两种方案实现。方案一:本方案采用Dallas公司的专用时钟芯片DS12887A。该芯片内部采用石英晶体振荡器,其芯片精度不大于10ms/年,且具有完备的时钟闹钟功能,因此,可直接对其以用于显示或设置,使得软件编程相对简单。为保证时钟在电网电压不足或突然掉电等突发情况下仍能正常工作,芯片内部包含锂电池。当电网电压不足或突然掉电时,系统自动转换到内部锂电池供电系统。而且即使系统不上电,程序不执行时,锂电池也能保证芯片的正常运行,以备随时提供正确的时间。方案二:本方案完全用软件实现数字时钟。原理为:在单片机内部存储器设三个字节分别存放时钟的时、分、秒信息。利用定时器与软件结合实现1秒定时中断,每产生一次中断,存储器内相应的秒值加1;若秒值达到60,则将其清零,并将相应的分字节值加1;若分值达到60,则清零分字节,并将时字节值加1;若时值达到24,则将十字节清零。该方案具有硬件电路简单的特点。但由于每次执行程序时,定时器都要重新赋初值,所以该时钟精度不高。而且,由于是软件实现,当单片机不上电,程序不执行时,时钟将不工作。基于硬件电路的考虑,本设计采用方案二完成数字时钟的功能。2.2数码管显示方案方案一:静态显示。所谓静态显示,就是当显示器显示某一字符时,相应的发光二极管恒定的导通或截止。该方式每一位都需要一个8 位输出口控制。静态显示时较小的电流能获得较高的亮度,且字符不闪烁。但当所显示的位数较多时,静态显示所需的I/O口太多,造成了资源的浪费。方案二:动态显示。所谓动态显示就是一位一位的轮流点亮各个位,对于显示器的每一位来说,每隔一段时间点亮一次。利用人的视觉暂留功能可以看到整个显示,但必须保证扫描速度足够快,字符才不闪烁。显示器的亮度既与导通电流有关,也于点亮时间与间隔时间的比例有关。调整参数可以实现较高稳定度的显示。动态显示节省了I/O口,降低了能耗。从节省I/O口和降低能耗出发,本设计采用方案二。使用共阴极七段数码显示管。使用74SL48作为 BCD-7段数码管显示译码器2.3闹铃方案方案一:蜂鸣器,一个交流蜂鸣器及其驱动电路,能够演奏音乐。方案二:闹铃芯片因为单片机有定时器所以使用蜂鸣器就可以了,不必使用闹铃芯片了,很浪费单片机功能。所以选择方案一蜂鸣器2.31驱动选择方案一:PWM 输出口直接驱动蜂鸣器 。PWM 输出口直接驱动蜂鸣器方式。由于PWM 只控制固定频率的蜂鸣器,所以可以在程序的系统初始化时就对PWM 的输出波形进行设置。 首先根据PWM 输出的周期宽度是10 位数据来选择PWM 时钟。系统使用4MHz 的晶振作为主振荡器,一个tosc 的时间就是0.25s,若是将PWM 的时钟设置为tosc 的话, 则蜂鸣器要求的波形周期500s 的计数值为500s/0.25s=(2000)10=(7D0)16,7D0H 为11 位的数据,而SH69P43 的PWM 输出周期宽度只是10 位数据,所以选择PWM 的时钟为tosc 是不能实现蜂鸣器所要的驱动波形的。 这里我们将PWM 的时钟设置为4tosc,这样一个PWM 的时钟周期就是1s 了,由此可以算出500s 对应的计数值为500s/1s=(500)10=(1F4)16,即分别在周期寄存器的高2 位、中4 位和低4 位三个寄存器中填入1、F 和4,就完成了对输出周期的设置。再来设置占空比寄存器,在PWM 输出中占空比的实现是 通过设定一个周期内电平的宽度来实现的。当输出模式选择为普通模式时,占空比寄存器是用来设置高电平的宽度。250s 的宽度计数值为250s/1s=(250)10=(0FA)16。只需要在占空比寄存器的高2 位、中4 位和低4 位中分别填入0、F 和A 就可以完成对占空比的设置了,设置占空比为1/2duty。 以后只需要打开PWM 输出,PWM 输出口自然就能输出频率为2000Hz、占空比为1/2duty 的方波。方案二:I/O 口定时翻转电平驱动蜂鸣器。使用I/O 口定时翻转电平驱动蜂鸣器方式的设置比较简单,只需要对波形分析一下。由于驱动的信号刚好为周期500s,占空比为1/2duty 的方波,只需要每250s 进行一次电平翻转,就可以得到驱动蜂鸣器的方波信号。在程序上,可以使用TIMER0 来定时,将TIMER0 的预分频设置为/1,选择TIMER0 的始终为系统时钟(主振荡器时钟/4),在TIMER0 的载入/计数寄存器的高4 位和低4 位分别写入00H 和06H,就能将TIMER0 的中断设置为250s。当需要I/O 口驱动的蜂鸣器鸣叫时,只需要在进入TIMER0 中断的时候对该 I/O 口的电平进行翻转一次,直到蜂鸣器不需要鸣叫的时候,将I/O 口的电平设置为低电平即可。不鸣叫时将I/O 口的输出电平设置为低电平是为了防止漏电。因为此次设计是基于51单片机驱动I/O 口的,所以选择方案二I/O 口定时翻转电平驱动蜂鸣器。2.3.2蜂鸣器的选择方案一:有源蜂鸣器 即通电就可以发声。方案二: 无源蜂鸣器 即要有驱动的音频电流才能发声。因为此次设计是基于51单片机驱动的,所以选择方案二无源蜂鸣器。2.4校准方案采用手动按键调时。用四个按键,一个是进入调时,一个是没按一次秒加一,六十以后变零,一个是没按一次分加一,六十以后变零,一个是没按一次时加一,二十四以后变零。第三章 系统设计3.1总体设计3.1.1系统说明本次设计时钟电路,使用了AT89C51单片机芯片控制电路,单片机控制电路简单且省去了很多复杂的线路,使得电路简明易懂,使用键盘键上的按键来调整时钟的时、分、秒,用一扬声器来进行定时提醒,同时使用C语言程序来控制整个时钟显示,使得编程变得更容易,这样通过四个模块:键盘、芯片、扬声器、显示屏即可满足设计要求3.2模块设计3.2.1电源部分单片机从外部引入VCC 5V的直流电,为单片机、复位电路提供电源,GND接地。3.2.2复位电路图3-1复位电路如图3-1所示,复位电路主要由型号为1N4148的二极管,型号为10UF/16V的电解电容,型号为104的瓷片电容,10K的电阻以及按键S1构成,S1接芯片的相应引脚RST,当开关按下时引脚RST为高电平1,断开时引脚为低电平0。3.2.3程序下载接口图3-2 程序下载电路如图3-2所示,由AT89S ISP构成的两排十针下载口,板图上有一个小方框,为1号引角;下载线的凸口为正方向,凸口的右侧边的第一个插孔为1号引角。3.2.4位选部分选电路为三极管的集电极接数码管的公共端,当P2口对应的引脚输出高电平时三极管导通,对应的数码管显示数据。这样,在同一时刻,6位LED中只有选通的那1位显示出字符,而其他5位则是熄灭的。同样,在下一时刻,只让下一位的位选线处于选通状态,而其他个位的位选线处于关闭状态,在段码线上输出将要显示字符的段码,则同一时刻,只有选通位显示出相应的字符,而其他各位则是熄灭的。如此循环下去,就可以使各位显示出将要显示的字符。虽然这些字符是在不同时刻出现的,而在同一时刻,只有一位显示,其他各位熄灭,但由于LED的余辉和人眼的视觉暂留作用,只要每位显示间隔足够短,则可以造成多位同时亮的假象,达到同时显示的效果。3.2.5数码管的连接电路 图3-6为数码管的引脚图,每位的段码线(a,b,c,d,e,f,g,)分别与1个7位的锁存器输出相连,由AT89S51控制组合09十个数据,如令其显示1则b,c引脚(即2,3引脚)送高电平,7位LED显示的数据由显示缓冲区30H36H单元中的数据决定 ,动态显示时,每位显示持续时间为1ms,1ms延时由软件实现,7位显示约耗时8ms。此时数码管显示1。由于各位的段码线并联,8位I/O口输出段码对各个显示位来说都是相同的。举例如果使用段共阴极数码管,要显示数字“4”时应该让b=c=f=g=1,a=d=e=0,如图3-3图3-3数码显示 图3-4 BCD-7段数码管显示译码器使用74SL48作为 BCD-7段数码管显示译码器。译码是编码的你过程。编码是将含有特定意义的信息编成二进制代码。译码是将表示特定意义信息的二进制代码翻译出来。实现译码功能的电路称为译码器。四位BCD译码器可以将BCD编码转化成十进制数码,并通过7段数码管显示出来。由于输入端有四个,共有24=16种不同的组合,每一种组合可对应一个数码,而十进制数码共有10个数码,因此有6个无效状态,对应7段数码管不亮。7段数码管内部有7个发光二极管,利用这7个发光二极管的亮暗组合来显示数码。7段数码管内部的7个发光二极管有共阴和共阳两种接法,把所有二极管的阳极连到一起的称为共阳极接法,此时译码器的输出应该是低电平有效;把所有二极管的阴极连到一起的称为共阴极接法,此时译码器的输出应该是高电平有效。 举例说明,如果要显示数码“0”则共阴极7段数码管的输出led6(a)、led5(b)、led4(c)、led3(d)、led2(e)、led1(f)、led0(g)为1111110,输入端D3、D2、D1、D0为0000。用89c51的p1口的p0、p1、p2、p3连接74ls48驱动器的A、B、C、D。3.2.6控制部分AT89S51是美国ATMEL公司生产的低功耗,高性能CMOS 8位单片机,片内含4K bytes的可系统编程的Flash只读程序存储器,器件采用ATMEL公司的高密度,非易失性存储技术生产,兼容标准8051指令系统及引脚。AT89S51提供以下标准功能:4K字节Flash闪速存储器,128字节内部RAM,32I/O口线,看门狗(WDT),两个数据指针,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。AT89S51有40引脚,双列直插(DIP)封装,所用引脚功能如下:1. VCC 运行时加5V2. GND 接地3. XTAL1 振荡器反相放大器及内部时钟发生器的输入端4. XTAL2 振荡器反相放大器的输出端5. RST 复位输入,高电平有效,在晶振工作时,在RST引脚上作用2个机器周期以上的高电平,将使单片机复位。WDT溢出将使该引脚输出高电平,设置SFT AUXR的DISRTO位(地址8EH)可打开或关闭该功能。DISRTO位缺省为RESET输出高电平打开状态。6. EA/VPP 片外程序存储器访问允许信号。欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地),如果EA端为高电平(接Vcc端),CPU则执行内部程序存储器中的指令。7. P1口,P2口P1,P2是一组带内部上拉电阻的8位双向I/O口。运行时通过P1口控制驱动电路的工作,将数据送到数码管,显示相应的段码,为了达到减少功耗或满足端口对最大电流的限制,应加上一限流电阻。P2.0P2.5口控制数码管的位选,使六个数码管轮流显示数据,等于1时位选三极管导通,等于0 时位选三极管截止。8. 无自锁开关(S2P3.7)开关接相应引脚P3.7,当开关按下时,相应引脚为低电平0,断开时引脚为高电平1。3.2.7蜂鸣器驱动电路 图3-5 蜂鸣器电路如图3-5由于蜂鸣器的工作电流比较大,以致于单片机的I/O 口是无法直接驱动的,所以要利用放大电路来驱动,使用三极管来放大电流就可以了。利用I/O 定时翻转电平来产生驱动波形,利用定时器来做定时,通过定时翻转电平产生符合蜂鸣器要求的频率的波形,这个波形就可以用来驱动蜂鸣器了。比如为2500Hz 的蜂鸣器的驱动,可以知道周期为400s,这样只需要驱动蜂鸣器的I/O 口每200s 翻转一次电平就可以产生一个频率为2500Hz,占空比为1/2duty 的方波,再通过三极管放大就可以驱动这个蜂鸣器了。3.2.8校准调时部分更新显示器涉及到两个操作:发数据和改片选信号。使用单片机的p2口的p2.4、p2.5、p2.6、p2.7作为片选口与按键相连。第四章 原理4.1系统总体方案选择与说明本系统利用单片机实现具有计时、校时等功能的数字时钟,是以单片机AT89C51为核心元件同时采用LED数码管显示器动态显示“时”,“分”,“秒”的现代计时装置。另外具有校时功能,秒表功能,和定时器功能,利用单片机实现的数字时钟具有编程灵活,便于功能的扩充等优点。本次设计时钟电路,使用了AT89C51单片机芯片控制电路,单片机控制电路简单且省去了很多复杂的线路,使得电路简明易懂,使用键盘键上的按键来调整时钟的时、分、秒,四个按键的功能:A键用于电子钟启动/调整;B键用于调时,范围0-23,0为24点,每按一次时加1;C键用于调分,范围0-59,0 为60分,每按一次分加1;D键用于调秒, 范围0-59,0为60秒,每按一次秒加1,同时使用C语言程序来控制整个时钟显示,使得编程变得更容易,这样通过四个模块:键盘、芯片、蜂鸣器、LED显示屏即可满足设计要求。4.1.2总体方案设计细想1、 秒的设置利用单片机的T0定时器工作方式1,定时50秒,并利用一个软件计数器(R0到R7中的任意一个),本程序中选用R4做计数器,并附初值为20,作减法计数,每次T0溢出时,计数器减一,当计数为零时,定时一秒完成.2、 时钟的时分秒秒的个位以一为进制计数满10后向秒的十位进一,秒的十位计数满6后向分的个位进一;分的个位满10后向分的十位进一,分的十位满6后向小时的个位进一;小时同前一步。3、 闹钟的设置取时分秒的存储单元的数值与设定值相比较,当数值相等时,闹钟输出端口打开4、 显示输出显示器即LED显示的是十进制的数,故需要数据进制转换功能DA。本程序中选用的是共阴极七段六管LED。用单片机芯片AT89C51的P3;口输出控制共阴极七段六管LED的位选信号;用P1口输出共阴极七段六管LED的码段信号4.1.2说明系统由AT89C51、LED 数码管、按键、电容、电阻等部分构成,能实现时间的调整、输出、调时间时能闪烁等功能。系统中按钮S1能对时间进行调整功能的按钮,采用单键控制调时功能,运用软件去抖判断按键的时间从而选择完成相对应的功能时钟显示在此部分的设计中,设置专用显示数据缓冲区70h-75h,与分,时及其他数据缓冲区数据区别,在其中存放的是显示段码,而其他缓冲区存放的是时间数据。在显示时,首先将时间十进制数据转化为显示段码,然后送往数码管显示。显示段码采用动态扫描的方式。在要求改变显示数据的类别时,只须改变R0(指向数据缓冲区的指针)指向的十进制数据缓冲区即可。数据调整数据调整有多种方式。一、可以直接进入相关状态进行有关操作;二、将调整分两步,先进入状态,然后执行操作,这两步分别由两个键控制。方式一,比较直接,设计思想也比较简单,但是,这种方式存在操作时间和控制键数目的矛盾。如果用比较少的键,那么可能会在进入状态后处于数据调整等待状态,这样会影响到显示的扫描速度(显示部分可以采用8279芯片来控制,可以解决此问题)。 当然在这种方式下,还可以使用多个状态键,每个状态键,完成一个对应数据的调整。如果采用二的方式,就不会出现这种情况。因为状态的调整,与状态的操作可以分别由两个键控制,其状态的调整数可以多达256个(理论上),操作的完成是这样的,一键控制状态的调整,一键控制数据的调整。以上两种方式的实现都可以采用查询和中断的方式。两种方式必须注意的问题是两者进行相关操作的过程不能太长否则会影响显示的扫描。利用查询的方式,方法传统,对此就不作过多的讨论,以下是采用中断的方式实现的数字钟的一些讨论和有关问题作的一些处理。基于以上的讨论可以设计如下将调整分为状态调整和数据调整两部分,每次进入中断只执行一次操作,然后返回,这样,就不必让中断处于调整等待状态,这样,可以使中断的耗时很小。将定时器中断的优先级设置为最高级,那么中断的方式和查询的方式一样不会影响到时钟的记数。基于以上的讨论,数据修改的具体操作如下: 在状态进入后,调整指针的指向中R1表示指向数据缓冲区的指针,它主要是为数据的调整而设立的,在图中MBF ,HOUR,分别表示时钟的分,时的数据缓冲区。状态3是秒表进入状态,状态4是时钟正常显示状态。 在程序中R0为专用指针,它的值只在状态调整时改变,每次运行图示模块,只改变一次状态,就跳出程序。调整数据只须改变R0中的数据即可。R0MINR0HOU正常计数状态1状态2状态3状态4图4-1 状态图4.2工作原理电子钟的工作原理:简易电子钟的设计有很多种方法,本设计采用单片机技术。简易电子钟设计的关键是如何产生秒的时间基准。本设计利用单片机的定时器/计数器和中断系统,通过软件计数的方法,获得秒的时间基准。具体方法如下单片机晶振频率fosc=6MHZ,设定定时器/计数器T0、T1的工作方式为工作方式1,软件控制定制器/计数器T0、T1的运行、停止,定时间为50ms,则定时器/计数器T0、T1溢出中断20次即可得到1秒的时间基准,定时器/计数器T0、T1计数初值X应满足(216 X)2=50000us, X=40536(十进制),3CB0H(十六进制)。定时器/计数器T0、T1采用中断控制方式,溢出次数在定时器/计数器的中断服务程序中,通过软件计数累加器计数,累计次数满8次,则表明产生了1秒的时间基准。简易电子钟的显示器采用LED数码管显示器,由6个LED数码管组成,从左到右依次显示位时(十位、个位)、分(十位、个位)、秒(十位、个位)。电子钟键盘应由四个键构成,一个键用控制电子钟的运行、停止,另外按钮用于调整电子钟的时分秒值。本设计中采用一个按钮,用于控制时钟的运行、停止,调整时分值。4.3各单元硬件设计说明及计算方法总体方案及硬件设计:电子钟硬件系统的设计,关键是键盘、显示器接口电路的设计,本设计采用AT89C51的并行I/O口构成电子钟的键盘、显示接口电路,其硬件系统原理框图如下图所示,主要包括单片机、时钟电路。复位电路及显示接口电路。时钟电路复位电路单片机AT89C51驱动电路键 盘 显示器图4-2 单片机设计 需要用的硬件芯片AT89C51,七段六管LED供阴极显示器,按钮,电容,晶振管。采用晶振电路产生秒脉冲,采用AT89C51芯片的P1口输出对七段LED显示器的码段进行控制。运用P3.0到P3.5的输出对七段六管LED显示器的位选控制。运用P3.7口对时钟进行调节功能输入4.4软件设计与说明软件设计功能部分包括一秒计时程序INTT0,加一程序ADD1,显示程序DISPLAY,延时程序,中断,调时程序SETMM,闪烁程序INTT1,清零程序CLR0,等。其中一秒计时程序、加一程序、中断程序、清零程序及显示程序是是时钟的核心程序,完成时钟的正常走时功能,也是时钟的基本功能。延时程序在本系统中主要起两个主用,第一就是显示的短暂延时,使显示更加完善,作用二就是在按按钮时根据时间来选择相应的功能以及起软件消斗功能。 闪烁程序能使显示功能更加人性化,以及同步显示正在执行的功能。调时程序主要完成设置时间的功能从单片机开始清零开始清零70H到7AH单元 ,在清零20H0A放入7A单元,定T0、T1为工总方式1 T0T1定时器赋初值3CB0,EA、ET0、TR0置位,开中断开启T0定时器,显示程序,如果正确继续显示,如何错误可以重新调时。4.5调试结果与必要的调试说明本课程设计调试是采用经典画图及仿真工具PROTEUS软件完成首次调试出现显示不正常,显示位不对,理论上应为,七段六管LED从左到右显示位秒的个位,秒的十位,分的个位,分的十位,小时的个位,小时的十位,对应的端口应为P3口的P3.0到P3.5按顺序对应,但秒的个位向后推移了一位,且有应为秒的显示位反而不显示。刚刚开始就排除了软件问题,以为是用错了显示器,结果换来换去没有用错。采用一位一位测试法进行排除,发现P3.0口输出有无,无论怎么改都是显示0和8两个数。后来问老师,并找到了出错的原因,程序中显示器的号码段有错误,应选用共阴极的码段。程序中七段六段LED显示的位的初值为0FEH,及11111110B,为共阴极初值。而代码用的是共阳极的代码段,故显示不正常。把号码段改为共阴极代码后,显示正常。显示正常后,长按键SB0释放后进入调分状态,在每快速按键后分显示位加一,能调到59后再次按键自动清零,说明能准确完成分的60计时;再次长按SB0释放后,进入调时状态,每短按一次SB0后时显示位加一,能调到23后再次按键自动清理,说明能准确完成小时24小时计时;第三次长按键后,退出调时,进入正常计时状态,说明能准确完成状态循环。4.6使用说明系统的时间调整功能采用单键控制,其操作为长按S1一次松开后,退出时钟正常走秒,并进入对时钟的分钟未进行调整,每短按SB0按钮一次,时钟分钟显示数值加一,满六十后制动归零;再次长按S1按钮松开后,退出分钟调整,进入时钟小时调整,每短按SB0一次,时钟小时位加一,满二十四后制动归零;再次长按SB0,退出小时调整,并进入正常走时功能。第五章 软件设计5.1主程序流程图 图5-1主程序5.2闹铃流程图图5-2闹铃程序5.3中断程序图5-3中断程序第六章 调试过程6.1使用的元件与元件特性图6-1 DP-51DPROC单片机实验箱表6-1 AT89S51功能特性: 兼容MCS-51指令系统 4k可反复擦写(1000次)ISP Flash ROM 32个可编程I/O口 4.0-5.5V工作电压范围 2个16位可编程定时/计数器 全静态工作模式:时钟频率0-33MHz 全双工UART串行中断口线 128x8bit内部RAM 6个中断源 低功耗空闲和掉电模式 中断唤醒省电模式 3级程序加密锁 看门狗(WDT)电路 掉电标识和快速编程特性实验仪模块分布图DP-51PRO 单片机综合仿真实验仪由多个相对独立的功能模块组成,每个功能模块都有一个编号,如C3,D8。以下是各模块位置分布图。图6-2单片机综合仿真实验仪使用到的功能模块简介DP-51PRO 单片机综合仿真实验仪上每个功能模块的主要功能如下表所示表6-2编号功能块名称功能说明A1MON51 仿真调试运行模块内带MON51 监控程序,支持与KEIL C51 联机仿真调试,支持单步、断点、跟踪、运行等方式。调试完成可以直接运行,无需仿真器和编程器。实现PHILIPS 单片机的64Kflash 的ISP下载编程功能。另外,RS232 串口通讯实验也用这个功能块来进行。A1区MON51仿真模块 该区除了下载仿真功能外,还包含了RS232 实验的功能。电路结构如下图所示。短接A1 区的JP15 跳线组的1和2,3和4(出厂默认设置),就把单片机锁紧座的Rxd 和Txd 脚与RS232 电平转换芯片MAX232 连接起来了。如果用户想外接RS232 接口,可以把短路器去掉,这时JP15 的1、3那边是连接到MAX232 芯片的,2、4那边是连接到单片机锁紧座的。A1 区的J76 可以通过40针排线与A2区的J79 相连,把单片机的功能管脚外引出去。图6-3D7I2C 实验区该区包含一片24WC02 256 字节的EEPROM,一片PCF8563实时时钟芯片及外围电路,一片ZLG7290 键盘LED 驱动芯片及8 段8 位数码管和16 个按键。D4蜂鸣器区该区包含一个交流蜂鸣器及其驱动电路表6-3D4蜂鸣器区该区包含一个交流蜂鸣器及其驱动电路D8接触式IC 卡实验区该区包含一个可连接SLE4442 卡的读卡头。D4 区为蜂鸣器电路,具体结构如下图所示。其中,J8为控制信号输入端,当输入为0时,没有声音输出,当输入为1时,蜂鸣器发声。图6-4蜂鸣器电路6.2电路连接用导线连接D5区的SCL、SDA到A2区的P16、P17(SCLP16、SDA-P17),连接D5区的RST _ L、INT _ KEY到A2区的P10、INTO(RST-P10、INT_ KEY-INT0),短接D5区的JP1跳线。使用导线把A2区的P13与B5区的BUZZ接线柱相连。6.3使用Keil uVision3编写程序6.3.1.写显示程序:#include /*头文件的包含*/#include #define uchar unsigned char /*宏定义*/#define uint unsigned int#define _Nop() _nop_() /*定义空指令*/* 常,变量定义区 */ /*端口位定义*/sbit SDA=P17; /*模拟I2C数据传送位*/sbit SCL=P16; /*模拟I2C时钟控制位*/ /*状态标志*/bit ack; /*应答标志位*/ void Start_I2c() SDA=1; /*发送起始条件的数据信号*/ _Nop(); SCL=1; _Nop(); /*起始条件建立时间大于4.7us,延时*/ _Nop(); _Nop(); _Nop(); _Nop(); SDA=0; /*发送起始信号*/ _Nop(); /* 起始条件锁定时间大于4s*/ _Nop(); _Nop(); _Nop(); _Nop(); SCL=0; /*钳住I2C总线,准备发送或接收数据 */ _Nop(); _Nop();void Stop_I2c() SDA=0; /*发送结束条件的数据信号*/ _Nop(); /*发送结束条件的时钟信号*/ SCL=1; /*结束条件建立时间大于4s*/ _Nop(); _Nop(); _Nop(); _Nop(); _Nop(); SDA=1; /*发送I2C总线结束信号*/ _Nop(); _Nop(); _Nop(); _Nop();void SendByte(uchar c) uchar BitCnt; for(BitCnt=0;BitCnt8;BitCnt+) /*要传送的数据长度为8位*/ if(cBitCnt)&0x80)SDA=1; /*判断发送位*/ else SDA=0; _Nop(); SCL=1; /*置时钟线为高,通知被控器开始接收数据位*/ _Nop(); _Nop(); /*保证时钟高电平周期大于4s*/ _Nop(); _Nop(); _Nop(); SCL=0; _Nop(); _Nop(); SDA=1; /*8位发送完后释放数据线,准备接收应答位*/ _Nop(); _Nop(); SCL=1; _Nop(); _Nop(); _Nop(); if(SDA=1)ack=0; else ack=1; /*判断是否接收到应答信号*/ SCL=0; _Nop(); _Nop();uchar RcvByte() uchar retc; uchar BitCnt; retc=0; SDA=1; /*置数据线为输入方式*/ for(BitCnt=0;BitCnt8;BitCnt+) _Nop(); SCL=0; /*置时钟线为低,准备接收数据位*/ _Nop(); _Nop(); /*时钟低电平周期大于4.7s*/ _Nop(); _Nop(); _Nop(); SCL=1; /*置时钟线为高使数据线上数据有效*/ _Nop(); _Nop(); retc=retc1; if(SDA=1)retc=retc+1; /*读数据位,接收的数据位放入retc中 */ _Nop(); _Nop(); SCL=0; _Nop(); _Nop(); return(retc);void Ack_I2c(bit a) if(a=0)SDA=0; /*在此发出应答或非应答信号 */ else SDA=1; _Nop(); _Nop(); _Nop(); SCL=1; _Nop(); _Nop(); /*时钟低电平周期大于4s*/ _Nop(); _Nop(); _Nop(); SCL=0; /*清时钟线,钳住I2C总线以便继续接收*/ _Nop(); _Nop(); bit ISendByte(uchar sla,uchar c) Start_I2c(); /*启动总线*/ SendByte(sla); /*发送器件地址*/ if(ack=0)return(0); Sen

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论