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

📄 yuying.txt

📁 在语音播控记事器的设计中
💻 TXT
📖 第 1 页 / 共 2 页
字号:
SCL     EQU   P2.0
DATA    EQU   P2.1
RST     EQU   P2.2

QRG     0000H
L JMP    MAIN             ;转主程序
ORG     0003H             ;外部中断0中断服务程序入口地址
LJMP    INTA              ;转外部中断0中断服务程序
ORG    000BH             ;TO定时中断服务程序入口地址
LJMP   T0-SEV      
ORG    0031H              ;外部中断1中断服务程序入口地址
LJMP    INTB             ; 转外部中断1中断服务程序
ORG    001BH             ;T1定时中断服务程序入口地址
LJMP    T1_SEV           ;转T1中断服务程序
ORG    0030H             ;设置主程序起始地址=0030H
MAIN:  MOV    SP,#60H            ;设置堆栈指针
        MOV    R7,#10H            ;系统初始化
        MOV    R0,#30H
        MOV    A,#0
        MOV    @R0,A
        INC     R0
        DJNZ    R7,LOP
        MOV    35H,#01H           ;设置上电后的初始和日期.
        MOV    36H,#00H           ;”2000年1月1日星期六”
        MOV    37H,#00H
        MOV    38H,#00H
        MOV    3CH,33H
        MOV    3DH,34H
        MOV    3EH,#01H
        MOV    44H,#10H           ;LED位选择码
        MOV    45H,#20H
        MOV    46H,#40H
        MOV    47H,#80H
        CLR     RS1
        CLR     RS0
        MOV    R5,#00H
        MOV    R6,#00H
        MOV    R7,#06H
        LCALL  SET1302            ;DS1302时钟芯片初始化
        SETB    RS1
        CLR     RS0
        MOV    R0M,#4AH
        MOV    TMOD,#10H          ;设置T0T1工作方式;定时器,工作方式
        MOV    TH1,#3CH
        MOV    TL1,#0B0H
        MOV    TH0,#40H
        MOV    TL0,#098H          ;T0计数初始值4098H
        MOV    IP,#00001H          ;设置中断有限级
        MOV    TCON,#01000000     ;启动定时器T1,
        MOV    IE,#10001101        ;开中断T0和串行中断禁止
LOP:    LCALL  CHANGE           ;当前时间送显示缓冲区
        LCALL  DISPLAY            ;显示当前时间
        SETB     RS1               ;设置第2组寄存器
        SETB     RS0
        MOV     3AH,@R0           ;判断设置定时时间否?
        INC      R0
        MOV     3BH,@R0
        MOV     A,3AH
        CJNE     A,#0,NT
        MOV     A,3BH
        CJNE     A,#0,NT
NTM    INC      R0
        INC      R0
        CJNE     R0,#59H,LOP
        MOV     R0,#4AH
        SJMP     BBX
NT:     MOV    A,3BH
        CJNE    A,34H,NTM
        DEC     R0
        DEC     R0
        MOV    39H,@R0
        INC     R0  
        INC     R0  
        CJNE    R0,#59H,NT1
        MOV    R0,#4AH
NT1:    MOV    A,39H                ;若定时时间到
        CJNE    A,#05H,BBXX
        LCALL  YUYIN                ;发出语音提示
        CLR     P2.7                  ;启动蜂鸣器发出”嘟嘟嘟:报警信号
        SJMP    LPG
BBX:    SETB   P2.7
        SJMP    LP-0
BBXX:  LCALL  YUYIN        
        SJMP    LP-0
LP-0:    JB      P3.0,LP-6              ;扫描键盘,判断切换显示日期按键按下否?
        LCALL  DISLLAY
        JB      P3.0,LP-0
LP-1:   JNB     P3.0,LP-1
        SETB   P2.7
        MOV   5EH,#06H
LP-1A:  MOV   3CH,35H
        MOV   3DH,36H
        LCALL  CHANGE
        LCALL  DISPLAY               ;切换显示日、月
LP-1B:  JB      P3.0,LP-1C
        LCALL  DISPLAY
        JB      P3.0,LP-1D
LP-1D:  JNB    P3.0,LP-1D
        SJMP   LP-2
LP1C:   MOV   A,5EH
        CJNE   A,#00H,LP-1A
        LJMP   FUZHI
LP-2    MOV   5EH,#06H
LP-3A:  MOV   3CH,38H
        MOV   3DH,#20H
        LCALL  CHANGE
        LCALL  DISPLAY               ;切换显示年份
LP-3B   JNB     P3.0,LP-3C
        LCALL  DISPLAY
        JB      P3.0,LP-3B
LP-3D:  JNB     P3.0,LP-3D
DJMP    LP-4
LP-3C:  MOV   A,5EH
        CJNE   A,#00H,LP-3A
        LJMP   FUZHI
LP-4:   MOV   5EH,#06H
LP-5A:  MOV   3CH,37H
        MOV   3DH,#0BBH
        LCALL  CHANGE
        LCALL  DISPLAY                 ;切换显示星期
LP-5B:  JB      P3.0,LP-5C
        LCALL  DISPLAY
        JB      P3.0,LP-5B
LP-5D:  JNB    P3.0,LP-5D
        LJMP   FUZHI
LP-5C:  MOV   A,5EH
        CHNE  A,#00H,LP-5A
        LJMP   FUZHI
LP-6:   JB      P3.1,LP-6A
        SJMP   LP-6A
LP-6A:  LJMP   LOP                      ;切换显示当前时间
LP-6B:  LCALL  DISPLAY
        JB      P3.1,LP-6
LP-7:   LCALL  DISPLAY
        JNB    P3.1,LP-7
        SETB   P2.7
        MOV   3CH,32H
        MOV   3DH,#OFFH
        LCALL  CHANGE
        LCALL  DISPLAY
        JB      P3.1,LP-7
        LCALL  DIDPLAY
        JB      P3.1,LP-7
LP-8:   LCALL  DISPLAY
        JNB    P3.1,LP-8
FUZHI:  MOV   3CH,33H
        MOV   3DH,34H
        LJMP   LOP
CHANGE: MOV  A,3DH               ; 将当前时间小时、分送显示缓冲区
        PUSH   A
        ANL    A,#0FH
        MOV    42H,A
        POP    A
        SWAP   A
        ANL    A,#0FH
        MOV    43H,A
        MOV    A,3CH
        PUSH   A
        ANL    A,#0FH
        MOV    40H,A
        POP     A
        SWAP    A
        ANL    A,#0FH
        MOV    41H,A
        RET
YUYIN:  MOV    A,3FH
        CJNE    A,#0,CC1
        CLR     P3.4
        MOV    3FH,#01H
CC1:    RET
;4位LED动态扫描显示子程序
DISPLAY:SETB   RS1
        SETB    RS0
        MOV    R2,#O4H
        MOV    R0,#40H
        MOV    R1,#44H
GO-ON:  MOV   A,@R1
         ADD    A,@R0
         MOV    P1,A
         LCALL  DELAY1
         INC     R0
         INC     R1
         DJNZ   R2,GO-ON
         RET
DELAY1: MOV    R3,#14H                 ;延时1ms子程序
AGAIN:  MOV    R4,#19H
DELAY:  DJNZ    R4,DELAY
         DJNZ    R3,AGAIN
         RET
         ORG    0030H
;DS1302设置子程序,调整当前时间子程序
SET1302:CLR    RST
          CLR    SCL
          SETB   RST
          MOV    B,#8EH              ;控制寄存器地址8EH
          LCALL  RD-BYTE
          MOV    B,#00H              ;写入WP=0,允许写有效
          LCALL  RD-BYTE
          SETB   SCL
          CLR    RST
          MOV    R0,#32H             ;存储当前时间的首地址=32H
          MOV    R2,#7               ;写入字节数=8
          MOV    R1,#80H             ;写入首地址=80H
SET13021:CLR    RST
          CLR    SCL
          SETB   RST
          MOV    B,R1
          LCALL  RD-BYTE
          INC    R0
          INC    R1
          INC    R1
          SETB   SCL
          CLR    RST
          DJNZ   R2,SET13021
          CLR    RST
          CLR    SCL
          SETB   RST
          MOV   B,#8EH
          LCALL  RD-BYTE
          MOV    B,#80H
          LCALL  RD-BYTE
          SETB    SCL
          CLR     RST
          RET
;读当前时间子程序
RD1302:  MOV   R0,#32H              ;读出当前时间存入RAM的首地址32H
          MOV    R2,#7               ;读出字节数=8
          MOV    R1,#81H             ;读出命令与首地址=81H
          LJMP    RD1302
          RET
RD13021: CLR    RST
          CLR     SCL
          SETB    RST
          MOV    B,R1
          LCALL  RD-BYTE
          LCALL  WR-BYTE
          MOV   @R0,A
          INC     RO
          INC     R1
          INC     R1
          SETB    SCL
          CLR     RST
          DJNZ    R2,RD13021
          RET
RD-BYTE: MOV    R3,#8                 ;写DS1302一个字节子程序
NIBIT1:   MOV    A,B
          RRC     A
          MOV    B,A
          MOV    DATA,C
          SETB   SCL
          CLR    SCL
          DJNZ   R3,INBIT1
          RET
WR-BYTE: MOV   R4,#8                 ;读DS1302一个字节子程序
OUTBIT1: MOV   C,DATA
          RRC    A
          SETB   SCL
          CLR    SCL
          DJNZ   R4,OUTBIT1
          RET
;T1定时中断程序,定时1min中断一次,读出当前时间
T1-SEV:  MOV    TH1,#3CH
         MOV    TL1,#0B0H
         CLR     EA
         PUSH   A                      ;保护现场
         PUSH   B
         PUSH   PSW
         CLR     RS1                   ;选择0组工作寄存器组
         CLR     RS0
         INC     R5
         CJNZ    R5,#14H,EN
         MOV    RA,#0
         DEC    5EH         
         MOV    0H,33H
         LCALL  RD1302
         MOV    A,33H
         CJNE    A,30H,CLR3FH
         SUMP   EN1
CLR3FH: MOV   3FH,#0
EN1:     MOV   3CH,33H
         MOV   3DH,34H
EN:      POP    PSW
         POP    B
         POP    A
         SETB   EA
         RETI

;当前时间、定时时间设置程序
INTB:   SETB   P3.0
        SETB   P3.1
        CLR    TR1
        CLR    ET1
        CLR    EX0
        CLR    EX1
        SETB   EA
        SETB   ET0
        SETB   PT0
        PUSH   A
        PUSH   B
        PUSH   PSW
        JB     P3.5,TIME;       
LJMP    ALARM               ;否则转向闹钟时间设置程序
TIME:   MOV    31J,#02h              ;当前时间设置子程序
        MOV    29H,#03H        
        MOV    48H,#03H              ;调整位数控制
        MOV    3CH,33H
        MOV    3DH,34H
        LCALL  CHANGE               ;调用CHANGE程序,使当前时间送显示缓冲区
LP0:    JB      P3.0,NEXT0       
        LCALL  DISPLAY        
        JB      P3.0,LP0          
LP1     LCALL  ISPLAY          
        JNB     P3.0,LP1          
        MOV    A,29H
        ADD    A,#01H                 ;被调整位+1
        DA      A                     ;十进制调整
        MOV    29H,A
        MOV    A,48H
        CJNE    A,#03H,XX1            ;(48H)=3调整小时、分的值
        MOV    3DH,34H   
        MOV    3CH,33H
        LCALL  CHANGE
        LCALL  DISPLAY
        LJMP   LO1
XX1:    CJNE   A,#02H,XX2             ;(4811)=2调整月、日的值
        MOV    3DH,36H
        MOV    3CH,35H
        LCALL  CHANGE
        LCALL  DISPLAY
        LJMP    LO3
XX2:    MOV    3DH,38H                ;(48H)=1调整年、星期的值
        MOV    3CH,37H
        LCALL  CHANGE
        LCALL  DISPLAY
        LJMP    LO5
NEXT0: JNB     P3.1,LF1                ;扫描键盘RST键,按下转向LP1
        LJMP    L1
LF1:    LCALL  DISPLAY
        JB      P3.1,NEXT0
LD1:    LCALL  DISPLAY
        JNB     P3.1,LD1
        MOV    A,48H
        CJNE   A,#03H,X1
        MOV    3CH,33H
        MOV    3DH,34H
        LCALL  CHANGE
        MOV    29H,33H
        DJNZ   31H,LB1
        DEC    48H
        MOV    31H,#02H
        MOV    29H,36H
        MOV    3DH,36H
        MOV    3CH,35H
        LCALL  CHANGE
        LJMP   L1
LB1:   LJMP   L1
X1:    MOV    A,48H
        CJNE   A,#02H,X2
        MOV    3CH,35H
        MOV    3DH,36H
        LCALL  CHANGE
        MOV    29H,35H
        DJNZ   31H,LC1
        DEC    48H
        MOV    31H,#02H
        MOV    29H,38H

⌨️ 快捷键说明

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