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

📄 2051 3208.asm

📁 这是一个点阵电子钟的资料
💻 ASM
📖 第 1 页 / 共 2 页
字号:
		   MOV    A,@R0
		   RRC    A
		   MOV    @R0,A
		   MOV    A,R6
		   ORL    A,#0FCH
		   MOV    R6,A
		   MOV    A,@R1
		   ANL    A,R6
		   MOV    @R1,A
		   INC    R0
		   INC    R1
		   INC    R3
		   DJNZ   R4,MINUTESHI_GORAM
;以下对分钟个位处理		   
		   MOV    A,MINUTE_GEWEI
		   MOV    B,#08H
		   MUL    AB
		   MOV    R2,A
		   MOV    R1,#40H
		   MOV    R0,#10H
		   MOV    R3,#00H
		   MOV    R4,#08H
MINUTEGE_GORAM:    MOV    A,R2
		   ADD    A,R3
		   MOV    DPTR,#TABLE1
		   MOVC   A,@A+DPTR
		   RL     A
		   MOV    R6,A
		   MOV    A,@R0
		   ANL    A,R6
		   MOV    @R1,A
		   INC    R0
		   INC    R1
		   INC    R3
		   DJNZ   R4,MINUTEGE_GORAM
;以下对秒钟十位处理		   
		   MOV    A,SECOND_SHIWEI
		   MOV    B,#08H
		   MUL    AB
		   MOV    R2,A
		   MOV    R3,#00H
		   MOV    R1,#48H
		   MOV    R4,#08H
SECONDSHI_GORAM:   MOV    DPTR,#TABLE3
		   MOV    A,R2
		   ADD    A,R3
		   MOVC   A,@A+DPTR
		   SWAP   A
		   MOV    @R1,A
		   INC    R1
		   INC    R3
		   DJNZ   R4,SECONDSHI_GORAM
;以下对秒钟各位处理		   
		   MOV    A,SECOND_GEWEI
		   MOV    B,#08H
		   MUL    AB
		   MOV    R2,A
		   MOV    R3,#00H
		   MOV    R1,#48H 
		   MOV    R4,#08H
SECONDGE_GORAM:    MOV    DPTR,#TABLE3 
		           MOV    A,R2
		           ADD    A,R3
		           MOVC   A,@A+DPTR
		           MOV    R6,A
		           MOV    A,@R1
		           ANL    A,R6
		           MOV    @R1,A
		           INC    R1
		           INC    R3
		           DJNZ   R4,SECONDGE_GORAM
;以下将显示更新缓存数据传送至显示缓存		   
		           MOV    R1,#30H  
		           MOV    R0,#50H
		           MOV    R4,#32
GX_RAM2DIS_RAM:    MOV    A,@R1
		           MOV    @R0,A
		           INC    R0
		           INC    R1
		           DJNZ   R4,GX_RAM2DIS_RAM
		           RET
		   
;**********************************T0中断***********************************
;*用于点阵扫描显示,每次刷新一行,即4个数据。
;*待显示的数据在50H-6FH当中,共计32个数据
;*使用了第二组寄存器R0 和内存单元26H
;***************************************************************************
INTT0:             PUSH   ACC
 		           PUSH   PSW
		           MOV    PSW,#08H            ;使用第二组寄存器
		           MOV    TH0,#0F8H           ;设定刷新
		           MOV    TL0,#030H
		           MOV    A,P1                ;读取当前显示行号
                   ADD    A,#10H	      ;行号加1,由P1.4~P1.6输出    
                   MOV    26H,A               ;暂存新的行号
                   SWAP   A
                   ANL    A,#07H               ;取低三位,得到行号(00H-07H)
                   ADD    A,#68H               ;左起第四位偏址
                   MOV    R0,A
                   MOV    A,@R0
                   MOV    SBUF,A               ;输出列数据
WAITSEND595_0:     JBC    TI,SENDNEXT_0
		           AJMP   WAITSEND595_0
SENDNEXT_0:        MOV    A,R0
		           SUBB   A,#08H               ;左起第三位偏址
		           MOV    R0,A
		           MOV    A,@R0
		           MOV    SBUF,A
WAITSEND595_1:     JBC    TI,SENDNEXT_1
		           AJMP   WAITSEND595_1
SENDNEXT_1:        MOV    A,R0
		           SUBB   A,#08H                ;左起第二位偏址
		           MOV    R0,A
		           MOV    A,@R0
		           MOV    SBUF,A
WAITSEND595_2:     JBC    TI,SENDNEXT_2
		           AJMP   WAITSEND595_2
SENDNEXT_2:        MOV    A,R0
		           SUBB   A,#08H                ;左起第一位偏址
		           MOV    R0,A
		           MOV    A,@R0
		           MOV    SBUF,A
WAITSEND595_3:     JBC    TI,SENDNEXT_3
		           AJMP   WAITSEND595_3		
SENDNEXT_3:        SETB   G_138	           ;关显示,消影   
		           SETB   RCK_595          ;产生上升沿,595输入数据打入输出
		           MOV    P1,26H           ;写入行号
		           CLR    RCK_595          ;锁存列显示数据
		           CLR    G_138            ;打开显示
		           POP    PSW
		           POP    ACC
		           RETI                         
;**********************************T1中断***********************************
;*用于设置时间时的闪烁显示
;*使用了内存单元27H和20H的00H、01H两个做标志位
;***************************************************************************
INTT1:             PUSH   ACC
                   PUSH   PSW
                   DJNZ   INTT1_CONTER,GO_FLASH_END1
                   MOV    INTT1_CONTER,#04H
                   CPL    00H
                   JB     00H,GO_FLASH
                   MOV    HOUR_1302,HOUR_FLASH
                   MOV    MINUTE_1302,MINUTE_FLASH
                   AJMP   GO_FLASH_END
GO_FLASH:          JB     01H,GO_FLASH_MIN
                   MOV    HOUR_1302,#0AAH
                   AJMP   GO_FLASH_END
GO_FLASH_MIN:      MOV    MINUTE_1302,#0AAH
GO_FLASH_END:      LCALL  DISPLAY_RAM_WORK
GO_FLASH_END1:     POP    PSW
                   POP    ACC
                   RETI
;*******************************写DS1302程序********************************
;*调用前先赋值DS1302_ADDR 和 DS1302_DATA                                   
;*使用了寄存器R4                                                           
;***************************************************************************
WRITE_1302:        CLR    SCLK_1302
                   NOP
                   SETB   RST_1302
                   NOP
                   MOV    A,DS1302_ADDR
                   MOV    R4,#8
WRITE1:            RRC    A                    ;送地址给1302
                   NOP    
                   NOP    
                   CLR    SCLK_1302
                   NOP
                   NOP
                   MOV    IO_1302,C
                   NOP
                   NOP
                   SETB   SCLK_1302
                   NOP      
                   NOP        
                   DJNZ   R4,WRITE1
                   CLR    SCLK_1302
                   NOP
                   MOV    A,DS1302_DATA
                   MOV    R4,#8
WRITE2:            RRC    A                     ;送数据给1302
                   NOP                   
                   CLR    SCLK_1302
                   NOP
                   NOP
                   MOV    IO_1302,C
                   NOP
                   NOP
                   SETB   SCLK_1302
                   NOP
                   NOP
                   DJNZ   R4,WRITE2
                   CLR    RST_1302
                   RET
;*******************************读DS1302程序********************************
;*调用前先赋值DS1302_ADDR                                                  
;*读取出的数据保存在DS1302_DATA中                                          
;*使用了寄存器R4                                                           
;***************************************************************************
READ_1302:         CLR    SCLK_1302
                   NOP
                   SETB   RST_1302
                   NOP
                   MOV    A,DS1302_ADDR
                   MOV    R4,#8
READ1:             RRC    A                  ;送地址给1302
                   NOP
                   MOV    IO_1302,C
                   NOP
                   NOP
                   SETB   SCLK_1302
                   NOP
                   NOP
                   CLR    SCLK_1302
                   NOP
                   NOP
                   DJNZ   R4,READ1
		           MOV    R4,#8
READ2:             CLR    SCLK_1302
                   NOP    
                   NOP    
                   MOV    C,IO_1302            ;从1302中读出数据
                   NOP        
                   NOP          
                   NOP      
                   RRC    A
                   NOP
                   NOP
                   NOP
                   SETB   SCLK_1302
                   NOP
                   DJNZ   R4,READ2
                   MOV    DS1302_DATA,A
                   CLR    RST_1302
                   RET	    		   

;********************************加一子程序*********************************
;*输入待加数据在R7中                
;*输出在ACC
;*使用了寄存器R7                        
;***************************************************************************
SETTIME_ADD_1:     MOV    A,R7
                   ADD    A,#01H
                   CLR    C
                   DA     A
                   RET	   

;*********************************分离程序**********************************
;*功能:将从1302中读出的数据个位、十位分开
;*输入待分离数据在R1中
;*分离后数据输出高位在R2,低位在R3中
;*使用了寄存器R1、R2、R3
;***************************************************************************
DIVIDE_1302:       MOV    A,R1
                   ANL    A,#0FH
                   MOV    R3,A
                   MOV    A,R1
                   SWAP   A
                   ANL    A,#0FH
                   MOV    R2,A
                   RET		

;*********************************延时程序**********************************
DELAY3MS:      MOV  R7,#030H
D1221:	       MOV  R6,#030H
	           DJNZ R6,$
	           DJNZ R7,D1221
	           RET                    

;*******************************以下字模表一********************************
;*字模的提取方式为:逐行提取。
;*字模的显示方式为:单字阵列显示。
;*生成的字模格式:ASM十六进制                     
;*字模实际有效点阵为4*7点,
;*用于小时位、分钟位的显示                    
;***************************************************************************
TABLE1: DB 0FFH,0F9H,0F6H,0F6H,0F6H,0F6H,0F6H,0F9H ;这是“0”的字模。
		DB 0FFH,0FDH,0F9H,0FDH,0FDH,0FDH,0FDH,0F8H ;这是“1”的字模。
		DB 0FFH,0F9H,0F6H,0FEH,0FDH,0FBH,0F7H,0F0H ;这是“2”的字模。
		DB 0FFH,0F9H,0F6H,0FEH,0F9H,0FEH,0F6H,0F9H ;这是“3”的字模。
		DB 0FFH,0FDH,0F9H,0F5H,0F5H,0F0H,0FDH,0FDH ;这是“4”的字模。
		DB 0FFH,0F0H,0F7H,0F1H,0FEH,0FEH,0F6H,0F9H ;这是“5”的字模。
		DB 0FFH,0F9H,0F6H,0F7H,0F1H,0F6H,0F6H,0F9H ;这是“6”的字模。
		DB 0FFH,0F0H,0FEH,0FDH,0FBH,0FBH,0FBH,0FBH ;这是“7”的字模。
		DB 0FFH,0F9H,0F6H,0F6H,0F9H,0F6H,0F6H,0F9H ;这是“8”的字模。
		DB 0FFH,0F9H,0F6H,0F6H,0F8H,0FEH,0F6H,0F9H ;这是“9”的字模。
        DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH ;不显示

TABLE2: DB 0FFH,0FFH,0FFH,0EFH,0FFH,0EFH,0FFH,0FFH ;这是“:”的字模。

;*******************************以下字模表二******************************** 
;*字模的提取方式为:逐行提取。
;*字模的显示方式为:单字阵列显示。
;*生成的字模格式:ASM十六进制                     
;*字模实际有效点阵为3*5点,
;*用于秒钟位的显示                    
;***************************************************************************
TABLE3: DB 0FFH,0FFH,0FFH,0F8H,0FAH,0FAH,0FAH,0F8H ;这是“0”的字模。
		DB 0FFH,0FFH,0FFH,0FDH,0FDH,0FDH,0FDH,0FDH ;这是“1”的字模。
		DB 0FFH,0FFH,0FFH,0F8H,0FEH,0F8H,0FBH,0F8H ;这是“2”的字模。
		DB 0FFH,0FFH,0FFH,0F8H,0FEH,0F8H,0FEH,0F8H ;这是“3”的字模。
		DB 0FFH,0FFH,0FFH,0FAH,0FAH,0F8H,0FEH,0FEH ;这是“4”的字模。
		DB 0FFH,0FFH,0FFH,0F8H,0FBH,0F8H,0FEH,0F8H ;这是“5”的字模。
		DB 0FFH,0FFH,0FFH,0F8H,0FBH,0F8H,0FAH,0F8H ;这是“6”的字模。
		DB 0FFH,0FFH,0FFH,0F8H,0FEH,0FEH,0FEH,0FEH ;这是“7”的字模。
		DB 0FFH,0FFH,0FFH,0F8H,0FAH,0F8H,0FAH,0F8H ;这是“8”的字模。
		DB 0FFH,0FFH,0FFH,0F8H,0FAH,0F8H,0FEH,0F8H ;这是“9”的字模。
		
		END

⌨️ 快捷键说明

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