?? max7219Ц-
字號:
;本程序實用于測試芯片:MAX7219演示
;使用AT89C51單片機,使用晶振24MHz
;使用小板編號:無
;*************************************************************
;以下為常量定義
;*************************************************************
;以下為變量定義
CLOOP1 EQU 2CH
CLOOP2 EQU 2DH
DISD EQU 2EH ;輸入的模擬電壓
DNUM EQU 2FH ;顯示的數據量
CABUF EQU 30H ;MAX7219控制或地址寄存器
DABUF EQU 38H ;MAX7219數據寄存器
ADCBUF EQU 40H ;轉換后的DA值,共32字節
;*************************************************************
;以下為位控變量的定義
GOOD BIT 00H ;測試結果標志
;*************************************************************
;以下為各口地址的定義
PIN01 BIT P0.0 ;PIN01
PIN02 BIT P0.1 ;PIN02
PIN03 BIT P0.2 ;PIN03
PIN04 BIT P0.3 ;PIN04
PIN05 BIT P0.4 ;PIN05
PIN06 BIT P0.5 ;PIN06
SPEAKER BIT P0.6 ;PIN07
FLASH BIT P0.7 ;PIN08
PIN09 BIT P1.0 ;PIN09
PIN10 BIT P1.1 ;PIN10
PIN11 BIT P1.2 ;PIN11
PIN12 BIT P1.3 ;PIN12
PIN13 BIT P1.4 ;PIN13
PIN14 BIT P1.5 ;PIN14
PIN15 BIT P1.6 ;PIN15
PIN16 BIT P1.7 ;PIN16
PIN17 BIT P2.0 ;PIN17
PIN18 BIT P2.1 ;PIN18
PIN19 BIT P2.2 ;PIN19
PIN20 BIT P2.3 ;PIN20
PIN21 BIT P2.4 ;PIN21
PIN22 BIT P2.5 ;PIN22
PIN23 BIT P2.6 ;PIN23
PIN24 BIT P2.7 ;PIN24
PIN25 BIT P3.0 ;PIN25
PIN26 BIT P3.1 ;PIN26
PIN27 BIT P3.2 ;PIN27
PIN28 BIT P3.3 ;PIN28
PIN29 BIT P3.4 ;PIN29
DIN BIT P3.5 ;PIN30
CSLD BIT P3.6 ;PIN31
CLK BIT P3.7 ;PIN32
;*************************************************************
;以下為各程序及其功能
;1. START 主程序
;2. TESTOK 測試OK子程序
;3. ERROR 測試bad子程序
;4. DEL40MS 軟件延時40ms
;5. DEL50MS 軟件延時50ms
;6. DEL100MS 軟件延時100ms
;7. DEL120MS 軟件延時120ms
;8. DEL250MS 軟件延時250ms
;9. INT0INT INT0中斷子程序
;10. INT1INT INT1中斷子程序
;11. T0INT T0中斷子程序
;12. T1INT T1中斷子程序
;13. UART UART串口中斷子程序
;*************************************************************
;MAIN PROGRAM START
ORG 0000H
LJMP START
ORG 0003H
LJMP INT0INT ;外部中斷0
ORG 000BH
LJMP T0INT ;T0中斷
ORG 0013H
LJMP INT1INT ;外部中斷1
ORG 001BH
LJMP T1INT ;T1中斷
ORG 0023H
LJMP UART ;未來通信使用
ORG 0040H
DB 00H,02H,00H,00H,02H,00H,00H
START: CLR EA
MOV P2,#0FFH
MOV P1,#0FFH
MOV P0,#0FFH
MOV R7,#0AH ;24.0MHz晶振,上電延時1ms
LOOP1: MOV R6,#64H
LOOP2: DJNZ R6,LOOP2
DJNZ R7,LOOP1
MOV P2,#0FFH
MOV P1,#0FFH
MOV P0,#0FFH
CLR EA
MOV SP,#60H ;堆棧設置
MOV TCON,#00H ;關閉所有定時器中斷
MOV IE,#00H ;關閉所有中斷
MAIN: LCALL CSHDIS
TT11: MOV DISD,#00H
TT12: MOV R0,#ADCBUF
MOV R6,#04H
TT13: MOV A,DISD
MOV @R0,A
INC R0
DJNZ R6,TT13
LCALL DISADC
CLR C
MOV A,#11H
ADD A,DISD
MOV DISD,A
JNC TT12
SJMP TT11
NOP ;測試完畢
;*********************************************************************
;程序功能:顯示讀取的數據
;直接調用子程序:
;入口參數:無
;出口參數:無
;占用資源:
;修改記錄:
;*********************************************************************
DISADC: MOV R4,#01H ;控制循環次數
MOV CLOOP1,#01H ;顯示的第幾個通道參數
MOV CLOOP2,#ADCBUF ;CLOOP2指向ADCBUF首址
DISA1: MOV R0,#CABUF ;顯示位置寄存器首址
MOV R1,#DABUF ;顯示數據寄存器首址
MOV DNUM,#08H ;顯示8個數據
MOV @R0,#01H
MOV @R1,#7EH ;0
INC R0
INC R1
MOV @R0,#02H
MOV @R1,#30H ;1
INC R0
INC R1
MOV @R0,#03H
MOV @R1,#08H ;下劃線"_"
INC R0
INC R1
MOV @R0,#04H
MOV A,CLOOP1 ;第幾個通道的參數
ANL A,#0F0H ;取出高4位
SWAP A ;調整到低4位上
MOV DPTR,#LEDTAB ;獲取顯示代碼
MOVC A,@A+DPTR
MOV @R1,A ;顯示類型寄存器數據
INC R0
INC R1
MOV @R0,#05H
MOV A,CLOOP1
ANL A,#0FH ;取出低4位
MOV DPTR,#LEDTAB
MOVC A,@A+DPTR
MOV @R1,A
INC R0
INC R1
MOV @R0,#06H
MOV @R1,#00H
INC R0
INC R1
MOV @R0,#07H
MOV @R1,#00H
INC R0
INC R1
MOV @R0,#08H
MOV @R1,#00H
; LCALL DISPLAY
; LCALL DEL600MS
; LCALL DEL600MS
; LCALL DEL600MS
MOV R0,CLOOP2
LCALL DIS1_2 ;將數據拆分并到緩沖區并顯示2S
INC CLOOP1 ;顯示下一個通道
MOV A,CLOOP2
ADD A,#04H ;指向下一個通道(或一個通道的后4個)的數據地址
MOV CLOOP2,A
DJNZ R4,DISA1
RET
;*********************************************************************
;程序功能:將數據緩沖區的數據進行拆分后進行顯示
;調用子程序:
;入口參數:
;出口參數:
;占用資源:
;修改記錄:
;*********************************************************************
DIS1_2: MOV R1,#DABUF
MOV R5,#04H
MOV DPTR,#LEDTAB
DIS1_21:MOV A,@R0 ;先將數據進行拆分
ANL A,#0F0H
SWAP A
MOVC A,@A+DPTR ;取LED代碼
MOV @R1,A
INC R1 ;指向緩沖區下一個單元
MOV A,@R0
ANL A,#0FH
MOVC A,@A+DPTR ;取LED代碼
MOV @R1,A
INC R0
INC R1
DJNZ R5,DIS1_21
MOV R0,#CABUF
MOV @R0,#01H
INC R0
MOV @R0,#02H
INC R0
MOV @R0,#03H
INC R0
MOV @R0,#04H
INC R0
MOV @R0,#05H
INC R0
MOV @R0,#06H
INC R0
MOV @R0,#07H
INC R0
MOV @R0,#08H
MOV DNUM,#08H
LCALL DISPLAY
LCALL DEL600MS
; LCALL DEL600MS
; LCALL DEL600MS
; LCALL DEL600MS
; LCALL DEL600MS
; LCALL DEL600MS
; LCALL DEL600MS
RET
;*********************************************************************
;程序功能:初使化顯示
;直接調用子程序:
;入口參數:無
;出口參數:無
;占用資源:
;修改記錄:
;*********************************************************************
CSHDIS: MOV R0,#CABUF ;初始化顯示
MOV R1,#DABUF
MOV DNUM,#05H ;輸出5個參數
MOV @R0,#09H ;設置譯碼方式為"全部不譯碼"
MOV @R1,#00H
INC R0
INC R1
MOV @R0,#0AH ;設置亮度為"07H"
MOV @R1,#07H
INC R0
INC R1
MOV @R0,#0BH ;設置掃描范圍是"0-7段全部"
MOV @R1,#07H
INC R0
INC R1
MOV @R0,#0CH ;設置為正常顯示模式
MOV @R1,#01H
INC R0
INC R1
MOV @R0,#0FH ;設置為"非測試模式"
MOV @R1,#00H
LCALL DISPLAY
MOV DPTR,#DISNON ;不顯示
LCALL DISBUF
RET
;*********************************************************************
;程序功能:調數據到顯示緩沖區并顯示
;調用子程序:
;入口參數:
;出口參數:
;占用資源:
;修改記錄:
;*********************************************************************
DISBUF: NOP ;調數據到顯示緩沖區并顯示
MOV R0,#CABUF
MOV R1,#DABUF
MOV R6,#08H
DTO1: CLR A
MOVC A,@A+DPTR
MOV @R0,A ;存儲地址或控制字節
CLR A
INC DPTR ;指向數據
MOVC A,@A+DPTR
MOV @R1,A ;存儲數據
INC R0
INC R1
INC DPTR
DJNZ R6,DTO1
MOV DNUM,#08H
LCALL DISPLAY
RET
;*********************************************************************
;程序功能:顯示子程序
;調用子程序:
;入口參數:DNUM--需要顯示的數據量(最多8個)
;出口參數:無
;占用資源:R0--指向控制字/地址緩沖區首址
; R1--指向數據緩沖區首址
; R6--8位控制循環
;修改記錄:
;*********************************************************************
DISPLAY:NOP ;顯示子程序,LOAD=0
MOV R5,DNUM ;要顯示的數據量到R5
MOV R0,#CABUF ;控制字或地址
MOV R1,#DABUF ;數據首址
DIS0: CLR CSLD
MOV R6,#08H ;先送8位地址
MOV A,@R0 ;送控制字或地址
INC R0 ;指向下一個地址
DIS1: RLC A
MOV DIN,C
CLR CLK
SETB CLK
DJNZ R6,DIS1
MOV R6,#08H ;再送8位數據
MOV A,@R1 ;送數據
INC R1 ;指向下一個數據
DIS2: RLC A
MOV DIN,C
CLR CLK
SETB CLK
DJNZ R6,DIS2
SETB CSLD ;LOAD上升沿
DJNZ R5,DIS0
RET
;*********************************************************************
;程序功能:測試OK程序
;直接調用子程序:DEL100MS,DEL250MS
;入口參數:無
;出口參數:無
;占用資源:R5,R6
;修改記錄:
;*********************************************************************
TESTOK: CLR SPEAKER ;蜂鳴器響100MS
LCALL DEL100MS
SETB SPEAKER
FL: CLR FLASH
LCALL DEL250MS ;亮0.25S
SETB FLASH
LCALL DEL250MS ;滅0.25S
SJMP FL
RET
;*********************************************************************
;程序功能:測試ERROR程序
;直接調用子程序:DEL40MS,DEL120MS,DEL250MS
;入口參數:無
;出口參數:無
;占用資源:R5,R6
;修改記錄:
;*********************************************************************
ERROR: NOP
; LCALL DISADC
CLR SPEAKER ;蜂鳴器響0.40MS,三聲
LCALL DEL40MS
SETB SPEAKER
LCALL DEL40MS
CLR SPEAKER
LCALL DEL40MS
SETB SPEAKER
LCALL DEL40MS
CLR SPEAKER
LCALL DEL40MS
SETB SPEAKER
ERR: CLR FLASH ;亮0.12S
LCALL DEL120MS
SETB FLASH ;滅0.12S
LCALL DEL120MS
CLR FLASH
LCALL DEL120MS
SETB FLASH
LCALL DEL120MS
CLR FLASH
LCALL DEL120MS
SETB FLASH
LCALL DEL120MS
LCALL DEL250MS ;中間停0.35S
SJMP ERR
RET
;*********************************************************************
;程序功能:軟件延時5US
;直接調用子程序:無
;入口參數:無
;出口參數:無
;占用資源:R6
;修改記錄:
;*********************************************************************
DEL5US: MOV R6,#05H
DEL5U1: DJNZ R6,DEL5U1
RET
;*********************************************************************
;程序功能:軟件延時100US
;直接調用子程序:無
;入口參數:無
;出口參數:無
;占用資源:R6
;修改記錄:
;*********************************************************************
DEL100US:MOV R6,#64H
DEL100U1:DJNZ R6,DEL100U1
RET
;*********************************************************************
;程序功能:軟件延時40ms
;直接調用子程序:無
;入口參數:無
;出口參數:無
;占用資源:R5,R6
;修改記錄:
;*********************************************************************
DEL40MS:MOV R6,#0C8H ;延時40ms
DEL40M1:MOV R5,#0C8H
DEL40M2:DJNZ R5,DEL40M2
DJNZ R6,DEL40M1
RET
;*********************************************************************
;程序功能:軟件延時50ms
;直接調用子程序:無
;入口參數:無
;出口參數:無
;占用資源:R5,R6
;修改記錄:
;*********************************************************************
DEL50MS:MOV R6,#0C8H ;延時50MS
DEL501: MOV R5,#0FAH
DEL502: DJNZ R5,DEL502
DJNZ R6,DEL501
RET
;*********************************************************************
;程序功能:軟件延時100ms
;直接調用子程序:DEL50MS
;入口參數:無
;出口參數:無
;占用資源:R5,R6
;修改記錄:
;*********************************************************************
DEL100MS:LCALL DEL50MS ;延時100ms
LCALL DEL50MS
RET
;*********************************************************************
;程序功能:軟件延時120ms
;直接調用子程序:DEL40MS
;入口參數:無
;出口參數:無
;占用資源:R5,R6
;修改記錄:
;*********************************************************************
DEL120MS:LCALL DEL40MS ;延時120ms
LCALL DEL40MS
LCALL DEL40MS
RET
;*********************************************************************
;程序功能:軟件延時250ms
;直接調用子程序:DEL50MS
;入口參數:無
;出口參數:無
;占用資源:R5,R6
;修改記錄:
;*********************************************************************
DEL250MS:LCALL DEL50MS ;延時150ms
LCALL DEL50MS
LCALL DEL50MS
LCALL DEL50MS
LCALL DEL50MS
RET
;*********************************************************************
;程序功能:軟件延時600ms
;直接調用子程序:DEL250MS,DEL100MS
;入口參數:無
;出口參數:無
;占用資源:R5,R6
;修改記錄:
;*********************************************************************
DEL600MS:LCALL DEL250MS ;延時600ms
LCALL DEL250MS
LCALL DEL100MS
RET
;*********************************************************************
;程序功能:INT0中斷入口
;直接調用子程序:
;入口參數:
;出口參數:
;占用資源:
;修改記錄:
;*********************************************************************
INT0INT:NOP ;INT0中斷
NOP
NOP
RETI
;*********************************************************************
;程序功能:INT1中斷入口
;直接調用子程序:
;入口參數:
;出口參數:
;占用資源:
;修改記錄:
;*********************************************************************
INT1INT:NOP ;INT1中斷
NOP
NOP
RETI
;*********************************************************************
;程序功能:T0中斷入口
;直接調用子程序:
;入口參數:
;出口參數:
;占用資源:
;修改記錄:
;*********************************************************************
T0INT: NOP ;T0中斷
NOP
NOP
RETI
;*********************************************************************
;程序功能:T1中斷入口
;直接調用子程序:
;入口參數:
;出口參數:
;占用資源:
;修改記錄:
;*********************************************************************
T1INT: NOP ;T1中斷
NOP
NOP
RETI
;*********************************************************************
;程序功能:UART串口中斷入口
;直接調用子程序:
;入口參數:
;出口參數:
;占用資源:
;修改記錄:
;*********************************************************************
UART: NOP
NOP
NOP
RETI
ORG 0800H
DISBAD: DB 01H,1FH,02H,0FDH,03H,3DH,04H,00H ;顯示BaD
DB 05H,00H,06H,00H,07H,00H,08H,00H
DISNON: DB 01H,00H,02H,00H,03H,00H,04H,00H ;不顯示
DB 05H,00H,06H,00H,07H,00H,08H,00H
;*********************************************************************
;以下是LED的譯碼表
ORG 0A00H
LEDTAB: DB 7EH,30H,6DH,79H,33H,5BH,5FH,70H ;0-7
DB 7FH,7BH,77H,1FH,4EH,3DH,4FH,47H ;8-F
DB 3EH ;地址10H,顯示"U"
DB 01H ;地址11H,顯示"-"
ADCTAB: DB 0CH,85H,0CH,0B0H,0DH,82H,0DH,0AAH
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -