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

📄 alarm.asm

📁 自己学习单片机期间 自己遍的一个 LCD 显示模块 可以调整时间并且哟闹铃功能
💻 ASM
📖 第 1 页 / 共 2 页
字号:
      MOV   SENDDATA,#10100101B
      LCALL SEND_BYTE
      RET
Write_multiplebyte:
      MOV   COMMAND,#0BEH
      MOV   BYTECNT,#8
      MOV   R0,#SENDDATA
      MOV   SENDDATA,  #00H  ;秒    0
      MOV   SENDDATA+1,#31H  ;分    30
      MOV   SENDDATA+2,#15H  ;时    12
      MOV   SENDDATA+3,#18H  ;日    18
      MOV   SENDDATA+4,#12H  ;月份  12
      MOV   SENDDATA+5,#01H  ;星期  1
      MOV   SENDDATA+6,#06H  ;年    06
      MOV   SENDDATA+7,#07H  ;
      LCALL SEND_BYTE
      RET
OSC_enable:
      MOV   COMMAND,#80H
      MOV   BYTECNT,#1
      MOV   R0,#SENDDATA
      MOV   SENDDATA,#00H
      LCALL SEND_BYTE
      RET
Write_enable:
      MOV   COMMAND,#8EH
      MOV   BYTECNT,#1
      MOV   R0,#SENDDATA
      MOV   SENDDATA,#00H
      LCALL SEND_BYTE
      RET
Write_disable:
      MOV   COMMAND,#8EH
      MOV   R0,#SENDDATA
      MOV   SENDDATA,#80H
      MOV   BYTECNT,#1
      MOV   A,COMMAND
      LCALL SEND_BYTE
      RET   

;------------------------------------------发送命令--------------------------------------------
SEND_BYTE:
      CLR   RST
      NOP
      CLR   SCLK
      NOP
      SETB  RST
      NOP
      MOV   A,COMMAND
      MOV   BITCNT,#08H
S_B0: RRC   A
      MOV   IODATA,C
      NOP
      SETB  SCLK
      NOP
      CLR   SCLK
      DJNZ  BITCNT,S_B0
      NOP
S_B1: MOV   A,@R0
      MOV   BITCNT,#08H
S_B2: RRC   A
      MOV   IODATA,C
      NOP
      SETB  SCLK
      NOP
      CLR   SCLK
      DJNZ  BITCNT,S_B2
      INC   R0
      DJNZ  BYTECNT,S_B1
      NOP
      CLR   RST
      RET
;-------------------------------多字节连续传送-----------------------------------------
Read_multiplebyte:
      MOV   COMMAND,#0BFH
      MOV   BYTECNT,#8H
      MOV   R1,#RCVDATA
      LCALL RECIVE_BYTE
      RET
;----------------------------------------RECIVE_BYTE  from da1302------------------------------
RECIVE_BYTE:
      CLR   RST
      NOP
      CLR   SCLK
      NOP
      SETB  RST
      NOP
      MOV   A,COMMAND
      MOV   BITCNT,#8H
RE_B0:RRC   A
      MOV   IODATA,C
      SETB   SCLK
      NOP
      CLR   SCLK
      DJNZ  BITCNT,RE_B0
      NOP
RE_B1:CLR   A
      CLR   C 
      MOV   BITCNT,#8H
RE_B2:NOP
      MOV   C,IODATA
      RRC   A
      SETB  SCLK
      NOP
      CLR   SCLK
      DJNZ  BITCNT,RE_B2
      MOV   @R1,A
      INC   R1
      DJNZ  BYTECNT,RE_B1
      NOP
      CLR   RST
      RET  
;----------------把秒,分,时等分成两个存储空间---------------------
EXCHANGE:
      MOV   A,70H
      MOV   B,#10H
      DIV   AB
      MOV   61H,A
      MOV   60H,B
      MOV   A,71H
      MOV   B,#10H
      DIV   AB
      MOV   63H,A
      MOV   62H,B   
      MOV   A,72H
      MOV   B,#10H
      DIV   AB
      MOV   65H,A
      MOV   64H,B
      MOV   A,73H
      MOV   B,#10H
      DIV   AB
      MOV   67H,A
      MOV   66H,B
      MOV   A,74H
      MOV   B,#10H
      DIV   AB
      MOV   69H,A
      MOV   68H,B
      MOV   6AH,75H
      MOV   A,76H
      MOV   B,#10H
      DIV   AB
      MOV   6CH,A
      MOV   6BH,B
      RET
;-----------------------------------16进制转换成 ASCII码值---------------------------
ADD_ASCII:
      MOV   A,60H
      ADD   A,#48
      MOV   60H,A
      MOV   A,61H
      ADD   A,#48
      MOV   61H,A
      MOV   A,62H
      ADD   A,#48
      MOV   62H,A
      MOV   A,63H
      ADD   A,#48
      MOV   63H,A
      MOV   A,64H
      ADD   A,#48
      MOV   64H,A
      MOV   A,65H
      ADD   A,#48
      MOV   65H,A
      MOV   A,66H
      ADD   A,#48
      MOV   66H,A
      MOV   A,67H
      ADD   A,#48
      MOV   67H,A
      MOV   A,68H
      ADD   A,#48
      MOV   68H,A
      MOV   A,69H
      ADD   A,#48
      MOV   69H,A
      MOV   A,6AH
      ADD   A,#48
      MOV   6AH,A
      MOV   A,6BH
      ADD   A,#48
      MOV   6BH,A
      MOV   A,6CH
      ADD   A,#48
      MOV   6CH,A
      RET
;--------------------------------LCD 对应的XPOS,YPOS 输出---------------------------------
DISBUF:
      MOV   XPOS,#0
      MOV   YPOS,#0
      MOV   A,#'*'
      LCALL LCDWRITE
      MOV   XPOS,#1
      MOV   YPOS,#0
      MOV   A,#'*'
      LCALL LCDWRITE
      MOV   XPOS,#2
      MOV   YPOS,#0
      MOV   A,#'2'
      LCALL LCDWRITE
      MOV   XPOS,#3
      MOV   YPOS,#0
      MOV   A,#'0'
      LCALL LCDWRITE
      MOV   XPOS,#4
      MOV   YPOS,#0
      MOV   A,6CH
      LCALL LCDWRITE
      MOV   XPOS,#5
      MOV   YPOS,#0
      MOV   A,6BH
      LCALL LCDWRITE
      MOV   XPOS,#6
      MOV   YPOS,#0
      MOV   A,#'*'
      LCALL LCDWRITE
      MOV   XPOS,#7
      MOV   YPOS,#0
      MOV   A,#'*'
      LCALL LCDWRITE
      MOV   XPOS,#8
      MOV   YPOS,#0
      MOV   A,69H
      LCALL LCDWRITE
      MOV   XPOS,#9
      MOV   YPOS,#0
      MOV   A,68H
      LCALL LCDWRITE
      MOV   XPOS,#10
      MOV   YPOS,#0
      MOV   A,#'*'
      LCALL LCDWRITE
      MOV   XPOS,#11
      MOV   YPOS,#0
      MOV   A,#'*'
      LCALL LCDWRITE
      MOV   XPOS,#12
      MOV   YPOS,#0
      MOV   A,67H
      LCALL LCDWRITE
      MOV   XPOS,#13
      MOV   YPOS,#0
      MOV   A,66H
      LCALL LCDWRITE
      MOV   XPOS,#14
      MOV   YPOS,#0
      MOV   A,#'*'
      LCALL LCDWRITE
      MOV   XPOS,#15
      MOV   YPOS,#0
      MOV   A,#'*'
      LCALL LCDWRITE
      MOV   XPOS,#0
      MOV   YPOS,#1
      MOV   A,#'*'
      LCALL LCDWRITE
      MOV   XPOS,#1
      MOV   YPOS,#1
      MOV   A,#'*'
      LCALL LCDWRITE
      MOV   XPOS,#2
      MOV   YPOS,#1
      MOV   A,#'*'
      LCALL LCDWRITE
      MOV   XPOS,#3
      MOV   YPOS,#1
      MOV   A,#'*'
      LCALL LCDWRITE
      MOV   XPOS,#4
      MOV   YPOS,#1
      MOV   A,65H
      LCALL LCDWRITE
      MOV   XPOS,#5
      MOV   YPOS,#1
      MOV   A,64H
      LCALL LCDWRITE
      MOV   XPOS,#6
      MOV   YPOS,#1
      MOV   A,#':'
      LCALL LCDWRITE
      MOV   XPOS,#7
      MOV   YPOS,#1
      MOV   A,63H
      LCALL LCDWRITE
      MOV   XPOS,#8
      MOV   YPOS,#1
      MOV   A,62H
      LCALL LCDWRITE
      MOV   XPOS,#9
      MOV   YPOS,#1
      MOV   A,#':'
      LCALL LCDWRITE
      MOV   XPOS,#10
      MOV   YPOS,#1
      MOV   A,61H
      LCALL LCDWRITE
      MOV   XPOS,#11
      MOV   YPOS,#1
      MOV   A,60H
      LCALL LCDWRITE
      MOV   XPOS,#12
      MOV   YPOS,#1
      MOV   A,#'*'
      LCALL LCDWRITE
      MOV   XPOS,#13
      MOV   YPOS,#1
      MOV   A,#'*'
      LCALL LCDWRITE
      MOV   XPOS,#14
      MOV   YPOS,#1
      MOV   A,#'*'
      LCALL LCDWRITE
      MOV   XPOS,#15
      MOV   YPOS,#1
      MOV   A,#'*'
      LCALL LCDWRITE
      RET
