基于单片机的校园作息时间控制系统概要.docx
《基于单片机的校园作息时间控制系统概要.docx》由会员分享,可在线阅读,更多相关《基于单片机的校园作息时间控制系统概要.docx(24页珍藏版)》请在冰豆网上搜索。
![基于单片机的校园作息时间控制系统概要.docx](https://file1.bdocx.com/fileroot1/2023-1/6/06f8a0a0-91b3-4ec5-bf40-95496857ff80/06f8a0a0-91b3-4ec5-bf40-95496857ff801.gif)
基于单片机的校园作息时间控制系统概要
基于单片机的校园作息时间控制系统
聂仁勇
【摘要】:
校园作息时间控制系统主要用于学校,对一些以24小时为周期的
开关量进行自动控制。
如上下课打铃、教学楼照明的定时开与关、学生宿舍灯及校园路灯的定时开关、水泵的定时启动以及自来水供水时间控制等等。
该控制系统是采用AT89S52单片机来实现对上述开关量的控制,利用DS12887时钟芯片来提供时钟信息,设有六位数码管、可以实时显示时间、系统还设有输入键盘,用以修改实时时钟,体现了系统简单、工作稳定可靠、价廉、控制时间精确及系统体积小等优点。
【Abstract】:
Thecampusthedailytimetablecontrolsystemwhichismainly
usedinthecampus,itauto-controlsomeswitcheswhichhaveperiodsof24hours.Suchasthebellsringingwhenclassesbeginorfinish,thetimeswitchesoflampsinteachingbuildingsandstudentdormitories,thetimestart-upofwaterpump,andthetapwatersupplycontrolsystem,etc.
ThiscontrolsystemcarriesouttheswitchparametercontrolsallabovebySCMAT89S52.ItusestheclockchipcalledDS12887toprovidetheclockinformation.Itcouldshowtherealtimewith6bitdigitaltube.Anditcouldmodifytherealtimeclockwiththeinputkeyboard.Thesystemissimple,therunningissteadyanddependable,thecontrolledtimeisexact,andthephysicalvolumeofthesystemissmall,alltheadvantagesabovecanbeincarnatedinthissystem.
【关键词】:
作息时间控制AT89S52DS12887
【KEYWORD】:
THEDAILYTIMETABLECONTROL,AT89S52,DS12887
引言
该时钟控制系统有6位数码显示器,具有实时显示时钟(显示当前时间的小时、分钟及秒功能,通过外扩锁存器还可以实现多点、多电器设备的控制。
该控制系统可广泛用于学校、工厂和机关的自动打铃、电视、室内照明及其他对象控制,也可用于家庭或学生寝室进行时间指示及多点时间提醒。
该校园作息时间控制系统实现了对上下课打铃、教学楼照明、学生宿舍灯、校园路灯四个开关量的精确控制。
月时间累计误差≤1分钟。
系统设有的键盘电路,方便定期进行时间校准。
1、整体设计
根据设计要求画出系统框图,如图1所示,原理见附录1。
该控制系统是由微处理器、时钟控制芯片、蜂鸣器、数码显示部分以及键盘输入部分所组成。
该控制系统设有六位数码管、可以实时显示时间、系统还设有输入键盘,用以修改实时时钟。
系统还采用AT89S52作为处理器,用DS12887实时时钟芯片作时钟计时单元,它不仅可以计时,同时内部还有114个非易失RAM单元,可以保证时钟及内部RAM内的数据不受停电的影响,保护数据不丢失。
显示电路采用了CD4511芯片来完成驱动和译码的功能,另外该芯片具有的数据锁存功能克服了采用软件扫描显示电路所固有的闪烁的问题。
输出驱动电路部分,采用了CD4042反相锁存器来驱动二极管、蜂鸣器工作。
图1系统框图
根据实际情况对上下课打铃、教室照明、学生宿舍灯及校园路灯四个开关量在一天内的控制时间列表如下:
表1作息时间控制表
2、硬件设计
按系统框图分三个部分设计如下:
2.1系统部分
单片机采用片内带有4KBE2PROM的AT89C52,这样就不需要再扩展片外程序存储器,可以简化线路;用一片74LS138译码器提供5个外部地址(CS0、CS1、CS2、CS3、CS4,分别对于6个七段码显示器、1个时钟芯片和1个锁存器地址;采用一片时钟芯片DS12887为系统提供准确时间。
该芯片内部自带锂电池,计时精确,不受系统电源影响;AT89S52的T0与T1相连,利用单片机内部的定时/计数器完成15秒打铃控制。
如图2所示。
图2系统部分原理图
2.2键盘接口电路
键盘是由若干按键组成的开关矩阵,它是微型计算机最常用的输入设备,用户可以通过键盘向计算机输入指令、地址和数据。
本系统中采用独立式按键结构,如图3所示,各按键相互独立地接通一条输入数据线,当任何一个键按下时,与之相连的输入数据线即被置0,而平时该线置1。
独立式按键电路配置灵活,软件结构简单。
当功能键不很多时,采用该种方式比较合适。
图3键盘接口原理图
2.3显示部分
选用6个七段数码管分别显示时、分、秒,数码管的驱动选用具有译码、锁存、驱动功能的CD4511芯片,显示数据来自DS12887的时单元、分单元、秒单元,经P0口(BCD码送到CD4511芯片,译码后再送到显示器显示。
如图4所示。
图4显示部分原理图
2.4输出控制部分
输出控制信号由P2口送到锁存器锁存,经74LS04芯片驱动相应的输出部分动作。
例如:
要开路灯执行指令MOVP2,#02H即可,而若执行指令MOVP2,#E0H,则是路灯、学生宿舍灯和教室灯全部打开。
P2口各位所控制的对象见表2,输出部分原理图如图5所示。
表2位控表
图5输出部分原理图
3、DS12887的功能及工作原理
DS12887是一个DALLAS公司生产的实时时钟芯片,它把时钟芯片所需的晶振电路和外部锂电池等相关电路都集成与芯片内部,具有低功耗、工作稳定、功能集成度高、计时精确、与各种微处理器接口简便、在没有外接电源情况下可正常工作10年等一系列优点。
它主要由振荡电路、分频电路、周期中断、方波选择电路14字节时钟和控制单元、114字节非易失RAM、十进制、二进制加法器、总线接口电路、电源和写保护单元、内部锂电池等部分组成。
图6DS12887的引线端子排列图
各引线端子功能分配如下:
Ucc、GND——直流电源(+5V电压,当Ucc低与4.25V时读写禁止,当Ucc低与3V时,电源切换至内部锂电池。
MOT——(模式选择:
MOT接Ucc为MOTROLA方式,MOT接GND为INTEL方式。
SQW——方波输出。
AD0~AD7——双向数据/地址复用线。
AS——(地址选通输入用于实现信号分离,在AS信号的下降沿把地址锁入DS12887。
DS——数据选通或读输入。
R/W——读写输入。
CS——片选输入。
IRQ——中断申请输入。
RESET——复位输入。
DS12887利用AS(地址选通信号,可以对总线分时复用的微处理器实现简便的接口。
从00H—09H10个单元为时钟、日历及闹钟单元,其内容可由程序写入或读出。
其初始值在芯片初始化时由程序写入,其值可用BIN值(二进制数,编程时写作16进制数或BCD值,这由寄存器B的DM位(b2决定。
时钟初始化时,寄存器B的SET位(b7必须置1,采用每天12H或24h制有寄存器B的24/12位(b1决定。
在12h制时,时字节的最高位为1表示下午(PM。
在各单元的内容写完之后,将寄存器B的SET位清0,时钟即开始运行。
这三个闹钟单元有两种
用法。
①根据写入到三个闹钟单元的时分秒值,每天产生闹中断一次;②在各闹钟单元写入“自由”码=0C0~0FFH,即最高两位为“1”时为“自由”状态。
如时钟单元写入0C0~0FFH,则每小时闹一次,在时闹和分闹两单元写入0C0~0FFH,则每分闹一次,在三个闹钟单元均写入0C0~0FFH,则每秒闹一次。
DS12887内部的4个可由程序访问的寄存器。
寄存器A
UIP(b7——时间的更新正在进行位。
UIP=1,表示正在进行。
UIP=0不更新,此时读写时钟日历字节有效。
DV2、DV1、DV0——这三位用于震荡器开关和复位计数器链,当他们为010组合时将打开震荡器并允许RTC保持时间;为11X(X为0或1组合时将使能震荡器并保持计数器链为复位状态。
在把010写到DV0、DV1、DV2之后500ms将发生新的数据更新。
RS3、RS2、RS1、RS0——速率选择位,用于选择周期中断的速率和SQW输出的方波速率,如RS3~RS0全为0,则禁止分频器输出,如表4所示。
表9DS12887方波输出频率的选择
寄存器B
SET——设置位。
时钟不更新,SET=1用于时钟初始化。
SET=0时钟每秒更新一次。
PIE——周期中断允许位,RESET使PIE=0。
AIE——闹钟中断允许位,RESET使AIE=0。
UIE——更新结束中断允许位,RESET使UIE=0。
SQWE——方波输出允许位,RESET使SQWE=0。
DM——数据模式位。
DM=1,时间用BIN值;DM=0,时间用BCD值。
24/12——该位=1时,时间为24h模式。
该位=0时,时间为12h模式。
DSE——夏时制允许位。
DSE=1,自动执行夏时制制作。
寄存器C
IRQF——中断请求标志。
当下例事件之一或多件同时出现时IRQF=1
①PF=PIF=1。
②AF=AIE=1。
③UF=UIE=1。
④即:
IRQF=PF*PIE+AF*AIE+UF*UIE
当IRQF=1时,IRQ端子变为低电平,发出中断请求。
PF——周期中断标志。
当由RS3~RS0决定的周期中断时间到时,
PF置1。
AF——闹钟中断标志。
当设置的闹钟时间到时,AF置1。
UF——更新结束中断标志。
每个时间更新周期结束时,UF=1。
B3、b2、b1、b0——无用位,读时为0。
寄存器D
4、程序框图
软件设计以时钟显示、键盘扫描、为主程序。
在设计中利用单片机时钟计时集成电路完成计时的任务,并500ms向单片机发一个中断,中断子程序有时钟显示及时间比较,如比较相等,则说明作息时间已到,发出指令控制电铃或照明电路的开、关操作。
4.1程序流程图(见图7
图7程序流程图
4.2源程序清单
ORG0000H
LJMPMAIN
ORG0030H
MAIN:
MOVSP,#70H
CLRP2.4;电铃控制脚
CLRP2.5;宿舍灯控制脚
CLRP2.6;路灯控制脚
CLRP2.7;教学灯控制脚
CLRP2.3;DS12887选通脚
MOVR0,#0AH;指向寄存器A
MOVA,#2FH;初始化寄存器A,启动DS12887,中断速率500msMOVX@R0,A
CLRP2.3;指向寄存器B
MOVR0,#0BH
MOVA,#42H;初始化寄存器B,周期中断允许,选择BCD码,24小时模式
MOVX@R0,A
CLRP2.3
MOVR0,#04H
MOVA,#06H
MOVX@R0,A
CLRP2.3
MOVR0,#02H
MOVA,#29H
MOVX@R0,A
CLRP2.3
MOVR0,#00H
MOVA,#55H
MOVX@R0,A
MODIFY:
LCALLREAD
LCALLDISP
LCALLADJUST
LCALLINT887
SJMPMODIFY
ADJUST:
JBP1.0,AJT1
JNBP1.0,$
LCALLADHOUR
AJT1:
JBP1.1,AJT2
JNBP1.1,$
LCALLDEHOUR
AJT2:
JBP1.2,AJT3
JNBP1.2,$
LCALLADMIN
AJT3:
JBP1.3,AJT4
JNBP1.3,$
LCALLDEMIN
AJT4:
RET
ADHOUR:
MOVA,20H;小时加1子程序
ADDA,#01H
DAA
CJNEA,#24H,INCH2
MOVA,#00H
INCH2:
JCINCH3
INCH3:
MOV20H,A
LCALLWRHOUR
CLRP2.3
MOVR0,#0BH
MOVA,#42H
MOVX@R0,A
RET
DEHOUR:
MOVA,20H;小时减1子程序CJNEA,#00H,DECH2
MOVA,#23H
SJMPDECH3
DECH2:
ANLA,#0FH
CJNEA,#00H,DECH4
MOVA,20H
SWAPA
ANLA,#0FH
DECA
SWAPA
ORLA,#09H
AJMPDECH3
DECH4:
MOVA,20H
DECA
DECH3:
MOV20H,A
LCALLWRHOUR
CLRP2.3
MOVR0,#0BH
MOVA,#42H
MOVX@R0,A
RET
WRHOUR:
CLRP2.3
MOVR0,#0BH
MOVA,#82H
MOVX@R0,A
CLRP2.3
MOVR0,#04H
MOVA,20H
MOVX@R0,A
RET
ADMIN:
MOVA,21H;分钟加1子程序
ADDA,#01H
DAA
CJNEA,#60H,INCH4
MOVA,#00H
INCH4:
JCINCH5
INCH5:
MOV21H,A
LCALLWRMIN
CLRP2.3
MOVR0,#0BH
MOVA,#42H
MOVX@R0,A
RET
DEMIN:
MOVA,21H;分钟减1子程序CJNEA,#00H,DECH6
MOVA,#59H
SJMPDECH7
DECH6:
ANLA,#0FH
CJNEA,#00H,DECH8
MOVA,21H
SWAPA
ANLA,#0FH
DECA
SWAPA
ORLA,#09H
AJMPDECH7
DECH8:
MOVA,21H
DECA
DECH7:
MOV21H,A
LCALLWRMIN
CLRP2.3
MOVR0,#0BH
MOVA,#42H
MOVX@R0,A
RET
WRMIN:
CLRP2.3
MOVR0,#0BH
MOVA,#82H
MOVX@R0,A
CLRP2.3
MOVR0,#02H
MOVA,21H
MOVX@R0,A
RET
;从DS12887读取时间,并将时间写入20H到22HREAD:
LCALLJUDGE;判断芯片状态CLRP2.3;读时信息
MOVR0,#04H
MOVXA,@R0
MOV20H,A
CLRP2.3;读分信息
MOVR0,#02H
MOVXA,@R0
MOV21H,A
CLRP2.3;读秒信息
MOVR0,#00H
MOVXA,@R0
MOV22H,A
RET
;送显示程序
DISP:
MOVR0,#20H;时显示
SETBP2.3
CLRP2.2
CLRP2.1
SETBP2.0
MOVA,@R0
MOVP0,A
INCR0;分显示
SETBP2.3
CLRP2.2
SETBP2.1
CLRP2.0
MOVA,@R0
MOVP0,A
INCR0
SETBP2.3;秒显示
CLRP2.2
SETBP2.1
SETBP2.0
MOVA,@R0
MOVP0,A
RET
;判断芯片状态子程序
JUDGE:
CLRP2.3
MOVR0,#0AH
MOVXA,@R0
JBACC.7,JUDGE;实质是判断寄存器A的最高位UIP
RET
;中断程序开始
INT887:
PUSH00H
PUSH0E0H
;比较作息时间程序
BJCX:
MOVA,22H;将秒信息放入寄存器R2
MOVR1,21H;将分信息放入寄存器R1
MOVR0,20H;将时信息放入寄存器R0
CJNEA,#15H,BJMIAO;判断秒是否为"00",是就关电铃CLRP2.4
BJMIAO:
CJNEA,#00H,RET_INT;判断秒是否为"00",是就执行小时值比较
;小时比较程序
BJHOUR1:
CJNER0,#06H,BJHOUR2;判断时不为6点,比较下个时值LJMPBJS1;判断时为6点,去比较分钟
BJHOUR2:
CJNER0,#07H,BJHOUR3;判断时不为7点,比较下个时值LJMPBJS2;判断时为7点,去比较分钟
BJHOUR3:
CJNER0,#08H,BJHOUR4;判断时不为8点,比较下个时值LJMPBJS3;判断时为8点,去比较分钟
BJHOUR4:
CJNER4,#09H,BJHOUR5;判断时不为9点,比较下个时值LJMPBJS4;判断时为9点,去比较分钟
BJHOUR5:
CJNER0,#10H,BJHOUR6;判断时不为10点,比较下个时值LJMPBJS5;判断时为10点,去比较分钟BJHOUR6:
CJNER0,#11H,BJHOUR7;判断时不为11点,比较下个时值LJMPBJS6;判断时为11点,去比较分钟BJHOUR7:
CJNER0,#12H,BJHOUR8;判断时不为12点,比较下个时值LJMPBJS7;判断时为12点,去比较分钟BJHOUR8:
CJNER0,#13H,BJHOUR9;判断时不为13点,比较下个时值LJMPBJS8;判断时为13点,去比较分钟BJHOUR9:
CJNER0,#14H,BJHOUR10;判断时不为14点,比较下个时值LJMPBJS9;判断时为14点,去比较分钟BJHOUR10:
CJNER0,#15H,BJHOUR11;判断时不为15点,比较下个时值LJMPBJS10;判断时为15点,去比较分钟BJHOUR11:
CJNER0,#16H,BJHOUR12;判断时不为16点,比较下个时值LJMPBJS11;判断时为16点,去比较分钟BJHOUR12:
CJNER0,#18H,BJHOUR13;判断时不为18点,比较下个时值LJMPBJS12;判断时为18点,去比较分钟BJHOUR13:
CJNER0,#20H,BJHOUR14;判断时不为20点,比较下个时值LJMPBJS13;判断时为20点,去比较分钟BJHOUR14:
CJNER0,#21H,BJHOUR15;判断时不为21点,比较下个时值LJMPBJS14;判断时为21点,去比较分钟BJHOUR15:
CJNER0,#23H,RET_INT;判断时不为23点,返回主程序LJMPBJS15;判断时为23点,去比较分钟
;中断返回程序
RET_INT:
POP0E0H
POP00H
RET
;分钟比较程序
BJS1:
CJNER1,#30H,RET_INT;6:
30
SETBP3.1;宿舍灯开
CLRP2.4
SETBP2.5
CLRP2.6
CLRP2.7
LJMPRET_INT
BJS2:
CJNER1,#15H,BJS2_1;7:
15
SETBP3.1;早读上课打铃、宿舍灯关、教室灯开SETBP2.4
CLRP2.5
SETBP2.7
LJMPRET_INT
BJS2_1:
CJNER1,#45H,RET_INT;7:
45
SETBP3.1;早读下课打铃
SETBP2.4
LJMPRET_INT
BJS3:
CJNER1,#00H,BJS3_1;8:
00
SETBP3.1;第一节上课打铃
SETBP2.4
LJMPRET_INT
BJS3_1:
CJNER1,#40H,BJS3_2;8:
40
SETBP3.1;第一节下课打铃
SETBP2.4
LJMPRET_INT
BJS3_2:
CJNER1,#50H,RET_INT;8;50
SETBP3.1;第二节上课打铃
SETBP2.4
LJMPRET_INT
BJS4:
CJNER1,#30H,BJS4_1;9;30
SETBP3.1;第二节下课打铃
SETBP2.4
LJMPRET_INT
BJS4_1:
CJNER1,#40H,RET_INT;9;40
SETBP3.1;第三节上课打铃
SETBP2.4
LJMPRET_INT
BJS5:
CJNER1,#20H,BJS5_1;10:
20
SETBP3.1;第三节下课打铃
SETBP2.4
LJMPRET_INT
BJS5_1:
CJNER1,#30H,RET_INT;10;30
SETBP3.1;第四节上课打铃
SETBP2.4
LJMPRET_INT
BJS6:
CJNER1,#10H,RET_INT;11;10
SETBP3.1;第四节下课打铃、教室灯关、宿舍灯开
SETBP2.4
SETBP2.5
LJMPRET_INT
BJS7:
CJNER1,#50H,FANHUI;12:
50
SETBP3.1;第五节课预备铃响、宿舍灯关、教室灯开
SETBP2.4
CLRP2.5
SETBP2.7
LJMPRET_INT
BJS8:
CJNER1,#00H,BJS8_1;13:
00
SETBP3.1;第五节上课打铃
SETBP2.4
LJMPRET_INT
BJS8_1:
CJNER1,#40H,BJS8_2;13:
40
SETBP3.1;第五节下课打铃
SETBP2.4
LJMPRET_INT
BJS8_2:
CJNER1,#50H,FANHUI;13:
50
SETBP3.1;第六节上课打铃
SETBP2.4
LJMPRET_INT
FANHUI:
LCALLRET_INT;比较完毕,跳转到中断返回程序
BJS9:
CJNER1,#30H,BJS9_1;14:
30
SETBP3.1;第六节下课打铃
SETBP2.4
LJMPRET_INT
BJS9_1:
CJNER1,#40H,FANHUI;14:
40
SETBP3.1;第七节上课打铃
SETBP2.4
LJMPRET_INT
BJS10:
CJNER1,#20H,BJS10_1;15:
20
SETBP3.1;第七节下课打铃
SETBP2.4
LJMPRET_INT
BJS10_1:
CJNER1,#30H,FANHUI;15:
30
SETBP3.1;第八