2013年8月13日 星期二

8051-Led Display

;*******************************************
; 8 LED Display Scan Mode
;
;
;CPU: STC90C54RD+
;XTAL: 12.000MHz
;*******************************************
;
;
TEMP_BUF EQU 40H
DISPLAY_BUF EQU 48H
COL_BUF EQU 50H

START EQU     100H

                ORG     0
AJMP START

ORG 0BH
AJMP SCAN

;*******************************************
ORG START
LCALL CLR_RAM
MOV TMOD,#21H
MOV TH0,#0FCH ;1mS
MOV TL0,#018H
SETB RS0
MOV R4,TH0
MOV R5,TL0
MOV R0,#48H ;Display Buffer
MOV R1,#50H ;Column Buffer
CLR RS0
SETB ET0
SETB TR0
MOV SP,#15
;
;*******************************************
MOV R0,#COL_BUF
MOV DPTR,#COLUMNDATA
INITCOLUMN:
CLR A
MOVC A,@A+DPTR
MOV @R0,A
INC R0
INC DPTR
CJNE R0,#58H,INITCOLUMN
    SETB EA
;
;*******************************************
ACALL CLEAR_SCREEN
STATUS:
ACALL GET_DATA
ACALL PUT_BUF
AJMP $
;
;*******************************************
GET_DATA:
MOV R1,#TEMP_BUF
MOV DPTR,#DISPLAY_DATA
GET_DATA1:
CLR A
MOVC A,@A+DPTR
CJNE A,#0CCH,GET_DATA2
RET
GET_DATA2:
MOV @R1,A
INC R1
INC DPTR
AJMP GET_DATA1
;
;*******************************************
PUT_BUF:
MOV R0,#DISPLAY_BUF
MOV DPTR,#CHAR_TABLE
MOV R1,#TEMP_BUF
PUT_BUF1:
MOV A,@R1
CJNE A,#0FFH,PUT_BUF2
AJMP PUT_BUF3
PUT_BUF2:
MOVC A,@A+DPTR
MOV @R0,A
PUT_BUF3:
INC R0
INC R1
CJNE R0,#DISPLAY_BUF+8,PUT_BUF1
RET
;
;*******************************************
CLEAR_SCREEN:
MOV R0,#DISPLAY_BUF
MOV R3,#8
CLEAR1:
MOV @R0,#0 ;Blank
INC R0
DJNZ R3,CLEAR1
RET
;*******************************************
SCAN:
PUSH PSW
PUSH ACC
SETB RS0
MOV TH0,R4
MOV TL0,R5
MOV P0,@R0
INC R0
MOV P2,@R1
; MOV P2,A
INC R1
CJNE R0,#50H,SCAN_QUIT
MOV R0,#48H
MOV R1,#50H
SCAN_QUIT:
CLR RS0
POP ACC
POP PSW
RETI
;
;*******************************************
CLR_RAM:
MOV R0,#010H
CLR_R:
MOV @R0,#0FFH
INC R0
CJNE R0,#0H,CLR_R
RET
;
;*******************************************
CHAR_TABLE:
DB 03FH,006H,05BH,04FH,066H ;0 to 4
DB 06DH,07DH,007H,038H,06FH ;5 to 9
DB 77H,7CH,39H,5EH,79H,71H ;A to F
DB 0
;
;*******************************************
DISPLAY_DATA:
;             DB 1,2,3,4,5,6,7,8,0CCH
DB 15,10,12,14,16,10,11,3,7,0CCH
;*******************************************
COLUMNDATA:
 DB 00000000B
 DB 00000100B
 DB 00001000B
 DB 00001100B
 DB 00010000B
 DB 00010100B
 DB 00011000B
 DB 00011100B
;
;*******************************************

                END





沒有留言:

張貼留言