⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 2051.asm

📁 S2为功能键、S3为方式选择键 P1口为字符输出口,采用共阳显示管 P3.2~P3.5为位选,P1.7为报警发音,P3.7为被控继电器
💻 ASM
字号:

    kk1 bit b.1
    kk2 bit b.2
    kk3 bit b.3
        ORG 0000H
        LJMP START
        ORG 000BH
        LJMP CTC0
TT1     EQU 37H ;50ms
TT2     EQU 38H ;秒
TT3     EQU 39H ;分
TT4     EQU 3AH ;时

YUESHI  EQU 40H
YUEFEN  EQU 41H
YUEFEE  EQU 42H 
        ORG 43H
VIEW0:  DB 0C0H, 0F9H, 0A4H, 0B0H, 99H , 92H , 82H, 0F8H 
        DB 80H , 90H, 88H , 83H , 0C6H, 0A1H, 86H, 84H
        ORG 0A0H
TEMP_TAB: DB 00H,01H,02H,03H,04H,05H,06H,07H                       
          DB 08H,09H,10H,11H,12H,13H,14H,15H
          DB 16H,17H,18H,19H,20H,21H,22H,23H
          DB 24H,25H,26H,27H,28H,29H,30H,31H
          DB 32H,33H,34H,35H,36H,37H,38H,39H
          DB 40H,41H,42H,43H,44H,45H,46H,47H
          DB 48H,49H,50H,51H,52H,53H,54H,55H
          DB 56H,57H,58H,59H,60H
          ORG   100H
START:  MOV TMOD,#01H
        MOV TL0,#0B0H
        MOV TH0,#3CH
      SETB EA
      SETB ET0
      SETB TR0
      JB P,NEXT
NEXT: MOV A,#00H
      MOV R2,#17H         ;24小时
      MOV YUESHI,#00H
      MOV YUEFEN,#00H
      MOV YUEFEE,#00H
      MOV R3,#3BH         ;60分 
      MOV R4,#3BH         ;60秒
      SETB KK1
      SETB KK2
      SETB KK3
mainline:
      JB   P3.2,KEY1
      CLR KK1
KEY1: JNB p3.2,KEY2 ;当p1.3高电平时就往下执行,但是只要执行一次后,kk1就为1,往后就不再执行       
      JB KK1,KEY2 
      INC YUESHI
      SETB KK1    ;这以段的任务是不用延时也能消除按键抖动的程序
KEY2: JB   P3.3,KEY3
      CLR KK2
KEY3: JNB P3.3,KEY4         
      JB   KK2, KEY4  
      INC YUEFEN
      SETB KK2
KEY4: JB   P3.4,KEY5
      CLR KK3
KEY5: JNB P3.4,RES         
      JB   KK3, RES  
      SETB KK3
      INC YUEFEE
RES:     
      MOV A,YUESHI         
      SUBB A,R2
      JNZ BUDAOSHI
      MOV YUESHI,#00H
BUDAOSHI:
      MOV A,YUEFEN
      SUBB A,R3
      JNZ BUDAOFEN
      MOV YUEFEN,#00H
BUDAOFEN:
      MOV A,YUEFEE
      SUBB A,R4
      JNZ BUDAOFENN
      MOV YUEFEE,#00H
BUDAOFENN:
      MOV A,YUESHI
      MOV DPTR,#TEMP_TAB
      MOVC A,@A+DPTR
      MOV R0,A
      ANL A,#0FH;送小时的个位
      MOV DPTR,#VIEW0
      MOVC A,@A+DPTR
      MOV P0,A
      SETB P2.5
      SETB P2.4
      SETB P2.3
      SETB P2.2
      CLR P2.1
      SETB P2.0
      LCALL DELAY
      MOV A,R0
      SWAP A 
      ANL A,#0FH
      MOVC A,@A+DPTR
      MOV P0,A ;显示时的十位
      SETB P2.5
      SETB P2.4
      SETB P2.3
      SETB P2.2
      SETB P2.1
      CLR  P2.0
      LCALL DELAY
      MOV A,YUEFEN
      MOV DPTR,#TEMP_TAB
      MOVC A,@A+DPTR
      MOV R0,A
      ANL A,#0FH;送分的个位
      MOV DPTR,#VIEW0
      MOVC A,@A+DPTR
      MOV P0,A
      SETB P2.5
      SETB P2.4
      CLR P2.3
      SETB P2.2
      SETB P2.1
      SETB P2.0
      LCALL DELAY
      MOV A,R0
      SWAP A 
      ANL A,#0FH
      MOVC A,@A+DPTR
      MOV P0,A ;显示分的十
      SETB P2.5
      SETB P2.4
      SETB P2.3
      CLR P2.2
      SETB P2.1
      SETB P2.0
      LCALL DELAY
      LCALL DELAY
      MOV A,YUEFEE
      MOV DPTR,#TEMP_TAB
      MOVC A,@A+DPTR
      MOV R0,A
      ANL A,#0FH;送秒的个位
      MOV DPTR,#VIEW0
      MOVC A,@A+DPTR
      MOV P0,A
      CLR P2.5
      SETB P2.4
      SETB P2.3
      SETB P2.2
      SETB P2.1
      SETB P2.0
      LCALL DELAY
      MOV A,R0
      SWAP A 
      ANL A,#0FH
      MOVC A,@A+DPTR
      MOV P0,A ;显示秒的十位
      SETB P2.5
      CLR P2.4
      SETB P2.3
      SETB P2.2
      SETB P2.1
      SETB P2.0
      LCALL DELAY
      JNB P3.5, NEXT2;按下就进入定时煮饭的阶段
      LJMP mainline

DELAY: 
      MOV R5,#04H ;40ms延时子程序
L7:   MOV R6,#0FAH 
L8:   DJNZ R6,L8 
      DJNZ R5,L7 
      RET

NEXT2:   
      MOV A,#00H
      MOV TT1,A ;让TT1重新清零这一步是必须的
      MOV TT2,#00H
      MOV A,YUEFEN
      MOV TT3,A
      MOV A,YUESHI
      MOV TT4,A
   
LOOP1:   
      MOV A,TT4
      JZ   AINI1
      LCALL TIMEING1
AINI1: 
      MOV A,TT4
      JNZ AINI2
      LCALL TIMEING1

;-------------定时程序:--------------------

AINI2:   
      MOV A,TT1
      CJNE A,#14H,RET001
      SUBB A,#14H ;20×50ms=1s
      JNZ RET001
      MOV TT1,A ;TT1清零
      DEC TT2
      MOV A,TT2
      SUBB A,#0FFH ;到零?
      JNZ RET001
      MOV TT2,#3BH   ;重新送数
      DEC TT3
      MOV A,TT3
      SUBB A,#0FFH
      JNZ RET001
      MOV TT3,#3BH
      DEC TT4
      MOV A,TT4
      SUBB A,0FFH
      JNZ RET001
HERE:    
      CLR P3.7
 ;定时中止
      SJMP HERE;
RET001: 
      LJMP LOOP1

;-----------显示倒计时--------------
TIMEING1:
      MOV A,TT4
      MOV DPTR,#TEMP_TAB
      MOVC A,@A+DPTR
      MOV R0,A
      ANL A,#0FH;送小时的个位
      MOV DPTR,#VIEW0
      MOVC A,@A+DPTR
      MOV P0,A
      SETB P2.5
      SETB P2.4
      SETB P2.3
      SETB P2.2
      CLR P2.1
      SETB P2.0
      LCALL DELAY
      MOV A,R0
      SWAP A 
      ANL A,#0FH
      MOVC A,@A+DPTR
      CLR   P2.5
      MOV P0,A ;显示时的十位
      SETB P2.5
      SETB P2.4
      SETB P2.3
      SETB P2.2   
      SETB P2.1
      CLR   P2.0
      LCALL DELAY
      MOV A,TT3
      MOV DPTR,#TEMP_TAB
      MOVC A,@A+DPTR
      MOV R0,A
      ANL A,#0FH;送分的个位
      MOV DPTR,#VIEW0
      MOVC A,@A+DPTR  
      MOV P0,A
      SETB P2.5
      SETB P2.4
      CLR P2.3
      SETB P2.2
      SETB P2.1
      SETB P2.0
      LCALL DELAY
      MOV A,R0
      SWAP A 
      ANL A,#0FH
      MOVC A,@A+DPTR
      MOV P0,A ;显示分的十位
      SETB P2.5
      SETB P2.4
      SETB P2.3
      CLR P2.2
      SETB P2.1
      SETB P2.0
      LCALL DELAY
      MOV A,TT2
      MOV DPTR,#TEMP_TAB
      MOVC A,@A+DPTR
      MOV R0,A
      ANL A,#0FH;送秒的个位
      MOV DPTR,#VIEW0
      MOVC A,@A+DPTR  
      MOV P0,A
      CLR P2.5
      SETB P2.4
      SETB P2.3
      SETB P2.2
      SETB P2.1
      SETB P2.0
      LCALL DELAY
      MOV A,R0
      SWAP A 
      ANL A,#0FH
      MOVC A,@A+DPTR
      MOV P0,A ;显示秒的十位
      SETB P2.5
      CLR P2.4
      SETB P2.3
      SETB P2.2
      SETB P2.1
      SETB P2.0
      LCALL DELAY 
      RET

;**************定时中断子程序****************************************
CTC0:    
      MOV TL0,#0B0H ;定时50ms
      MOV TH0,#3CH
      INC TT1
      RETI
 END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -