首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

时钟+秒表+流水灯的单片机汇编程序

时钟+秒表+流水灯的单片机汇编程序

//HJSMSY-V1.0单片机开发板测试程序
//---------------------------------------------
//          <<电脑钟>>
//---------------------------------------------
//=======主函数==================================
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   2口按键初始化
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         2.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         2.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   .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     2.7行
    JB P2.3,KK10     ;K1     秒十位减一
ACALL DELAY1
MOV R3,31H
CJNE R3,#00H,JA1
LJMP  KK10
JA1EC 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
JA3EC 33H
KK12:JB P2.0,KK13     ;K4  时个位减一
     ACALL DELAY1
  MOV R3,34H
  CJNE R3,#00H,JA4
  LJMP KK13
JA4EC 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
//======共阳数码管段码表=================================
TABB  0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,87H
END
返回列表