您的位置:首页 > 编程语言

16*16精确字幕时钟汇编代码

2006-01-14 16:57 330 查看
;******* variable table ****

; 021H~022H;RDWORD

; 030H,031H;HOUR
; 032H; :
; 033H,034H;MINUTE
; 035H, :
; 036H,037H;SECOND
; 038H;NUL SCR

; 023H;HOUR
; 024H;MINUTE
; 025H;SECOND
; 026H;JINZHI 函数
; 027H
; 028H TEMP
; 03EH;SCRLENGTH
; 0200h
; 0201h;interrupt_0 mark

; 03BH;TABLE VALUE
; ;03CH;BIT_INDEX
; ;03DH;R3,TMP
; 03EH; SCRSTKLEN
; 03FH; SEEK_VALUE

; 0200H;BIT BITEND
; 0201H NEW_STACK
;
; 040H~05FH; SCREEN STACK
; 1区
; r5,r7;null
; R5;秒计数器
;

;******** FUNCTION TABLE ***
; T0START
; T0SERV
; SETTIME
; SETTB
; RDBYTE
; REWORD
; RDTABVALUE
; DISPLAY
; CLSSCR
; FRAME
; CHK_BIT_END
; CHK_SRC_STACK
; POP_SCR_STACK
; inc_hour;int0
; inc_minute;int1

;******** START *****
ORG 0000H;
RESET: AJMP START;
ORG 0003H;
;AJMP INTERRUPT_0;

ORG 000BH;
AJMP T0SERV
ORG 0013H;
;INTERRUPT_1:
ORG 001BH;
;AJMP: INTERRUPT_TIMER0:
ORG 0023H;
;SINT

ORG 0100H;
START:
;SETB P3.2;
;SETB P3.3;
MOV SP,#60H;
CALL CLS_SCR_STACK;
CALL SETTIME;
SETB 0200H;
MOV 03CH,#0FFH;
TIME_RESET:

MOV R5,#014H;(20)D 1 SECOND
MOV 025H,#00H
CALL INC_MINUTE;
CALL INC_HOUR;
CALL T0START;
MAIN:
PRESS_INC_HOUR:
JB P3.2,PRESS_INC_HOUR_END;
JNB P3.2,$;
INC 023H;
AJMP TIME_RESET;
PRESS_INC_HOUR_END:
PRESS_INC_MINUTE:
JB P3.3,PRESS_INC_MINUTE_END;
JNB P3.3,$;
INC 024H;
AJMP TIME_RESET;
PRESS_INC_MINUTE_END:
call display
AJMP MAIN
;***** display *******
display:
MOV R4,#03H;
display_AA:
CALL FRAME;
DJNZ R4,display_AA;
CALL POP_SCR_STACK;
CALL PUSH_SCR_STACK;
display_end:ret
;********* CLS_SCR_STACK ***
CLS_SCR_STACK:
MOV R1,#040H;
MOV R0,#20H;
CLS_SCR_STACK_LOOP:
MOV @R1,#00H;
INC R1;
DJNZ R0,CLS_SCR_STACK_LOOP;

CLS_SCR_STACK_RET: RET

;********* T0START *******
T0START:

MOV TL0,#0bH;
MOV TH0,#03DH;
MOV TMOD,#00000001B;
setb EA;
setb ET0;
setb TR0;
RET;
;** T0SERV *******
T0SERV:
MOV 027H,A;
MOV A,TL0;
cjne a,#08h,repaire1; 2
nop
nop

ajmp repaire; 2
repaire1:
cjne a,#07h,repaire2; 2
nop

ajmp repaire; 2
repaire2:
cjne a,#06h,repaire3;

ajmp repaire;
repaire3:
nop
nop
nop
repaire:

MOV A,027H;
DJNZ R5,T0SERV_AA;
CALL INC_TIME;
MOV R5,#014H;
AJMP T0SERV_BB;

T0SERV_AA:
MOV 027H,#34
DJNZ 027H,$
NOP

T0SERV_BB:

MOV TH0,#03DH;
MOV TL0,#0bH;

T0SERV_RET: RETI;

;******* GARRIS0N *****
;有两个参数,一个是要检查的进位,还有一个是要进的位?
;SETB PSW.3
;MOV R0,SCR
;MOV R1,DEST;
;MOV 026H;JINZHI

GARRISON:
;INC @R0;
MOV A,@R0;
CJNE A,026H,GARRISON_REPAIRE;(026)jin'zhi
INCREASE_HIGH:
MOV @R0,#00H;
INC @R1;
AJMP GARRISON_RET;

GARRISON_REPAIRE:
NOP;
NOP;
NOP;
NOP;
GARRISON_RET:

CLR PSW.3;
RET

;******* INC_TIME *******
INC_TIME:
CALL INC_SECOND;
CALL INC_MINUTE;
CALL INC_HOUR;
INC_TIME_RET:
RET

;*** INC_SECOND *****
; 023H;HOUR
; 024H;MINUTE
; 025H;SECOND
INC_SECOND:
SETB PSW.3;
MOV R0,#025H;
MOV R1,#024H;
INC @R0;
MOV 026H,#03CH;
CALL GARRISON;
INC_SECOND_RET:
RET;
;** INC_MINUTE ******
INC_MINUTE:
SETB PSW.3;
MOV R0,#024H;
MOV R1,#023H;
MOV 026H,#03CH;
CALL GARRISON;
INC_MINUTE_RET:
RET;
;******* INC_HOUR ***
INC_HOUR:
SETB PSW.3;
MOV R0,#023H;
MOV R1,#027H;
MOV 026H,#018H;24D
CALL GARRISON;
INC_HOUR_RET:
RET;

;*** SETTIME *****
SETTIME: MOV 023H,#12;时
MOV 024H,#42;分
MOV 025H,#00;秒
CALL SETTB;
RET

;***** SETTB (SET TIME BIT)********
; 038H;HOUR
; 039H;MINUTE
; 03AH;SECOND
;
; 030H,031H;HOUR
; 032H; :
; 033H,034H;MINUTE
; 035H, :
; 036H,037H;SECOND
SETB PSW.4
SETTB:
MOV R0,#23H;
MOV R1,#030H;
MOV R2,#03H;
SETTB_AA:
CALL SET_ONE_BIT;
DJNZ R2,SETTB_AA;

MOV 038H,#0BH;
CLR PSW.4

SETTB_RET:RET
;******* SET_ONE_BIT ******
SET_ONE_BIT:
;MOV R0,#023H;
;MOV R1,#030H;

MOV A,@R0
MOV B,#0AH;
DIV AB;
MOV @R1,A;
INC R1;
MOV @R1,B;
INC R1;

MOV A,R1;
CJNE A,#038H,SET_ONE_BIT_AA;
AJMP SET_ONE_BIT_BB;
SET_ONE_BIT_AA:
MOV @R1,#0AH;
SET_ONE_BIT_BB:
INC R1;
INC R0;

SET_ONE_BIT_RET: RET
;**** RDBYTE ***
RDBYTE:
MOV A,#00H;
MOVC A,@A+DPTR;
INC DPTR;
RET

;** RDWORD ****
RDWORD:
;WORD buffer is 016h @ 017h;
CALL RDBYTE;
MOV 021H,A;
CALL RDBYTE;
MOV 022H,A;
RET
;**** READTABVALUE *******
; 03BH;READTABVALUE
; VARIABLE SEEK_VALUE
; 03FH; SEEK_VALUE
; RETURN TAB VALUE IN OBH
; RETURN TAB DATA'S DPTR IN DPTR
RDTABVALUE:
MOV 03BH,#0FFH;
;MOV A,03FH;把要查的值给a
MOV DPTR,#TAB0;
RTVLOOP:
MOV A,03FH;
CJNE A,03BH,RTVLOOP1;比较readtabvalue的值和要查找?
AJMP RDTV_RET;
RTVLOOP1:
CALL RDWORD;
MOV A,021H;
CJNE A,#0CEH,RTVLOOP1;
MOV 03BH,022H;
AJMP RTVLOOP;
RDTV_RET: RET

;********* FRAME ********
; 0CH FRAME WIDTH
; 0DH TIME LENGTH
FRAME:
;SETB PSW.4
CALL CLSSCR;
MOV P1,#00H;
MOV R0,#05FH;
MOV R1,#010H;
FRAMEAA:
MOV P0,#00H;
MOV P2,P0;
MOV R6,#019H;
DJNZ R6,$;

MOV P2,@R0;
DEC R0;
MOV P0,@R0;
CALL DELAY

DEC R0;
inc P1;
DJNZ R1,FRAMEAA;
;CLR PSW.4
RET

;******** DELAY ******

DELAY:

MOV R3,#05H;
DELAY1:
MOV R2,#05FH;
DJNZ R2,$;
DJNZ R3,DELAY1;

DELAY_RET: RET
;******* CLRP0P2 ****
;CLRP0P2:
; MOV P0,#00H;
; MOV P2,P0;
;RET

;******** CHK_BIT_END *******
; BIT 0200H;RSC STACK FLOOD FLAG
;CHK_BIT_END:
; MOV A,#00H;
; INC DPTR;
;RDBYTE

CHK_BIT_END_RET:RET

;********** RD_BIT_A_WORD ***
; 0200H;BIT BITEND
RD_BIT_A_WORD:
JB 0200H,RD_NEXT_BIT;
RD_NEXT_BIT_RET:
CALL RDWORD;
MOV A,#01H;
MOVC A,@A+DPTR;
CJNE A,#0CFH,RD_BIT_A_WORD_RET
SETB 0200H;

RD_BIT_A_WORD_RET: RET

;****** RD_NEXT_BIT **********
; ;03CH;BIT_INDEX

; 030H,031H;HOUR
; 032H; :
; 033H,034H;MINUTE
; 035H, :
; 036H,037H;SECOND

; 03BH;READTABVALUE
; VARIABLE SEEK_VALUE
; 03FH; SEEK_VALUE
; RETURN TAB VALUE IN OBH
; RETURN TAB DATA'S DPTR IN DPTR

RD_NEXT_BIT:
CLR 0200H;
INC 03CH;
MOV R0,03CH;
CJNE R0,#09H,RD_NEXT_BIT_AA;
RD_NEXT_BIT_BB:
MOV 03CH,#0FFH;
;DEBUG CALL INC_TIME;
CALL SETTB
AJMP RD_NEXT_BIT;

RD_NEXT_BIT_AA:
;DEBUG
;SETB PSW.3
;SETB PSW.4
;CALL SETTB;
;CLR PSW.3
;CLR PSW.4;
;DEBUG
MOV A,#030H;
ADD A,R0;
MOV R0,A;
MOV 03FH,@R0;
CALL RDTABVALUE;
AJMP RD_NEXT_BIT_RET

;*** CLSSCR********
CLSSCR:
;MOV P1,00H;
MOV P0,#00H;
MOV P2,P0;
RET

;***** POP_SCR_STACK *******
POP_SCR_STACK:
MOV R0,#05FH;
MOV R1,#05DH;
;MOV R3,#02H;
POP_SCR_STACKBB:
MOV R2,#01FH;
POP_SCR_STACKAA:
MOV A,@R1
MOV @R0,A;
DEC R0
DEC R1
DJNZ R2,POP_SCR_STACKAA;
;DJNZ R3,POP_SCR_STACKBB;
;DEC 03EH;
POP_SCR_STACK_RET: RET

;**** PUSH_SCR_STACK ****
PUSH_SCR_STACK:
CALL RD_BIT_A_WORD;
MOV 040H,021H;
MOV 041H,022H;
PUSH_SCR_STACK_RET: RET

;*** TAB *****
TAB0:
;0[16*16]下上列排
DB 0CEH,00H;
DB 00h, 00h
DB 00h, 00h
DB 0F0h, 0Fh, 0F8h, 1Fh, 0Ch, 30h, 04h, 20h
DB 04h, 20h, 04h, 20h, 0Ch, 30h, 0F8h, 1Fh
DB 0F0h, 0Fh
DB 0CFH,0CFH;
TAB1:
;1[16*16]下上列?

DB 0CEH,01H;
DB 00h, 00h
DB 00H,00H
DB 00h, 00h, 08h, 20h, 0F8h, 3Fh
DB 0FCh, 3Fh, 00h, 20h
DB 0CFH,0CFH;
TAB2:
;2[16*16]下上列排

DB 0CEH,02H;
DB 00h, 00h
DB 00h, 00h
DB 30h, 20h, 38h, 30h, 0Ch, 38h, 04h, 2Ch
DB 04h, 26h, 0Ch, 23h, 0F8h, 21h, 0F0h, 38h
DB 0CFH,0CFH;
TAB3:
;3[16*16]下上列排

DB 0CEH,03H;
DB 00h, 00h
DB 00h, 00h
DB 10h, 08h, 18h, 18h, 0Ch, 30h, 84h, 20h
DB 84h, 20h, 0CCh, 31h, 78h, 1Fh, 30h, 0Eh
DB 0CFH,0CFH;
TAB4:
;4[16*16]下上列排

DB 0CEH,04H;
DB 00h, 00h
DB 00h, 00h, 00h, 06h
DB 80h, 07h, 0C0h, 05h, 70h, 04h, 18h, 24h
DB 0FCh, 3Fh, 0FEh, 3Fh, 00h, 24h, 00h, 04h
DB 0CFH,0CFH;
TAB5:
;5[16*16]下上列排

DB 0CEH,05H;
DB 00h, 00h
DB 00h, 00h
DB 0FCh, 08h, 0FCh, 18h, 0C4h, 30h, 44h, 20h
DB 44h, 20h, 0C4h, 30h, 84h, 1Fh, 04h, 0Fh
DB 0CFH,0CFH;
TAB6:
;6[16*16]下上列排
DB 0CEH,06H
DB 00h, 00h
DB 00h, 00h
DB 0F0h, 0Fh, 0F8h, 1Fh, 8Ch, 30h, 44h, 20h
DB 44h, 20h, 0CCh, 30h, 98h, 1Fh, 10h, 0Fh
DB 0CFH,0CFH;
TAB7:
;7[16*16]下上列排

DB 0CEH,07H;
DB 00h, 00h
DB 00h, 00h
DB 1Ch, 00h, 0Ch, 00h, 0Ch, 3Ch, 0Ch, 3Fh
DB 0CCh, 03h, 0ECh, 00h, 3Ch, 00h, 1Ch, 00h
DB 0CFH,0CFH;
TAB8:
;8[16*16]下上列排

DB 0CEH,08H;
DB 00h, 00h
DB 00h, 00h
DB 30h, 0Eh, 78h, 1Fh, 0CCh, 31h, 84h, 20h
DB 84h, 20h, 0CCh, 31h, 78h, 1Fh, 30h, 0Eh
DB 0CFH,0CFH;
TAB9:
;9[16*16]下上列排

DB 0CEH,09H;
DB 00h, 00h
DB 00h, 00h
DB 0F0h, 08h, 0F8h, 19h, 0Ch, 33h, 04h, 22h
DB 04h, 22h, 0Ch, 33h, 0F8h, 1Fh, 0F0h, 0Fh
DB 0CFH,0CFH;

TABA:
;:[16*16]下上列排

DB 0CEH,0AH;
DB 00h, 00h
DB 00h, 00h
DB 01100000B,00000110B,01100000B,00000110B
DB 0CFH,0CFH;

DB 0CEH,0BH;尾标示
;------------过渡尾数据--------------
DB 00H,00H,00H,00H,00H,00H,00H,00H
DB 00H,00H,00H,00H,00H,00H,00H,00H
DB 00H,00H,00H,00H,00H,00H,00H,00H
DB 00H,00H,00H,00H,00H,00H,00H,00H
DB 0CFH,0CFH;

END
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: