自动打铃系统.docx

上传人:b****5 文档编号:6604573 上传时间:2023-01-08 格式:DOCX 页数:12 大小:95.60KB
下载 相关 举报
自动打铃系统.docx_第1页
第1页 / 共12页
自动打铃系统.docx_第2页
第2页 / 共12页
自动打铃系统.docx_第3页
第3页 / 共12页
自动打铃系统.docx_第4页
第4页 / 共12页
自动打铃系统.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

自动打铃系统.docx

《自动打铃系统.docx》由会员分享,可在线阅读,更多相关《自动打铃系统.docx(12页珍藏版)》请在冰豆网上搜索。

自动打铃系统.docx

自动打铃系统

摘要:

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

   显示格式:

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

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

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

  P0口输出数码管段选信号,P2口输出数码管位选信号。

晶振12M

关键词:

电子钟;打铃;晶振。

引言:

《单片机原理及应用技术》是一门技术性,应用性、实践性很强的学科。

课程设计是学好本门课程的又一重要实践性教学环节,课程设计的目的和任务就是配合单片机的教学和平时实验,以达到巩固消化课程的内容,进一步加强综合应用能力及单片机应用系统开发和设计能力的训练,启发创新思维,使之具有独立单片机产品和科研的基本技能,是以培养学生综合运用所学知识的过程,是知识转化为能力和能力转化为工程素质的重要阶段。

在实际生活中有好多地方都用到了单片机,因此学习好这门课程有着十分重要的意义。

1.方案论证

1.1基本方案

(1)基本计时和显示功能(用12小时制显示)。

包括上下午标志,时、分的数字显示,秒信号指示。

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

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

上午6:

00起床铃:

打铃5秒、停2秒、再打铃5秒。

下午10:

30熄灯铃:

打铃5秒、停2秒、再打铃5秒。

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

1.2拓展方案

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

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

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

7.30上课,8.20下课:

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

2.硬件详细设计

2.1硬件设计

硬件使用51单片机制作自动打铃系统,主要由51单片机,两个8位数码管数字显示器,4个按钮,以及嗡鸣器组成。

按钮其中三个为时间调节按钮,另外一个负责控制强制打铃或者关闭铃音。

使用按钮设定响铃时间以及显示时间。

设计图如图2.1所示。

2.1硬件设计图

3.软件设计

3.1程序简要说明

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

3.2主程序流程图

4.源程序

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

  ORG0000H   ;程序入口地址

  LJMPSTART

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

  LJMPTIMER_0

  ORG0300H

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

START:

  SETBBEEP   ;关闭蜂鸣器(电铃)

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

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

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

  CLR 44H   ;关闭响铃方式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     ;程序结束

5.课程设计体会

通过这短短一周的实践,我感觉到自己从课本上学到的理论知识和实践仍有很大的差距。

最少很多元器件根本不知道有什么功效,在仿真仪器中是什么代码。

有的知识,自己感觉已经掌握得差不多了,但是实际操作起来就有问题出现了。

我遇到了不少问题,花费了很多的时间。

这让我重新反思我们的学习,深刻领悟到我们这个专业动手,实践的重要性。

理论不经过实践考验,是没法实施的,就像我们编的程序,很多方面考虑的都不够,几乎没有涉及到实际应用时的防范方法措施。

  这次的课程设计,让我学到了很多书本上学不到的东西,学到了实际应用时,是取用成本的最小化,做设计不仅要考虑大的方面,小的方面也必须做到完美。

最大的收获是:

对键盘,显示器,C51语言(虽然最后还是用汇编语言编写的,但是,我也试着学用了C51)的应用有了深刻的了解。

6.参考文献

1主编余发山《单片机原理及应用技术》中国矿业大学出版社

2主编张淑清《单片微型计算机接口技术及其应用》国防工业出版社

3编著李光飞楼然苗胡佳文谢象佐《单片机课程设计实例指导》

北京航空航天大学出版社

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1