📄 matrixled.asm
字号:
;**********************************************************************************
;* *
;* AAAA CCCCCCCCCC UU UU TTTTTTTTTTT EEEEEEEEEEE CCCCCCCCCC *
;* AA AA CCCC UU UU TT EE CCC *
;* AAAAAAAA CCC UU UU TT EEEEEEEEEEE CCC *
;* AA AA CCCC UU UU TT EE CCCC *
;* AA AA CCCCCCCCCC UUUUUUU TT EEEEEEEEEEE CCCCCCCCCC *
;* *
;**********************************************************************************
;* *
;* User Name : ACUTEC Corporation *
;* *
;* System Name :test board *
;* *
;* Function : Matrix led driving *
;* *
;* CPU : uPD78F0547D
;*
;* Using system resource:P01-P04;P64-P67 ; Timer H1 *
;* *
;* Last Update : 2005-12-19 10:45 *
;* *
;* File Name : MatrixLED.asm *
;* *
;* Copyright AcuTec Co. Ltd. *
;**********************************************************************************
;#include "init.h"
$IC (MatrixLED.H)
;----------------------------------------------------------------------------------
Init_CSEG CSEG
;==================================================================================
;Function Module:PowerReset
;Input:
;Output:
;Internal Data:
;Fuction:(1)CPU init
; (2)PORT init
; (3)RAM and REGISTER init
; (4)Intterupt init
; (5)16-bit timer init;
; =================================================================================
Start:
NOP
NOP
NOP
DI
MOVW AX,#M_stack ; Stack setup
MOVW SP,AX
;+----------------------------------------------+
;| Primary Hardwear Setup |
;+----------------------------------------------+
CALL !CPU_init ; CPU SETUP
Start00:
BF RCM.7,$Start00
CALL !INT_init ; INT SETUP
;+----------------------------------------------+
;| RAM Initialize |
;+----------------------------------------------+
CALL !RAM_init ; Ram setup
CALL !Port_init ; PORT SETUP
;+----------------------------------------------+
;| AD Initialize |
;+----------------------------------------------+
CALL !AD_init
;+----------------------------------------------+
;| CSIA0 Initialize |
;+----------------------------------------------+
CALL !CSIA0_INIT
MOV A,#0
MOV SIOA0,A
;+----------------------------------------------+
;| Timer Initialize |
;+----------------------------------------------+
CALL !TimerH1_init
CALL !TimerH1_start
CALL !TimerH0_init
EI
;MOV A,#0
;MOV P7,A
MOV KEY_VALUE,#00H
MOV KEY_IN,#00H;
MOV KEY_OUT,#00H;
Main:
CALL !KEY_SCAN;
CALL !LED_SHOW;
;==================================================================================
;Function Module:KEY_SCAN
;Input:
;Output:
;Internal Data:
;Fuction:count the puls,equ
; =================================================================================
KEY_SCAN:
INITIAL:
MOV A,#00000000B;
MOV P5,A;
MOV A,P7;
CMP A,#11111111B;
BZ $INITIAL;
BR $SCAN_ROW1;
SCAN_ROW1:
MOV A,#00001110B;
MOV P5,A;
MOV A,P7;
CMP A,#11111111B;
BZ $SCAN_ROW2;
ROR A,1;
BC $STEP_1;
MOV KEY_VALUE,#_KD1;
RET;
STEP_1:
ROR A,1;
BC $STEP_2;
MOV KEY_VALUE,#_KD2;
RET;
STEP_2:
ROR A,1;
BC $STEP_3;
MOV KEY_VALUE,#_KD3;
RET;
STEP_3:
ROR A,1;
BC $STEP_4;
MOV KEY_VALUE,#_KD4;
RET;
STEP_4:
ROR A,1;
BC $STEP_5;
MOV KEY_VALUE,#_KD5;
RET;
STEP_5:
ROR A,1;
BC $STEP_6;
MOV KEY_VALUE,#_KD6;
RET;
STEP_6:
ROR A,1;
BC $STEP_7;
MOV KEY_VALUE,#_KD7;
RET;
STEP_7:
ROR A,1;
BC $SCAN_ROW2;
MOV KEY_VALUE,#_KD8;
RET;
SCAN_ROW2:
MOV A,#00001101B;
MOV P5,A;
MOV A,P7;
CMP A,#11111111B;
BZ $SCAN_ROW3;
ROR A,1;
BC $STEP_9;
MOV KEY_VALUE,#_KD9;
RET;
STEP_9:
ROR A,1;
BC $STEP_10;
MOV KEY_VALUE,#_KD10;
RET;
STEP_10:
ROR A,1;
BC $STEP_11;
MOV KEY_VALUE,#_KD11;
RET;
STEP_11:
ROR A,1;
BC $STEP_12;
MOV KEY_VALUE,#_KD12;
RET;
STEP_12:
ROR A,1;
BC $STEP_13;
MOV KEY_VALUE,#_KD13;
RET;
STEP_13:
ROR A,1;
BC $STEP_14;
MOV KEY_VALUE,#_KD14;
RET;
STEP_14:
ROR A,1;
BC $STEP_15;
MOV KEY_VALUE,#_KD15;
RET;
STEP_15:
ROR A,1;
BC $SCAN_ROW3;
MOV KEY_VALUE,#_KD16;
RET;
SCAN_ROW3:
MOV A,#00001011B;
MOV P5,A;
MOV A,P7;
CMP A,#11111111B;
BZ $SCAN_ROW4;
ROR A,1;
BC $STEP_17;
MOV KEY_VALUE,#_KD17;
RET;
STEP_17:
ROR A,1;
BC $STEP_18;
MOV KEY_VALUE,#_KD18;
RET;
STEP_18:
ROR A,1;
BC $STEP_19;
MOV KEY_VALUE,#_KD19;
RET;
STEP_19:
ROR A,1;
BC $STEP_20;
MOV KEY_VALUE,#_KD20;
RET;
STEP_20:
ROR A,1;
BC $STEP_21;
MOV KEY_VALUE,#_KD21;
RET;
STEP_21:
ROR A,1;
BC $STEP_22;
MOV KEY_VALUE,#_KD22;
RET;
STEP_22:
ROR A,1;
BC $STEP_23;
MOV KEY_VALUE,#_KD23;
RET;
STEP_23:
ROR A,1;
BC $SCAN_ROW4;
MOV KEY_VALUE,#_KD24;
RET;
SCAN_ROW4:
MOV A,#00000111B;
MOV P5,A;
MOV A,P7;
CMP A,#11111111B;
BZ $DISP_END;
ROR A,1;
BC $STEP_25;
MOV KEY_VALUE,#_KD25;
RET;
STEP_25:
ROR A,1;
BC $STEP_26;
MOV KEY_VALUE,#_KD26;
RET;
STEP_26:
ROR A,1;
BC $STEP_27;
MOV KEY_VALUE,#_KD27;
RET;
STEP_27:
ROR A,1;
BC $STEP_28;
MOV KEY_VALUE,#_KD28;
RET;
STEP_28:
ROR A,1;
BC $STEP_29;
MOV KEY_VALUE,#_KD29;
RET;
STEP_29:
ROR A,1;
BC $STEP_30;
MOV KEY_VALUE,#_KD30;
RET;
STEP_30:
ROR A,1;
BC $STEP_31;
MOV KEY_VALUE,#_KD31;
RET;
STEP_31:
ROR A,1;
BC $DISP_END;
MOV KEY_VALUE,#_KD32;
RET;
DISP_END:
RET
;==================================================================================
;Function Module:LED_SHOW
;Input:
;Output:
;Internal Data:
;Fuction:count the puls,equ
; =================================================================================
LED_SHOW:
MOV A,#00000000B;
MOV P5,A;
MOV P4,A;
MOV A,KEY_VALUE;
ADD A,#0;
ADJBA ;
MOV KEY_OUT,A;
AND A,#00001111B;
MOV KEY_IN,A;
MOV A,KEY_OUT;
ROR A,1;
ROR A,1;
ROR A,1;
ROR A,1;
AND A,#00001111B;
MOV KEY_OUT,A;
MOVW HL,#LED_TABLE
CIRCLE:
MOV A,#11101111B;
MOV P5,A;
MOV A,KEY_IN;
MOV B,A;
MOV A,[HL+B];
MOV P4,A;
MOV A,#0;
MOV P4,A;
MOV A,#11011111B;
MOV P5,A;
MOV A,KEY_OUT;
MOV B,A;
MOV A,[HL+B];
MOV P4,A;
MOV A,#0;
MOV P4,A;
BR CIRCLE
LED_END:
RET
;==================================================================================
;Function Module:LED_TABLE
;Input:
;Output:
;Internal Data:
;Fuction:count the puls,equ
; =================================================================================
LED_TABLE:
DB 03FH
DB 006H
DB 05BH
DB 04FH
DB 066H
DB 06DH
DB 07DH
DB 007H
DB 07FH
DB 06FH
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -