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

📄 用1602显示日期和时间.txt

📁 用LCD1602来显示日期和时间
💻 TXT
字号:

源程序~~~~

ORG 0000H;
LJMP START;
ORG 000BH;时间定时        
AJMP TIME;
ORG 001BH;调时闪烁定时
LJMP SETTIME;
ORG 0030H;
START:
      RS EQU P3.7 
      RW EQU P3.6 
      E EQU P3.5 
        MOV P1,#01H;;清除屏幕
        ACALL ENABLE 
        MOV P1,#38H;8位点阵方式
        ACALL ENABLE 
        MOV P1,#0CH;开显示
        ACALL ENABLE 
        MOV P1,#06H;移动光标 
        ACALL ENABLE 

MOV 2AH,#7FH;赋初值
MOV 2CH,#00H;
MOV 20H,#00H;
MOV 21H,#00;
MOV 22H,#00;
MOV 23H,#00;
MOV 24H,#20;
MOV 25H,#01;
MOV 26H,#06;
MOV 43H,#08;
MOV 46H,#00;
MOV R5,#06H;

SETB EA;
SETB ET0;
MOV TMOD,#11H;
MOV TL0,#0B0H;
MOV TH0,#3CH;

MOV TL1,#0B0H;
MOV TH1,#3CH;


SETB TR0;
MOV SP,#50H;

MOV R2,#02H;
MOV R1,#0C6H;
MOV DPTR,#TABLE;
YCL:MOV P1,R1;显示时间\日期的间隔符号
    LCALL ENABLE;
    MOV A,#3AH;
    LCALL WRITE2;
    MOV R1,#0C9H;
    DJNZ R2,YCL;

MOV R2,#02H;
MOV R1,#87H;
YCL2:MOV P1,R1;
    LCALL ENABLE;
         MOV A,#2dH;
         LCALL WRITE2;
         MOV R1,#8AH;
         DJNZ R2,YCL2;
MOV R2,#02H;
MOV R1,#83H;
MOV A,#'2';显示年的前两位
YCL3:MOV P1,R1;
     LCALL ENABLE;
     LCALL WRITE2;
     MOV A,#'0';
     MOV R1,#84H;
     DJNZ R2,YCL3;




LOOP:LCALL DISP;
     LCALL KEY;
     
          JZ LOOP;
     LCALL ANKEY;
          
     AJMP LOOP;

TIME: 
     PUSH ACC;
     PUSH PSW;
     MOV TL0,#0B0H;定时器初始值50ms(50000us)(可以自己更改)
     MOV TH0,#3CH;
     INC 20H;
     MOV A,20H;
     CJNE A,#20,RETI1;
    MOV 20H,#00H;

   MOV A,21H;秒计数
   INC A;
   MOV 21H,A;
        SETB 2AH.2;
   CJNE A,#60,RETI1;
   MOV 21H,#00H;
   

   MOV A,22H;分计数
   INC A;
   MOV 22H,A;
        SETB 2AH.1;
   CJNE A,#60,RETI1;
   MOV 22H,#00H;
   

   MOV A,23H;时计数
   INC A;
   MOV 23H,A;
        SETB 2AH.0;
   CJNE A,#24,RETI1;
   MOV 23H,#00H;


   MOV A,24H;日计数
   INC A;
        MOV 24H,A;
        SETB 2AH.3;
        CJNE A,40H,RETI1;
        MOV 24H,#01;

        MOV A,25H;月计数
        INC A;
        MOV 25H,A;
        SETB 2AH.4;
        CJNE A,#13,RETI1;
        MOV 25H,#01;

        MOV A,26H;年计数
        INC A;
        MOV 26H,A;
        SETB 2AH.5;
        CJNE A,#99,RETI1;
        MOV 26H,#00;

   

RETI1:
   MOV 2CH,#00H;
   POP PSW;
   POP ACC;
   RETI;
NOP
NOP
NOP
;闪动调时程序
SETTIME:
        PUSH ACC;
        PUSH PSW;
                 
                  MOV TL1,#0B0H;定时器1赋初值
                  MOV TH1,#3CH;
                  DJNZ R5,OUTSET;0.3秒未到,退出
        MOV R5,#06H;
                  MOV A,2CH; ------------------放入相应的闪动熄灭符
                  JB 2BH.0,SETN;
                  JB 2BH.1,SETY;
                  JB 2BH.2,SETR;
                  JB 2BH.3,SETS;
                  JB 2BH.4,SETF;
                  JB 2BH.5,SETM;
        AJMP SETOUT; 

