24/12:小时格式位,1表明24小时制,而0表明12小时制。
DSE:夏令时允许位,当DSE置1时允许两个特殊的更新,在四月份的第一星期日,时间从1:59:59AM时改变为3:00:00AM;在十月的最后一个星期日的1:59:59AM时改变为1:00:00AM。当DSE位为0,这种特殊修正不发生。 ?寄存器C
表3-11 DS12887寄存器C
IRQF:中断申请标志位。当下列表达式中一个或多个为真时,置1。 PF=PIE=1;AF=AIE=1;UF=UIE=1;
即:IRQF=PF·PIE+AF·AIE+UF·UIE
只要IRQF为1,IRQ管脚输出低 ,程序读寄存器C以后或RESET管脚为低后,所有标志位清零。
VF:更新周期结束标志位。VF为1表明更新周期结束。
AF:定闹中断标志位,只读,AF为1表明现在时间与定闹时间匹配。 ?寄存器D
VRT:内部锂电池状态位,平时应总读出1,如出现0,表明内部锂电池耗尽。BIT0~BIT6:未用状态位,读出总为0,不能写入。 表3-11 DS12887寄存器D
BIT0~BIT3:未用状态位,读出总为0,不能写入。
(4>DS12887的电路设计 本设计中的DS12887芯片AD0-AD7引脚与STC89C52芯片的P2口相连接。MOT引脚接地,为INTEL总线时序方式。因此R/W和DS引脚也为对应INTEL的操作模式[19]。时钟模块电路如图3-6所示。
17 / 32
图3-6 时钟模块电路图
3.2.4 温度采集模块设计
温度传感器DS18B20的接法很简单,它的DQ引脚与STC89C52芯片的P1.7引脚相连接。这里只用到一个温度传感器,若要使用多个则只需将所有的DS18B20的I/O口接在一起即可,在具体操作时,通过读取每个芯片的内部序列号来识别[20]。
3.2.5 按键调整系统模块设计
74LS21芯片为两组4输入与门<正逻辑)。本设计中的四个按键分别接到74LS21芯片的1A,1B,1C,1D,即4输入与门的4个输入。而74LS21的输出1Y则接到STC89C52芯片的P3.2(INT0>引脚,由于该引脚为低电平有效,当警报发生时按下四个按键中任意一个都会使输出1Y变为低电平,则芯片发生中断,报警停止。同时,四个按键key1-key4也接到STC89C52芯片的P1.0-P1.3起到调节时间日期等功能[21]。按键模块电路如图3-7所示。
18 / 32
图3-7 按键模块
3.2.6 蜂鸣器报警模块
蜂鸣器报警模块的作用:当定时闹钟时间到时,蜂鸣器发出预设的声音,而发光二极管则会随着音乐闪烁。本模块采用PNP三极管为蜂鸣器放大电流,基极通过4.7k电阻与单片机STC89C52的闲置引脚P3.5相连接,集电极直接接地,发射极接发光二极管和蜂鸣器[22]。报警模块电路如图3-8所示。
图3-8 报警模块
19 / 32
第4章 软件设计
4.1 软件设计总体说明
本系统的程序采用C语言编写,为了便于修改和调试,系统软件采用模块化设计,程序的编写编译在软件WAVE6000中完成。
系统中有四个按键,即:设置键S1、切换键S2、上调键S3、下调键S4。 <1)按下S1键,系统进入设置状态,再按下S2键可在除温度外的工程,如年、月、日、时、分、秒、星期、闹钟上停留,此时可按上、下调键进行加减一操作。
<2)同时按下S1键和S2键会将当前的时间恢复到默认时间。 <3)同时按下S3键和S4键可对闹钟进行开启和关闭。
4.2 程序软件实现
主程序流程图如图4-1所示
图4-1 主程序流程图
20 / 32
LCD1602液晶显示模块子程序流程图如图4-2所示
开始初始化忙碌状态检测写入指令数据忙碌状态检测设置显示位置是忙碌状态检测写入显示数据返回 图4-2 LCD1602子程序流程图
DS12887模块子程序流程图如图4-3、图4-4所示
开始定义14位时间数组date time[]读取DS12887时间数据到数组date time[]在LCD1602上显示数据date time[]返回图4-3 DS12887时间显示流程图
21 / 32