久芯网

自动打铃系统

 该系统内设有一服务器,该服务器透过网络与一个以上的自动打铃装置及工作站相连接,该服务器及打铃装置中分别设有一时钟芯片(RTC),该等时钟芯片系用来产生时间讯息,当该打铃装置透过网络定时将时钟芯片(RTC)所产生之时间讯息传送至服务器时,该服务器在接收到该时间讯息,会将本身时钟芯片所产生之时间讯息与之比较,若不符,则将其所产生之时间讯息回馈至各打铃装置上,使各打铃装置之时间讯息统一,而使所设定之打铃时间亦统一,本系统具有打铃时间统一、设备维护方便的优点。
自动打铃系统

基本方案

 (1)基本计时和显示功能(用12小时制显示)。包括上下午标志,时、分的数字显示,秒信号指示。

 (2)能设置当前时间(含上、下午,时,分)

 (3)能实现基本打铃功能,规定:

 上午6:00起床铃:打铃5秒、停2秒、再打铃5秒。

 下午10:30熄灯铃:打铃5秒、停2秒、再打铃5秒。

 铃声可用小喇叭播放,凡是用到铃声功能的均按此处理。

拓展方案

 (1)增加整点报时功能,整点时响铃5秒,要求有控制启动和关闭功能。

 (2)增加调整起床铃、熄灯铃时间的功能。

 (3)增设上午4节课的上下课打铃功能,规定如下:

 7.30 上课,8.20下课:8.30上课,9.20下课;9.40 上课,10.30下课;10.40上课,11.30下课;每次铃声5秒。

