⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zlg7289all.inc

📁 关于单片机开发的一个实例
💻 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 + -