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

📄 jishichenxu.c

📁 单片机倒计时程序
💻 C
字号:
 kk1 bit b.1
kk2 bit b.2
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 
ORG 42H
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
   SETB P2.4 ;

   SETB P2.5

      JB P1.6,NEXT
      ;JMP ZHU
NEXT:    MOV A,#00H    
         MOV R2,#17H         ;24小时
         MOV YUESHI,#00H 
      MOV YUEFEN,#00H
      MOV R3,#3BH         ;60 
      SETB KK1
         SETB KK2
mainline:
         JB   P1.3,KEY1
   CLR KK1
KEY1:    JNB p1.3,KEY2 ;当p1.3高电平时就往下执行,但是只要执行一次后,kk1就为1,往后就不再执行       
   JB KK1,KEY2 
   INC YUESHI
   SETB KK1    ;这以段的任务是不用延时也能消除按键抖动的程序
KEY2:    JB   P1.4,KEY3
   CLR KK2
KEY3: JNB P1.4,RES         
      JB   KK2, RES  
   SETB KK2
         INC YUEFEN
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,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.0
   SETB P2.1
   CLR P2.2
   SETB P2.3
   LCALL DELAY
   MOV A,R0
   SWAP A 
   ANL A,#0FH
   MOVC A,@A+DPTR
   MOV P0,A ;显示时的十位
   SETB P2.0
   SETB P2.1
   
   SETB P2.2
   CLR   P2.3
   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
   CLR P2.0
   SETB P2.1
   SETB P2.2
   SETB P2.3
   LCALL DELAY
   MOV A,R0
   SWAP A 
   ANL A,#0FH
   MOVC A,@A+DPTR
   MOV P0,A ;显示分的十位
   SETB P2.0
   CLR P2.1
   SETB P2.2
   SETB P2.3
   LCALL DELAY
   JNB P2.2, NEXT2;按下就进入定时煮饭的阶段
   LJMP mainline

DELAY:   MOV R5,#08H ;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 TIMEING2

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

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 P1.5

           ;定时中止
         SJMP HERE;
RET001: LJMP LOOP1

;-----------显示倒计时1:-------------- 
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.0
   SETB P2.1
   CLR P2.2
   SETB P2.3
   LCALL DELAY
   MOV A,R0
   SWAP A 
   ANL A,#0FH
   MOVC A,@A+DPTR
   CLR   P2.3
   MOV P0,A ;显示时的十位
   SETB P2.0
   SETB P2.1
   
   SETB P2.2
   CLR   P2.3
   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
   CLR P2.0
   SETB P2.1
   SETB P2.2
   SETB P2.3
   LCALL DELAY
   MOV A,R0
   SWAP A 
   ANL A,#0FH
   MOVC A,@A+DPTR   
   MOV P0,A ;显示分的十位
   SETB P2.0
   CLR P2.1
   SETB P2.2
   SETB P2.3
   LCALL DELAY 
   RET

;-----------显示倒计时2:-------------- 
TIMEING2:
         MOV A,TT3
         MOV DPTR,#TEMP_TAB
   MOVC A,@A+DPTR
   MOV R0,A
   ANL A,#0FH;送分的个位
   MOV DPTR,#VIEW0
   MOVC A,@A+DPTR
   SETB P2.0
   SETB P2.1
   CLR P2.2
   SETB P2.3
   MOV P0,A   
   LCALL DELAY
   MOV A,R0
   SWAP A 
   ANL A,#0FH
   MOVC A,@A+DPTR
   SETB P2.0
   SETB P2.1
   
   SETB P2.2
   CLR   P2.3
   MOV P0,A ;显示分的十位
   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
   CLR P2.0
   SETB P2.1
   SETB P2.2
   SETB P2.3
   MOV P0,A
   LCALL DELAY
   MOV A,R0
   SWAP A 
   ANL A,#0FH
   MOVC A,@A+DPTR
   SETB P2.0
   CLR P2.1
   SETB P2.2
   SETB P2.3
   MOV P0,A ;显示秒的十位
   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 + -