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

📄 alarm.asm

📁 自己学习单片机期间 自己遍的一个 LCD 显示模块 可以调整时间并且哟闹铃功能
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;------------------------LCD define--------------------
          RS   EQU P3.5
          RW   EQU P3.4
          E    EQU P3.6
          XPOS EQU 21H       ;行方向
          YPOS EQU 22H       ;列方向
;-----------------DS1302 define-----------------------------
          IODATA EQU    P2.2
          SCLK   EQU    P2.1 
          RST    EQU    P2.3
          BITCNT    data 30H  ;每个字节的位数缓冲
          BYTECNT   data 31h  ;写入或读出字节树
          COMMAND   data 32h  ;DS1302控制命令字缓冲
          RCVDATA   data 70h  ;接受1302数据首地址
          SENDDATA  data 50h  ;发送数据首地址
;---------------------------Switch define-------------------       
          SW1     EQU  P2.4
          SW2     EQU  P2.7
          SW3     EQU  P2.6
          SW4     EQU  P2.5
          TIMES   data 33H   ;按SW2的次数
          CONT    EQU  34H   ;分别为秒数,分数,月年等的上限值
          ADDAT   EQU  35H   ;DS1302读书数据暂存缓冲区
          COMDBUF EQU  36H   ;DS1302读控制命令缓冲区
          TIMES4  EQU  39H   ;SW4 按下的次数
          ALARM_H EQU  3AH   ;响铃时存储区
          ALARM_M EQU  3BH   ;响铃分存储区
;-----------------------------IIC EEPROM define---------------
      SDA      EQU    P0.5   ;串行数据线 
      SCL      EQU    P0.6   ;串行时钟线
      SLA      EQU    37H    ;寻址字节存放单元
      NUMBYT   EQU    38H    ;数据的长度
      MTD      EQU    40H    ;发数据缓冲首地址
      MRD      EQU    48H    ;接受数据缓冲首地址
      SLAW     EQU    0A0H   ;EEPROM寻址字节写 
      SLAR     EQU    0A1H   ;EEPROM寻址字节读   
      RING     EQU    P0.4  
;----------------------------START----------------------------- 
      ORG  00H
      LJMP START
      ORG  0BH
      LJMP INTT0
      ORG  30H
START:CLR  E
      MOV  TIMES,#0
      MOV  TMOD,#01H
      MOV  TH0,#3CH
      MOV  TL0,#0B0H
      MOV  R4,#10
      SETB 20H.0
      CLR  20H.1
      SETB TR0
      SETB EA
      LCALL LCDRESET
      LCALL IICREAD 
MAIN: 
      LCALL DISPLAY
      JNB   SW1,SW1_RESET
      JNB   SW2,SW2_CONTRL
      JNB   SW4,SW4_ALARM1
      MOV   A,3AH
      CJNE  A,72H,NO_RING
      MOV   A,3BH
      CJNE  A,71H,NO_RING
      CLR   RING
       LJMP  MAIN
NO_RING:SETB RING
      LJMP  MAIN
;----------------------------按键程序,SW1为复位键-------------------------------------------
SW1_RESET:
      LCALL DELAY5MS
      LCALL DELAY5MS
      JB    SW1,MAIN
      JNB   SW1,$
      CPL   P3.3
      LCALL DS1302RESET
      LJMP  MAIN
;---------------------------------------------------------------
SW4_ALARM1:
      LJMP  SW4_ALARM
;----------------------------按键程序,SW2为功能键,按下则依次闪烁-------------------------------

SW2_CONTRL:
      LCALL DELAY5MS
      LCALL DELAY5MS
      JB    SW2,MAIN
      JNB   SW2,$
      SETB  ET0
      INC   TIMES
      MOV   A,TIMES
      CJNE  A,#1,NT1
;-------------------------------------------------
LP1:  JB    SW3,NP1
      LCALL DELAY5MS
      JB    SW3,NP1
      JNB   SW3,$
      LCALL YEAR_UP
;-------------------------------------------------
NP1:  LCALL YEAR_bicker
      JB    SW2,LP1
      LCALL DELAY5MS
      JB    SW2,LP1
      JNB   SW2,$
      INC    TIMES 
      LCALL XX1
      MOV    A,TIMES    
NT1:  CJNE  A,#2,NT2
;-------------------------------------------------
LP2:  JB    SW3,NP2
      LCALL DELAY5MS
      JB    SW3,NP2
      JNB   SW3,$
      LCALL MONTH_UP
;-------------------------------------------------
NP2:  LCALL MONTH_bicker
      JB    SW2,LP2
      LCALL DELAY5MS
      JB    SW2,LP2
      JNB    SW2,$
      INC    TIMES 
      LCALL  XX2     ;  LCALL XX1,XX2,XX3,XX4,XX5 分别代表闪烁后赋回原值-----------------
      MOV   A,TIMES 
