//HJSMSY-V1.0单片机开发板测试程序 //--------------------------------------------- // <<电脑钟>> //--------------------------------------------- //编写人:李春起 //编定日期:2009。11。06 //修改日期:2009。11。19 //=======主函数================================== ORG 0000H LJMP MAIN ORG 000BH LJMP T00 // ORG 001BH // LJMP T11 ORG 0030H //=======程序初始化============================= MAIN: MOV TMOD,#11H MOV TH0,#3CH MOV TL0,#0B0H MOV TH1,#0F0H MOV TL1,#0B0H SETB EA SETB ET0 // SETB ET1 SETB TR0 // SETB TR1 CLR P3.4 MOV R7,#00H ;秒值 MOV 30H,#00H ;秒个位值 MOV 31H,#00H ;秒十位值 MOV 32H,#00H ;分个位 MOV 33H,#00H ;分十位 MOV 34H,#00H ;时个位 MOV 35H,#00H ;时十位 MOV 44H,#00H ;秒表毫秒十位 MOV 45H,#00H ;秒表秒毫秒百位 MOV 46H,#00H ;秒表秒个位 MOV 47H,#00H ;秒表秒十位 MOV 48H,#00H ;秒表分个位 MOV 49H,#00H ;秒表分十位 MOV P2,#0F0H ;P2口按键初始化 MOV 40H,#01H ;数码管休眠值 /流水灯/秒表开关数 MOV 41H,#08H ;流水灯循环值 MOV 42H,#00H ;秒表暂停 // ACALL T11 //----------------------------------------------- MAIN1: MOV P0,#0FFH MOV P1,#0FFH MOV R0,40H CJNE R0,#01H,ACL1 ACALL MAIN2 ;时钟显示 ACL1:CJNE R0,#02H,ACL2 ACALL MAIN3 ;秒表 ACL2:CJNE R0,#03H,ACL3 ACALL LED ;流水灯 ACL3:ACALL KEY ;按键扫描 // ACALL BAO ;定时报警 LJMP MAIN1 //=======报警子程序============================ BAO:MOV R4,33H CJNE R4,#03H,YY1 CLR P3.2 ACALL KEY LJMP YY2 YY1:CJNE R4,#05H,YY2 SETB P3.2 ACALL KEY YY2:RET //======时钟扫描子程序======================= MAIN2: MOV A,30H MOV DPTR,#TAB MOVC A,@A+DPTR MOV P0,A CLR P1.0 ACALL DELAY MOV A,31H MOV DPTR,#TAB MOVC A,@A+ DPTR MOV P0,A CLR P1.1 SETB P1.0 ACALL DELAY MOV A,32H MOV DPTR,#TAB MOVC A,@A+DPTR MOV P0,A CLR P1.2 SETB P1.1 ACALL DELAY MOV A,33H MOV DPTR,#TAB MOVC A,@A+DPTR MOV P0,A CLR P1.3 SETB P1.2 ACALL DELAY MOV A,34H MOV DPTR,#TAB MOVC A,@A+DPTR MOV P0,A CLR P1.4 SETB P1.3 ACALL DELAY MOV A,35H MOV DPTR,#TAB MOVC A,@A+DPTR MOV P0,A CLR P1.5 SETB P1.4 ACALL DELAY MOV P0,#7FH MOV P1,#0EBH ACALL DELAY MOV P1,#0FFH RET //========秒表扫描子程序========================= MAIN3: MOV A,44H MOV DPTR,#TAB MOVC A,@A+DPTR MOV P0,A CLR P1.0 ACALL DELAY MOV A,45H MOV DPTR,#TAB MOVC A,@A+ DPTR MOV P0,A CLR P1.1 SETB P1.0 ACALL DELAY MOV A,46H MOV DPTR,#TAB MOVC A,@A+DPTR MOV P0,A CLR P1.2 SETB P1.1 ACALL DELAY MOV A,47H MOV DPTR,#TAB MOVC A,@A+DPTR MOV P0,A CLR P1.3 SETB P1.2 ACALL DELAY MOV A,48H MOV DPTR,#TAB MOVC A,@A+DPTR MOV P0,A CLR P1.4 SETB P1.3 ACALL DELAY MOV A,49H MOV DPTR,#TAB MOVC A,@A+DPTR MOV P0,A CLR P1.5 SETB P1.4 ACALL DELAY MOV P0,#7FH MOV P1,#0EBH ACALL DELAY MOV P1,#0FFH RET //=======定时器T0中断服务======================== T00:MOV TH0,#0D8H MOV TL0,#0F0H INC R7 CJNE R7,#64H,AA MOV R7,#00H //-------时钟跑值-------------------------------- TK1:INC 30H ;每秒钟秒个位增一 MOV R6,30H CJNE R6,#0AH,AA MOV 30H,#00H TK2:INC 31H MOV R6,31H CJNE R6,#06H,AA MOV 31H,#00H TK3:INC 32H MOV R6,32H CJNE R6,#0AH,AA MOV 32H,#00H TK4:INC 33H MOV R6,33H CJNE R6,#06H,AA MOV 33H,#00H TK5:INC 34H MOV R5,34H MOV R6,35H CJNE R5,#04H,TK6 CJNE R6,#02H,TK6 MOV 34H,#00H MOV 35H,#00H TK6:CJNE R5,#0AH,AA MOV 34H,#00H INC 35H //-------秒表跑值---------------------- AA: MOV R5,42H CJNE R5,#01H,TK7 INC 44H TK7:MOV R5,44H CJNE R5,#0AH,AA1 MOV 44H,#00H INC 45H MOV R5,45H CJNE R5,#0AH,AA1 MOV 45H,#00H INC 46H MOV R5,46H CJNE R5,#0AH,AA1 MOV 46H,#00H INC 47H MOV R5,47H CJNE R5,#06H,AA1 MOV 47H,#00H INC 48H MOV R5,48H CJNE R5,#0AH,AA1 MOV 48H,#00H INC 49H MOV R5,49H CJNE R5,#06H,AA1 MOV 49H,#00H AA1:RETI //====定时器T1中断服务子程序==================== //T11:MOV TH1,#0F0H // MOV TL1,#0B0H // RETI //******定时时间调整子程序*************************// TBAO: MOV 50H,#00H MOV 51H,#00H MOV 52H,#00H MOV 53H,#00H MOV 54H,#00H MOV 55H,#00H MOV R3,50H DJNZ 30H,RET1 RET1: RET //======键盘扫描子程序========================== KEY:MOV P2,#0F0H MOV R3,P2 CJNE R3,#0F0H,KE0 LJMP KK13 KE0:CJNE R3,#0E0H,KE1 ;P2.4行 MOV P2,#0EFH JB P2.3,KK1 //用作调定时时间 ;K13 秒个位增一 ACALL DELAY1 ACALL TK1 KK1:JB P2.2,KK2 ;K14 秒十增一 ACALL DELAY1 ACALL TK2 KK2:JB P2.1,KK3 ;K15 分个位增一 ACALL DELAY1 ACALL TK3 KK3:JB P2.0,KE1 ;K16 分十位增一 ACALL DELAY1 ACALL TK4 KE1:MOV P2,#0DFH ;P2.5行 JB P2.3,KK4 ;K9 时个位增一 ACALL DELAY1 ACALL TK5 KK4:JB P2.2,KK5 ;K10 时十位增一 ACALL DELAY1 INC 35H MOV R3,35H CJNE R3,#03H,HH0 MOV 35H,#00H LJMP KK5 HH0:CJNE R3,#02H,HH1 LJMP KK5 HH1:CJNE R3,#01H,HH2 LJMP KK5 HH2:MOV 35H,#00H KK5:JB P2.1,KK6 ACALL DELAY1 ;K11 开/关蜂鸣器 CPL P3.2 KK6:JB P2.0,KE2 ;K12 秒表暂停 MOV 42H,#00H KE2:MOV P2,#0BFH ;P.6行 JB P2.3,KK7 ;K5 时钟暂停/取消暂停 ACALL DELAY1 CPL ET0 KK7:JB P2.2,KK8 ;K6 显示/休眠/流水灯 ACALL DELAY2 INC 40H MOV R3,40H CJNE R3,#04H,KK8 MOV 40H,#01H KK8:JB P2.1,KK9 // ACALL DELAY3 ;K7 秒表清0 MOV 44H,#00H MOV 45H,#00H MOV 46H,#00H MOV 47H,#00H MOV 48H,#00H MOV 49H,#00H KK9:JB P2.0,KE3 ;K8 秒表开始跑 MOV 42H,#01H KE3:MOV P2,#7FH ;P2.7行 JB P2.3,KK10 ;K1 秒十位减一 ACALL DELAY1 MOV R3,31H CJNE R3,#00H,JA1 LJMP KK10 JA1:DEC 31H KK10:JB P2.2,KK11 ;K2 分个位减一 ACALL DELAY1 MOV R3,32H CJNE R3,#00H,JA2 LJMP KK11 JA2: DEC 32H KK11:JB P2.1,KK12 ;K3 分十位减一 ACALL DELAY1 MOV R3,33H CJNE R3,#00H,JA3 LJMP KK12 JA3:DEC 33H KK12:JB P2.0,KK13 ;K4 时个位减一 ACALL DELAY1 MOV R3,34H CJNE R3,#00H,JA4 LJMP KK13 JA4:DEC 34H KK13:RET //=====流水灯子程序=========================== LED: MOV A,#0feH MOV 41H,#08H MOV P0,#0FFH LED1: MOV P1,A MOV R3,#100 D0: ACALL DELAY DJNZ R3,D0 MOV R3,41H DJNZ R3,AAA LJMP BB AAA:RL A MOV 41H,R3 ACALL KEY LJMP LED1 BB: MOV 41H,#07H CC: MOV P1,A MOV R3,#30 D1: ACALL DELAY DJNZ R3,D1 MOV R3,41H DJNZ R3,DD LJMP LED0 DD:RR A MOV 41H,R3 ACALL KEY LJMP CC LED0:RET //=====延时子程序============================== DELAY:MOV R1,#250 DEL1:NOP NOP NOP NOP DJNZ R1,DEL1 RET //====调用时钟显示作延时======================== DELAY1:MOV R2,#20 DELA3: ACALL MAIN2 DJNZ R2,DELA3 RET //====调用秒表显示作延时======================== DELAY3:MOV R2,#20 DELA5:ACALL MAIN3 DJNZ R2,DELA5 RET //====调用延时子程序作延时====================== DELAY2:MOV R2,#100 DELA4:ACALL DELAY DJNZ R2,DELA4 RET //======共阳数码管段码表================================= TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,87H END