1、单片机数字时钟设计报告 目录一、实验目的2二、实验要求2三、整体设计方案2 1、总框图及流程2 2、主要子程序框图及说明34、参考程序65、调试记录及调试结果166、系统实现功能及操作说明167、心得体会16八、附录17 参考文献17 接口电路逻辑图17一、实习目的1、学会掌握KeilC51汇编语言程序的设计和调试。2、学会将所学的单片机原理的有关知识应用于实践,提高单片机应用于技术的实践操作技能,掌握单片机应用系统设计、研制的方法,培养理论联系实际的学习作风,提高动手能力、分析并解决实际问题的能力。3、使我们进一步了解掌握所学的专业知识,巩固和深化对单片机的结构、指令系统、中断系统、键盘/显
2、示系统、接口技术、系统扩展、定时/控制、程序设计、应用开发、等基本理论知识的理解。4、通过设计、分析、调试,培养我们工程意识,激发大家对产品开发的兴趣,及培养对科技革新、开发和创新的基本能力。二、实习要求 本课题为数字钟设置,其效果为能正常显示数字时钟,显示时、分、秒,其中时为24小时制,并且通过合理的按键操作能修改时、分、秒的内容来修改时间。还有闹钟功能,可以给它设定一个时间,到这个时间它就能产生报警信号,并可以随时停止警报,如果不进行任何操作则它将响铃一分钟后自动停止响铃。除此之外还能显示日期,日期分为年、月、日,其显示方式为xxxx年xx月xx日,并且通过合理的按键操作可以任意设置日期时
3、间。三、整体设计方案进入闹铃子程序显示闹铃时间进入闹铃设置子程序显示日期子程序显示日期子程序进入设置日期子程序显示时间子程序进入设置时间子程序判断是否进入显示日期判断是否进入设置时间功能 程序初始化,赋初值程序开始调用子程序,让秒增1,并且当时为24溢出时,让存放天的单元增1 等待1s脉冲到来1、总体框图及流程 判断是否进入设置日期判断是否进入闹铃时间设置 判断是否闹铃判断是否停止响铃进入停止响铃子程序调用显示时间子程序 2、主要子程序框图及说明 1、秒增1子程序 2、显示时间子程序框图程序说明 本程序的作用为设置时间的工作方式 3、设置时间子程序 4、显示日期子程序 程序说明本程序为判断是否
4、进入时间设置程序,并且进入相应设置 程序说明 本程序为显示日期的子程序,里面包含了日期的工作方式子程序 5、日期工作方式子程序 程序说明本程序为日期的工作方式程序,它的结果不能直接显示,要通过一个月份的调整子程序调整才将日期显示出来,因为月份有大、小,有些月份为31天,有些月份为30天,有些则为28天。6、月份调整子程序7、设置闹铃时间子程序 8、响铃子程序 程序说明本程序要实现的功能为,当响铃信号来临时让警报响起程序说明本程序要实现的功能就是定时,当闹铃时间与当前时间相等时能实现响铃 八、源程序 ORG 0000H AJMP MAIN MAIN: LCALL DEL MOV DPTR,#0F
5、E03H ;开片选端 MOV A,#81H MOVX DPTR,A MOV DPTR,#0FD03H ;开片选端 MOV A,#8BH MOVX DPTR,A MOV 45H,#0 ;设置初始值 MOV 44H,#0 MOV 43H,#23 ;预先设置显示缓冲区 MOV 6EH,#2 MOV 6DH,#0 MOV 6CH,#1 MOV 6BH,#0 MOV 6AH,#0 MOV 69H,#6 MOV 68H,#2 MOV 67H,#6 MOV TMOD,#01H ;设置中断方式 MOV 20H,#28H ;设置中断次数 CLR A MOV 40H,A ;闹铃缓冲区预先设置 MOV 41H,A
6、MOV 42H,A SETB ET0 MOV TH0,#0B0H ; 置初值 MOV TL0,#3CH SETB TR0 HERE: JNB TF0,HERE ;判断1秒时间是否来到 CLR TF0 LCALL IT0P ;调用时间增1子程序 LCALL CHANGE1 ;调用是否进入设置时间子程序 LCALL CHANGE2 ;调用是否进入显示日期子程序 LCALL CHANGE3 ;调用是否进入设置日期子程序 LCALL NAOLIN ;调用设置闹铃时间子程序 LCALL WARNING ;调用是否警报子程序 LCALL STOP ;调用是否响铃停止 HUI: LCALL XIANSHI
7、;调用显示时间子程序 SJMP HERE IT0P: PUSH PSW ;进堆栈 PUSH ACC MOV TH0,#0B0H ;重新赋初值 MOV TL0,#3CH DJNZ 20H,RETURN ;循环次数不为0则返回 MOV 20H,#28H ;设置中断次数 MOV A,#01H ;准备增1 ADD A,42H ;让秒单元增1 MOV 42H,A ;秒增1 CJNE A,#60,RETURN ;秒不超过60则返回 MOV 42H,#00H ;把秒单元清零 MOV A,#01H ;准备增1 ADD A,41H ;让分单元增1 MOV 41H,A ; 分增1 CJNE A,#60,RETUR
8、N ;分不超过60则返回 MOV 41H,#00H ;分单位清零 MOV A,#01H ;换准备增1 ADD A,40H ;让时单元增1 MOV 40H,A ;时增1 CJNE A,#24,RETURN ;时不才超过60则返回 MOV 40H,#00H ;时清零 MOV A,67H ;准备让天单元增1 INC A MOV 67H,A ;天增1 AJMP RETURN RETURN:POP ACC ;出堆栈 POP PSW RET XIANSHI:MOV A,42H ;显示时间子程序 MOV B,#10 ;赋值除数10给B DIV AB MOV 77H,B ;将秒的个位存入77H单元 MOV 7
9、8H,A ;将秒的十位存入78H单元 MOV A,41H ;准备分离分单元的个位和十位 MOV B,#10 ;赋值除数10 DIV AB MOV 07AH,B ;将分的个位存入7AH单元 MOV 07BH,A ;将分的十位存入7BH单元 MOV A,40H ;准备分离时单元的个位和十位 MOV B,#10 ;赋值除数10 DIV AB MOV 7DH,B ;将时的个位存入7DH单元 MOV 7EH,A ;将时的十位存入7EH单元 MOV 79H,#12 ;赋值12给剩下的数码管让它显示- MOV 7CH,#12LP2: MOV R0,#77H ;用数码管显示77H7EH里的数值子程序 MOV
10、R3,#01HLP3: MOV A,R0 MOV DPTR,#TBL MOVC A,A+DPTR MOV DPTR,#0FE00H MOVX DPTR,A ;送位码 MOV DPTR,#0FE01H MOV A,R3 MOVX DPTR,A ;送段码 INC R0 MOV A,R3 RL A MOV R3,A LCALL DELAY JNB ACC.0,LP3 ;控制循环让数码管都显示一遍 RETCHANGE1:MOV DPTR,#0FD02H ;判断是否进入设置时间子程序 MOVX A,DPTR MOV DPTR,#0FD00H MOVX DPTR,AFD1: JNB ACC.0,FD0 ;
11、当拨码盘的最低为1时进入设置,否则跳出 MOV DPTR,#0FD01H MOVX A,DPTR JNB ACC.2,MIAO ;当按键的第3位按下时进入秒增1子程序 JNB ACC.1,FEN ;当按键的第2位按下时进入分增1子程序 JNB ACC.0,SHI ;当按键的第1位按下时进入时增1子程序 LCALL XIANSHI ;调用显示时间子程序 SJMP CHANGE1 ;返回判断是否进入时间设置子程序FD0: RETCHANGE2:MOV DPTR,#0FD02H ;判断是否进入显示日期子程序 MOVX A,DPTR MOV DPTR,#0FD00H MOVX DPTR,AFD2: J
12、NB ACC.1,FD0 ;当拨码盘第2位为1时进入显示日期 LCALL RIQI ;进入显示日期子程序 SJMP CHANGE2CHANGE3:MOV DPTR,#0FD02H ;判断是否进入设置日期子程序 MOVX A,DPTR MOV DPTR,#0FD00H MOVX DPTR,AFD7: JNB ACC.2,FD0 ;当拨码盘第3位为1时进入设置日期子程序 MOV DPTR,#0FD01H MOVX A,DPTR JNB ACC.5,TIAN ;当按键第6位按下时天数增1 JNB ACC.4,YUE ;当按键第5位按下是月份增1 JNB ACC.3,NIAN ;当按键第4位按下时年份
13、增1 LCALL RIQI ;显示日期 SJMP CHANGE3MIAO: LCALL DELAY1 ;进入设置秒增1的子程序 MOV A,42H INC A MOV 42H,A ;秒增1 CJNE A,#60,FD0 ;判断是否退出 CLR A MOV 42H,A ;把分单元清零 RETNIAN: LCALL NIAN1FEN: LCALL DELAY1 ;进入设置分增1的子程序 MOV A,41H INC A MOV 41H,A ;分增1 CJNE A,#60,FD0 ;判断是否退出 CLR A MOV 41H,A ;把分单元清零 RETSHI: LCALL DELAY1 ;进入设置时增1
14、的子程序 MOV A,40H INC A MOV 40H,A ;让时单元增1 CJNE A,#24,FD0 ;判断是否退出 CLR A MOV 40H,A ;时单元清零 RETTIAN: LCALL DELAY1 ;进入设置天数增1的子程序 MOV A,68H CJNE A,#3,ED0 ;判断当前月份以便进入不同设置 LCALL ED1 RETED0: MOV A,67H INC A MOV 67H,A ;天增1 CJNE A,#0AH,FD0 ;判断是否退出 CLR A MOV 67H,A ;天个位清零 MOV A,68H INC A MOV 68H,A ;天十位增1 RETED1: MO
15、V A,67H INC A MOV 67H,A ;天增1 CJNE A,#2,FD10 ;判断是否退出ED2: MOV 67H,#1 ;将天的个位置1 MOV 68H,#0 ;天的十位清零FD10: RETYUE: LCALL DELAY1 ;进入设置月份增1的子程序 MOV A,6AH CJNE A,#1,ED3 ;判断当前月份是否大于10一便进入不同设置 LCALL ED4 ;进入相应设置 RETED3: MOV A,69H INC A MOV 69H,A ;月份的个位增1 CJNE A,#0AH,ED5;比较判断是否月份是否大于10,大于则继续往下执行 CLR A MOV 69H,A ;
16、清零月份个位 MOV A,6AH INC A MOV 6AH,A ;月份十位增1 RETED4: MOV A,69H INC A MOV 69H,A ;月份各位增1 CJNE A,#3,ED5 ;比较判断是否退出 MOV 6AH,#0 ;月份十位清零 MOV 69H,#1 ;月份个位置1 RETED5: RETNIAN1: LCALL DELAY1 ;进入设置年增1的子程序 MOV A,6BH INC A MOV 6BH,A ;年的个位增1 CJNE A,#0AH,ED5 ;判断是否退出 CLR A MOV 6BH,A ;清零年的个位 MOV A,6CH INC A MOV 6CH,A ;年的
17、十位增1 CJNE A,#0AH,ED5 ;判断是否退出 CLR A MOV 6CH,A ;清零年的十位 MOV A,6DH INC A MOV 6DH,A ;年的白位增1 CJNE A,#0AH,ED5 ;判断是否退出 CLR A MOV 6DH,A ;清零年的百位 MOV A,6EH INC A MOV 6EH,A ;年的千位增1 RETRIQI: MOV A,68H ;进入显示日期子程序 CJNE A,#3,FD4 ;判断当前天数十位以便进入不同显示 LCALL FD3 ;进入不同显示FD4: MOV A,6AH CJNE A,#1,FD5 ;判断当前月份的十位以便进入不同显示 MOV
18、A,69H CJNE A,#3,FD5 ;判断当前月份的个位,以便进入不同显示 LCALL FD6FD5: MOV A,67H CJNE A,#0AH,ES1 ;判断是否退出 CLR A MOV 67H,A ;清零天的个位 MOV A,68H INC AFD3: MOV 68H,A ;增1天的十位 CJNE A,#3,ES1 ;判断是否退出 MOV A,67H CJNE A,#2,ES1 ;判断是否退出 CLR A MOV 67H,#1 ;把天数的个位置1 MOV 68H,#0 ;把天数的十位置0 MOV A,69H INC AMOV 69H,A ;月份增1 CJNE A,#0AH,ES1 ;
19、判断是否退出 MOV 69H,#0 ;清零月份的是个位 MOV 68H,#0 ;清零天数的十位 MOV 67H,#1 ;置1天数的个位 MOV A,6AH INC A MOV 6AH,A ;月份的十位增1FD6: MOV 69H,#1 ;月份的个位置1 MOV 6AH,#0 ;月份 的十位清零 MOV 68H,#0 ;天数的十位清零 MOV 67H,#1 ;天数的个位置1 MOV A,6BH INC A MOV 6BH,A ;年份的个位增1 CJNE A,0AH,ES1 ;判断是否退出 CLR A MOV 6BH,A ;清零年的 个位 MOV A,6CH INC A MOV 6CH,A ;年的
20、十位增1 CJNE A,#0AH,ES1 ;判断是否退出 CLR A MOV 6CH,A ;清零年的十位 MOV A,6DH INC A MOV 6DH,A ;年的百位增1 CJNE A,#0AH,ES1 ;判断是否退出 CLR A MOV 6DH,A ;清零年的百位 MOV A,6EH INC A MOV 6EH,A ;年的千位增1ES1: LCALL XIAOYUE ;调用月份天数调整子程序 MOV 7EH,6EH ;准备显示日期 MOV 7DH,6DH MOV 7CH,6CH MOV 7BH,6BH MOV 7AH,6AH MOV 79H,69H MOV 78H,68H MOV 77H,
21、67H LCALL LP2 RETXIAOYUE:MOV A,6AH ;进入月份天数调整子程序 CJNE A,#1,CS0 ;判断当前月份的十位以便进入不同调整 MOV A,69H CJNE A,#1,CS4 ;判断当前月份的个位以便进入不同调整 MOV A,68H CJNE A,#3,CS0 ;判断当前天数的十位以便进入不同调整 MOV A,67H CJNE A,#1,CS0 ;判断当前天数的十位以便进入不同调整 MOV 6AH,#1 ;日期调整 MOV 69H,#2 MOV 68H,#0 MOV 67H,#1 RETCS0: MOV A,69H CJNE A,#9,CS1 ;判断当前月份的
22、各位以便进入不同调整MOV A,68H CJNE A,#3,CS1 ;判断当前天数的十位以便进入不同调整 MOV A,67H CJNE A,#1,CS1 ;判断当前天数的个位以便进入不同调整 MOV 6AH,#1H MOV 69H,#0 ;日期调整 MOV 68H,#0 MOV 67H,#1 RETCS1: MOV A,69H CJNE A,#6,CS2 ;判断当前月份的个位以便进入不同调整 MOV A,68H CJNE A,#3,CS2 ;判断当前天数的十位以便进入不同调整 MOV A,67H CJNE A,#1,CS2 ;判断当前天数的个位以便进入不同调整 MOV 69H,#7 ;日期调整
23、 MOV 68H,#0 MOV 67H,#1 RETCS2: MOV A,69H CJNE A,#4,CS3 ;判断当前月份个位以便进入不同调整 MOV A,68H CJNE A,#3,CS3 ;判断当前天数的十位以便进入不同调整 MOV A,67H CJNE A,#1,CS3 ;判断当前天数的个位以便进入不同调整 MOV 69H,#5 ;日期调整 MOV 68H,#0 MOV 67H,#1 RETCS3: MOV A,69H CJNE A,#2,CS4 ;判断当前月份的个位以便进入不同调整 MOV A,68H CJNE A,#2,CS4 ;判断当前天数的十位以便进入不同调整 MOV A,67
24、H CJNE A,#9,CS4 ;判断当前天数的个位以便进入不同调整 MOV 69H,#3 ;日期调整 MOV 68H,#0 MOV 67H,#1CS4: RETNAOLIN :MOV DPTR,#0FD02H ;判断是否进入闹铃时间设置子程序 MOVX A,DPTR MOV DPTR,#0FD00H MOVX DPTR,A JNB ACC.3,ED7 ;当拨码盘第4位按下时进入闹铃时间设置 MOV DPTR,#0FD01H MOVX A,DPTR JNB ACC.2,SEC ;当按键第3位按下时秒增1 JNB ACC.1,MIN ;当按键第2位按下时分增1 JNB ACC.0,HOUR ;当
25、按键第1位按下时时增1 MOV A,45H MOV B,#10 ;赋值除数10分离闹铃时间的秒 DIV AB MOV 77H,B ;将秒的个位存入77H单元 MOV 78H,A ;将秒的十位存入78H单元 MOV A,44H MOV B,#10 ;赋值除数10分离闹铃时间的分 DIV AB MOV 7AH,B ;将分的个位存入7AH单元 MOV 7BH,A ;将分的十位存入7BH单元 MOV A,43H MOV B,#10 ;赋值除数10分离闹铃时间的时 DIV AB MOV 7DH,B ;将时的个位存入7DH单元 MOV 7EH,A ;将时的十位存入7EH单元MOV 7CH,#12 ;熄灭其
26、他数码管 MOV 79H,#12 LCALL LP2 SJMP NAOLINED7: RET SEC: LCALL DELAY1 ;进入调整闹铃时间秒增1子程序 MOV A,45H CJNE A,#59,ED16 MOV 45H,#0 SJMP RETU13ED16: INC A MOV 45H,ARETU13: RETMIN: LCALL DELAY1 ;进入调整闹铃时间分增1子程序 MOV A,44H CJNE A,#59,ED6 MOV 44H,#0 SJMP RETU3ED6: INC A MOV 44H,ARETU3: RETHOUR: LCALL DELAY1 ;进入调整闹铃时间时
27、增1子程序 MOV A,43H CJNE A,#23,LOOP4 MOV 43H,#0 SJMP RETU4LOOP4:INC A MOV 43H,ARETU4: RETWARNING:MOV DPTR,#0FD02H ;进入是否闹铃子程序 MOVX A,DPTR MOV DPTR,#0FD00H MOVX DPTR,A JB ACC.5,ED9 MOV A,40H CJNE A,43H,ED8 ;时相等时继续往下执行 MOV A,41H CJNE A,44H,ED8 ;分相等是继续往下执行 MOV A,42H CJNE A,45H,ED8 ;秒相等是继续往下执行 CLR P3.2 ;响铃 R
28、ETED9: SETB P3.2 RETED8: RETSTOP: MOV DPTR,#0FD02H ;进入判断是否停止响铃子程序 MOVX A,DPTR MOV DPTR,#0FD00H MOVX DPTR,A JNB ACC.5,ED8 ;拨码盘第6位按下时停止响铃 SETB P3.2 RETDELAY: MOV R2,#10 L1: MOV R4,#100 L2: DJNZ R4,L2 DJNZ R2,L1 RETDELAY1: MOV R1,#10 D1: LCALL LP2 MOV R2,#1 D2: MOV R6,#1 D3: DJNZ R6,D3 DJNZ R2,D2 DJNZ R1,D1 RETDEL: MOV R1,#10LD0: MOV R2,#150LD1: MOV R6,#200LD2: DJNZ R6,LD2 DJNZ R2,LD1 DJNZ R1,LD0 RET TBL:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88HDB 83H,0BFH,0FFH,086H,08EH,08CH,0C1H,0CEH,091H,089H,0C7H,0FFHEND五、调试记录及调试结果
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1