NT2:  CJNE  A,#3,NT3
;-------------------------------------------------;
LP3:  JB    SW3,NP3                               ;
      LCALL DELAY5MS
      JB    SW3,NP3                             ;
      JNB   SW3,$                                 ;
      LCALL DATE_UP                               ;
;-------------------------------------------------
NP3:  LCALL DATE_bicker
      JB    SW2,LP3
      LCALL DELAY5MS
      JB    SW2,LP3
      JNB    SW2,$
      INC    TIMES 
      LCALL  XX3
      MOV   A,TIMES 
NT3:  CJNE  A,#4,NT4
;-------------------------------------------------
LP4:  JB    SW3,NP4
      LCALL DELAY5MS
      JB    SW3,NP4
      JNB   SW3,$
      LCALL HOUR_UP
;-------------------------------------------------
NP4:  LCALL HOUR_bicker
      JB    SW2,LP4
      INC    TIMES 
      JNB    SW2,$
      LCALL  XX4
      MOV   A,TIMES 
NT4:  CJNE  A,#5,NT5
;-------------------------------------------------
LP5:  JB    SW3,NP5
      LCALL DELAY5MS
      JB    SW3,NP5
      JNB   SW3,$
      LCALL MIN_UP
;-------------------------------------------------
NP5:  LCALL MIN_bicker
      JB    SW2,LP5
      INC    TIMES 
      JNB    SW2,$
      LCALL  XX5  
NT5:  MOV   TIMES,#0
      CLR   ET0 
J_MAIN: LJMP  MAIN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;--------------------------------SW4_ALARM-------------------------------------------------------------------
;---------------------------------------7A,7BH 7C,7DH分别存储3AH,3BH的十位和个位-----------------------------
SW4_ALARM:
       LCALL  DELAY5MS
       LCALL  DELAY5MS
       JB     SW4,J_MAIN
       JNB    SW4,$
       LCALL  SET_DISPLAY
       LCALL  DISPLAY2
       CPL    20H.1
SET_LP:JNB     20H.1,SET_RETURN
       JB     SW4,SET_NEXT
       LCALL  DELAY5MS
       JB     SW4,SET_NEXT
       JNB    SW4,$
       CPL    20H.1
       LJMP   SET_LP
SET_NEXT:
       JB     SW2,SET_LP
       LCALL  DELAY5MS
       JB     SW2,SET_LP
       JNB    SW2,$
       SETB   ET0
       INC    TIMES
       MOV    A,TIMES
       CJNE   A,#1,SET_NT1
;-------------------------------------------------
SET_LP1:JB    SW3,SET_NP1
        LCALL DELAY5MS
        JB    SW3,SET_NP1
        JNB   SW3,$
        LCALL SET_HOUR_UP
;-------------------------------------------------
SET_NP1:LCALL SET_HOUR_bicker
        JB    SW2,SET_LP1
        INC    TIMES
        LCALL  DELAY5MS
        JB    SW2,SET_LP1 
        JNB   SW2,$
        LCALL SET_XX1
        MOV    A,TIMES    
SET_NT1:CJNE  A,#2,SET_LP
;-------------------------------------------------
SET_LP2: JB    SW3,SET_NP2
        LCALL DELAY5MS
        JB    SW3,SET_NP2
        JNB   SW3,$
        LCALL SET_MIN_UP
;-------------------------------------------------
SET_NP2:   LCALL SET_MIN_bicker
       JB    SW2,SET_LP2
       LCALL DELAY5MS
       JB    SW2,SET_LP2 
       JNB    SW2,$
       LCALL  SET_XX2     ;  LCALL XX1,XX2,XX3,XX4,XX5 分别代表闪烁后赋回原值-----------------
       MOV    TIMES,#0
       CLR    ET0
       LJMP   SET_LP

;--------------------------------------------------SET_RETUREN----------------------------------------
SET_RETURN:
       MOV    MTD,#00H
       MOV    MTD+1,3AH
       MOV    MTD+2,3BH
       LCALL  IICWRITE
       LJMP   MAIN

SET_EXCHANGE:
      MOV    A,ALARM_H
      MOV    B,#10H
      DIV    AB
      MOV    7AH,A
      MOV    7BH,B
      MOV    A,ALARM_M
      MOV    B,#10H
      DIV    AB
      MOV    7CH,A
      MOV    7DH,B
      RET
SET_ADD_ACSII:
      MOV    A,7AH
      ADD    A,#48
      MOV    7AH,A
      MOV    A,7BH
      ADD    A,#48
      MOV    7BH,A
      MOV    A,7CH
      ADD    A,#48
      MOV    7CH,A
      MOV    A,7DH
      ADD    A,#48
      MOV    7DH,A
      RET
SET_DISBUF:
      MOV    XPOS,#5
      MOV    YPOS,#1
      MOV    A,7AH
      LCALL  LCDWRITE
      MOV    XPOS,#6
      MOV    YPOS,#1
      MOV    A,7BH
      LCALL  LCDWRITE
      MOV    XPOS,#8
      MOV    YPOS,#1
      MOV    A,7CH
      LCALL  LCDWRITE
      MOV    XPOS,#9
      MOV    YPOS,#1
      MOV    A,7DH
      LCALL  LCDWRITE
      RET

      
SET_DISPLAY:
      MOV    R0,#0
      MOV   YPOS,#0
      MOV   XPOS,#0
SET_LPL: MOV    A,R0
      MOV    DPTR,#TAB
      MOVC   A,@A+DPTR
      LCALL  LCDFILL
      INC    R0
      CJNE   R0,#32,SET_LPL
      MOV    R0,#0
      LCALL  DELAY5MS
      RET 
    
SET_MIN_UP:
      MOV   ADDAT,3BH
      MOV   CONT,#60H
      MOV   COMDBUF,#82H  
      LCALL SW3_UP
      MOV   3BH,ADDAT
      LCALL DISPLAY2
      RET

SET_HOUR_UP:
      MOV   ADDAT,3AH
      MOV   CONT ,#24H
      LCALL SW3_UP
      MOV   3AH,ADDAT
      LCALL DISPLAY2
      RET

SET_HOUR_bicker:
      JNB    20H.0,SET_XX1
      MOV   XPOS,#5
      MOV   YPOS,#1
      MOV   A,#' '
      LCALL LCDWRITE
      MOV   XPOS,#6
      MOV   YPOS,#1
      MOV   A,#' '
      LCALL LCDWRITE
      LJMP  RET4
SET_XX1:
      MOV   XPOS,#5
      MOV   YPOS,#1
      MOV   A,7AH
      LCALL LCDWRITE
      MOV   XPOS,#6
      MOV   YPOS,#1
      MOV   A,7BH
      LCALL LCDWRITE
RET20: RET

SET_MIN_bicker:
      JNB    20H.0,SET_XX2
      MOV   XPOS,#8
      MOV   YPOS,#1
      MOV   A,#' '
      LCALL LCDWRITE
      MOV   XPOS,#9
      MOV   YPOS,#1
      MOV   A,#' '
      LCALL LCDWRITE
      LJMP  RET21
SET_XX2:
      MOV   XPOS,#8
      MOV   YPOS,#1
      MOV   A,7CH
      LCALL LCDWRITE
      MOV   XPOS,#9
      MOV   YPOS,#1
      MOV   A,7DH
      LCALL LCDWRITE
RET21: RET

DISPLAY2:
      LCALL  SET_EXCHANGE
      LCALL  SET_ADD_ACSII
      LCALL  SET_DISBUF
      RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;--------------------- YEAR_BICKER-----------------------------------------
YEAR_bicker:
      JNB    20H.0,XX1    
      MOV   XPOS,#4
      MOV   YPOS,#0
      MOV   A,#' '
      LCALL LCDWRITE
      MOV   XPOS,#5
      MOV   YPOS,#0
      MOV   A,#' '
      LCALL LCDWRITE
      LJMP  RET1
XX1:  MOV   XPOS,#4
      MOV   YPOS,#0
      MOV   A,6CH
      LCALL LCDWRITE
      MOV   XPOS,#5
      MOV   YPOS,#0
      MOV   A,6BH
      LCALL LCDWRITE
RET1: RET
;----------------------------MONTH_BICKER-------------------------------------------
MONTH_bicker:
      JNB    20H.0,XX2
      MOV   XPOS,#8
      MOV   YPOS,#0
      MOV   A,#' '
      LCALL LCDWRITE
      MOV   XPOS,#9
      MOV   YPOS,#0
      MOV   A,#' '
      LCALL LCDWRITE
      LJMP  RET2
XX2:
      MOV   XPOS,#8
      MOV   YPOS,#0
      MOV   A,69H
      LCALL LCDWRITE
      MOV   XPOS,#9
      MOV   YPOS,#0
      MOV   A,68H
      LCALL LCDWRITE
RET2: RET
;-----------------------------DATE_BICKER--------------------------------------------------
DATE_bicker:
      JNB    20H.0,XX3
      MOV   XPOS,#12
      MOV   YPOS,#0
      MOV   A,#' '
      LCALL LCDWRITE
      MOV   XPOS,#13
      MOV   YPOS,#0
      MOV   A,#' '
      LCALL LCDWRITE
      LJMP  RET3
XX3:
      MOV   XPOS,#12
      MOV   YPOS,#0
      MOV   A,67H
      LCALL LCDWRITE
      MOV   XPOS,#13
      MOV   YPOS,#0
      MOV   A,66H
      LCALL LCDWRITE
RET3: RET
;---------------------------HOUR_BICKER-----------------------------------------------------
HOUR_bicker:
      JNB    20H.0,XX4
      MOV   XPOS,#4
      MOV   YPOS,#1
      MOV   A,#' '
      LCALL LCDWRITE
      MOV   XPOS,#5
      MOV   YPOS,#1
      MOV   A,#' '
      LCALL LCDWRITE
      LJMP  RET4
XX4:
      MOV   XPOS,#4
      MOV   YPOS,#1
      MOV   A,65H
      LCALL LCDWRITE
      MOV   XPOS,#5
      MOV   YPOS,#1
      MOV   A,64H
      LCALL LCDWRITE
RET4: RET
;-----------------------------MIN_BICKER-------------------------------------------------
MIN_bicker:
      JNB    20H.0,XX5
      MOV   XPOS,#7
      MOV   YPOS,#1
      MOV   A,#' '
      LCALL LCDWRITE
      MOV   XPOS,#8
      MOV   YPOS,#1
      MOV   A,#' '
      LCALL LCDWRITE
      LJMP   RET5
XX5:
      MOV   XPOS,#7
      MOV   YPOS,#1
      MOV   A,63H
      LCALL LCDWRITE
      MOV   XPOS,#8
      MOV   YPOS,#1
      MOV   A,62H
      LCALL LCDWRITE
RET5:RET
;--------------------------------SW3_UP---------------------------------------------------
;-------------70H,71H,72H,73H,74H,75H,76H分别存储接收的秒,分,时,日,月,星期,年-------------
;-------------50H,51H,52H,53H,54H,55H,56H分别存储要发送的秒,分,时,日,月,星期,年

 
MIN_UP:
      MOV   ADDAT,71H
      MOV   CONT,#60H
      MOV   COMDBUF,#82H  
      LCALL SW3_PROC
      MOV   71H,ADDAT
      LCALL DISPLAY1
      RET
HOUR_UP:
      MOV   ADDAT,72H
      MOV   CONT ,#24H
      MOV   COMDBUF,#84H
      LCALL SW3_PROC
      MOV   72H,ADDAT
      LCALL DISPLAY1
      RET
DATE_UP:
      MOV   ADDAT,73H
      MOV   CONT ,#32H
      MOV   COMDBUF,#86H
      LCALL SW3_PROC1      
      MOV   73H,ADDAT
      LCALL DISPLAY1
      RET
MONTH_UP:
      MOV   ADDAT,74H
      MOV   CONT ,#13H
      MOV   COMDBUF,#88H
      LCALL SW3_PROC1
      MOV   74H,ADDAT
      LCALL DISPLAY1
      RET
YEAR_UP:
      MOV   ADDAT,76H
      MOV   CONT ,#99H
      MOV   COMDBUF,#8CH
      LCALL SW3_PROC
      MOV   76H,ADDAT
      LCALL DISPLAY1
      RET

SW3_PROC:      
      LCALL SW3_UP
      LCALL Write_enable
      LCALL Write_singlebyte
      LCALL Write_disable    
      RET

SW3_PROC1:      
      LCALL SW3_UP1
      LCALL Write_enable
      LCALL Write_singlebyte
      LCALL Write_disable
      RET


SW3_UP:
      MOV   A,ADDAT
      INC   A
      DA    A
      CJNE  A,CONT,RET6
      MOV   A,#0 
RET6: MOV   ADDAT,A
      RET 


SW3_UP1:
      MOV   A,ADDAT
      INC   A
      DA    A
      CJNE  A,CONT,RET7
      MOV   A,#1 
RET7: MOV   ADDAT,A
      RET 


Write_singlebyte:
      MOV   COMMAND,COMDBUF
      MOV   BYTECNT,#1
      MOV   R0,#ADDAT
      LCALL SEND_BYTE
      RET


Read_singlebyte:
      MOV   COMMAND,COMDBUF
      MOV   BYTECNT,#1
      MOV   R0,#ADDAT
      LCALL RECIVE_BYTE  
      RET 

;----------------------- DS1302 DISPLAY PROGRAME--------------------------------------
DISPLAY:
      LCALL Read_multiplebyte
DISPLAY1:LCALL EXCHANGE
      LCALL ADD_ASCII
      LCALL DISBUF
      RET
;---------------------------------DS1302  RESET-----------------------------------------
DS1302RESET:
      LCALL Write_enable
      LCALL Write_multiplebyte
      LCALL OSC_enable
      LCALL Electry_enabLe
      LCALL Write_disable
      RET
Electry_enabLe:
      MOV   COMMAND,#90H
      MOV   BYTECNT,#1
      MOV   R0,#SENDDATA

⌨️ 快捷键说明

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