?? main.asm
字號:
;*************************************************************************
; main.asm
; 16×16 LED點陣的掃描顯示:顯示一個漢字
;*************************************************************************
;*************************************************************************
;定義I/O端口
;*************************************************************************
STR BIT P1.3 ;74HC595存儲寄存器時鐘(Stroage register clock)
SI BIT P1.4 ;74HC595串行輸入信號(Serial Input)
SCK BIT P1.5 ;74HC595移位寄存器時鐘(Shift register clock)
;*************************************************************************
;定義變量
;*************************************************************************
T1INTSVC_n DATA 0x30 ;用于函數T1INTSVC()
;*************************************************************************
;復位入口
;*************************************************************************
ORG 0x0000
LJMP PreMain
;*************************************************************************
;定時器T1中斷入口
;*************************************************************************
ORG 0x001B
LJMP T1INTSVC
;*************************************************************************
;進入主程序之前的初始化
;*************************************************************************
PreMain:
MOV SP, #0x30
MOV T1INTSVC_n, #0x00
LJMP main
;*************************************************************************
;函數:void SysInit()
;功能:系統初始化
;*************************************************************************
SysInit:
SETB STR
CLR SI
CLR SCK
ANL TMOD, #0x0F
ORL TMOD, #0x10
MOV TH1, #0xFC
MOV TL1, #0x66 ;定時1ms
SETB TR1
SETB ET1
SETB EA
RET
;*************************************************************************
;定義漢字點陣數據表
;*************************************************************************
Zimo:
;文字:漢,字體:Fixedsys12,大?。?6×16,取模方式:縱向取模、字節正序
DB 0x08,0x06,0x80,0x61,0x06,0x20,0x38,0x27,0x20,0x20,0x20,0x27,0x38,0x20,0x00,0x00
DB 0x20,0x20,0x7E,0x80,0x02,0x04,0x04,0x08,0xD0,0x20,0xD0,0x08,0x0C,0x06,0x04,0x00
;*************************************************************************
;函數:void T1INTSVC() interrupt 3
;*************************************************************************
T1INTSVC:
;unsigned char d;
;unsigned char i;
;unsigned char j;
;unsigned char buf[4];
;處理定時器T1
CLR TR1
MOV TH1, #0xFC
MOV TL1, #0x66
SETB TR1
;保護寄存器
PUSH ACC
PUSH PSW
PUSH DPH
PUSH DPL
PUSH 0x00
PUSH 0x02
PUSH 0x03
PUSH 0x04
;分配數組buf[4]
MOV A, SP
INC A
MOV R4, A
ADD A, #3
MOV SP, A
;查表,取得要發送的數據
MOV R0, 0x04
MOV DPTR, #T1INTSVC_Tab
MOV A, T1INTSVC_n
MOVC A, @A+DPTR
MOV @R0, A
INC R0
MOV A, T1INTSVC_n
ADD A, #16
MOVC A, @A+DPTR
MOV @R0, A
INC R0
MOV DPTR, #Zimo
MOV A, T1INTSVC_n
ADD A, #16
MOVC A, @A+DPTR
MOV @R0, A
INC R0
MOV A, T1INTSVC_n
MOVC A, @A+DPTR
MOV @R0, A
INC T1INTSVC_n
ANL T1INTSVC_n, #0x0F
;向74HC595發送數據
CLR STR
MOV R2, #0
T1INTSVC_for:
MOV A, R4
ADD A, R2
MOV R0, A
MOV A, @R0
MOV R3, #8
T1INTSVC_do:
MOV C, ACC.0
MOV SI, C
SETB SCK
RR A
CLR SCK
DJNZ R3, T1INTSVC_do
INC R2
CJNE R2, #4, T1INTSVC_for
SETB STR
;釋放數組buf[4]
MOV A, SP
CLR C
SUBB A, #4
MOV SP, A
;恢復寄存器
POP 0x04
POP 0x03
POP 0x02
POP 0x00
POP DPL
POP DPH
POP PSW
POP ACC
;中斷返回
RETI
T1INTSVC_Tab:
;定義掃描數據表
DB 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE
DB 0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
;*************************************************************************
;函數:void main()
;功能:主函數
;*************************************************************************
main:
LCALL SysInit
SJMP $
;*************************************************************************
;程序結束
;*************************************************************************
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -