📄 zlg7289all.inc
字号:
;本程序ZLG7289的测试程序,可以测试ZLG7289的所有功能.
;******特殊寄存器定义,定义P87LPC76X特有的特殊功能寄存器***********************
AUXR1 DATA 0A2H
CMP1 DATA 0ACH
CMP2 DATA 0ADH
DIVM DATA 095H
;I2C 总线寄存器定义
I2CFG DATA 0C8H ;I2C BUS CONFIGURE REGISTER
CT0 BIT 0C8H ;I2CFG.0
CT1 BIT 0C9H ;I2CFG.1
TIRUN BIT 0CCH ;I2CFG.4
CLRTI BIT 0CDH ;I2CFG.5
MASTRQ BIT 0CEH ;I2CFG.6
SLAVEN BIT 0CFH ;I2CFG.7
I2CON DATA 0D8H
XSTP BIT 0D8H ;I2CON.0
MASTER BIT 0D9H ;I2CON.1
XSTR BIT 0D9H ;I2CON.1
STP BIT 0DAH ;I2CON.2
CSTP BIT 0DAH ;I2CON.2
STR BIT 0DBH ;I2CON.3
CSTR BIT 0DBH ;I2CON.3
ARL BIT 0DCH ;I2CON.4
CARL BIT 0DCH ;I2CON.4
DRDY BIT 0DDH ;I2CON.5
CDR BIT 0DDH ;I2CON.5
ATN BIT 0DEH ;I2CON.6
IDLE BIT 0DEH ;I2CON.6
RDAT BIT 0DFH ;I2CON.7
CXA BIT 0DFH ;I2CON.7
I2DAT DATA 0D9H
;中断功能寄存器定义
IEN0 DATA 0A8H
EB0 BIT 0ADH ;IEN0.5
EWD BIT 0AEH ;IEN0.6
IEN1 DATA 0E8H
EI2 BIT 0E8H ;IEN1.0
EKB BIT 0E9H ;IEN1.1
EC2 BIT 0EAH ;IEN1.2
EC1 BIT 0EDH ;IEN1.5
IP0L DATA 0B8H ;中断优先级定义,共有四级定义.
IP0H DATA 0B7H
IP1L DATA 0F8H
IP1H DATA 0F7H
;口线输出方式定义
P0M1 DATA 084H
P0M2 DATA 085H
P1M1 DATA 091H
P1M2 DATA 092H
P2M1 DATA 0A4H
P2M2 DATA 0A5H
PT0AD DATA 0F6H
SUBF DATA 099H
SADDR DATA 0A9H
SADEN DATA 0B9H
;看门狗寄存器定义
WDCON DATA 0A7H
WDRST DATA 0A6H
;键盘中断控制寄存器
KBI DATA 086H
;******口线定义*******************************************************************
CS BIT P0.6
CLK BIT P0.7
DIO BIT P1.0
KEY BIT P1.4
;------------------------------------------------
COMMAND DATA 30H ;命令字节
PARAMETER DATA 31H ;参数字节
FLASH_REG DATA 32H ;闪烁控制寄存器
DARK_REG DATA 33H ;消隐控制寄存器
KEYNUM DATA 34H ;键值寄存器
;*************************************************************************
ORG 00H
AJMP RESET
ORG 013H
AJMP INT1_SERVE
;=========================================================================
RESET: ;上电初始化
MOV SP,#50H
MOV WDCON,#17H ;看门狗溢出周期为2S.
MOV WDRST,#01EH
MOV WDRST,#0E1H
MOV P0M1,#00H
MOV P0M2,#00H
MOV P1M1,#00H
MOV P1M2,#00H
MOV P0,#01000000B
MOV P1,#00010000B
MOV R7,#100
DELAY100MS:
MOV WDRST,#01EH
MOV WDRST,#0E1H
DJNZ R6,DELAY100MS
DJNZ R7,DELAY100MS
MOV FLASH_REG,#11111111B
MOV DARK_REG,#11111111B
MOV COMMAND,#10100100B ;初始化ZLG7289
MOV R7,#8
ACALL SEND
SETB CS ;CS口线置高
SETB IT1 ;外部中断1为下跳沿触发
SETB EX1 ;开外部中断1
SETB EA ;开总中断
MAIN_LOOP:
SETB EX1
SETB EA
SETB IT1
MOV WDRST,#01EH ;清看门狗
MOV WDRST,#0E1H
MOV P0,#01000000B
MOV P1,#00010000B
AJMP MAIN_LOOP
;==========================================================
INT1_SERVE: ;中断1服务子程序
MOV COMMAND,#00010101B ;读键值
MOV R7,#8
CALL SEND
CALL RECEIVE
SETB CS
MOV KEYNUM,A
XRL A,#0FFH
JNZ LEGAL_KEY
AJMP EXIT_INT1 ;键值为0FFH,没有有效键按下,退出
LEGAL_KEY:
MOV A,#3FH
ANL A,KEYNUM
MOV KEYNUM,A
MOV DPTR,#FUNC_TABLE
RL A
ANL A,#0EH ;键值清除高位,取行值,乘2后跳转到相应的功能子程序.
JMP @A+DPTR
FUNC_TABLE: ;根据键值的低三位(行数)选择不同的功能子程序
AJMP SEG_DIG1 ;0
AJMP NUM_8_F ;1
AJMP NUM_0_7 ;2
AJMP SEG_DARK ;3
AJMP SEG_LIGHT ;4
AJMP DARK_CTL ;5
AJMP FLASH_CTL ;6
AJMP INSTRUCT ;7
;------------------------------------------------
INSTRUCT: ;单纯指令功能,包括:复位/测试/左移/右移/循环左移/循环右移
MOV A,KEYNUM
ACALL SHIFT_A_3
MOV DPTR,#INST_TABLE
MOVC A,@A+DPTR
MOV COMMAND,A
MOV R7,#8
ACALL SEND
SETB CS
MOV A,#15
XRL A,KEYNUM
JZ TEST_KEY
MOV A,#7
XRL A,KEYNUM
JZ RESET_KEY
AJMP EXIT_INSTRUCT
RESET_KEY:
MOV DARK_REG,#0FFH
TEST_KEY:
MOV FLASH_REG,#0FFH
EXIT_INSTRUCT:
AJMP EXIT_INT1
INST_TABLE:
DB 10100100B ;复位指令
DB 10111111B ;测试指令
DB 10100001B ;左移指令
DB 10100000B ;右移指令
DB 10100011B ;循环左移指令
DB 10100010B ;循环右移指令
DB 11111111B ;无效指令
DB 11111111B
;------------------------------------------------
FLASH_CTL: ;闪烁控制指令,分别控制第八到第一个数码管
MOV A,KEYNUM
ACALL SHIFT_A_3
MOV DPTR,#FLASH_TABLE
MOVC A,@A+DPTR
XRL A,FLASH_REG
MOV FLASH_REG,A
MOV PARAMETER,A
MOV COMMAND,#10001000B
MOV R7,#16
ACALL SEND
SETB CS
AJMP EXIT_INT1
FLASH_TABLE:
DARK_TABLE:
DB 10000000B
DB 01000000B
DB 00100000B
DB 00010000B
DB 00001000B
DB 00000100B
DB 00000010B
DB 00000001B
;------------------------------------------------
DARK_CTL: ;消隐控制指令,分别控制第八到第一个数码管
MOV A,KEYNUM
ACALL SHIFT_A_3
MOV DPTR,#DARK_TABLE
MOVC A,@A+DPTR
XRL A,DARK_REG
MOV DARK_REG,A
MOV PARAMETER,A
MOV COMMAND,#10011000B
MOV R7,#16
ACALL SEND
SETB CS
AJMP EXIT_INT1
;------------------------------------------------
SEG_LIGHT: ;段点亮指令,分别控制第八到第一个数码管的DP位(对应于
;64段的第63/55/47/39/31/23/15/7段)
MOV A,KEYNUM
ACALL SHIFT_A_3
MOV DPTR,#SEG_L_TABLE
MOVC A,@A+DPTR
MOV PARAMETER,A
MOV COMMAND,#11100000B
MOV R7,#16
ACALL SEND
SETB CS
AJMP EXIT_INT1
SEG_L_TABLE:
SEG_D_TABLE:
DB 63,55,47,39,31,23,15,7
;------------------------------------------------
SEG_DARK: ;段关闭指令,分别控制第八到第一个数码管的DP位(对应于
;64段的第63/55/47/39/31/23/15/7段)
MOV A,KEYNUM
ACALL SHIFT_A_3
MOV DPTR,#SEG_D_TABLE
MOVC A,@A+DPTR
MOV PARAMETER,A
MOV COMMAND,#11000000B
MOV R7,#16
ACALL SEND
SETB CS
AJMP EXIT_INT1
;------------------------------------------------
NUM_0_7: ;下载数据并译码数字0-7
MOV COMMAND,#10100001B
MOV R7,#8
ACALL SEND
SETB CS
MOV A,KEYNUM
ACALL SHIFT_A_3
MOV PARAMETER,A
MOV COMMAND,#11001000B
MOV R7,#16
ACALL SEND
SETB CS
AJMP EXIT_INT1
;------------------------------------------------
NUM_8_F: ;下载数据并译码,数字8-F
MOV COMMAND,#10100001B
MOV R7,#8
ACALL SEND
SETB CS
MOV A,KEYNUM
ACALL SHIFT_A_3
ADD A,#8
MOV PARAMETER,A
MOV COMMAND,#11001000B
MOV R7,#16
ACALL SEND
SETB CS
AJMP EXIT_INT1
;------------------------------------------------
SEG_DIG1: ;下载数据不译码,分别对应于字符HLPu.一二三
MOV A,KEYNUM
ACALL SHIFT_A_3
MOV DPTR,#DIG1_TABLE
MOVC A,@A+DPTR
MOV PARAMETER,A
MOV COMMAND,#10010000B
MOV R7,#16
ACALL SEND
SETB CS
AJMP EXIT_INT1
EXIT_INT1:
RETI
DIG1_TABLE:
DB 00110111B ;'H'
DB 00001110B ;'L'
DB 01100111B ;'P'
DB 00011100B ;'u'
DB 10000000B ;'.'
DB 00001000B ;'-'
DB 00001001B ;'='
DB 01001001B ;'三'
;------------------------------------------------
SHIFT_A_3: ;键值右移3位,取列值
RR A
RR A
RR A
ANL A,#07H
RET
;------------------------------------------------
SEND: ;发送数据到ZLG7289
CLR CS
ACALL DELAY50US
SEND_LOOP:
MOV A,PARAMETER
RLC A
MOV PARAMETER,A
MOV A,COMMAND
RLC A
MOV COMMAND,A
MOV DIO,C
NOP
SETB CLK
CALL DELAY10US
CLR CLK
CALL DELAY10US
DJNZ R7,SEND_LOOP
CLR DIO
CLR CLK
RET
RECEIVE: ;从ZLG7289接收数据
MOV R7,#8
SETB DIO
CLR CS
ACALL DELAY50US
REC_LOOP:
SETB CLK
ACALL DELAY10US
NOP
NOP
MOV C,DIO
RLC A
CLR CLK
ACALL DELAY10US
NOP
NOP
DJNZ R7,REC_LOOP
CLR DIO
CLR CLK
RET
DELAY50US:
MOV R6,#25
DJNZ R6,$
RET
DELAY10US:
MOV R6,#4
DJNZ R6,$
RET
;*************************************************************************
ORG 0FD00H ;配置字节定义
DB 11101011B,00B
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -