📄 2051 3208.asm
字号:
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 + -