自动打铃系统

   2023-11-15 互联网1690
核心提示:  (1)基本计时和显示功能(用12小时制显示)。包括上下午标志,时、分的数字显示,秒信号指示。   (2)能设置当前时间(含上

  (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

  源程序

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

  ORG0000H;程序入口地址

  LJMPSTART

  ORG000BH;定时器0中断入口地址

  LJMPTIMER[_]0

  ORG0300H

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

  START:

  SETBBEEP;关闭蜂鸣器(电铃)

  SETB48H;使用一个bit位用于调时闪烁标志

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

  CLR45H;关闭响铃方式1标志

  CLR44H;关闭响铃方式2标志

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

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

  MOV21H,#00H;清零秒寄存器

  MOV22H,#00H;清零分寄存器

  MOV23H,#00H;清零时寄存器

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

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

  MOVIE,#82H

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

  MOVTH0,#3CH

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

  SETBTR0;启动定时器0

  MOVSP,#40H;重设堆栈指针

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

  MAIN:

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

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

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

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

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

  MAIN1:

  LCALLDISPLAY;调用显示子程序

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

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

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

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

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

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

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

  LJMPMAIN;重新循环

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

  TIMER[_]0:

  PUSHACC

  PUSHPSW;保护现场

  MOVTH0,#3CH

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

  CPL47H;产生脉冲用于调时快进时基

  INC24H

  MOVA,24H

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

  CPL48H;取反调时闪烁标志位

  MOV24H,#00H

  ADD[_]TIME:

  INC20H

  MOVA,20H

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

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

  MOVA,21H

  ADDA,#01H

  DAA;作十进制调整

  MOV21H,A

  CJNEA,#60H,RETI1

  MOV21H,#00H;一分钟到

  MOVA,22H

  ADDA,#01H

  DAA

  MOV22H,A

  CJNEA,#60H,RETI1

  MOV22H,#00H;一小时到

  MOVA,23H

  ADDA,#01H

  DAA

  MOV23H,A

  CJNEA,#24H,RETI1

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

  RETI1:

  POPPSW

  POPACC;恢复现场

  RETI;中断返回

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

  DISPLAY:

  MOVA,21H;秒

  ANLA,#0FH

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

  MOVA,21H

  ANLA,#0F0H

  SWAPA

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

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

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

  JB48H,MIN

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

  MOV2EH,#0AH

  MIN:

  MOVA,22H;分

  ANLA,#0FH

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

  MOVA,22H

  ANLA,#0F0H

  SWAPA

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

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

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

  JB48H,HOUR

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

  MOV2CH,#0AH

  HOUR:

  MOVA,23H;时

  ANLA,#0FH

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

  MOVA,23H

  ANLA,#0F0H

  SWAPA

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

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

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

  JB48H,DISP

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

  MOV2AH,#0AH

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

  DISP:

  MOVDPTR,#TABLE

  MOVA,2FH

  MOVCA,@A+DPTR

  MOVP0,A

  CLRP2.7

  LCALLDELAY

  SETBP2.7;显示秒个位

  MOVA,2EH

  MOVCA,@A+DPTR

  MOVP0,A

  CLRP2.6

  LCALLDELAY

  SETBP2.6;显示秒十位

  MOVA,#0BFH

  MOVP0,A

  CLRP2.5

  LCALLDELAY

  SETBP2.5;显示“-”

  MOVA,2DH

  MOVCA,@A+DPTR

  MOVP0,A

  CLRP2.4

  LCALLDELAY

  SETBP2.4;显示分个位

  MOVA,2CH

  MOVCA,@A+DPTR

  MOVP0,A

  CLRP2.3

  LCALLDELAY

  SETBP2.3;显示分十位

  MOVA,#0BFH

  MOVP0,A

  CLRP2.2

  LCALLDELAY

  SETBP2.2;显示“-”

  MOVA,2BH

  MOVCA,@A+DPTR

  MOVP0,A

  CLRP2.1

  LCALLDELAY

  SETBP2.1;显示时个位

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

  MOVA,2AH

  MOVCA,@A+DPTR

  MOVP0,A

  CLRP2.0

  LCALLDELAY

  SETBP2.0;显示时十位

  RET

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

  KEY[_]SCAN:

  CLR46H;关闭长按调整(调时快进)标志

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

  MOVA,P1

  CPLA

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

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

  LCALLDELAY;延时去抖动

  MOVA,P1;重新判断

  CPLA

  ANLA,#0FH

  JZEXIT[_]KEY;键盘去抖动

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

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

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

  LOOP:;进入长按处理

  LCALLDISPLAY;使长按时显示正常

  MOVA,P1

  CPLA

  ANLA,#0FH

  JB47H,LOOP1

  INCR4;调时快进间隔时间基准加1

  LOOP1:

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

  LJMPLOOP3

  LOOP2:

  CJNER4,#99H,LOOP3

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

  SETB46H;长按调整(调时快进)标志

  LCALLADD[_]KEY

  LCALLDEC[_]KEY

  LOOP3:

  JNZLOOP;等待键释放

  MOVA,R5;输出键值

  RET

  EXIT[_]KEY:

  RET

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

  DELAY:

  MOVR7,#150

  DJNZR7,$

  RET

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

  SET[_]KEY:

  CJNER5,#01H,EXIT;选择键键值

  INCR1;调整选择功能标志加一

  SETBBEEP

  CJNER1,#4,EXIT

  MOVR1,#0

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

  RET

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

  ADD[_]KEY:

  CJNER5,#02H,EXIT;增加键键值

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

  MOVA,23H

  ADDA,#01H

  DAA

  MOV23H,A

  CJNEA,#24H,EXIT

  MOV23H,#00H

  NEXT1:

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

  MOVA,22H

  ADDA,#01H

  DAA

  MOV22H,A

  CJNEA,#60H,EXIT

  MOV22H,#00H

  NEXT2:

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

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

  RET

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

  DEC[_]KEY:

  CJNER5,#04H,EXIT;减少键键值

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

  MOVA,23H

  ADDA,#99H

  DAA

  MOV23H,A

  CJNEA,#99H,EXIT

  MOV23H,#23H

  NEXT3:

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

  MOVA,22H

  ADDA,#99H

  DAA

  MOV22H,A

  CJNEA,#99H,EXIT

  MOV22H,#59H

  NEXT4:

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

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

  RET

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

  DALING[_]KEY:

  CJNER5,#08H,EXIT;选择键键值

  CPLBEEP

  RET

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

  EXIT:

  RET

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

  TABLE:

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

  TABLE1:

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

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

  BIJIAO1:

  MOVA,23H

  CJNEA,#06H,B0

  MOVA,22H

  CJNEA,#00H,B0;6:00到

  SETB45H;开启响铃方式1

  RET

  B0:MOVA,23H

  CJNEA,#22H,EXIT[_]1

  MOVA,22H

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

  SETB45H;开启响铃方式1

  RET

  EXIT[_]1:

  CLR45H

  RET

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

  BIJIAO2:

  MOVA,23H

  CJNEA,#07H,B1

  MOVA,22H

  CJNEA,#30H,B1;7:30

  SETB44H;开启响铃方式2

  RET

  B1:MOVA,23H

  CJNEA,#08H,B2

  MOVA,22H

  CJNEA,#20H,B2;8:20

  SETB44H

  RET

  B2:MOVA,23H

  CJNEA,#08H,B3

  MOVA,22H

  CJNEA,#30H,B3;8:30

  SETB44H

  RET

  B3:MOVA,23H

  CJNEA,#09H,B4

  MOVA,22H

  CJNEA,#20H,B4;9:20

  SETB44H

  RET

  B4:MOVA,23H

  CJNEA,#09H,B5

  MOVA,22H

  CJNEA,#40H,B5;9:40

  SETB44H

  RET

  B5:MOVA,23H

  CJNEA,#10H,B6

  MOVA,22H

  CJNEA,#30H,B6;10:30

  SETB44H

  RET

  B6:MOVA,23H

  CJNEA,#10H,B7

  MOVA,22H

  CJNEA,#40H,B7;10:40

  SETB44H

  RET

  B7:MOVA,23H

  CJNEA,#11H,EXIT[_]2

  MOVA,22H

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

  SETB44H

  RET

  EXIT[_]2:

  CLR44H

  RET

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

  DALING1:

  JNB45H,EXIT[_]DALING

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

  CJNEA,#00H,L1

  CLRBEEP

  L1:

  MOVA,21H

  CJNEA,#05H,L2

  SETBBEEP

  L2:

  CJNEA,#07H,L3

  CLRBEEP

  L3:

  CJNEA,#12H,EXIT[_]DALING

  SETBBEEP

  RET

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

  DALING2:

  JNB44H,EXIT[_]DALING

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

  CJNEA,#00H,L4

  CLRBEEP

  L4:

  MOVA,21H

  CJNEA,#05H,EXIT[_]DALING

  SETBBEEP

  RET

  EXIT[_]DALING:

  RET

  END;程序结束

 
举报收藏 0打赏 0评论 0
 
更多>同类资讯
推荐图文
推荐资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  隐私政策  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  RSS订阅