;-------------------------------LCD 写满屏幕地址和字符数据指令--------------------------------
LCDFILL:
      LCALL LCDWRITE
      INC   XPOS
      MOV   A,XPOS
      CJNE  A,#16,RETURN
      INC   YPOS
      MOV   A,YPOS
      CJNE  A,#2,RETURN
RETURN:  RET
;-----------------------------------LCD 写一个地址和字符数据指令-----------------------------------
LCDWRITE:
      LCALL LCDPOS     ;lcd 写地址指令
      LCALL LCDWD      ;LCD 写字符指令
      RET
;------------------------------LCD 写地址指令--------------------------------------------------------
LCDPOS:PUSH ACC
       ANL   XPOS,#0FH
       ANL   YPOS,#01H
       MOV   A,YPOS
       CJNE  A,#00,LPS_LAY
       MOV   A,XPOS
       LJMP  LPS_LAX
LPS_LAY:MOV A,XPOS
       ADD   A,#40H
LPS_LAX:ORL A,#80H
      LCALL LCDWC
       POP   ACC
       RET       
;------------------------------------LCD RESET--------------------------------------------------------------------	     
LCDRESET:
      LCALL DELAY5MS
      LCALL DELAY5MS
      LCALL DELAY5MS 
      MOV   A,#38H
      LCALL LCDWCN
      LCALL DELAY5MS
      MOV   A,#38H
      LCALL LCDWCN
      LCALL DELAY5MS
      MOV   A,#38H
      LCALL LCDWCN
      MOV   A,#38H
      LCALL LCDWC
      MOV   A,#08H
      LCALL LCDWC
      MOV   A,#01H
      LCALL LCDWC
      MOV   A,#06H
      LCALL LCDWC
      MOV   A,#0CH
      LCALL LCDWC
      RET
LCDWC:LCALL WAITIDLE
;----------------------------------LCD write not check,写指令------------------------
LCDWCN:CLR   RS
       CLR   RW
       MOV   P1,A
       SETB  E
       NOP
       CLR   E
       RET
;--------------------------LCD busy check,wait till not busy(读状态,判断是否忙)-----------------------------------
WAITIDLE:
         PUSH  ACC
         MOV   P1,#0FFH
         CLR   RS
         SETB  RW
         SETB  E
WTD_PA:  NOP
         JB    P1.7,WTD_PA
         CLR   E
         POP   ACC
         RET
;--------------------------LCD WRITE TATA(写数据)----------------------------------------
LCDWD:   LCALL WAITIDLE
         MOV   P1,A
         CLR   RW
         SETB  RS
         SETB  E
         NOP
         CLR   E
         RET
;----------------------------------------------------IIC 程序----------------------------------------
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;归一化EEPROM存入程序(12M时钟),存入数在00H起单元
IICWRITE:
      MOV    MTD,#00H
      MOV    SLA,#SLAW
      MOV    NUMBYT,#3
      LCALL  WRNBYT
      RET
;;;;;;;;;;;;;;;;;;;;
;;VIICREAD        ;;
;;;;;;;;;;;;;;;;;;;;
; 归一化EEPROM读出程序(12M时钟),读出数放入60H-67H单元
IICREAD:       MOV     MTD,#00H      ;
                MOV     SLA,#SLAW
                MOV     NUMBYT,#01H
                LCALL   WRNBYT
                MOV     SLA,#SLAR
                MOV     NUMBYT,#02H
                LCALL   RDNBYT
                ACALL   RMOV8
                RET
RMOV8:          MOV     3AH,MRD
                MOV     3BH,MRD+1
                RET
;
;;;;;;;;;;;;;;;;;;;;
;;VIIC   PROGRAM  ;;
;;;;;;;;;;;;;;;;;;;;
; I2C串行归一化存储子程序
STA:            SETB    SDA
                SETB    SCL
                NOP
                NOP
                NOP
                NOP
                CLR     SDA
                NOP
                CLR     SDA
                NOP
                NOP
                NOP
                NOP
                CLR     SCL
                RET
STOP:           CLR     SDA
                SETB    SCL
                NOP
                NOP
                NOP
                NOP
                SETB    SDA
                NOP
                NOP
                NOP
                NOP
                CLR     SDA
                CLR     SCL
                RET
MACK:           CLR     SDA
                SETB    SCL
                NOP
                NOP
                NOP
                NOP
                CLR     SCL
                SETB    SDA
                RET
MNACK:          SETB    SDA
                SETB    SCL
                NOP
                NOP
                NOP
                NOP
                CLR     SCL
                CLR     SDA
                RET
CACK:           SETB    SDA
                SETB    SCL
                CLR     F0
                MOV     C,SDA
                JNC     CEND
                SETB    F0
CEND:           CLR     SCL
                RET
WRBYT:          MOV     R0,#08H
WLP:            RLC     A
                JC      WR1
                AJMP    WR0
WLP1:           DJNZ    R0,WLP
                RET
WR1:            SETB    SDA
                SETB    SCL
                NOP
                NOP
                NOP
                NOP
                CLR     SCL
                CLR     SDA
                AJMP    WLP1
WR0:            CLR     SDA
                SETB    SCL
                NOP
                NOP
                NOP
                NOP
                CLR     SCL
                AJMP    WLP1
RDBYT:          MOV     R0,#08H
RLP:            SETB    SDA
                SETB    SCL
                MOV     C,SDA
                MOV     A,R2
                RLC     A
                MOV     R2,A
                CLR     SCL
                DJNZ    R0,RLP
                RET
WRNBYT:         MOV     R3,NUMBYT
                LCALL   STA
                MOV     A,SLA
                LCALL   WRBYT
                LCALL   CACK
                JB      F0,WRNBYT
                MOV     R1,#MTD
WRDA:           MOV     A,@R1
                LCALL   WRBYT
                LCALL   CACK
                JB      F0,WRNBYT
                INC     R1
                DJNZ    R3,WRDA
                LCALL   STOP
                RET
RDNBYT:         MOV     R3,NUMBYT
                LCALL   STA
                MOV     A,SLA
                LCALL   WRBYT
                LCALL   CACK
                JB      F0,RDNBYT
RDN:            MOV     R1,#MRD
RDN1:           LCALL   RDBYT
                MOV     @R1,A
                DJNZ    R3,ACK
                LCALL   MNACK
                LCALL   STOP
                RET
ACK:            LCALL   MACK
                INC     R1
                SJMP    RDN1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;----------------------------DELAY---------------------------------
DELAY5MS:MOV R5,#5
    DL2: MOV R6,#250
    DL1: NOP
         NOP
         DJNZ R6,DL1
         DJNZ R5,DL2
         RET
DELAY400MS:
        MOV     R5,#20              ;延时子程序(400MS)
DL4_PA: MOV     R6,#100
DL4_PB: MOV     R7,#100
        DJNZ    R7,$
        DJNZ    R6,DL4_PB
        DJNZ    R5,DL4_PA
        RET
;------------------------------------------INTT0-------------------------
INTT0:  MOV TH0,#3CH
        MOV TL0,#0B0H
        DJNZ R4,RETT0
        MOV  R4,#10
        CPL  20H.0
RETT0:  RETI        

               
TAB:    DB 'S','e','t',' ','t','i','m','e',' ','t','o',' ','R','i','n','g'
        DB '*','*','*','*','*','0','0',':','0','0','*','*','*','*','*','*'

;  70H(秒)|   71h分)  72h时)     73h日 |    74h月  |   75h周|    76h 年
;61H,60H  | 63h,62h | 65h,64h | 67h,66h |  69h,68h  |   6Ah  | 6CH,6BH
;


END

⌨️ 快捷键说明

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