基于51单片机的电子闹钟设计报告.docx
《基于51单片机的电子闹钟设计报告.docx》由会员分享,可在线阅读,更多相关《基于51单片机的电子闹钟设计报告.docx(37页珍藏版)》请在冰豆网上搜索。
基于51单片机的电子闹钟设计报告
*********大学********学院
电子闹钟设计报告
专业:
******
学号:
******
姓名:
*******
一.仿真电路图:
二.器件
30P电容2个
12MHZ晶振1个
喇叭1个
38译码器1个
89c52单片机1个
按键4个
5V电源
300欧电阻7个
8位共阴数码管1个
三.流程图:
电子闹钟主流程图:
调时、调日期、调星期流程图:
倒计时结束流程图:
音乐播放流程图:
闹铃功能流程图:
四.功能介绍:
有计时,计日期,计星期,调时、调日期、调星期、闹钟、调闹钟、音乐闹铃、秒表、99秒倒计时、60秒倒计时、5秒倒计时、倒计时结束播放提醒音乐、直接按键播放音乐共计15个小的功能,分为四个功能模块,用四个按键来实现
1.调时,查看日期以及调日期,查看星期以及调星期
按键1进入该模块后,显示该模块的界面“1234”,分别代表在该界面中要用到的按键编号。
此时按1即进入调时界面,显示当前时间,按1秒加1,按2分加1,按3时加1,按4退出该界面而回到模块界面。
此时按2即进入查看日期以及调日期的界面,显示当前日期,按1天加1,按2月加1,按3年加1,按4退出该界面而回到模块界面。
此时按3即进入查看星期以及调星期的界面,显示当前星期,按1星期加1,按4退出该界面而回到模块界面。
此时按4则退出功能模块1而回到主界面。
2.调闹钟
进入该模块时,显示闹钟时间,按1秒加1,按2分加1,按3时加1,按4退出调闹钟模块而回到主界面
3.秒表,倒计时
进入该模块后,显示界面“124”,分别代表在该界面中要用到的按键编号。
此时按1进入秒表计时状态,按4退出,回到模块界面。
此时按2进入99秒倒计时状态,按1切换到60秒倒计时,按1切换到5秒倒计时,在倒计时进行中,按4可以回到模块界面。
此时按4,可以回到主界面
4.音乐
进入该界面后,显示界面“00-00-00”,按1播放歌曲1,按2播放歌曲2,按3播放歌曲3,按4播放歌曲4,在播放歌曲时,按4可以结束播放音乐并且回到主界面。
五.程序清单:
;****************************************************************************
AN_JIAN1BITP3.0
AN_JIAN2BITP3.1
AN_JIAN3BITP3.2
AN_JIAN4BITP3.3
SECONDEQU30H
MINUTEEQU31H
HOUREQU32H
TIMEJEQU34H
M_NAOEQU35H
H_NAOEQU36H
S_NAOEQU37H
SECOND_MIAOEQU38H
MINUTE_MIAOEQU39H
B_NAOEQU40H
SECOND_DAOEQU41H
MINUTE_DAOEQU42H
HOUR_DAOEQU43H
SECOND_1EQU44H
HAO_MIAOEQU45H
YEAREQU46H
MONTHEQU47H
DAYEQU48H
XIANSHI1EQU49H
XIANSHI2EQU50H
XIANSHI3EQU51H
XING_QIEQU52H
NUM_YINEQU53H
;*************************************************************
;代码段
ORG00H
JMPSTART
ORG0BH;中断T0入口
LJMPINT_T0
ORG001BH;中断T1入口
LJMPINT_T1
ORG100H
START:
MOVDPTR,#TABLE
MOVNUM_YIN,#0
MOVXING_QI,#01
MOVYEAR,#10
MOVMONTH,#01
MOVDAY,#03
MOVHAO_MIAO,#0
MOVSECOND_MIAO,#0
MOVMINUTE_MIAO,#0
MOVB_NAO,#0
MOVH_NAO,#07
MOVM_NAO,#0
MOVS_NAO,#0
MOVHOUR,#0
MOVMINUTE,#0
MOVSECOND,#0
MOVSECOND_1,#0
MOVTIMEJ,#0
MOVTMOD,#11H
MOVTH0,#3CH
MOVTL0,#0B0H
SETBEA
SETBET1
SETBET0
SETBTR0
;****************************************************
;主循环:
显示当前时间,并检测按键状态,按1进入循环1,按2进入循环2,按3进入循环3,按4进入循环4
MAIN:
MOVXIANSHI1,SECOND
MOVXIANSHI2,MINUTE
MOVXIANSHI3,HOUR
LCALLDISPLAY
JNBAN_JIAN1,KMAIN1_T
JNBAN_JIAN2,KMAIN2_T
JNBAN_JIAN3,KMAIN3_T
JNBAN_JIAN4,KMAIN4_T
MOVA,B_NAO
CJNEA,#0,P_NAO
JMPMAIN
;******************************************************
;检测是否达到所设置的闹钟时刻,若达到则调用闹铃程序
P_NAO:
MOVA,HOUR
CJNEA,H_NAO,MAIN
MOVA,MINUTE
CJNEA,M_NAO,MAIN
MOV56H,#HIGHTABLE1
MOV57H,#LOWTABLE1
MOVNUM_YIN,#0FH
LCALLSTART1
CLRTR1
SETBTR0
LJMPSTART_L
;******************************************************
;跳转服务
KMAIN1_T:
LJMPKMAIN1
KMAIN2_T:
LJMPKMAIN2
KMAIN3_T:
LJMPKMAIN3
KMAIN4_T:
LJMPKMAIN4
;*******************************************************
;主循环中各个按键功能的具体实现,加入了防抖动和应对按键被长时间按下
KMAIN1:
LCALLDELAY
JBAN_JIAN1,MAIN1_T
LJMPTIAO_MAIN1
KMAIN2:
LCALLDELAY
JBAN_JIAN2,MAIN2_T
LJMPTIAO_MAIN2
KMAIN3:
LCALLDELAY
JBAN_JIAN3,MAIN3_T
MOVHAO_MIAO,#0
MOVSECOND_MIAO,#0
MOVMINUTE_MIAO,#0
LJMPTIAO_MAIN3
KMAIN4:
LCALLDELAY
MOVNUM_YIN,#0
JBAN_JIAN4,MAIN4_T
LJMPTIAO_MAIN4
;**************************************************************
;跳转服务
MAIN1_T:
LCALLDELAY
LJMPMAIN1
MAIN2_T:
LCALLDELAY
LJMPMAIN2
MAIN3_T:
LCALLDELAY
LJMPMAIN3
MAIN4_T:
LCALLDELAY
LJMPMAIN4
;*************************************************************
;应对按键被长时间按下的具体代码
TIAO_MAIN1:
JBAN_JIAN1,MAIN1_T
MOVXIANSHI1,SECOND
MOVXIANSHI2,MINUTE
MOVXIANSHI3,HOUR
LCALLDISPLAY
SJMPTIAO_MAIN1
TIAO_MAIN2:
JBAN_JIAN2,MAIN2_T
MOVXIANSHI1,SECOND
MOVXIANSHI2,MINUTE
MOVXIANSHI3,HOUR
LCALLDISPLAY
SJMPTIAO_MAIN2
TIAO_MAIN3:
JBAN_JIAN3,MAIN3_T
MOVXIANSHI1,SECOND
MOVXIANSHI2,MINUTE
MOVXIANSHI3,HOUR
LCALLDISPLAY
SJMPTIAO_MAIN3
TIAO_MAIN4:
JBAN_JIAN4,MAIN4_T
MOVXIANSHI1,SECOND
MOVXIANSHI2,MINUTE
MOVXIANSHI3,HOUR
LCALLDISPLAY
SJMPTIAO_MAIN4
;**************************************************************
;循环1:
显示循环1的界面,检测按键,按1进入调时间的循环,按2进入调日期和查看当前日期的循环,按3进入调星期和查看当前星期的循环,按4退出循环1而回到主循环
MAIN1:
LCALLDISPLAY3
JNBAN_JIAN1,KTIME
JNBAN_JIAN2,KDATE_T
JNBAN_JIAN3,KWEEK_T
JNBAN_JIAN4,KRETURN1_T
JMPMAIN1
;**************************************************************
;跳转服务
KWEEK_T:
LJMPKWEEK
KDATE_T:
LJMPKDATE
KRETURN1_T:
LJMPKRETURN1
;***************************************************************
KTIME:
LCALLDELAY
JBAN_JIAN1,TIME
M1_TIMETIAO:
JBAN_JIAN1,TIME
LCALLDISPLAY3
SJMPM1_TIMETIAO
;**************************************************************
TIME:
MOVXIANSHI1,SECOND
MOVXIANSHI2,MINUTE
MOVXIANSHI3,HOUR
LCALLDISPLAY
JNBAN_JIAN1,KS_JIA1
JNBAN_JIAN2,KM_JIA1
JNBAN_JIAN3,KH_JIA1
JNBAN_JIAN4,KRETURN_TIME2M1
JMPTIME
;**************************************************************
;循环TIME中各个按键功能的具体实现,加入了防抖动和应对按键被长时间按下
KS_JIA1:
LCALLDELAY
JBAN_JIAN1,MAIN1_T1
INCSECOND
MOVA,SECOND
CJNEA,#60,M1_STIAO
MOVSECOND,#0
M1_STIAO:
JBAN_JIAN1,MAIN1_T1
MOVXIANSHI1,SECOND
MOVXIANSHI2,MINUTE
MOVXIANSHI3,HOUR
LCALLDISPLAY
SJMPM1_STIAO
KM_JIA1:
LCALLDELAY
JBAN_JIAN2,MAIN1_T1
INCMINUTE
MOVA,MINUTE
CJNEA,#60,M1_MTIAO
MOVMINUTE,#0
M1_MTIAO:
JBAN_JIAN2,MAIN1_T1
MOVXIANSHI1,SECOND
MOVXIANSHI2,MINUTE
MOVXIANSHI3,HOUR
LCALLDISPLAY
SJMPM1_MTIAO
MAIN1_T1:
LJMPTIME
KH_JIA1:
LCALLDELAY
JBAN_JIAN3,MAIN1_T1
INCHOUR
MOVA,HOUR
CJNEA,#24,M1_HTIAO
MOVHOUR,#0
M1_HTIAO:
JBAN_JIAN3,MAIN1_T1
MOVXIANSHI1,SECOND
MOVXIANSHI2,MINUTE
MOVXIANSHI3,HOUR
LCALLDISPLAY
SJMPM1_HTIAO
KRETURN_TIME2M1:
LCALLDELAY
JBAN_JIAN4,TIME2M1
KRETURN_TIAOM1:
JBAN_JIAN4,TIME2M1
LCALLDISPLAY
SJMPKRETURN_TIAOM1
TIME2M1:
LJMPMAIN1
;*****************************************************************
KDATE:
LCALLDELAY
JBAN_JIAN4,DATE
M1_DTIAO:
JBAN_JIAN4,DATE
LCALLDISPLAY3
SJMPM1_DTIAO
;********************************************************************
;循环DATE:
显示当前日期,并检测按键状态,按1给天加1,按2给月加1,按3给年加1,按4退出循环DATE而回到循环1
DATE:
MOVXIANSHI1,DAY
MOVXIANSHI2,MONTH
MOVXIANSHI3,YEAR
LCALLDISPLAY
JNBAN_JIAN1,KDY_JIA1
JNBAN_JIAN2,KMH_JIA1
JNBAN_JIAN3,KYR_JIA1
JNBAN_JIAN4,KRETURND
JMPDATE
;********************************************************************
;循环DATE中的各个按键功能的实现,加入了防抖动和应对按键被长时间按下
KDY_JIA1:
LCALLDELAY
JBAN_JIAN1,DATE_TD
INCDAY
MOVA,DAY
CJNEA,#32,D_DTIAO
MOVDAY,#01
D_DTIAO:
JBAN_JIAN1,DATE_TD
MOVXIANSHI1,DAY
MOVXIANSHI2,MONTH
MOVXIANSHI3,YEAR
LCALLDISPLAY
SJMPD_DTIAO
KMH_JIA1:
LCALLDELAY
JBAN_JIAN2,DATE_TD
INCMONTH
MOVA,MONTH
CJNEA,#13,D_MTIAO
MOVMONTH,#01
D_MTIAO:
JBAN_JIAN2,DATE_TD
MOVXIANSHI1,DAY
MOVXIANSHI2,MONTH
MOVXIANSHI3,YEAR
LCALLDISPLAY
SJMPD_MTIAO
DATE_TD:
LJMPDATE
KYR_JIA1:
LCALLDELAY
JBAN_JIAN3,DATE_TD
INCYEAR
MOVA,YEAR
CJNEA,#100,D_YTIAO
MOVYEAR,#0
D_YTIAO:
JBAN_JIAN3,DATE_TD
MOVXIANSHI1,DAY
MOVXIANSHI2,MONTH
MOVXIANSHI3,YEAR
LCALLDISPLAY
SJMPD_YTIAO
KRETURND:
LCALLDELAY
JBAN_JIAN4,REDT
D_RTIAO:
JBAN_JIAN4,REDT
MOVXIANSHI1,DAY
MOVXIANSHI2,MONTH
MOVXIANSHI3,YEAR
LCALLDISPLAY
SJMPD_RTIAO
REDT:
LJMPMAIN1
;********************************************************************
KWEEK:
LCALLDELAY
JBAN_JIAN3,WEEK
WEEKM1_TIAO:
JBAN_JIAN3,WEEK
LCALLDISPLAY3
SJMPWEEKM1_TIAO
;*********************************************************************
;循环WEEK:
显示当前的星期,并检测按键状态,按1给星期加1,按4退出循环WEEK而回到循环1
WEEK:
MOVXIANSHI1,XING_QI
MOVXIANSHI2,XING_QI
MOVXIANSHI3,XING_QI
LCALLDISPLAY
JNBAN_JIAN1,KXQ_JIA1
JNBAN_JIAN4,KRETURNW
JMPWEEK
;********************************************************************
;循环WEEK中的各个按键功能的具体实现,加入了防抖动和应对按键被长时间按下
KXQ_JIA1:
LCALLDELAY
JBAN_JIAN1,WEEK_TW
INCXING_QI
MOVA,XING_QI
CJNEA,#08,W_XQTIAO
MOVXING_QI,#01
W_XQTIAO:
JBAN_JIAN1,WEEK_TW
MOVXIANSHI1,XING_QI
MOVXIANSHI2,XING_QI
MOVXIANSHI3,XING_QI
LCALLDISPLAY
SJMPW_XQTIAO
WEEK_TW:
LJMPWEEK
KRETURNW:
LCALLDELAY
JBAN_JIAN4,REWT
W_RTIAO:
JBAN_JIAN4,REWT
MOVXIANSHI1,XING_QI
MOVXIANSHI2,XING_QI
MOVXIANSHI3,XING_QI
LCALLDISPLAY
SJMPW_RTIAO
REWT:
LCALLDELAY
LJMPMAIN1
;******************************************************************
KRETURN1:
LCALLDELAY
JBAN_JIAN4,RE1T
M1_RTIAO:
JBAN_JIAN4,RE1T
MOVXIANSHI1,SECOND
MOVXIANSHI2,MINUTE
MOVXIANSHI3,HOUR
LCALLDISPLAY
SJMPM1_RTIAO
RE1T:
LJMPMAIN
;*************************************************************************
;循环2:
显示闹钟时间,并检测按键状态,按1闹钟分加1,按2闹钟时加1,按3关闭闹钟功能并回到主循环,按4开启闹钟功能并回到主循环
MAIN2:
MOVXIANSHI1,S_NAO
MOVXIANSHI2,M_NAO
MOVXIANSHI3,H_NAO
LCALLDISPLAY
JNBAN_JIAN1,KNM_JIA1
JNBAN_JIAN2,KNH_JIA1
JNBAN_JIAN3,OFF_NAO
JNBAN_JIAN4,ON_NAO
JMPMAIN2
;************************************************************************
;循环2的各个按键功能的具体实现,加入了防抖动和应对按键被长时间按下
KNM_JIA1:
LCALLDELAY
JBAN_JIAN1,MAIN2_T2
INCM_NAO
MOVA,M_NAO
CJNEA,#60,M2_MTIAO
MOVM_NAO,#0
M2_MTIAO:
JBAN_JIAN1,MAIN2_T2
MOVXIANSHI1,S_NAO
MOVXIANSHI2,M_NAO
MOVXIANSHI3,H_NAO
LCALLDISPLAY
SJMPM2_MTIAO
MAIN2_T2:
LJMPMAIN2
KNH_JIA1:
LCALLDELAY
JBAN_JIAN2,MAIN2_T2
INCH_NAO
MOVA,H_NAO
CJNEA,#24,M2_HTIAO
MOVH_NAO,#0
M2_HTIAO:
JBAN_JIAN2,MAIN2_T2
MOVXIANSHI1,S_NAO
MOVXIANSHI2,M_NAO
MOVXIANSHI3,H_NAO
LCALLDISPLAY
SJMPM2_HTIAO
OFF_NAO:
LCALLDELAY
JBAN_JIAN3,RETURN2_T
MOVB_NAO,#0
M2_OTIAO:
JBAN_JIAN3,RETURN2_T
MOVXIANSHI1,S_NAO
MOVXIANSHI2,M_NAO
MOVXIANSHI3,H_NAO
LCALLDISPLAY
SJMPM2_OTIAO
RETURN2_T:
LJMPMAIN
ON_NAO:
LCALLDELAY
JBAN_JIAN4,RETURN2_T
MOVB_NAO,#01
M2_ONTIAO:
JBAN_JIAN4,RETURN2_T
MOVXIANSHI1,S_