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

📄 keylcd.asm

📁 用于4x8液晶显示和键盘控制
💻 ASM
📖 第 1 页 / 共 2 页
字号:
             AJMP     WSJ1

;将秒、分、时、日、月、年(2字节)读出并存放在30H开始的N个单元中? RSJ:        MOV      R1,#0AH     ;寄存器A地址
             MOVX     A,@R1
             JB       ACC.7,RSJ      ;UIP=1 等待更新完毕
             MOV      R1,#00H        ;秒地址单元
             MOVX     A,@R1          ;读秒数据
             MOV      30H,A          ;送入89C52RAM
             MOV      R1,#02H        ;分单元地址
             MOVX     A,@R1          ;读分数据
             MOV      31H,A          ;送入89C52RAM
             MOV      R1,#04H        ;时单元地址
             MOVX     A,@R1          ;读时数据
             MOV      32H,A          ;送入89C52RAM
             MOV      R1,#07H       ;日单元地址
             MOVX     A,@R1         ;读日数据
             MOV      33H,A         ;送入89C52RAM
             MOV      R1,#08H       ;月单元地址
             MOVX     A,@R1         ;读月数据
             MOV      34H,A         ;送入89C52RAM
             MOV      R1,#09H       ;年单元地址
             MOVX     A,@R1         ;读年后两位数据
             MOV      35H,A         ;送入89C52RAM
             MOV      R1,#32H       ;年单元地址
             MOVX     A,@R1         ;读年前两位数据
             MOV      36H,A         ;送入89C52RAM
             RET

 ;将秒、分、时、日、月、年(2字节)读出并存放在33H开始的N个单元中? RNZ:        MOV      R1,#0AH     ;寄存器A地址
             MOVX     A,@R1
             JB       ACC.7,RNZ      ;UIP=1 等待更新完毕
             MOV      R1,#01H        ;秒闹地址单元
             MOVX     A,@R1          ;读秒闹数据
             MOV      33H,A          ;送入89C52RAM
             MOV      R1,#03H        ;分闹单元地址
             MOVX     A,@R1          ;读分闹数据
             MOV      34H,A          ;送入89C52RAM
             MOV      R1,#05H        ;时闹单元地址
             MOVX     A,@R1          ;读时闹数据
             MOV      35H,A          ;送入89C52RAM
             RET
;*******************************************
;发送1个字节到HD7279,高位在前
SEND:        MOV      BIT_COUNT,#8
             ACALL    LONG_DELAY
SEND_LOOP:   MOV      C,DATA_OUT.7         ;输出1位
             MOV      DAT,C
             SETB     CLK
             MOV      A,DATA_OUT
             RL       A
             MOV      DATA_OUT,A
             ACALL    SHORT_DELAY
             CLR      CLK
             ACALL    SHORT_DELAY
             DJNZ     BIT_COUNT,SEND_LOOP  ;检测是否8位均发送完毕
             CLR      DAT
             RET
;*********************************************
;从HD7279接收1个字节,高位在前
RECEIVE:     MOV      BIT_COUNT,#8      ;设定计数器=8
             SETB     DAT
             ACALL    LONG_DELAY
RECEIVE_LOOP:SETB     CLK
             ACALL    SHORT_DELAY
             MOV      A,DATA_IN         ;数据左移
             RL       A
             MOV      DATA_IN,A
             MOV      C,DAT             ;读取1位数据
             MOV      DATA_IN.0,C
             CLR      CLK
             ACALL    SHORT_DELAY
             DJNZ     BIT_COUNT,RECEIVE_LOOP  ;是否已接收8位数据
             CLR      DAT
             RET
;延时子程序
LONG_DELAY:  MOV      TIMER,#25       ;设定延时为约50us
             DJNZ     TIMER,$
             RET

SHORT_DELAY: MOV      TIMER,#4        ;设定延时为约8us
             DJNZ     TIMER,$
             RET
 ;*******************************************************
 ZD0:       MOV      R7,#60         ;闹钟声音
 ZD0A:      SETB     FMQ
            ACALL    D20MS
            JNB      KEY,ZD0B
            CLR      FMQ
            ACALL    D100MS
            SETB     FMQ
            ACALL    D20MS
            JNB      KEY,ZD0B
            CLR      FMQ
            ACALL    D100MS
            JNB      KEY,ZD0B
            ACALL    D100MS
            JNB      KEY,ZD0B
            ACALL    D100MS
            JNB      KEY,ZD0B
            ACALL    D100MS
            ACALL    XS
            JNB      KEY,ZD0B
            DJNZ     R7,ZD0A
 ZD0B:      CLR      FMQ
            RETI

 ZDT0:      DJNZ     TIMER3,ZDT01
            ACALL    XS
            MOV      TIMER3,#20
 ZDT01:     MOV      TH0,#3CH
            MOV      TL0,#0B0H              ;50MS(12M)
            RETI

 XS:         PUSH     ACC
             ACALL    RSJ
             MOV      B,#10                  ;10进制--BCD码转换
             mov      a,32H
             div      AB
             mov      ten,a
             mov      data_out,#10000101b    ;下载数据且译码(第6位)
             ACALL    SEND
             mov      data_out,ten           ;发送十位数字到HD7279
             ACALL    SEND
             MOV      DATA_OUT,#10000100B    ;下载数据且译码(第5位)
             ACALL    send
             mov      data_out,b             ;发送个位数字到HD7279
             ACALL    SEND
             MOV      B,#10                  ;10进制--BCD码转换
             mov      a,31H
             div      AB
             mov      ten,a
             mov      data_out,#10000011b    ;下载数据且译码(第4位)
             ACALL    SEND
             mov      data_out,ten           ;发送十位数字到HD7279
             ACALL    SEND
             MOV      DATA_OUT,#10000010B    ;下载数据且译码(第3位)
             ACALL    send
             mov      data_out,b             ;发送个位数字到HD7279
             ACALL    SEND
             MOV      B,#10                  ;10进制--BCD码转换
             mov      a,30H
             div      AB
             mov      ten,a
             mov      data_out,#10000001b    ;下载数据且译码(第2位)
             ACALL    SEND
             mov      data_out,ten           ;发送十位数字到HD7279
             ACALL    SEND
             MOV      DATA_OUT,#10000000B    ;下载数据且译码(第1位)
             ACALL    send
             mov      data_out,b             ;发送个位数字到HD7279
             ACALL    SEND
             MOV      R1,#0CH             ;寄存器C地址
             MOVX     A,@R1
             POP      ACC
             RET

  NZXS:      PUSH     ACC
             ACALL    RNZ
             MOV      B,#10                  ;10进制--BCD码转换
             mov      a,35H
             div      AB
             mov      ten,a
             mov      data_out,#10000101b    ;下载数据且译码(第6位)
             ACALL    SEND
             mov      data_out,ten           ;发送十位数字到HD7279
             ACALL    SEND
             MOV      DATA_OUT,#10000100B    ;下载数据且译码(第5位)
             ACALL    send
             mov      data_out,b             ;发送个位数字到HD7279
             ACALL    SEND
             MOV      B,#10                  ;10进制--BCD码转换
             mov      a,34H
             div      AB
             mov      ten,a
             mov      data_out,#10000011b    ;下载数据且译码(第4位)
             ACALL    SEND
             mov      data_out,ten           ;发送十位数字到HD7279
             ACALL    SEND
             MOV      DATA_OUT,#10000010B    ;下载数据且译码(第3位)
             ACALL    send
             mov      data_out,b             ;发送个位数字到HD7279
             ACALL    SEND
             MOV      B,#10                  ;10进制--BCD码转换
             mov      a,33H
             div      AB
             mov      ten,a
             mov      data_out,#10000001b    ;下载数据且译码(第2位)
             ACALL    SEND
             mov      data_out,ten           ;发送十位数字到HD7279
             ACALL    SEND
             MOV      DATA_OUT,#10000000B    ;下载数据且译码(第1位)
             ACALL    send
             mov      data_out,b             ;发送个位数字到HD7279
             ACALL    SEND
             MOV      R1,#0CH             ;寄存器C地址
             MOVX     A,@R1
             POP      ACC
             RET
 ;************************************************************
d100ms: MOV    TIMER,#200
D100MS1:MOV    TIMER1,#250
        DJNZ   TIMER1,$
        DJNZ   TIMER,D100MS1
        RET

d20ms:  MOV    TIMER,#40
D20MS1: MOV    TIMER1,#250
        DJNZ   TIMER1,$
        DJNZ   TIMER,D20MS1
        RET

             end

⌨️ 快捷键说明

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