软件设计

 程序简要说明

 1)实现24小时制电子钟,8位数码管显示,显示时分秒

 2)显示格式:23-59-59(小时十位如果为0则不显示)

 3)到预定时间启动蜂鸣器模拟打铃,蜂鸣器BEEP:P3.7

 4)打铃方式分起床、熄灯铃和上、下课铃两种

 5)系统使用4只按键,3只按键用来调整时间,另一只为强制打铃按钮

 6)调整选择键SET[_]KEY:P1.0;通过选择键选择调整位,选中位闪烁

 7)增加键ADD[_]KEY:P1.1;按一次使选中位加1

 8)减少键DEC[_]KEY;P1.2;按一次使选中位减1

 9)如果长按ADD[_]KEY或DEC[_]KEY,识别后则进行调时快进,此时停止闪烁

 10)如果选中位是秒,则按增加键或减少键都是将秒清零

 11)强制打铃键DALING[_]KEY:P1.3;用来强制打铃或强制关闭铃声

 12)P0口输出数码管段选信号,P2口输出数码管位选信号。晶振12M

 源程序

 BEEP EQU P3.7  ;定义蜂鸣器(电铃)控制信号输出口

 ORG 0000H   ;程序入口地址

 LJMP START

 ORG 000BH   ;定时器0中断入口地址

 LJMP TIMER[_]0

 ORG 0300H

 /*****程序开始,初始化*****/

 START:

 SETB BEEP   ;关闭蜂鸣器(电铃)

 SETB 48H   ;使用一个bit位用于调时闪烁标志

 SETB 47H   ;使用一个bit位用于产生脉冲用于调时快进时基

 CLR  45H   ;关闭响铃方式1标志

 CLR  44H   ;关闭响铃方式2标志

 MOV R1,#0   ;调整选择键功能标志:0正常走时、1调时、2调分、3调秒

 MOV 20H,#00H  ;用于控制秒基准时钟源的产生

 MOV 21H,#00H  ;清零秒寄存器

 MOV 22H,#00H  ;清零分寄存器

 MOV 23H,#00H  ;清零时寄存器

 MOV 24H,#00H  ;用于控制调时闪烁的基准时钟的产生

 MOV IP,#02H   ;IP,IE初始化

 MOV IE,#82H

 MOV TMOD,#01H  ;设定定时器0工作方式1

 MOV TH0,#3CH

 MOV TL0,#0B0H  ;赋定时初值,定时50ms

 SETB TR0   ;启动定时器0

 MOV SP,#40H   ;重设堆栈指针

 /*****主程序*****/

 MAIN:

 CJNE R1,#00H,MAIN1 ;是否为正常走时状态

 LCALL BIJIAO1  ;调用起床、熄灯打铃比较子程序

 LCALL BIJIAO2  ;调用上、下课打铃比较子程序

 LCALL DALING1  ;调用响铃方式1执行子程序

 LCALL DALING2  ;调用响铃方式2执行子程序

 MAIN1:

 LCALL DISPLAY   ;调用显示子程序

 LCALL KEY[_]SCAN   ;调用按键检测子程序

 JZ MAIN    ;无键按下则返回重新循环

 LCALL SET[_]KEY   ;调用选择键处理子程序

 JB 46H,MAIN   ;如果已进行长按调整(调时快进),则不再执行下面的单步调整

 LCALL ADD[_]KEY  ;调用增加键处理子程序

 LCALL DEC[_]KEY  ;调用减少键处理子程序

 LCALL DALING[_]KEY ;处理强制打铃/强制关闭铃声键

 LJMP MAIN    ;重新循环

 /*****定时中断服务程序*****/

 TIMER[_]0:

 PUSH ACC

 PUSH PSW    ;保护现场

 MOV TH0,#3CH

 MOV TL0,#0B0H   ;重新赋定时初值

 CPL 47H    ;产生脉冲用于调时快进时基

 INC 24H

 MOV A,24H

 CJNE A,#10,ADD[_]TIME ;产生0.5秒基准时钟,用于调时闪烁

 CPL 48H    ;取反调时闪烁标志位

 MOV 24H,#00H

 ADD[_]TIME:

 INC 20H

 MOV A,20H

 CJNE A,#20,RETI1 ;产生1秒基准时钟

 MOV 20H,#00H   ;一秒钟时间到,清零20H

 MOV A,21H

 ADD A,#01H

 DA A       ;作十进制调整

 MOV 21H,A

 CJNE A,#60H,RETI1

 MOV 21H,#00H   ;一分钟到

 MOV A,22H

 ADD A,#01H

 DA A

 MOV 22H,A

 CJNE A,#60H,RETI1

 MOV 22H,#00H   ;一小时到

 MOV A,23H

 ADD A,#01H

 DA A

 MOV 23H,A

 CJNE A,#24H,RETI1

 MOV 23H,#00H   ;到24点,清零小时

 RETI1:

 POP PSW

 POP ACC    ;恢复现场

 RETI     ;中断返回

 /*****显示处理*****/

 DISPLAY:

 MOV A,21H    ;秒

 ANL A,#0FH

 MOV 2FH,A   ;转换出秒个位,存入2FH

 MOV A,21H

 ANL A,#0F0H

 SWAP A

 MOV 2EH,A   ;转换出秒十位,存入2EH

 JB 46H,MIN   ;如果长按按键(调时快进),则跳过闪烁处理

 CJNE R1,#3,MIN  ;如果R1为3,闪烁秒位待调整

 JB 48H,MIN

 MOV 2FH,#0AH  ;使该位为10,查表得到使该位不显示的输出

 MOV 2EH,#0AH

 MIN:

 MOV A,22H    ;分

 ANL A,#0FH

 MOV 2DH,A   ;转换出分个位,存入2DH

 MOV A,22H

 ANL A,#0F0H

 SWAP A

 MOV 2CH,A   ;转换出分十位,存入2CH

 JB 46H,HOUR   ;如果长按按键(调时快进),则跳过闪烁处理

 CJNE R1,#2,HOUR  ;如果R1为2,闪烁分位待调整

 JB 48H,HOUR

 MOV 2DH,#0AH  ;使该位为10,查表得到使该位不显示的输出

 MOV 2CH,#0AH

 HOUR:

 MOV A,23H    ;时

 ANL A,#0FH

 MOV 2BH,A   ;转换出时个位,存入2BH

 MOV A,23H

 ANL A,#0F0H

 SWAP A

 MOV 2AH,A   ;转换出时十位,存入2AH

 JB 46H,DISP   ;如果长按按键(调时快进),则跳过闪烁处理

 CJNE R1,#1,DISP  ;如果R1为1,闪烁时位待调整

 JB 48H,DISP

 MOV 2BH,#0AH  ;使该位为10,查表得到使该位不显示的输出

 MOV 2AH,#0AH

 /*****数码管动态扫描显示*****/

 DISP:

 MOV DPTR,#TABLE

 MOV A,2FH

 MOVC A,@A+DPTR

 MOV P0,A

 CLR P2.7

 LCALL DELAY

 SETB P2.7   ;显示秒个位

 MOV A,2EH

 MOVC A,@A+DPTR

 MOV P0,A

 CLR P2.6

 LCALL DELAY

 SETB P2.6   ;显示秒十位

 MOV A,#0BFH

 MOV P0,A

 CLR P2.5

 LCALL DELAY

 SETB P2.5   ;显示“-”

 MOV A,2DH

 MOVC A,@A+DPTR

 MOV P0,A

 CLR P2.4

 LCALL DELAY

 SETB P2.4   ;显示分个位

 MOV A,2CH

 MOVC A,@A+DPTR

 MOV P0,A

 CLR P2.3

 LCALL DELAY

 SETB P2.3   ;显示分十位

 MOV A,#0BFH

 MOV P0,A

 CLR P2.2

 LCALL DELAY

 SETB P2.2   ;显示“-”

 MOV A,2BH

 MOVC A,@A+DPTR

 MOV P0,A

 CLR P2.1

 LCALL DELAY

 SETB P2.1   ;显示时个位

 MOV DPTR,#TABLE1 ;该位使用TABLE1以消除前置0

 MOV A,2AH

 MOVC A,@A+DPTR

 MOV P0,A

 CLR P2.0

 LCALL DELAY

 SETB P2.0   ;显示时十位

 RET

 /*****按键检测子程序*****/

 KEY[_]SCAN:

 CLR 46H    ;关闭长按调整(调时快进)标志

 MOV P1,#0FFH   ;将P1口设置成输入状态

 MOV A,P1

 CPL A

 ANL A,#0FH    ;P1口低4位连接4个按键,只判断该4位

 JZ EXIT[_]KEY   ;无键按下则返回

 LCALL DELAY   ;延时去抖动

 MOV A,P1   ;重新判断

 CPL A

 ANL A,#0FH

 JZ EXIT[_]KEY   ;键盘去抖动

 MOV R5,A    ;临时将键值存入R5

 MOV R4,#00H   ;用于控制调时快进速度

 ;设置为00H是为了在进入长按处理前加长延时区分用户的长按与短按,防止误快进

 LOOP:      ;进入长按处理

 LCALL DISPLAY  ;使长按时显示正常

 MOV A,P1

 CPL A

 ANL A,#0FH

 JB 47H,LOOP1

 INC R4    ;调时快进间隔时间基准加1

 LOOP1:

 CJNE R1,#03H,LOOP2 ;如果调秒时长按,则不处理

 LJMP LOOP3

 LOOP2:

 CJNE R4,#99H,LOOP3

 MOV R4,#70H   ;确认用户长按后,重新设定起始值,加快调时快进速度

 SETB 46H   ;长按调整(调时快进)标志

 LCALL ADD[_]KEY

 LCALL DEC[_]KEY

 LOOP3:

 JNZ LOOP    ;等待键释放

 MOV A,R5   ;输出键值

 RET

 EXIT[_]KEY:

 RET

 /*****延时子程序*****/

 DELAY:

 MOV R7,#150

 DJNZ R7,$

 RET

 /*****选择键处理子程序*****/

 SET[_]KEY:

 CJNE R5,#01H,EXIT ;选择键键值

 INC R1    ;调整选择功能标志加一

 SETB BEEP

 CJNE R1,#4,EXIT

 MOV R1,#0

 MOV 24H,#00H  ;调时闪烁基准清零

 RET

 /*****增加键处理子程序*****/

 ADD[_]KEY:

 CJNE R5,#02H,EXIT ;增加键键值

 CJNE R1,#01H,NEXT1 ;选择键功能标志为1,调时,否则跳出

 MOV A,23H

 ADD A,#01H

 DA A

 MOV 23H,A

 CJNE A,#24H,EXIT

 MOV 23H,#00H

 NEXT1:

 CJNE R1,#02H,NEXT2 ;选择键功能标志为2,调分,否则跳出

 MOV A,22H

 ADD A,#01H

 DA A

 MOV 22H,A

 CJNE A,#60H,EXIT

 MOV 22H,#00H

 NEXT2:

 CJNE R1,#03H,EXIT ;选择键功能标志为3,调秒,否则跳出

 MOV 21H,#00H  ;如增加键按下直接清零秒

 RET

 /*****减少键处理子程序*****/

 DEC[_]KEY:

 CJNE R5,#04H,EXIT ;减少键键值

 CJNE R1,#01H,NEXT3 ;选择键功能标志为1,调时,否则跳出

 MOV A,23H

 ADD A,#99H

 DA A

 MOV 23H,A

 CJNE A,#99H,EXIT

 MOV 23H,#23H

 NEXT3:

 CJNE R1,#02H,NEXT4 ;选择键功能标志为2,调分,否则跳出

 MOV A,22H

 ADD A,#99H

 DA A

 MOV 22H,A

 CJNE A,#99H,EXIT

 MOV 22H,#59H

 NEXT4:

 CJNE R1,#03H,EXIT ;选择键功能标志为3,调秒,否则跳出

 MOV 21H,#00H  ;如较少键按下直接清零秒

 RET

 /*****强制响铃键处理子程序*****/

 DALING[_]KEY:

 CJNE R5,#08H,EXIT ;选择键键值

 CPL BEEP

 RET

 /*****万用返回程序*****/

 EXIT:

 RET

 /*****数码管字形编码表*****/

 TABLE:

 DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH ;字形显示编码

 TABLE1:

 DB 0FFH,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH ;小时位的十位数编码,该位如果为0则不显示

 /*****打铃时间对比程序(起床、熄灯)*****/

 BIJIAO1:

 MOV A,23H

 CJNE A,#06H,B0

 MOV A,22H

 CJNE A,#00H,B0  ;6:00到

 SETB 45H   ;开启响铃方式1

 RET

 B0:  MOV A,23H

 CJNE A,#22H,EXIT[_]1

 MOV A,22H

 CJNE A,#30H,EXIT[_]1 ;22:30到

 SETB 45H   ;开启响铃方式1

 RET

 EXIT[_]1:

 CLR 45H

 RET

 /*****打铃时间对比程序(上、下课)*****/

 BIJIAO2:

 MOV A,23H

 CJNE A,#07H,B1

 MOV A,22H

 CJNE A,#30H,B1  ;7:30

 SETB 44H   ;开启响铃方式2

 RET

 B1:  MOV A,23H

 CJNE A,#08H,B2

 MOV A,22H

 CJNE A,#20H,B2  ;8:20

 SETB 44H

 RET

 B2:  MOV A,23H

 CJNE A,#08H,B3

 MOV A,22H

 CJNE A,#30H,B3  ;8:30

 SETB 44H

 RET

 B3:  MOV A,23H

 CJNE A,#09H,B4

 MOV A,22H

 CJNE A,#20H,B4  ;9:20

 SETB 44H

 RET

 B4:  MOV A,23H

 CJNE A,#09H,B5

 MOV A,22H

 CJNE A,#40H,B5  ;9:40

 SETB 44H

 RET

 B5:  MOV A,23H

 CJNE A,#10H,B6

 MOV A,22H

 CJNE A,#30H,B6  ;10:30

 SETB 44H

 RET

 B6:  MOV A,23H

 CJNE A,#10H,B7

 MOV A,22H

 CJNE A,#40H,B7  ;10:40

 SETB 44H

 RET

 B7:  MOV A,23H

 CJNE A,#11H,EXIT[_]2

 MOV A,22H

 CJNE A,#30H,EXIT[_]2 ;11:30

 SETB 44H

 RET

 EXIT[_]2:

 CLR 44H

 RET

 /*****响铃方式1程序(响5秒停2秒再响5秒)*****/

 DALING1:

 JNB 45H,EXIT[_]DALING

 MOV A,21H   ;响铃起始时间由秒实时控制

 CJNE A,#00H,L1

 CLR BEEP

 L1:

 MOV A,21H

 CJNE A,#05H,L2

 SETB BEEP

 L2:

 CJNE A,#07H,L3

 CLR BEEP

 L3:

 CJNE A,#12H,EXIT[_]DALING

 SETB BEEP

 RET

 /*****响铃方式2程序(响5秒)*****/

 DALING2:

 JNB 44H,EXIT[_]DALING

 MOV A,21H   ;响铃起始时间由秒实时控制

 CJNE A,#00H,L4

 CLR BEEP

 L4:

 MOV A,21H

 CJNE A,#05H,EXIT[_]DALING

 SETB BEEP

 RET

 EXIT[_]DALING:

 RET

 END     ;程序结束

会员中心 微信客服
客服
回到顶部