?? cs1694_詳細(xì)注釋版.asm
字號(hào):
;;CS1694.ASM
;-----------CS1694工作模式設(shè)置--------------------------
CS1694_DATA EQU P1.7 ;CS1694 SERIAL DATA INPUT
CS1694_CLK EQU P1.6 ;CS1694 SERIAL CLOLC
CS1694_STB EQU P1.5 ;CS1694 CHIP SELECT
KEY EQU P3.3
;-----------CS1694工作模式設(shè)置--------------------------
MODE_DISPLAY EQU 03H ;7GRIDS 10SEGS
MODE_DATA_WRITE_1 EQU 40H ;正常模式,寫數(shù)據(jù)到顯示RAM,數(shù)據(jù)寫入后地址自動(dòng)加1
MODE_DATA_WRITE_2 EQU 44H ;正常模式,寫數(shù)據(jù)到顯示RAM,地址固定
MODE_DATA_READ_1 EQU 42H ;正常模式,讀KEY_RAM,地址自動(dòng)加1
DATA_RAM_SET EQU 0C0H ;顯示RAM地址設(shè)定為00H
;DISPLAY_ON EQU 8FH ;開顯示,脈寬為14/16
DISPLAY_ON EQU 8BH ;開顯示,脈寬為10/16
DISPLAY_OFF EQU 80H ;關(guān)顯示
;-----------------BIT ADDR DEFINATION-------------------
SET_TIME_FLAG BIT 00H
DELAY_FLAG BIT 01H
KEY_FLAG BIT 02H
KEY_FLAG_1 BIT 03H
KEY_FLAG_2 BIT 04H
;-------------------------------------------------------
;---------------REGISTER DEFINATION---------------------
KEY_REG EQU 2AH ;CS1694 鍵盤RAM
TL0_DATA EQU 2BH
TH0_DATA EQU 2CH
TL1_DATA EQU 2DH
TH1_DATA EQU 2EH
CS1694_REG EQU 2FH ;CS1694串行傳輸數(shù)據(jù)暫存器
COM1_REG EQU 30H ;第一個(gè)數(shù)碼管要顯示的數(shù)字或字符
COM2_REG EQU 31H ;第二個(gè)數(shù)碼管要顯示的數(shù)字或字符
COM3_REG EQU 32H ;第三個(gè)數(shù)碼管要顯示的數(shù)字或字符
COM4_REG EQU 33H ;第四個(gè)數(shù)碼管要顯示的數(shù)字或字符
COM5_REG EQU 34H ;第五個(gè)數(shù)碼管要顯示的數(shù)字或字符
COM6_REG EQU 35H ;第六個(gè)數(shù)碼管要顯示的數(shù)字或字符
COM7_REG EQU 36H ;第七個(gè)數(shù)碼管要顯示的數(shù)字或字符
COM8_REG EQU 37H ;第八個(gè)數(shù)碼管要顯示的數(shù)字或字符
COM9_REG EQU 38H ;第九個(gè)數(shù)碼管要顯示的數(shù)字或字符
COM10_REG EQU 39H ;第十個(gè)數(shù)碼管要顯示的數(shù)字或字符
TIME_COUNTER EQU 3AH
INT_COUNT EQU 3BH
TEMP_1 EQU 3CH
TEMP_2 EQU 3DH
TEMP_3 EQU 3EH
TEMP_4 EQU 3FH
GRID1_REG EQU 40H ;橫向填充的DIS_RAM單元,10位留出兩個(gè)RAM地址
GRID2_REG EQU 42H
GRID3_REG EQU 44H
GRID4_REG EQU 46H
GRID5_REG EQU 48H
GRID6_REG EQU 4AH
GRID7_REG EQU 4CH
KEY_RAM_1 EQU 50H ;讀入KEY_RAM第一字節(jié)
KEY_RAM_2 EQU 51H ;讀入KEY_RAM第二字節(jié)
KEY_RAM_3 EQU 52H ;讀入KEY_RAM第三字節(jié)
KEY_RAM_4 EQU 53H ;讀入KEY_RAM第四字節(jié)
KEY_RAM_5 EQU 54H ;讀入KEY_RAM第五字節(jié)
STACK EQU 70H ;堆棧定義(70H-7FH)
;--------------CONSTANT DEFINATION----------------------
DELAY_3MS_H EQU 0F4H
DELAY_3MS_L EQU 48H
DELAY_5MS_H EQU 0ECH
DELAY_5MS_L EQU 78H
DELAY_10MS_H EQU 0D8H
DELAY_10MS_L EQU 0F0H
DELAY_15MS_H EQU 0C5H
DELAY_15MS_L EQU 68H
;--------------------------------------------------------
ORG 0000H
LJMP MAIN
NOP
NOP
ORG 0013H
LJMP INT1_SERV ;外部中斷1服務(wù)子程序
NOP
NOP
ORG 001BH
LJMP TIMER1_SERV ;定時(shí)器1服務(wù)子程序
NOP
NOP
;--------------------------------------------------------
ORG 0030H
MAIN:
MOV R7,#00H
DJNZ R7,$
MOV R7,#00H
DJNZ R7,$
LCALL IO_INIT
LCALL RAM_CLR
MOV SP,#STACK
;ORL TCON,#84H ;TCON=1000 0100B
;ORL IE,#8CH ;IE=1000 1100B
START:
LCALL CS1694_INIT
NOP
START_1:
LCALL DELAY_500MS
LCALL DELAY_500MS
LCALL DELAY_500MS
LCALL CS1694_ALL_DISPLAY
LCALL DELAY_500MS
LCALL DELAY_500MS
LCALL DELAY_500MS
LCALL CS1694_ALL_DARK
;SJMP START_1
LCALL DELAY_500MS
LCALL DELAY_500MS
LCALL DELAY_500MS
LCALL DIS_CS1694
LCALL DELAY_500MS
LCALL DELAY_500MS
LCALL DELAY_500MS
LCALL CS1694_ALL_DARK
LCALL DELAY_500MS
LCALL DELAY_500MS
LCALL DELAY_500MS
LCALL DISPLAY_1
LCALL DELAY_500MS
LCALL DELAY_500MS
LCALL DELAY_500MS
LCALL CS1694_ALL_DARK
LCALL DELAY_500MS
LCALL DELAY_500MS
LCALL DELAY_500MS
LCALL DISPLAY_PASS
LCALL DELAY_500MS
LCALL DELAY_500MS
LCALL DELAY_500MS
LCALL CS1694_ALL_DARK
SJMP START_1
MAIN_WAIT:
NOP
JB KEY,MAIN_WAIT
JNB KEY,KEY_1
KEY_1:
JB KEY,MAIN_WAIT
LCALL DELAY_20MS
JB KEY,MAIN_WAIT
KEY_2:
LCALL CS1694_ALL_DISPLAY
JNB KEY,KEY_2
JB KEY,NEXT
NEXT:
NOP
JB KEY,NEXT
JNB KEY,KEY_3
KEY_3:
JB KEY,NEXT
LCALL DELAY_20MS
JB KEY,NEXT
KEY_4:
LCALL CS1694_ALL_DARK
JNB KEY,KEY_4
JB KEY,NEXT_1
NEXT_1:
NOP
JB KEY,NEXT_1
JNB KEY,KEY_5
KEY_5:
NOP
JNB KEY,KEY_5
LCALL CS1694_KEY_RAM_TEST
NOP
MAIN_EXIT:
NOP
LJMP START;$
;LCALL CS1694_KEY_RAM_TEST
;LCALL CS1694_DIS_RAM_TEST
;--------------------------------------------------------
RAM_CLR:
NOP
MOV R0,#20H
CLR A
RAM_CLR_1:
MOV @R0,A
INC R0
CJNE R0,#80H,RAM_CLR_1
RET
;--------------------------------------------------------
IO_INIT:
NOP
MOV A,#0FFH
MOV P1,A
MOV P3,A
RET
;--------------------------------------------------------
CS1694_INIT:
SETB CS1694_STB ;CS1694_STB=1
CLR CS1694_DATA ;CS1694_DATA=0
SETB CS1694_CLK ;CS1694_CLK=1
NOP
NOP
SETB CS1694_STB
NOP
MOV CS1694_REG,#DISPLAY_OFF ;CS1694關(guān)顯示
CLR CS1694_STB
LCALL CS1694_8BIT_WRITE
NOP
RET
;--------------------------------------------------------
CS1694_ALL_DISPLAY: ;LED全顯
MOV A,#7FH ;DIS_RAM全部填充為1
LCALL DIS_RAM_FILL ;將數(shù)據(jù)寫入COM1_REG~COM10_REG
LCALL CS1694_RAM_CONVERT
LCALL CS1694_DIS_RAM_WRITE
SETB CS1694_STB
NOP
MOV CS1694_REG,#DISPLAY_ON ;CS1694開顯示
CLR CS1694_STB
LCALL CS1694_8BIT_WRITE
NOP
RET
;--------------------------------------------------------
CS1694_ALL_DARK: ;LED全滅
MOV A,#00H ;DIS_RAM全部填充為0
LCALL DIS_RAM_FILL
LCALL CS1694_RAM_CONVERT
LCALL CS1694_DIS_RAM_WRITE
SETB CS1694_STB
NOP
MOV CS1694_REG,#DISPLAY_ON ;CS1694開顯示
CLR CS1694_STB
LCALL CS1694_8BIT_WRITE
NOP
RET
;--------------------------------------------------------
DIS_CS1694:
MOV DPTR,#TAB_CS1694
LCALL DIS_SUB
RET
;--------------------------------------------------------
DISPLAY_1:
MOV DPTR,#TAB_LED_COMMON_CATHODE
LCALL DIS_SUB
RET
;--------------------------------------------------------
DISPLAY_PASS:
MOV DPTR,#TAB_PASS
LCALL DIS_SUB
RET
;--------------------------------------------------------
DIS_SUB:
MOV R0,#COM1_REG
MOV R2,#00H
MOV TEMP_1,#0AH
DIS_SUB_1:
MOV A,R2
MOVC A,@A+DPTR
MOV @R0,A
INC R0
INC R2
DJNZ TEMP_1,DIS_SUB_1
LCALL CS1694_RAM_CONVERT
LCALL CS1694_DIS_RAM_WRITE
SETB CS1694_STB
NOP
MOV CS1694_REG,#DISPLAY_ON ;CS1694開顯示
CLR CS1694_STB
LCALL CS1694_8BIT_WRITE
NOP
RET
;--------------------------------------------------------
DIS_RAM_FILL:
CLR C
MOV R6,#0AH
MOV R0,#COM1_REG
CS1694_DISPLAY_1:
MOV @R0,A
INC R0
DJNZ R6,CS1694_DISPLAY_1
NOP
RET
;--------------------------------------------------------
CS1694_RAM_CONVERT:
CLR C
MOV R0,#COM1_REG
MOV R1,#GRID1_REG
MOV TEMP_1,#07H
CS1694_RAM_CONVERT_1:
MOV TEMP_2,#08H ;COM1_REG~COM8_REG數(shù)據(jù)移位
CS1694_RAM_CONVERT_2:
MOV A,@R0 ;取COM1_REG中的內(nèi)容進(jìn)行移位處理
RRC A ;COM1_REG-B0→Cy
MOV B,A ;移位后的數(shù)據(jù)暫存到B中
MOV @R0,A ;移位后的數(shù)據(jù)重新送回保存
MOV A,@R1 ;取出GIRD1_REG的數(shù)據(jù)
RRC A ;Cy→GIRD1_REG-B0
MOV @R1,A
INC R0
DJNZ TEMP_2,CS1694_RAM_CONVERT_2 ;將COM1_REG~COM10_REG中的BO依次移到GRID1_REG中
INC R1
MOV TEMP_3,#03H ;COM9_REG~COM10_REG數(shù)據(jù)移位
CS1694_RAM_CONVERT_3:
MOV A,@R0 ;取COM1_REG中的內(nèi)容進(jìn)行移位處理
RRC A ;COM1_REG-B0→Cy
MOV B,A ;移位后的數(shù)據(jù)暫存到B中
MOV @R0,A ;移位后的數(shù)據(jù)重新送回保存
MOV A,@R1 ;取出GIRD1_REG的數(shù)據(jù)
RRC A ;Cy→GIRD1_REG-B0
MOV @R1,A
INC R0
DJNZ TEMP_3,CS1694_RAM_CONVERT_3 ;將COM1_REG~COM10_REG中的BO依次移到GRID1_REG中
MOV TEMP_4,#06H
CLR C
MOV A,@R1
CS1694_RAM_CONVERT_4:
RRC A
DJNZ TEMP_4,CS1694_RAM_CONVERT_4
MOV @R1,A
INC R1
MOV R0,#COM1_REG
DJNZ TEMP_1,CS1694_RAM_CONVERT_1
NOP
RET
;--------------------------------------------------------
CS1694_DIS_RAM_WRITE:
SETB CS1694_STB
NOP
MOV CS1694_REG,#MODE_DISPLAY ;顯示模式設(shè)置:7GRIDS,10SEGMENTS
CLR CS1694_STB ;選通CS1694器件
NOP
LCALL CS1694_8BIT_WRITE
SETB CS1694_STB
NOP
MOV CS1694_REG,#MODE_DATA_WRITE_1
CLR CS1694_STB
NOP
LCALL CS1694_8BIT_WRITE
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -