资源描述
无 锡 职 业 技 术 学 院
毕业设计说明书(论文)
电子音乐闹钟
摘 要
本文设计一个51电子闹钟,能随意设定走时起始时间,12小时/24小时两种制式可选,以适应不同的需要,能指示秒节奏,即秒指示,采用交直流供电电源。与石英钟不同的是,电子钟一般采用数码管等显示介质,因而必须以交流供电为主,以直流电源为后备辅助电源,并能自动切换。该设计主要包括:按键、显示程序单元部分。、AT89S51单片机芯片、74HC245驱动LED显示电路,集成电路74HC245和LM386各1个。
关键词:AT89S51单片机,自动切换,交流供电,电子闹钟
1引言
现代的快节奏生活给人们的精神上带来了很大压力。如何排解或缓解这些压力已经成为很多人关心的问题。单片机电子闹钟是具发前闹钟创新性的系统,它代表了时代的发展趋势。2007年,无论从国内外行业发展趋势,还是从闹钟市场准入的要求来看,节能、环保、创新都已成为中国家电企业无法回避的大问题。在原材料价格不断上涨、下游渠道商实力膨胀、价格战越来越激烈、行业利润日趋微薄的背景下,日前,中国的电子闹钟在节能化、环保化、创新型转变过程中,正进行新一轮闹钟赛跑。
2 方案论证
2.1方案一:软件设计
软件功能:
(1)检测按键。当系统检测到某个案件被按下时,转到相应子程序处理,可实现校时、设定闹铃时间的功能。
(2) 显示。系统通过调用显示子程序,可将显示缓冲区里的内容通过动态扫描方式输出到数码管显示器。
(3) 计时。系统通过中断和软件计数器可产生秒信号。每到1s,系统将会调整时间存储单元的内容,从而实现计时功能。
(4) 比较。每当秒存储单元的内容为0时,系统通过调用比较子程序可判断当前时间是否符合闹铃条件,若符合,则调用发音子程序使蜂鸣器发出闹铃声音。
(5) 产生音频方波输出。系统通过软件产生音频方波输出使蜂鸣器发声,这样可以省去硬件振荡电路。
(6) 拆分。为了提高存储单元的利用率,本系统将时间数据压缩成压缩BCD码后再送入显存才能显示。
(7) 合并。为了提高修改时间的速度,可先对现存内容逐位修改,然后调用合并子程序把显存内容合并后送入指定存储单元。
(8) 设定。系统进入设定状态后,可通过按“设定”键改变闪亮位位置和按“+”或“-”键来加1或减1闪亮位内容,从而达到报时和设定闹铃时间的目的。
2.2方案二:
采用交直流供电电源。与石英钟不同的是,电子钟一般采用数码管等显示介质,因而必须以交流供电为主,以直流电源为后备辅助电源,并能自动切换。该设计主要包括:按键、显示程序单元部分。、AT89S51单片机芯片、74HC245驱动LED显示电路,集成电路74HC245和LM386各1个。
2.3系统方案原理框图及方案描述
CPU
按键与按钮电路
复位等辅助电路
4位数码管显示电路
闹铃声光指示电路
电源系统
图2-1 整个系统的原理图
系统功能及使用方法:
系统上电后,自动进入时钟状态。若在此时按下“设定”键,显示器上将出现闪亮位,再按“+”或“-”则可以加或减闪亮位内容,修改完一位后再按“设定”可改变闪亮位位置继续修改下一位。修改完成后按“确定”键即可退出设定状态进入正常显示时钟状态。
在正常显示时钟状态时按下“闹钟”键可进入闹钟状态,此时按“+”或“-”可上下翻动闹钟表;按“设定”键可修改当前显示的闹钟时间,修改方法与修改时钟相同。在查看闹钟表状态下按“闹钟”键可以开/关当前显示的闹钟时间,当显示器第5位显示“-”时表示闹铃已开。按“时钟”键返回正常显示时钟状态。若想设置闹铃,应先按下复位按键,然后长时间按下"设置"按键,第一个数码管会显示”C”,然后变为”00-00-00”,此时进入闹铃设置状态,设置方法跟上面一样,闹铃设置完后,下一步要设置当前时间,调整方法跳到第一步。这样设置好后,她就能按照主人的意思,定时的把你闹醒啦!
我们先了解简易闹钟的设计方法,并自己动手设计电路和编写实现闹钟功能的程序。简易闹钟要实现以下功能:1、、能正确显示闹钟的走时2、可以进行当前时间的设置3、可以设置闹钟时间,并在时间到时发出响声。
设计中,我们利用仪器中所提供的以上提到的芯片和软件编程结合的思路。本设计的软件编程由四部分构成,下面将对照程序的构成来阐述我们组对简易闹钟的方案设计,具体设计方案如下:(一)在主程序中,填写中断向量表,应用8255A的IRQ7和IRQ5端。利用8253A和8259A完成计时一秒的功能,然后通过更新时间的子程序完成时间跳变的功能,待到新的时间判断是否到达设定的闹钟的时间,如果是,则启动扬声器;如果否,则继续进行显示时间。(二)闹钟的时间是变化的,在更新时间的子程序中,首先判断更改后的秒数是否小于10,如果是,则返回主程序;如果否,则秒的个位跳变成0,秒的十位加一;再次判断秒的十位,过程同判断秒的个位相同。(三)简易闹钟最重要的功能就是“It’s time to do something!”在这部分,主要要考虑的也是判断当前时间是不是设定的闹钟时间。如果跳变后的时间的四位完完全全的和设定的闹钟时间相同,则扬声器应该响起,提示闹钟的主人“Time is up!”从闹钟的分钟的十位开始依次判断,如果前一个闹钟位的显示与设定的闹钟时间对应位相同,则转入判断下一位;如果不相同,则返回主程序。都判断后,如果都相同,则设置启动闹钟的对应位为1,启动扬声器。(四)在显示时间的子程序中,时间从0,0,0,0开始显示。四位数字的显示各由一段程序完成。
3 各电路设计和论证
单片机最小应用系统实际上就是一个内置程序存储器的单片机,可由单片机芯片,配以必要的外部器件构成,这些外部功能器件无法集成到芯片内部,主要有按键电路、复位电路、显示电路,单片机系统的设计等。
3.1按键电路的设计
作为一个按键从没有按下到按下以及释放是一个完整的过程,也就是说当我们按下一个按键时,总希望某个命令只执行一次。而在按下的过程中不要有干扰进来,因为在按下的过程中,一旦有干扰过来可能造成误触发过程,因此我们在设计按键电路的时候应注意不要有干扰进来以用在焊接时应注意:
独立式按键。如果设置过多按键,将会占用较多I/O口,而且会给布线带来不便,因此,此方案适用于按键较少的情况。如果选择此方案,由于按键较少,在修改时间或设置闹铃时间时就不能直接输入,只能通过加或减完成,稍为麻烦一些,但其程序简单。
(1)执锡补焊时应按照从左到右,由上到下的顺序,避免检查时漏检或焊接时漏修。
(2)焊接时要经常清洗烙铁头,防止烙铁头的杂物造成虚焊、针孔、加焊等不良发生。
(3) 不要在基板上给烙铁头加焊锡,生产过程中不能抖锡、敲锡、甩锡,防止焊锡渣、焊锡 、珠掉到基板上面。
(4)在压件或拆件时要先在线路板的铜箔面上加焊锡,要求均匀加热,避免松香失效或铜箔翘皮造成线路破坏。
考虑到电路不要复杂性,因而设计成3个按键,一个为复位,其它2个为按数字时间的按键和确定设好的时间确定.后2个按键要接89C2051端.若想设置闹铃,应先按下复位按键,然后长时间按下"设置"按键,第一个数码管会显示”C”,然后变为”00-00-00”,此时进入闹铃设置状态,设置方法跟上面一样,闹铃设置完后,下一步要设置当前时间,调整方法跳到第一步。
l 在复位后的待机状态下,用于启动设定时间参数(对时或定闹);
l 在设定时间参数状态而且不是设定最低位(即分个位)的状态下,用于结束当前位的设定,当前设定位下移;
l 在设定最低位(分个位)的状态下,用于结束本次时间设定。
2)+1键,用于对当前设定位(编辑位)进行加1操作,根据12/24小时工作模式和正在编辑的当前位的含义(时十位、时个位、分十位、分个位)自动进行数据的上限和下限判断。例如,对12小时制,小时的十位只能是0、1,如果当前值为0,则按+1键后为1,再按+1键则又回复到0。
3.2复位电路的设计
目前为止,单片机复位电路主要有四种类型:(1)微分型复位电路;(2)积分型复位电路;(3)比较器型复位电路;(4)看门狗型复位电路。另外,Maxim等公司也推出了专用于复位的专用芯片复位电路的基本功能是:系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。为可靠起见,电源稳定后还要经一定的延时才撤销复位信号,以防电源开关或电源插头分-合过程中引起的抖动而影响复位。当输入的复位信号延续两个机器周期以上的高电平时即为有效,用完成单片机的复位初始化操作。
单片机目前已被广泛地应用于家电、医疗、仪器仪表、工业自动化、航空航天等领域。市场上比较流行的单片机种类主要有Intel公司、Atmel公司和Philip公司的8051系列单片机,Motorola公司的M6800系列单片机,Intel公司的MCS96系列单片机以及Microchip公司的PIC系列单片机。无论用户使用哪种类型的单片机,总要涉及到单片机复位电路的设计。而单片机复位电路设计的好坏,直接影响到整个系统工作的可靠性。许多用户在设计完单片机系统,并在实验室调试成功后,在现场却出现了“死机”、“程序走飞”等现象,这主要是单片机的复位电路设计不可靠引起的。图1是一个单片机与大功率LED八段显示器共享一个电源,并采用微分复位电路的实例。在这种情况下,系统有时会出现一些不可预料的现象,如无规律可循的“死机”、“程序走飞”等。而用仿真器调试时却无此现象发生或极少发生此现象。又如图2所示,在此图中单片机复位采用另外一种复位电路。在此电路的应用中,用户有时会发现在关闭电源后的短时间内再次开启电源,单片机可能会工作不正常。这些现象,都可认为是由于单片机复位电路的设计不当引起的。
图3-2 复位电路图
3.3显示电路的设计
就时钟而言,通常可采用液晶显示或数码管显示。由于一般的段式液晶屏,需要专门的驱动电路,而且液晶显示作为一种被动显示,可视性相对较差;对于具有驱动电路和微处理器接口的液晶显示模块(字符或点阵),一般多采用并行接口,对微处理器的接口要求较高,占用资源多。另外,89C2051本身无专门的液晶驱动接口,因此,本时钟采用数码管显示方式。数码管作为一种主动显示器件,具有亮度高、价格便宜等优点,而且市场上也有专门的时钟显示组合数码管。基于AT89S51单片机的控制系统包括四部分:数据采集、控制系统、时钟电路、语音录音电路和报音提示信息电路。
用数码管作为显示器。数码管的驱动电路简单,使用方便,如果选择了此方案,那么在夜间看时间的时候就不需要有光源,非常方便。其缺点是功耗较大。由于数码管使用起来较为方便,在夜间看时间也很方便,因此我们选择了数码管作为显示器.
发音部分:
用软件方法产生方波输出,通过三极管放大后驱动蜂鸣器发音,这样就可以省去硬件振荡电路,降低成本。
4.器件介绍
电源:
如果是用电池供电,就比较方便携带,但是本系统,采用了数码管作为显示器,功耗较大,需要经常更换电池。况且,本系统的体积较大,即使使用电池供电也不能随身携带,因此,用电池供电不大合适,所以用外部稳压电源来供电。
振荡器:
石英晶体振荡器的特点是振荡频率准确、电路结构简单、频率易调整。它被广泛应用于彩电、计算机、遥控器等各类振荡电路中。它还具有压电效应:在晶体某一方向加一电场,晶体就会产生机械变形;反之,若在晶片的两侧施加机械压力,则在晶片相应的方向上将产生电场,这种物理现象称为压电效应。在这里,我们在晶体某一方向加一电场,从而在与此垂直的方向产生机械振动,有了机械振动,就会在相应的垂直面上产生电场,从而使机械振动和电场互为因果,这种循环过程一直持续到晶体的机械强度限制时,才达到最后稳定,这种压电谐振的频率即为晶体振荡器的固有频率。
控制器:
控制器是电子闹钟设计的核心部分,按设计要求产生相应的控制逻辑,以控制其他各部分的工作。由程序计数器、指令寄存器、指令译码器、时序产生器和操作控制器组成,它是发布命令的“决策机构”,即完成协调和指挥整个计算机系统的操作。
控制器主要功能如下:从内存中取出一条指令,并指出下一条指令在内存中位置对指令进行译码或测试,并产生相应的操作控制信号,以便启动规定的动作;指挥并控制CPU、内存和输入/输出设备之间数据流动的方向。
计数器
计数器ALARM-COUNTER实际上是一个异步复位、异步置位的累加器。在中央处理器 CPU 中,累加器 (accumulator) 是一种暂存器,用来储存计算所产生的中间结果。没有像累加器这样的暂存器,那么在每次计算 (加法,乘法,移位等等) 后就必须要把结果写回到内存,也许然后再读回来。然而存取主内存的速度是比从数学逻辑单元(ALU) 到有直接路径的累加器存取更慢。计数器的作用是:通常情况下进行时钟累加计数,必要时可以置入新的时钟值,然后从该值开始新的计数。
寄存器
寄存器ALARM-REG用于保存用户设置的闹钟时间,是一个异步复位寄存器。寄存器是中央处理器内的组成部份,是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和位址。在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC)。在中央处理器的算术及逻辑部件中,包含的寄存器有累加器(ACC)。
分频器
分频器DIVIDER将高速的外部时钟频率分频成每一分钟一次的时钟频率,以便进行时钟计数。由于石英晶体振荡器产生的频率很高,要得到秒脉冲,需要用分频电路。例如,振荡器输出4MHz信号,通过D触发器(74LS74)进行4分频变成1MHz,然后送到10分频计数器(74LS90,该计数器可以用8421码制,也可以用5421码制),经过6次10分频而获得1Hz方波信号作为秒脉冲信号。
显示电路
显示器DRIVER根据需要显示当前时间、用户设置的闹钟时间或用户通过键盘输入的新时间,同时判断当前时间是否已到了闹钟时间,实际上是一个多路选择比较器。多路选择器是数据选择器的别称。在多路数据传送过程中,能够根据需要将其中任意一路选出来的电路,叫做数据选择器,也称多路选择器或多路开关。
输入电路
键盘缓冲器KEY-BUFFER是一个移位寄存器,暂存用户键入的数字,并且实现用户键入数字在显示器上从右到左是依次显示。寄存器的用途:(1)可将寄存器内的数据执行算术及逻辑运算。(2)存于寄存器内的地址可用来指向内存的某个位置,即寻址。(3)可以用来读写数据到电脑的周边设备。AT89S51有8个8位数据寄存器,这些8位寄存器可分别组成16位寄存器:
AH&AL=AX:累加寄存器,常用于运算;
BH&BL=BX:基址寄存器,常用于地址索引;
CH&CL=CX:计数寄存器,常用于计数;
DH&DL=DX:数据寄存器,常用于数据传递。
为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址:
CS(CODE SEGMENT):代码段寄存器;
DS(DATA SEGMENT):数据段寄存器;
SS(STACK SEGMENT):堆栈段寄存器;
ES(EXTRA SEGMENT):附加段寄存器。
当一个程序要执行时,就要决定程序代码、数据和堆栈各要用到内存的哪些位置,通过设定段寄存器 CS,DS,SS 来指向这些起始位置。通常是将DS固定,而根据需要修改CS。所以,程序可以在可寻址空间小于64K的情况下被写成任意大小。所以,程序和其数据组合起来的大小,限制在DS 所指的64K内,这就是COM文件不得大于64K的原因。
计时器
在计时过程中,系统利用89S51自身的计时器T0作为时钟基准,计时器中断的准确度直接关系到整个系统的精度,因此获取精确的定时时钟信号成为该系统的关键。AT89S51单片机内有2个可编程的16位定时器/计数器,并工作在方式l下,晶振频率为12MHz。
5系统软件设计系统软件的设计方法与硬件设计的方法是相同的,也是根据系统的各个功能,划分成各个子模块,分别对每个模块来进行设计,然后在通过各个模块之间的调用来实现整个系统的功能。
系统软件部分的设计模块有:按键电路的软件设计、复位电路的软件设计、显示电路的软件设计共3个模块。
发音部分:
用软件方法产生方波输出,通过三极管放大后驱动蜂鸣器发音,这样就可以省去硬件振荡电路,降低成本。
电源:
如果是用电池供电,就比较方便携带,但是本系统,采用了数码管作为显示器,功耗较大,需要经常更换电池。况且,本系统的体积较大,即使使用电池供电也不能随身携带,因此,用电池供电不大合适,所以用外部稳压电源来供电。
5.1软件设计
AT89S5l内部定时/计数器T0和Tl设置为定时器模式l工作方式.作为电子时钟及电子秒表的计时基准。定时器T0产生10 ms的中断信号,每经过1t30次中断,时钟秒位加一,秒位经60次加一后向时位进位,当时问为23时59分59秒时,秒位再加一后变为00时00分00秒.当按键切换为电子秒表功能时,T0每产生一次中断,十毫秒单元加一,十毫秒单元经过l0次加一后,百毫秒单元加一。依次进位可实现最长为9小时59分59秒990毫秒的秒表计时,可达到分辩10 ms的计时精度。
利用K1~K4按键可对时钟进行对时当首次按下K1按键时,显示数码管第一位闪烁,继续按键时,下一位闪烁。当某一位闪烁时,按下K2按键可使闪烁位加一。在正常时钟显示方式下按下K2键时,转为年、月、日显示.按下K3键,可进入秒表状态,按下K4键可显示闹钟定时时间。
软件设计分为主程序、定时器T0和定时器T1中断服务程序及相应的子程序。
软件功能:
(1)检测按键。当系统检测到某个案件被按下时,转到相应子程序处理,可实现校时、设定闹铃时间的功能。
(2) 显示。系统通过调用显示子程序,可将显示缓冲区里的内容通过动态扫描方式输出到数码管显示器。
(3) 计时。系统通过中断和软件计数器可产生秒信号。每到1s,系统将会调整时间存储单元的内容,从而实现计时功能。
(4) 比较。每当秒存储单元的内容为0时,系统通过调用比较子程序可判断当前时间是否符合闹铃条件,若符合,则调用发音子程序使蜂鸣器发出闹铃声音。
(5) 产生音频方波输出。系统通过软件产生音频方波输出使蜂鸣器发声,这样可以省去硬件振荡电路。
(6) 拆分。为了提高存储单元的利用率,本系统将时间数据压缩成压缩BCD码后再送入显存才能显示。
(7) 合并。为了提高修改时间的速度,可先对现存内容逐位修改,然后调用合并子程序把显存内容合并后送入指定存储单元。
(8) 设定。系统进入设定状态后,可通过按“设定”键改变闪亮位位置和按“+”或“-”键来加1或减1闪亮位内容,从而达到报时和设定闹铃时间的目的。
图 T0中断服务程序流程图
电路流程图
5.2整个系统软件部分的总体设计
在各个模块的软件设计完成后,便可以对整个系统进行整体的软件设计。其根本的设计思路是通过设置一些联系信号,把原本功能独立的各个模块联结在一起,从而实现整体系统的功能。AT89S5l内部定时/计数器T0和Tl设置为定时器模式l工作方式.作为电子时钟及电子秒表的计时基准。定时器T0产生10 ms的中断信号,每经过1t30次中断,时钟秒位加一,秒位经60次加一后向时位进位,当时问为23时59分59秒时,秒位再加一后变为00时00分00秒.当按键切换为电子秒表功能时,T0每产生一次中断,十毫秒单元加一,十毫秒单元经过l0次加一后,百毫秒单元加一。依次进位可实现最长为9小时59分59秒990毫秒的秒表计时,可达到分辩10 ms的计时精度。
利用K1~K4按键可对时钟进行对时当首次按下K1按键时,显示数码管第一位闪烁,继续按键时,下一位闪烁。当某一位闪烁时,按下K2按键可使闪烁位加一。在正常时钟显示方式下按下K2键时,转为年、月、日显示.按下K3键,可进入秒表状态,按下K4键可显示闹钟定时时间。
软件设计分为主程序、定时器T0和定时器T1中断服务程序及相应的子程序。
5.3子程序及其功能简介
(1) 比较程序
每当秒存储单元的内容为0时,系统通过调用比较子程序可判断当前时间是否符合闹铃条件,若符合,则调用发音子程序使蜂鸣器发出闹铃声音。
(2) 检测按键程序
当系统检测到某个案件被按下时,转到相应子程序处理,可实现校时、设定闹铃时间的功能
(3) 显示程序
系统通过调用显示子程序,可将显示缓冲区里的内容通过动态扫描方式输出到数码管显示器。
(4) 时间设置程序
系统通过按键检测,更改显示数值,从而实现对当前时间修改的功能
5.4 子程序设计
子程序设计框图5.1所示,具体程序见附录
图5.1 比较程序框图
5.5 软件的调试环境
单片机本身不具备自主开发能力,即使在单片机应用系统的设计完成以后用户也不能直接对程序进行修改。单片机应用系统的开发必须借助一套开发工具和软件环境才能进行。本节介绍一种单片机模拟调试软件的使用。模拟调试软件不仅可以在程序下载到单片机芯片之前验证它的正确性,而且模拟调试软件也可以用来辅助学习单片机的基本知识。实用软件Kei进行模拟调试,Keil单片机模拟调试软件是目前获得广泛应用的一种开发MCS51系列兼容单片机的软件。该软件可以从Keil公司中国代理处购买,也可以从Keil公司的网站(http://www. )上下载它的免费评估(Eval)版本。
下载获得的Keil单片机模拟调试软件是一个压缩包,解压后执行其中的Setup.exe程序就可以安装这个软件。软件的安装过程与一般的Windows应用软件类似,只要按照安装提示操作即可,这里不作详细介绍,仅需要注意的是,安装方式要选择Eval Vision安装。Keil单片机模拟调试软件安装完成以后,计算机桌面上将产生一个标注有“KeilμVision2”的图标,双击这个图标就可以进入Keil单片机模拟调试软件的集成开发环境。集成开发环境的界面,初次进入的集成开发环境界面中只包括空的工程管理窗口和输出窗口。Keil单片机模拟调试软件对MCS51单片机应用系统的软件开发过程采用工程(Project)管理。工程保存着程序编辑的信息和程序调试的环境。在开始编写程序之前首先应该建立一个工程。新建一个工程之前通常还需要建立一个文件夹,后面产生的工程文件和源程序文件等都将存储在这个文件夹之中。Keil单片机模拟调试软件支持许多公司生产的MCS51单片机兼容产品。如前所述,本书应用电路中采用Atmel公司的AT89S51芯片,下面以这款芯片为例介绍如何实现选择。
在图5.3所示的对话框中的Data base列表框中首先选择生产芯片的公司名称Atmel,双击这个公司名称即可打开Atmel公司目前生产的所有芯片型号。接着在列出的产品清单中选择将使用的AT89S51芯片,如图5.3所示。最后单击“确定”按钮即可完成芯片的选择。
完成芯片的选择后又回到如图5.3所示的集成开发环境的窗口,但是这时该窗口中的工程管理窗口不再是空白,在它的文件选项卡中出现目录列表Target 1和它的子目录Source Group 1。
集成开发环境中的菜单Project内还包含Open Project和Close Project等选项。Open Project选项用来以后再次进入已经建立的工程,选择Project→Open Project命令将打开选择工程的对话框,该对话框与图5.3类似。在 “查找范围”下拉列表框中选择欲打开的工程所在的文件夹,列表框中将出现该文件夹中的所有工程,选择将要打开的工程,单击“打开”按钮即可打开一个工程。选择Project→Close Project命令将关闭当前的工程。
6.软硬件系统的调试
系统的调试方法
整个系统调试的主要思想是:先每个模块进行调试,然后整个系统一起调试。先软硬件分开调试,然后一起调试。遵循先部分后整体的原则。
系统的在调试过程中要注意以下几点:
(1)硬件电路焊完之后,在上电之前一定要先用万用表检测电源和地之间是否短路。
(2)上电之后要用示波器观察信号的在电路中变化的情况,与设计当初的情况相比较,找出差别,并进行分析。
(3)软件调试过程中可以使用断点、单步执行等常用的方法。
(4)软硬件联调时,要注意软件部分要一个功能一个功能的调试。
6.1.1输入按键的调试
输入按键的调试,只要按键按下去时,按键有相应的反应就行,通过程序来判断,单片机I/O是否能够识别出。
6.1.2复位电路的调试
当电源刚接通时,接通电源就完成了系统的初始化。
6.1.3显示电路的调试
在本设计中,显示电路只需完成,当输入数字时能正确显示数字.
6.1.4整个系统的联调
在系统各个部分都调试完毕之后,即可以进行整个系统的调试。由于前面各个部分的调试做的都比较充分,所以在实际调试过程中,能够较顺利的实现整个系统预期的功能。
7 结论
整个设计思路是:先进行系统的整体规划确定整个系统的功能,然后按照每个功能的具体要求,进行各个模块的实物设计并逐个调试,待全部通过后,进行整个系统的联调,最终实现一个完整的系统,并制成印刷线路板。
整个系统的设计步骤如下:
在单片机最小系统的基础上,完成按键电路和复位电路的设计。
完成显示电路、数字按键、复位电路。
具有3个功能按键:
1. 在复位后的待机状态下,用于启动设定时间参数(对时或定闹);
2. 在设定时间参数状态而且不是设定最低位(即分个位)的状态下,用于结束当前位的设定,当前设定位下移;
3.在设定最低位(分个位)的状态下,用于结束本次时间设定。
2)+1键,用于对当前设定位(编辑位)进行加1操作,根据12/24小时工作模式和正在编辑的当前位的含义(时十位、时个位、分十位、分个位)自动进行数据的上限和下限判断。例如,对12小时制,小时的十位只能是0、1,如果当前值为0,则按+1键后为1,再按+1键则又回复到0。把以上各个模块联结起来,整体调试功能。
系统能在设定的时间内闹铃,但声音有点沙哑。这是因为控制蜂鸣器的I/O口每次取反后,必须调用一次显示子程序后才能再次取反,否则在发音期间不能显示,而调用一次显示子程序需要的时间大约为6ms(6位每位1ms),所以振荡频率f=1/T=1/(2*6ms)≈83Hz,显然这个频率过低,这就是造成声音沙哑的原因。经测试,其时钟误差约为3秒/天,这是因为从定时器向CPU发出中断申请信号到重装定时初值的过程需要一定的时间。
本系统通过测试,能够实现以下功能:
(1)按键输入。
(2)闹铃声音。
(3)闹钟定时。
6 附录 原理图
7 附录 参考文献
1.李捷,陈典涛等,一种应用单片机电子闹钟的设计与制作设计[J],农机化研究,2005。
2.陈明荧.8051单片机课程设计实训教材 北京:清华大学出版社 2004
3.胡汉才.单片机原理及其接口技术 北京:清华大学出版社 1995
4.徐淑华 程退安 姚万生 .单片机微型机原理及应用 哈尔滨工业大学出版社1994
5.丁元杰.《单片机原理与应用》.机械工业出版社出版.2003年2月.58-67
6. 朱定华.《单片机原理及接口技术》.电子工业出版社出版.2004年5月.32-46
7. 何立民.《单片机应用系统设计系统配置与接口技术》.北京航空航天大学出版社出版.2005年2月.16-45
8. 江晓安、董秀峰.《模拟电子技术》.西安电子科技大学出版社.2003年 9月.46-110
9. 陆坤.《电子设计技术》. 成都电子科技大学出版社.1996年5月.31-76
8 附录 程序
;;;;;;;;定义变量;;;;;;;;;
S1 EQU P3.4 ;按键
JIA EQU P3.5
SECL EQU 24H ;各个显示单元
SECH EQU 25H
HENGXIAN EQU 26H
MINUL EQU 27H
MINUH EQU 28H
HENG EQU 29H
HOURL EQU 2AH
HOURH EQU 2BH
SECOND EQU 2DH ;秒变量单位
COUNT EQU 2EH ;溢出中断计数器
SETFLAG EQU 20H
HH EQU 00H ;移位时用到的单元
HL EQU 01H
MH EQU 02H
ML EQU 03H
WARNSL EQU 2FH
WARNSH EQU 30H
WARNML EQU 32H ;报警分低位
WARNMH EQU 33H ;报警分高位
WARNHL EQU 35H ;报警时低位
WARNHH EQU 36H ;报警时高位
WARNCNT EQU 37H ;已设定闹铃时间标志
WARNING BIT 0CH ;闹铃标志
WARNSETTED BIT 0DH ;已设定闹铃时间标志
;;;;;;;误差修正;;;;;;;;;;;;;;;
TFIX BIT 0EH ;开始修正标志
N EQU 60 ;误差值,单位:1/10s,默认为0,即不修正
;;;;;;;;;;;;程序入口地址;;;;;;;;;;;;;;
ORG 0000H
LJMP MAIN
ORG 000BH ;定时器T0溢出中断入口
LJMP TIMER0
ORG 0030H
;;;;;;;;主程序;;;;;;;;;;;;;;;
MAIN:
MOV SP,#60H ;堆栈设置
CLR TFIX ;误差开始修正标志初始化
MOV COUNT,#0
LCALL SYS_INIT ;系统初始化
LCALL T0_INIT ;定时器初始化
LCALL SETTIME ;等待设置当前时间
MAIN_0:
MOV IE,#80H ;设置完后开始走时,启动定时器T0
SETB TR0 ;允许T0溢出中断
; LCALL DELAY10MS
LCALL DISPLAY1
;;;;;;;;;;;系统初始化子程序;;;;;;;;;
SYS_INIT:
MOV IE,#00H ;关中断
MOV R0,#20 ;清变量
MOV R1,#10H
MOV A,#00H
SYS_0:
MOV @R0,A
INC R0
DJNZ R1,SYS_0
RET
;;;;;;;;定时器、串口初始化;;;;;;;;;;;;;
T0_INIT:
MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#0B0H
RET
;;;;;;;;;;;;;闹铃时间设定;;;;;;;;;;;
SETWARN:
MOV WARNHH,#0
MOV WARNHL,#0
MOV WARNMH,#0
MOV WARNML,#0
MOV WARNSH,#0
MOV WARNSL,#0
MOV SETFLAG,#00
SETB HH
KAISHI_NAO:
LCALL DISPLAYNEW1
SETW_1:
JB S1,LOOP3
LCALL DELAY10MS
JB S1,LOOP3
JNB S1,$
JB ML,LOOPW1
MOV A,SETFLAG
RL A ;当前位右移 l 位(标志左移 1 位)
MOV SETFLAG,A ;回存
SJMP SET_W2
LOOP3:
LJMP SET_W2
LOOPW1:
LJMP KAISHI1
SET_W2:
LCALL DISPLAYNEW1
JB JIA,SETW_1
LCALL DELAY10MS
JB JIA,SETW_1
JNB JIA,$
JNB HH,SHI_W2 ;为真,则当前位灭
INC WARNHH
MOV A,WARNHH
XRL A,#3
JZ SET_W1_1
LJMP KAISHI_NAO
SET_W1_1:
MOV WARNHH,#0
LJMP KAISHI_NAO
SHI_W2:
JNB HL,FEN_W1
INC WARNHL
MOV A,WARNHH
CJNE A,#2,SHI_W2_1
MOV A,WARNHL
XRL A,#05H ;小时低位只能是0-4
JZ SET_W21
LJMP KAISHI_NAO
SHI_W2_1:
MOV A,WARNHL
XRL A,#0AH
JZ SET_W21
LJMP KAISHI_NAO
SET_W21:
MOV WARNHL,#0
LJMP KAISHI_NAO
FEN_W1:
JNB MH,FEN_W2
INC WARNMH
MOV A,WARNMH
XRL A,#6
JZ SET_W22
LJMP KAISHI_NAO
SET_W22:
MOV WARNMH,#0
LJMP KAISHI_NAO
FEN_W2:
INC WARNML
MOV A,WARNML
XRL A,#0AH
JZ SET_W23
LJMP KAISHI_NAO
SET_W23:
MOV WARNML,#0
LJMP KAISHI_NAO
;;;;;;;设置时间闹铃扫描;;;;;;;;;;
DISPLAYNEW1:
MOV A,#0AH
MOV 31H,A
MOV 34H,A
MOV R0,#2FH
MOV R3,#0FEH
PLAYNEW1:
MOV A,R3
MOV P2,A
MOV A,@R0
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY1MS
INC R0 RL A
MOV R3,A
SJMP PLAYNEW1
LOOP2: RET
;;;;;;;;;;;;;时间调整;;;;;;;;;;;
SETTIME:
MOV HOURH,#0
MOV HOURL,#0
MOV MINUH,#0 ;计时无保存,可能是闹铃没进去
MOV MINUL,#0
MOV SECH,#0
MOV SECL,#0
MOV SETFLAG,#00
SETB HH
PANLING:
LCALL DISPLAYNEW
JB S1,PANLING
LCALL DELAY100MS
LCALL DELAY100MS
LCALL DELAY100MS
LCALL DELAY100MS
LCALL DELAY100MS
JB S1,KAISHI1
; LCALL DELAY10MS
JNB S1,SETC_1;;;;;;;;;;;;;;;;;;;;;;;;;;;;按住时间更长为设置闹铃,第一个数码管显示为"C"
展开阅读全文