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

📄 at89c5212m.txt

📁 时钟温度计程序( 用130218B2012232F显示)
💻 TXT
📖 第 1 页 / 共 3 页
字号:
                           RET
                 SUU:      MOV A,R7
                           ANL A,#0F0H
                           SWAP A
                           SUBB A,#01
                           SWAP A
                           ORL  A,#09H
                           MOV  R7,A
                           RET          
;
;*****************分离程序**********************;
;
                 DIVIDE:   MOV A,R0
                           ANL A,#0FH
                           MOV R1,A
                           MOV A,R0
                           SWAP A
                           ANL A,#0FH
                           MOV R2,A
                           RET
;
;****************写1302程序****************;
;
                WRITE:     CLR SCLK
                           NOP
                           SETB RST
                           NOP
                           MOV A,DS1302_ADDR
                           MOV R4,#8
               WRITE1:     RRC A     ;送地址给1302
                           NOP
                           NOP
                           CLR SCLK
                           NOP
                           NOP
                           NOP
                           MOV IO,C
                           NOP
                           NOP
                           NOP
                           SETB SCLK
                           NOP
                           NOP
                           DJNZ R4,WRITE1
                           CLR SCLK
                           NOP
                           MOV A,DS1302_DATA
                           MOV R4,#8
                WRITE2:    RRC A
                           NOP     ;送数据给1302
                           CLR SCLK
                           NOP
                           NOP
                           MOV IO,C
                           NOP
                           NOP
                           NOP
                           SETB SCLK
                           NOP
                           NOP
                           DJNZ R4,WRITE2
                           CLR RST
                           RET
;
;******************读1302程序********************;
;
                READ:      CLR SCLK
                           NOP
                           NOP
                           SETB RST
                           NOP
                           MOV A,DS1302_ADDR
                           MOV R4,#8
                READ1:     RRC A    ;送地址给1302
                           NOP
                           MOV IO,C
                           NOP
                           NOP
                           NOP
                           SETB SCLK
                           NOP
                           NOP
                           NOP
                           CLR SCLK
                           NOP
                           NOP
                           DJNZ R4,READ1

                           MOV R4,#8
                READ2:     CLR SCLK
                           NOP    ;从1302中读出数据
                           NOP
                           NOP
                           MOV C,IO
                           NOP
                           NOP
                           NOP
                           NOP
                           NOP
                           RRC A
                           NOP
                           NOP
                           NOP
                           NOP
                           SETB SCLK
                           NOP
                           DJNZ R4,READ2
                           MOV DS1302_DATA,A
                           CLR RST
                           RET
;
;
;******************时间显示子程序*******************
TIME:   MOV  A,#80H          ;第一行左第一个字开始
    LCALL WRITE_COM
    MOV  DPTR,#CHINESE2     ;16*16点阵“时间”
    LCALL WRITE_HZ2
;
TIMEUP:
        MOV  A,#82H          ;第一行左第5个字开始
    LCALL WRITE_COM
        MOV   R1,#70H           ;将70-79H时间数据查出字码写入LCD
        MOV   DPTR,#TABLE1
        MOV   R2,#0AH          ; 查10次
        MOV   A,#00H
MOVCLOP:MOV   A,@R1            ;
        MOVC  A,@A+DPTR
        LCALL WRITE_DAT
        INC   R1
        DJNZ  R2,MOVCLOP       ;
        RET
;
;***************开机显示画面***********************
LOGON: MOV  A,#80H        ;第一行左第一个字开始
    LCALL WRITE_COM
    MOV  DPTR,#CHINESE     ;WORD 16*16点阵TEST
    LCALL WRITE_HZ
        MOV  A,#90H          ;第二行左第一个字开始
    LCALL WRITE_COM
    MOV  DPTR,#CHINESE1    ;WORD 16*16点阵TEST
    LCALL WRITE_HZ
        CLR   LAMPBLAK         ;开背光灯
        LCALL DELAY5S          ;显示5秒
        SETB  LAMPBLAK         ;关背光灯
        RET
LOGON1:   MOV  A,#80H        ;第一行左第一个字开始
    LCALL WRITE_COM
    MOV  DPTR,#CHINESE5     ;WORD 16*16点阵TEST
    LCALL WRITE_HZ
        MOV  A,#90H          ;第二行左第一个字开始
    LCALL WRITE_COM
    MOV  DPTR,#CHINESE6    ;WORD 16*16点阵TEST
    LCALL WRITE_HZ
        CLR   LAMPBLAK         ;开背光灯
        LCALL DELAY5S          ;显示5秒
        SETB  LAMPBLAK         ;关背光灯
        RET
;**********初始化程序*************
SETUP:  LCALL DELAY
        LCALL DELAY
        LCALL DELAY
        LCALL DELAY
    MOV  A,#01H    ;CLEAR DISPLAY
    LCALL WRITE_COM
    MOV  A,#00110000B ;FUNCTION SETTING
    LCALL WRITE_COM
    MOV  A,#00000010B ;DDRAM SET TO '00H'
    LCALL WRITE_COM
    MOV  A,#00000100B ;
    LCALL WRITE_COM
    MOV  A,#00001100B ;DISPLAY ON
    LCALL WRITE_COM
    MOV  A,#00000001B ;CLEARING SCREEN
    LCALL WRITE_COM
    MOV  A,#10000000B ;SET DDRAM ADDRESS
    LCALL WRITE_COM
        LCALL DELAY
    LCALL DELAY
    LCALL DELAY
        LCALL DELAY
    RET
;************串行命令写入子程序****************
;写入命令字在A中
WRITE_COM:
            LCALL DELAY1    ;
                SETB  CS
       PUSH  ACC
       MOV  R0,#8
       MOV  A,#11111000B
COMM1:
                CLR  C
       RLC  A
       MOV  SID,C
       CLR  CLK
                SETB CLK
       DJNZ R0,COMM1
       POP  ACC
       MOV  R5,A
       ANL  A,#0F0H
       MOV  R0,#8
COMM2:         CLR  C
       RLC  A
       MOV  SID,C
       CLR  CLK
       SETB CLK
       DJNZ R0,COMM2
       MOV  A,R5
       SWAP A
       ANL  A,#0F0H
       MOV  R0,#8
COMM3:         CLR  C
       RLC  A
       MOV  SID,C
       CLR  CLK
       SETB CLK
       DJNZ R0,COMM3
       CLR  CS
            RET
;
;***********串行数据写入子程序****************
;写入数据字在A中
WRITE_DAT:
       LCALL DELAY1
                SETB CS
       PUSH  ACC
       MOV  R0,#8
       MOV  A,#11111010B
DATA1:         CLR  C
       RLC  A
       MOV  SID,C
       CLR  CLK
       SETB CLK
       DJNZ R0,DATA1
       POP  ACC
       MOV  R5,A
       ANL  A,#0F0H
       MOV  R0,#8
DATA2:         CLR  C
       RLC  A
       MOV  SID,C
       CLR  CLK
       SETB CLK
       DJNZ R0,DATA2
       MOV  A,R5
       SWAP A
       ANL  A,#0F0H
       MOV  R0,#8
DATA3:         CLR  C
       RLC  A
       MOV  SID,C
       CLR  CLK
       SETB CLK
       DJNZ R0,DATA3
       CLR  CS
            RET
;
;**************延时子程序**********************
;0.544ms
DELAY1:
    MOV  R7,#010H
D11:   MOV  R6,#010H
    DJNZ R6,$
    DJNZ R7,D11
    RET
;0.13s
DELAY:
    MOV  R1,#00H
D2: MOV  R2,#00H
    DJNZ R2,$
    DJNZ R1,D2
    RET
;5.2s
DELAY5S:MOV  R3,#28H
DE5S:   LCALL DELAY
        DJNZ R3,DE5S
        RET
;
;************16*16点阵汉字写入子程序共7个***********
WRITE_HZ:    ;WRITE 7 CHINESE TO LCD
       MOV  R4,#7
DD:         CLR  A
       MOVC A,@A+DPTR
       INC  DPTR
       LCALL WRITE_DAT
       CLR  A
       MOVC A,@A+DPTR
       INC DPTR
       LCALL WRITE_DAT
       DJNZ R4,DD
       RET
;************16*16点阵汉字写入子程序共2个***********
WRITE_HZ2:      ;WRITE 8 CHINESE TO LCD
       MOV  R4,#2
DD4:           CLR  A
       MOVC A,@A+DPTR
       INC  DPTR
       LCALL WRITE_DAT
       CLR  A
       MOVC A,@A+DPTR
       INC DPTR
       LCALL WRITE_DAT
       DJNZ R4,DD4
       RET
;
;*****************************16*8点阵的字符代码表**********************************
TABLE1: DB     30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,3AH,3BH,3CH,3DH,3EH,20H,2DH,2EH
;               0   1   2   3   4   5   6   7   8   9   :   ;   <   =   > "不显"'-''.'
;**********************************自造字符地址表***********************************
CGRAM1:   DB 000H,000H
CGRAM2:   DB 000H,002H
CGRAM3:   DB 000H,004H
CGRAM4:   DB 000H,006H
;******************"这里是16*16点阵的汉字代码表"************************************
CHINESE:  Db " C03-1班35号      "    ;
CHINESE1: Db "楼然苗设计制作        "   ;
CHINESE2: DW 0CAB1H,0BCE4H                                          ;时间
CHINESE3: DW 0CEC2H,0B6C8H,0DBA0H,0DBA0H,0DBA0H,0DBA0H,0A1E6H       ;温度----℃
CHINESE4: DW 0B1A8H,0BEAFH,0DBA0H,0DBA0H,0DBA0H,0DBA0H,0A1E6H       ;报警----℃
CHINESE5:  Db "温度时钟显示器    "
CHINESE6:  Db "--05.11.19制作       "                                        ;℃
;
;********************************************************************************
;
;
;**********************************************************
;以下温度测量子程序区
;
;**********************************************************
;       RESET DS18B20
;**********************************************************
INITDS1820:  SETB  TEMPDIN        ;
       NOP            ;
       NOP            ;
       CLR   TEMPDIN        ;
       MOV   R6, #0A0H      ; DELAY 480us
       DJNZ  R6, $
                MOV   R6, #0A0H
                DJNZ  R6, $       ;
       SETB  TEMPDIN        ;
       MOV   R6, #32H    ; DELAY 70us
       DJNZ  R6, $       ;
                MOV     R6,#3CH
LOOP1820:       MOV   C, TEMPDIN     ;
       JC INITDS1820OUT     ;
                DJNZ    R6,LOOP1820
                MOV   R6, #064H      ; DELAY 200us
       DJNZ  R6, $       ;
       SJMP  INITDS1820     ;
       RET            ;
;
INITDS1820OUT:  SETB  TEMPDIN        ;
       RET            ;
;
;
;**********************************************************
;       读DS18B20的程序, 从DS18B20中读出一个字节的数据
;**********************************************************
READDS1820:     MOV   R7, #08H    ;
       SETB  TEMPDIN        ;
       NOP            ;
       NOP            ;
READDS1820LOOP: CLR   TEMPDIN        ;
       NOP            ;
       NOP            ;
       NOP            ;
       SETB  TEMPDIN        ;
       MOV      R6, #07H    ; DELAY 15us
             DJNZ    R6, $        ;
            MOV     C, TEMPDIN    ;
       MOV   R6, #3CH    ; DELAY 120us
       DJNZ    R6, $        ;
       RRC   A        ;
                SETB  TEMPDIN        ;
       DJNZ    R7, READDS1820LOOP ;
       MOV   R6, #3CH    ; DELAY 120us
       DJNZ  R6, $       ;
       RET            ;
;
;
;**********************************************************
;       写DS18B20的程序, 从DS18B20中写一个字节的数据
;**********************************************************
WRITEDS1820:    MOV   R7, #08H    ;
       SETB  TEMPDIN        ;
       NOP            ;
       NOP            ;
WRITEDS1820LOP: CLR   TEMPDIN        ;
       MOV      R6, #07H    ; DELAY 15us
             DJNZ    R6, $        ;
            RRC    A        ;
            MOV TEMPDIN, C     ;
            MOV R6, #34H    ; DELAY 104us
            DJNZ   R6, $       ;
            SETB   TEMPDIN        ;
            DJNZ    R7, WRITEDS1820LOP  ;
       RET            ;
;
;
;**********************************************************
;       READ TEMP
;**********************************************************
READTEMP: LCALL INITDS1820     ;
       MOV   A, #0CCH    ;
       LCALL WRITEDS1820    ; SKIP ROM
       MOV   R6, #34H    ; DELAY 104us
       DJNZ  R6, $       ;
       MOV   A, #44H        ;
       LCALL WRITEDS1820    ; START CONVERSION
       MOV   R6, #34H    ; DELAY 104us
       DJNZ  R6, $    ;
       RET            ;
;
READTEMP1:   LCALL INITDS1820     ;
       MOV   A, #0CCH    ;

⌨️ 快捷键说明

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