OUTSET:LJMP SETOUT;

SETN:
     ANL A,#01H;
     MOV 2CH,A;
     CPL 2CH.0;     
     SETB 2AH.5;
     MOV 36H,#20H;
     MOV 37H,#20H;
     AJMP SETOUT;

SETY:
     ANL A,#02H;
     MOV 2CH,A;
     CPL 2CH.1;
     SETB 2AH.5
          SETB 2AH.4;
     MOV 38H,#20H;
     MOV 39H,#20H;
     AJMP SETOUT;

SETR:
     ANL A,#04H;
     MOV 2CH,A;
     CPL 2CH.2;
     SETB 2AH.4;
          SETB 2AH.3;
     MOV 4AH,#20H;
     MOV 4BH,#20H;
     AJMP SETOUT;

SETS:
     ANL A,#08H;
     MOV 2CH,A;
     CPL 2CH.3;
     SETB 2AH.3;
          SETB 2AH.0; 
     MOV 30H,#20H;
     MOV 31H,#20H;
     AJMP SETOUT;

SETF:
     ANL A,#16;
     MOV 2CH,A;
     CPL 2CH.4;
     SETB 2AH.0;
          SETB 2AH.1;
     MOV 32H,#20H;
     MOV 33H,#20H;
     AJMP SETOUT;

SETM:
     ANL A,#32;
     MOV 2CH,A;
     CPL 2CH.5;
     SETB 2AH.1;
     SETB 2AH.2;
     MOV 34H,#20H;
     MOV 35H,#20H;
     

SETOUT:LCALL DISP;
       
       POP PSW;
       POP ACC;
                 
                 RETI;

NOP
NOP
NOP
;按键检测与处理
KEY:MOV 46H,#00H;
    MOV A,P3;           
    CPL A;
    ANL A,#1CH;
         JZ KEYOUT1;
         LCALL D20MS;
         MOV A,P3;
         CPL A;
         ANL A,#1CH;

         MOV 46H,A;

KEEY22:
     MOV A,P3;
     CPL A;
          ANL A,#1CH;
     JNZ KEEY22;


KEYOUT1:MOV A,46H;
        RET;





KEY2:MOV 46H,#00H;按键检测
     MOV A,P3;
     CPL A;
     ANL A,#1CH;
     JZ KEY2;
     LCALL D20MS;消抖
          
     MOV A,P3;
     CPL A;
     ANL A,#1CH;
          JZ KEY2;
     MOV 46H,A;
KEEY2:         ;-------等待按键释放
     MOV A,P3;
     CPL A;
          ANL A,#1CH;
     JNZ KEEY2;

ANKEY:;    -------------------按键处理
      MOV A,46H;
      JB ACC.4,L2;-----------是加1键跳转到L2
      JB ACC.2,L3;-----------减1键跳转到L3
      JB ACC.3,GL_L;
      AJMP KEY2;

GL_L:LJMP GL;----------------功能键处理

L2:JB 2BH.0,NJ1;-------------加1键处理
   JB 2BH.1,YJ1;
        JB 2BH.2,RJ1;
        JB 2BH.3,SJ1;
        JB 2BH.4,FJ1;
        JB 2BH.5,MJ1;
        AJMP KEY2;

L3:JB 2BH.0,NJJ1;------------减1键处理
   JB 2BH.1,YJJ1;
        JB 2BH.2,RJJ10;
        JB 2BH.3,SJJ10;
        JB 2BH.4,FJJ10;
        JB 2BH.5,MJJ10;
        AJMP KEY2;

RJJ10:LJMP RJJ1;
SJJ10:LJMP SJJ1;
FJJ10:LJMP FJJ1;
MJJ10:LJMP MJJ1;

NJ1:MOV A,26H;---------------年加1
    INC A;
         CJNE A,#100,NOUT;
         MOV A,#00H;
NOUT:
    MOV 26H,A;
         SETB 2AH.5;
         AJMP KEY2;
          

YJ1:MOV A,25H;-------------- 月加1
    INC A;
         CJNE A,#13,YOUT;
         MOV A,#01H;
YOUT:
     MOV 25H,A;
     SETB 2AH.4;
          AJMP KEY2;


RJ1:MOV A,24H;----------------日加1
    INC A;
         CJNE A,40H,ROUT;
         MOV A,#01H;
ROUT:
     MOV 24H,A;
     SETB 2AH.3;
          AJMP KEY2;

SJ1:MOV A,23H;---------------时加1
    INC A;
         CJNE A,#24,SOUT;
         MOV A,#00H;
SOUT:         
         MOV 23H,A;
    SETB 2AH.0;
         AJMP KEY2;


FJ1:MOV A,22H;---------------分加1
    INC A;
         CJNE A,#60,FOUT;
         MOV A,#00H;
FOUT:
         MOV 22H,A;
         SETB 2AH.1;
         AJMP KEY2;


MJ1:MOV A,21H;--------------秒加1
    INC A;
         CJNE A,#60,MOUT;
         MOV A,#00H;
MOUT:
         MOV 21H,A;
         SETB 2AH.2;
         AJMP KEY2;
         NOP
         NOP
;-----------------------------------------------------减1键处理----------------

NJJ1:MOV A,26H;
     DEC A;
          CJNE A,#0FFH,NJJ;
          MOV A,#99;
NJJ:
          MOV 26H,A;
          SETB 2AH.5;
          AJMP KEY2;


YJJ1:MOV A,25H;
     DEC A;
          CJNE A,#00H,YJJ;
          MOV A,#12;
YJJ:
          MOV 25H,A;
          SETB 2AH.4;
          AJMP KEY2;


RJJ1:MOV A,24H;
     DEC A;
          CJNE A,#00H,RJJ;
          MOV A,40H;
RJJ:
          MOV 24H,A;
          SETB 2AH.3;
          AJMP KEY2;


SJJ1:MOV A,23H;
     DEC A;
          CJNE A,#0FFH,SJJ;
          MOV A,#23;
SJJ:
          MOV 23H,A;
          SETB 2AH.0;
          AJMP KEY2;


FJJ1:MOV A,22H;
     DEC A;
          CJNE A,#0FFH,FJJ;
          MOV A,#59;
FJJ:
          MOV 22H,A;
          SETB 2AH.1;
          AJMP KEY2;


MJJ1:MOV A,21H;
     DEC A;
          CJNE A,#0FFH,MJJ;
          MOV A,#59;
MJJ:
          MOV 21H,A;
          SETB 2AH.2;
          AJMP KEY2;

;-----------------功能键处理----------------------

GL:CLR ET0;
   CLR TR0;
        
        SETB ET1;
        SETB TR1;

    
   JB 2BH.0,YTZ;
   JB 2BH.1,RTZ;
        JB 2BH.2,STZ;
        JB 2BH.3,FTZ;
        JB 2BH.4,MTZ;
        JB 2BH.5,KEYOUT;

NTZ:MOV 2BH,#01H;
    AJMP KEY2;


YTZ:MOV 2BH,#02H;
    AJMP KEY2;

RTZ:MOV 2BH,#04H;
    AJMP KEY2;

STZ:MOV 2BH,#08H;
    AJMP KEY2;

FTZ:MOV 2BH,#16;
    AJMP KEY2;

MTZ:MOV 2BH,#32;
    AJMP KEY2;         
         
         
KEYOUT:;------------------按键退出
       CLR ET1;
       CLR TR1;
       MOV 2AH,#7FH;
                 MOV 2BH,#00H;
                 MOV 2CH,#00H;
                 SETB ET0;
                 SETB TR0;

       
       RET;


NOP
NOP
DISP:MOV DPTR,#TABLE;
   
   JNB 2AH.5,Y_CL;年更新缓存?
        MOV A,26H;
        MOV B,#04;计算是否闰年
        DIV AB;
        MOV A,B;
        JZ NCL;
        MOV 41H,#29;不是闰年2月有28天
        AJMP NYX;
    NCL:MOV 41H,#30;闰年2月有29天
    NYX:MOV A,26H;
        MOV B,#10;
        DIV AB;
JB 2CH.0,NSD;     年显示是否熄灭
        MOV 36H,A;
        MOV 37H,B;
NSD:
        CLR 2AH.5;
        MOV R4,#02;
        
        MOV R0,#86H;
        MOV A,37H;
NCL1:MOV P1,R0;
     ACALL ENABLE;
          MOVC A,@A+DPTR;
          LCALL WRITE2;
          MOV A,36H;
          DEC R0;
          DJNZ R4,NCL1;

Y_CL:JNB 2AH.4,RCL;月更新缓存?
        
        MOV A,25H;
        CJNE A,#02,Y_CL_1;不是二月,跳转Y_CL2
        MOV 40H,41H;把2月份天数送到40H,
        AJMP SYY;   
                         


