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

📄 2051做的4位电子钟.txt

📁 2051做的4位电子钟
💻 TXT
字号:
S_1    EQU     30H  ;秒寄存器
M_1    EQU     31H  ;分寄存器
H_1    EQU     32H  ;時寄存器
ORG    00H
LJMP   START
ORG    0000BH  ;定时器T0中斷入口
LJMP   TIMER            
ORG    30H
START:
MOV  S_1, #0 ;秒寄存器清0
MOV  M_1,   #0;分清0
MOV  H_1,   #0;时清0
MOV  20H,   #10  ;0.5秒鐘中斷次數,0.5s=500ms=50msx10
MOV  21H,   #2     ;2個0.5秒即為1秒
MOV  SP,    #40H   ;堆栈设置
MOV  IE,    #82H  ;开定時器0中斷及總中斷
MOV  TMOD,  #01H    ;定时器T0模式1
MOV  TH0,   #03CH  ;50ms初值
MOV  TL0,   #0B0H
SETB TR0   ;启动定时器器
LOOP:
ACALL   DISP    ;調用顯示
JNB    P3.2,  MT  ;查询分调整鍵
JNB    P3.3,  HT  ;查詢時調整鍵
AJMP   LOOP
MT:  ;分調整
ACALL   DISP
JNB  P3.2, MT   ;鍵消抖
INC  M_1        ;分加1
MOV  A,    M_1                 
CJNE A,    #60, LOOP;沒到60分返回,到60分清0 
MOV  M_1,  #0
AJMP      LOOP
HT:     ;时調整
ACALL   DISP
JNB  P3.3, HT
INC  H_1
MOV  A, H_1
CJNE  A, #24, LOOP
MOV   H_1 , #0
AJMP      LOOP
DISP:  ;顯示子程序
MOV   DPTR, #NUMTAB    ;表地址送數據指針
MOV   A,   M_1   ;分送A
MOV   B,   #10                  
DIV   AB    ;十進制調整
ADD   A, R0  ;查表偏移量調整
MOVC  A,  @A+DPTR  ;  查表        
MOV   P0,  A  ;分十位送p1口顯示
CLR   P2.1     ;開分十位顯示
ACALL   D1MS      ;延时1ms
SETB   P2.1    ;关顯示
MOV    A,   B    ;分个位p1口顯示              
ADD    A, R0                    
MOVC   A,   @A+DPTR
MOV    P0,   A
CLR    P2.0
ACALL   D1MS
SETB    P2.0
MOV     A,  H_1     ;時送A
MOV     B,    #10
DIV     AB
ADD     A,    R0
MOVC    A,  @A+DPTR
MOV     P0,  A                     
CLR     P2.5  ;顯示時十位
ACALL   D1MS
SETB    P2.5
MOV     A,    B
ADD     A,   R0
MOVC    A, @A+DPTR
MOV    P0, A
CLR    P2.4   ;顯示時個位
ACALL   D1MS
SETB    P2.4
RET           ;返回
TIMER:  ;定时中斷程序
    PUSH    ACC   ;數據保護
    PUSH    PSW
MOV    TL0,   #0B9H   ;重置50ms定時值
MOV    TH0,  #03CH
DJNZ   20H,  RETI_1  ;到0.5秒了嗎?
MOV    20H,          #10
CPL    25H.0      ;取反秒點閃爍標志位
JNB    25H.0,T_1  ;標志位為0轉T_1
MOV  R0,  #0   ;查表偏移量寄存器置0(不顯示秒點)
AJMP T_2
T_1:
MOV R0,#10;查表偏移量寄存器置10(顯示秒點,秒點每秒閃爍1次)
T_2: 
DJNZ   21H ,RETI_1   ;到1秒了嗎?
MOV    21H,#2
INC    S_1    ;秒加1
MOV    A,  S_1
CJNE    A, #60, RETI_1;到60秒了嗎?
MOV    S_1, #0      ;到60秒清0
INC     M_1    ;分加1
MOV     A, M_1
CJNE  A,  #60,         RETI_1 ;到60分了嗎?
MOV   M_1,  #0
INC   H_1      ;時加1
MOV   A,  H_1
CJNE  A,#24,RETI_1  ;24小时到了吗  
MOV H_1,   #0    
RETI_1:
   POP   PSW
   POP   ACC
RETI
D1MS: ;1毫秒延時
MOV   R7, #2
D_1:
MOV   R6, #250
DJNZ  R6, $
DJNZ  R7,D_1
RET
NUMTAB:
DB   0C0H,0F3H,89H,0A1H,0B2H,0A4H,84H,0F1H,80H,0A0H
      ;不显示秒点
DB   40H,73H,09H,21H,32H,24H,04H,71H,00H,20H
       ;显示秒点  
  END
      




                                                                                  



⌨️ 快捷键说明

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