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

📄 daojishi.txt

📁 完成999.99秒倒数的程序,比较好理解.有暂停继续清零功能!
💻 TXT
字号:
            Z8279 EQU 08701H        ;8279 状态/命令口地址 
            D8279 EQU 08700H        ;8279 数据口地址 
            LEDMOD EQU 00H          ;左边输入 八位字符显示 
                                    ;外部译码键扫描方式,双键互锁 
            LEDFEQ EQU 2FH          ;扫描速率 
            LEDCLS EQU 0C1H         ;清除显示 RAM 
            LEDWR0 EQU 80H          ;设定的将要写入的显示RAM地址 
            READKB EQU 40H          ;读 FIFO RAM 地址 0 的命令字 

            ORG 0000H 
            AJMP START 
            ORG 001BH               ;INT_T1 入口地址 
            AJMP INT_T1             
            ORG 0040H 
     START: 
            MOV SP,#60H             读显示RAM送入SP
            LCALL INIT8279          ;初始化8279 
            MOV R2,#99              ;分 
            MOV R1,#99              ;秒 
            MOV R0,#99              ;毫秒 
            MOV R6,#99H             ;标志 
            MOV TMOD,#10H 
            MOV TL1,#00H            ;毫秒的时间常数 
            MOV TH1,#0DCH 
            LCALL DIS_mS 
            SETB ET1 
            SETB EA                 ;允许中断 
      WAIT: 
            LCALL GETKEY            ;读键盘 
            CJNE A,#0FFH,CONT       ;判断是否有键输入 
            MOV A,B 
            
     KEY_G: CJNE A,#3AH,KEY_D       ;输入键是'A',转START_T 
            LCALL START_T 

     KEY_D: CJNE A,#3BH,CONT        ;输入键是'D',转STOP_T 
            LCALL STOP_T  
      
     CONT:  CJNE R6,#99H,WAIT       ;若无秒标志则循环 
            LCALL DISPLAY           ;显示时间 
            MOV R6,#0               ;清标志 
            SJMP WAIT               ;循环    

    START_T:                        ;开始倒计时子程序 
            SETB TR1 
            RET 
    STOP_T:                         ;停止倒计时子程序 
            CLR TR1 
            RET     
    
   SET_TOK: LCALL DIS_mS            ;显示10毫秒 
            LCALL DISPLAY           ;显示时间 
            RET  

  INIT8279:                         ;8279初始化子程序 
            PUSH DPH                ;保存现场 
            PUSH DPL 
            PUSH ACC 
            LCALL DELAY             ;延时 
            MOV DPTR ,#Z8279 
            MOV A,#LEDMOD           ;置8279工作方式 
            MOVX @DPTR,A 
            MOV A,#LEDFEQ           ;置键盘扫描速率 
            MOVX @DPTR,A 
            MOV A,#LEDCLS           ;清除 LED 显示 
            MOVX @DPTR,A 
            POP ACC                 ;恢复现场 
            POP DPL 
            POP DPH 
            RET 
                          
            ;读取键盘子程序               
    GETKEY: 
            PUSH DPH                ;保存现场 
            PUSH DPL 
            PUSH PSW 
            MOV DPTR,#Z8279 
            MOVX A,@DPTR            ;读8279状态 
            ANL A,#07H              ;屏蔽D7-D3 
            JNZ GETVAL              ;判断是否有键输入 
            MOV A,#0H               ;置标志(无键输入) 
            SJMP NKBHIT 

    GETVAL:
            MOV A,#READKB           ;读 FIFO RAM 命令 
            MOVX @DPTR,A 
            MOV DPTR,#D8279 
            MOVX A,@DPTR            ;读键 
            ANL A,#3FH              ;屏蔽 SHIFT 和 CTRL 键 
            MOV DPTR,#KEYCODE       ;键码表起始地址 
            MOVC A,@A+DPTR          ;查表 
            MOV B,A                 ;置返回键值 
            MOV A,#0FFH             ;置标志(有键输入)
 
    NKBHIT:
            POP PSW                 ;恢复现场 
            POP DPL 
            POP DPH 
            RET 

           ;显示字符子程序 
           ;输入: R4,位置 R5,值 
    DISLED2:
            PUSH DPH                ;保存现场 
            PUSH DPL 
            PUSH ACC 
            MOV A,#LEDWR0           ;置显示起始地址 
            ADD A,R4                ;加位置偏移量 
            MOV DPTR,#Z8279 
            MOVX @DPTR,A            ;设定显示位置 
            MOV DPTR,#LEDSEG2       ;置显示常数表起始位置 
            MOV A,R5 
            MOVC A,@A+DPTR          ;查表 
            MOV DPTR,#D8279             
            MOVX @DPTR,A            ;显示数据 
            POP ACC                 ;恢复现场 
            POP DPL 
            POP DPH 
            RET 

    DISLED: 
            PUSH DPH                ;保存现场 
            PUSH DPL 
            PUSH ACC 
            MOV A,#LEDWR0           ;置显示起始地址 
            ADD A,R4                ;加位置偏移量 
            MOV DPTR,#Z8279 
            MOVX @DPTR,A            ;设定显示位置 
            MOV DPTR,#LEDSEG        ;置显示常数表起始位置 
            MOV A,R5 
            MOVC A,@A+DPTR          ;查表 
            MOV DPTR,#D8279             
            MOVX @DPTR,A            ;显示数据 
            POP ACC                 ;恢复现场 
            POP DPL 
            POP DPH 
            RET

    DELAY:                          ;延时子程序 
            PUSH 0                  ;保存现场 
            PUSH 1 
            MOV 0,#0H 

    DELAY1:
            MOV 1,#0H 
            DJNZ 1,$ 
            DJNZ 0,DELAY1 
            POP 1                   ;恢复现场 
            POP 0 
            RET 
    DIS_mS: 
            MOV A,R0 
            MOV	B,#10
            DIV AB
            MOV R5,B
            MOV B,A 
            MOV R4,#0 
            LCALL DISLED            ;显示10毫秒低位 
            MOV A,B 
            MOV R5,A 
            MOV R4,#1 
            LCALL DISLED            ;显示10毫秒高位 
            RET 

    INT_T1:                         ;INT_T1中断服务子程序  
            PUSH DPH                ;保护现场 
            PUSH DPL 
            PUSH ACC 
            PUSH PSW 
            CLR TR1 
            MOV TL1,#00H            ;10毫秒定时常数 
            MOV TH1,#0DCH 
            SETB TR1 

            MOV A,R0 
            DEC ACC                 ;10毫秒数减 1            
            MOV R0,A
            LCALL DIS_mS            ;显示10毫秒
            CJNE R0,#0,EXIT         ;判断10毫秒是否等于0 
            MOV R0,#99              ;置秒标志
            MOV R6,#99H 
            CJNE R1,#00,SECOND      ;判断秒=00 
            MOV R1,#99 
            CJNE R2,#00H,MINUTE     ;判断分=00
            MOV R2,#99 
         
    MINUTE: 
            MOV A,R2 
            DEC ACC
            MOV R2,A 
    SECOND: 
            MOV A,R1 
            DEC ACC
            MOV R1,A 
    EXIT: 
            POP PSW                 ;恢复现场 
            POP ACC 
            POP DPL 
            POP DPH 
            RETI                    ;中断返回 

    DISPLAY:             
            MOV A,R2             
            MOV B,#10
            DIV AB           
            MOV R5,B            
            MOV B,A             
            MOV R4,#4 
            LCALL DISLED            ;显示分钟低位
	    MOV A,B			
            MOV R5,A 
            MOV R4,#5 
            LCALL DISLED            ;显示分钟高位 
            MOV A,R1 
            MOV B,#10
            DIV AB           
            MOV R5,B
            MOV B,A  
            MOV R4,#2 
            LCALL DISLED2           ;显示秒低位
	    MOV A,B
            MOV R5,A 
            MOV R4,#3 
            LCALL DISLED            ;显示秒高位             
            MOV A,R0 
            MOV	B,#10
            DIV AB
            MOV R5,B
            MOV B,A 
            MOV R4,#0 
            LCALL DISLED            ;显示毫秒低位
            MOV A,B 
            MOV R5,A 
            MOV R4,#1 
            LCALL DISLED            ;显示毫秒高位 
            RET 
           
   LEDSEG:                          ;LED显示常数表
            DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H            ;'0,1,2,3,4,5,6,7,'             
            DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H            ;'8,9,A,B,C,D,E,F' 
            
   LEDSEG2: DB 0BFH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,087H     ;'0.,1.,2.,3.,4.,5.,6.,7.' 
            DB 0FFH,0EFH,0F7H,0FCH,0B9H,0DEH,0F9H,0F1H    ;'8.,9.,A.,B.,C.,D.,E.,F.'       
            DB 6DH,02H,08H,00H,59H,0FH,76H                ;'U,-,_, ,I,O,P, ' 
                           
   KEYCODE:                         ;键盘键码表
            DB 30H,31H,32H,33H,34H,35H,36H,37H ;'1,2,Q,W,A,S,+,Z' 
            DB 38H,39H,3AH,3BH,3CH,3DH,3EH,3FH ;'3,4,E,R,D,F,X,C' 
            END

⌨️ 快捷键说明

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