Y_CL_1:  MOV A,25H;8月以上双月31天,8月以下单月31天
                  CLR C;
                  SUBB A,43H;
                  JC DXCL;
        SETB 2AH.7;
        AJMP Y_CL2;

DXCL:   CLR 2AH.7;8月以上2AH.7=0..

Y_CL2:
              JB 2AH.7,SY2; 计算是大月还是小月(31天还是30天)
                   MOV A,25H;
         MOV B,#02;
         DIV AB;
                        MOV A,B;
                   JZ XY30;双月跳转
                        AJMP DY31;
SY2:
                   MOV A,25H;
         MOV B,#02;
         DIV AB;
                  MOV A,B;
                   JZ DY31;双月跳转
                   AJMP XY30;

        DY31:MOV 40H,#32;有31天
         AJMP SYY;
        
        XY30:MOV 40H,#31;30天
          
    
SYY:JB 2CH.1,YSD;
     MOV A,25H;
          MOV B,#10;
          DIV AB;
          
          MOV 38H,A;
          MOV 39H,B;
YSD: CLR 2AH.4;
          MOV R4,#02;
     MOV R0,#89H;
          MOV A,39H;
Y_CL1:MOV P1,R0;
     ACALL ENABLE;
     MOVC A,@A+DPTR;
          LCALL WRITE2;
          MOV A,38H;
          DEC R0;
          DJNZ R4,Y_CL1;

RCL:JNB 2AH.3,SCL;日更新缓存?
    JB 2CH.2,RSD;
    MOV A,24H;
         MOV B,#10;
         DIV AB;
    MOV 4AH,A;
         MOV 4BH,B;
RSD:CLR 2AH.3;
         MOV R4,#02;
         MOV R0,#8CH;
         MOV A,4BH;
RCL1:MOV P1,R0;
    ACALL ENABLE;
         MOVC A,@A+DPTR;
         LCALL WRITE2;
         MOV A,4AH;
         DEC R0;
         DJNZ R4,RCL1;


SCL:JNB 2AH.0,FCL;时更新缓存?
   JB 2CH.3,SSD;
   MOV A,23H;
   MOV B,#10;
   DIV AB;
   MOV 31H,B;
   MOV 30H,A;
SSD:CLR 2AH.0;
        MOV R4,#02H;

MOV R0,#0C5H;显示位置
MOV A,31H;         
        
SCL1:MOV P1,R0;
     ACALL ENABLE
    MOVC A,@A+DPTR;
        LCALL WRITE2;
        MOV A,30H;
        DEC R0;
        DJNZ R4,SCL1;



FCL:JNB 2AH.1,MCL;分更新缓存?
    JB 2CH.4,FSD;
    MOV A,22H;
    MOV B,#10;
    DIV AB;
    MOV 33H,B;
    MOV 32H,A;  
FSD:CLR 2AH.1;
    MOV A,33H;
    MOV R0,#0C8H;显示位置
    MOV R4,#02H;        
FCL1:MOV P1,R0;
     ACALL ENABLE

    MOVC A,@A+DPTR;
        LCALL WRITE2;
        MOV A,32H;
        DEC R0;
        DJNZ R4,FCL1;
   
MCL:
    JNB 2AH.2,NEXTX;秒更新缓存?
    JB 2CH.5,MSD;
         MOV A,21H;
    MOV B,#10;
    DIV AB;
    MOV 35H,B;
    MOV 34H,A;
MSD:CLR 2AH.2;

    MOV R0,#0CBH;显示位置
    MOV R4,#02H;         
    MOV A,35H;
MCL1:MOV P1,R0;
     ACALL ENABLE
          
    MOVC A,@A+DPTR;
        LCALL WRITE2;
        MOV A,34H;
        DEC R0;
        DJNZ R4,MCL1;

NEXTX:        RET

NOP
NOP
WRITE2:
        mov p1,a
        setb rs
        clr rw
        clr e
        call delay
        setb e
        ret 

;写指令子程序
ENABLE:
        CLR RS
        CLR RW 
        CLR E 
        ACALL DELAY 
        SETB E 
        RET

delay:  
        mov r7,#25
d1:        mov r6,#255
d2:        djnz r6,$
        djnz r7,d1
        ret

D20MS:  MOV R7,#25;
D11:    MOV R6,#30;
        DJNZ R6,$;
        DJNZ R7,D11;
        RET;


TABLE: DB  '0123456789'
        END

⌨️ 快捷键说明

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