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

📄 ds1302ok.asm

📁 wo de ying wen bu hao jiu bu jie shao le da jia ziji kan ba bu haoyisi
💻 ASM
📖 第 1 页 / 共 2 页
字号:
            CLR T_RST
            DJNZ R7,Get13021
            RET
;;写1302 1 B 子程序
RTInputByte:
            MOV R4,#8
Inbit1:     MOV A,B
            RRC A
            MOV B,A
            MOV T_IO,C
            SETB T_CLK
            CLR T_CLK
            DJNZ R4,Inbit1
            RET
;;读1302 1B子程序
RT0utputByte:
            MOV R4,#8
Outbit1:    MOV C,T_IO
            RRC A
            SETB T_CLK
            CLR T_CLK
            DJNZ R4,Outbit1
            RET
;============================================================================
;=================字符转换程序,使压缩BCD变为非压缩BCD码=====================
CHANGE:     PUSH A            ;存放顺序为低位在低字节,高位在高字节
            MOV  R5,#7
            MOV  R0,#SECOND
            MOV  R1,#SEC_LCD1
C_LOOP:     MOV  A,@R0
            MOV  B,A
            ANL  A,#0FH
            CLR  C
            ADD  A,#30H
            MOV  @R1,A
            INC  R1
            MOV  A,B
            SWAP A
            ANL  A,#0FH
            CLR  C
            ADD  A,#30H
            MOV @R1,A
            INC  R0
            INC  R1
            DJNZ R5,C_LOOP
            POP A
            RET
;=================================================================================
;====================DATA,TIME DISPLAY program====================================
TIME_DISPLAY:
            MOV   FIRST_ADD,#07H             ;显示位置第三行第七
            MOV   FIRST_LIN,#03H
            MOV   START_ADD,#00H
            ACALL	  LCDPOS		 ;调用调整地址单元子程序
	    MOV A, START_ADD		 ;设定DDRAM地址,显示位置地址
            ACALL LCDWC
            MOV    A,SEC_LCD2
            ACALL LCDWD
            MOV    A,SEC_LCD1
            ACALL LCDWD
            MOV   FIRST_ADD,#05H
            MOV   FIRST_LIN,#03H
            MOV   START_ADD,#00H
            ACALL	  LCDPOS
            MOV A, START_ADD
            ACALL LCDWC
            MOV    A,MIN_LCD4
            ACALL LCDWD
            MOV    A,MIN_LCD3
            ACALL LCDWD
            MOV   FIRST_ADD,#03H
            MOV   FIRST_LIN,#03H
            MOV   START_ADD,#00H
            ACALL	  LCDPOS
            MOV A, START_ADD
            ACALL LCDWC
            MOV    A,HOR_LCD6
            ACALL LCDWD
            MOV    A,HOR_LCD5
            ACALL LCDWD
            MOV   FIRST_ADD,#03H            ;星期显示位置
            MOV   FIRST_LIN,#02H
            MOV   START_ADD,#00H
            ACALL	  LCDPOS
            MOV A, START_ADD
            ACALL LCDWC
            MOV    R3,#05
            MOV    A,WEEK_LCD11
            SUBB   A,#30H
            MOV    B,#10
            MUL    AB
            MOV    B,A
            MOV    DPTR,#WEEK_TAB
WEEK_LOOP:
            MOVC    A,@A+DPTR
            ACALL LCDWD
            MOV    A,B
            INC    DPTR
            MOVC   A,@A+DPTR
            ACALL  LCDWD
            MOV    A,B
            INC    DPTR
            DJNZ   R3,WEEK_LOOP
            MOV    FIRST_ADD,#06H            ;设定日期显示位置
            MOV   FIRST_LIN,#01H
            MOV   START_ADD,#00H
            ACALL	  LCDPOS
            MOV A, START_ADD
            ACALL LCDWC
            MOV    A,DAT_LCD8
            ACALL LCDWD
            MOV    A,DAT_LCD7
            ACALL LCDWD
            MOV   FIRST_ADD,#04H
            MOV   FIRST_LIN,#01H
            MOV   START_ADD,#00H
            ACALL	  LCDPOS
            MOV A, START_ADD
            ACALL LCDWC
            MOV    A,MON_LCD10
            ACALL LCDWD
            MOV    A,MON_LCD9
            ACALL LCDWD
            MOV   FIRST_ADD,#01H
            MOV   FIRST_LIN,#01H
            MOV   START_ADD,#00H
            ACALL	  LCDPOS
            MOV A, START_ADD
            ACALL LCDWC
            MOV    A,YEAR_LCD14
            ACALL LCDWD
            MOV    A,YEAR_LCD13
            ACALL LCDWD
            RET
WEEK_TAB:   DB "ERROR!!!!!"
            DB "Mon/星期一"
            DB "Tue/星期二"
            DB "Wed/星期三"
            DB "Thu/星期四"
            DB "Fri/星期五"
            DB "Sat/星期六"
            DB "Sun/星期日"
            DB "          "
;=================================================================================
HZKLIB:  ;显示汉字子程序
     	    MOV   FIRST_ADD,#00H  		;设定字符/汉字显示起始位置为第一个显示单元
                                        ;设置firstadd可以从任意位置显示
            MOV   FIRST_LIN,#01H		;设定字符/汉字显示起始位置为第一行
            MOV   DPTR, #TAB 		;需要显示汉字机内码数据表
            MOV   HZK_WID,#08H		;每行显示汉字个数
            MOV   HZK_LIN,#04H		;显示行数
            MOV   START_ADD,#00H       	;清首个显示地址缓存单元
            ACALL	HZK_DISP             	;调用汉字显示子程序
            RET
HZK_DISP:   ;汉字显示子程序
	    MOV R1,HZK_WID
HZK10:	    ACALL	  LCDPOS		 ;调用调整地址单元子程序
	    MOV A, START_ADD		 ;设定DDRAM地址,显示位置地址
            ACALL LCDWC
HZK11:      CLR A				 ;因为要连续输入机内码高位(区码)、低位(位码)
            MOVC A, @A+DPTR		 ;所以要输入两次数据,如果是字符就是输入两个字符字符代码可以看说明书
            ACALL LCDWD			 ;DATA	LCDWC
            INC DPTR			 ;显示地址会自动加一,如果连续写就不用再输入地址,空白可用某空白汉字或字符代替
            CLR A
            MOVC A, @A+DPTR
            ACALL LCDWD
            ;LCALL DELAY03                 ;延时一下让字一个一个显示(spillar)
            INC   DPTR
            DJNZ  R1,HZK11
            MOV	R1,HZK_WID		;调整显示长度
            INC	   FIRST_LIN          	;跳到下一行
            DJNZ   HZK_LIN,HZK10
            RET
LCDRESET:
            ACALL DELAY              	;延时
					;首先选择基本指令集
            MOV A, #30H			;30---基本指令操作
            ACALL  LCDWC
            MOV    A,#30H                  ;使用8位控制界面
	    ACALL  LCDWC
            ACALL  DELAY01
            MOV A, #01H			;指令#01H为:清除屏幕文字,把地址指针指向00H单元
            ACALL  LCDWC			;
            ACALL  DELAY01
            MOV A, #06H			;指定在资料写入或读取时,设定游标的移动方向及指定显示的移位
            ACALL  LCDWC
            MOV    A,#0CH                  ;显示状态选择,整体显示ON
            CALL   LCDWC
            ACALL  DELAY01
            RET
;---------------------------------------------------------
;SEARCH ADDRESS                                          -
;目的是为了转换地址单元为DDRAM地址单元,以方便           -
;定义显示位置                                            -
;汉字显示DDRAM位置为:第一行:80H----87H                 -
;                     第二行:90H----97H                 -
;		      第三行:88H----8FH                 -
;		      第四行:98H----9FH                 -
;---------------------------------------------------------
LCDPOS:     PUSH	   DPH			;地址转换子程序
	    PUSH   	   DPL
	    PUSH	      A
	    MOV	  DPTR,#LINE_ADD		;LINE-ADD为地址表指针
  	    MOV	  A,FIRST_LIN
 	    MOVC  A,@A+DPTR
	    ADD	  A,FIRST_ADD
	    MOV	  START_ADD,A
	    POP	  A
	    POP	  DPL
	    POP	  DPH
	    RET
LINE_ADD:
	    DB  	00H,80H,90H,88H,98H,00H
READ:       MOV     P3, #0FCH       	;读数据子程序
					;P3--CONTRAL	I/O
            NOP				;P3=11111011B   RS=1	R/W=1   READ DATA
            SETB E				;E=E(I/O)
            LCALL  DELAY01
            MOV A, P0			;P1=DATA(I/O)
            NOP
            CLR E
            RET
CHK_BUSY:   PUSH    ACC
            CLR     RS			;读忙状态子程序
            SETB    RW
            SETB    E
CHK_B:      NOP
            JB   P0.7,CHK_B
            CLR  E
            POP  ACC
            RET


LCDWD:   ;写数据子程序
           LCALL	   CHK_BUSY		;P3--CONTRAL	I/O
           NOP				;RS=1	RW=0  WRITE DATA
           SETB	         RS
           CLR     	 RW
           SETB    E                       ;E=1
           MOV     P0, A			;P1=DATA(I/O)
           LCALL   DELAY01
           NOP
           CLR     E
           NOP
           MOV     P0,#0FFH
           RET



LCDWC:    ;写指令子程序
           LCALL	CHK_BUSY		;以确保上一指令/数据模块已经接收处理完
           NOP				;RS=0	WRITE	INSTRUTION
           CLR 	RS                      ;RW=0
           CLR	RW
           SETB E				;E=1
           MOV P0, A			;P1=DATA(I/O)
           LCALL  DELAY01
           NOP
           CLR E
           NOP
           MOV     P0,#0FFH
           RET
;****************************按键声音处理************************
SPKER:    CLR  P2.1
          ACALL DELAY03
          SETB P2.1
          RET

DELAY:  ;               延时子程序
         MOV  R5,#03H
DE_1:	 MOV  R6,#0FFH
DE_2:    MOV  R7,#0FFH
DE_3:    DJNZ R7,DE_3
         DJNZ R6,DE_2
         NOP
         NOP
         DJNZ R5, DE_1
         RET
DELAY01: MOV  R6, #6
DE_A:    MOV  R7, #0Fh
DE_B:    DJNZ R7, DE_B
         DJNZ R6, DE_A
         RET

DELAY02: MOV  R6, #50H
DE_A1:   MOV  R7, #0FFH
DE_B1:   DJNZ R7, DE_B1
         DJNZ R6, DE_A1
         RET
DELAY03: MOV  R5,#01H
DE_6:	 MOV  R6,#0BFH
DE_4:    MOV  R7,#0BFH
DE_5:    DJNZ R7,DE_5
         DJNZ R6,DE_4
         NOP
         NOP
         DJNZ R5,DE_6
         RET
TAB:     DB  "20  年//  月  日"
         DB  "Week--          "
         DB  "Time--  :   :   "
         DB  "TEL:13462320202 "
         DB  00H
END


⌨️ 快捷键说明

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