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

📄 origin.asm

📁 飞机泊位管理系统中单片机代码
💻 ASM
字号:
	ORG	0000H
 	LJMP	0100H		;开机或者复位后,跳转到INIT初始化程序

        ORG	0100H
INIT:   MOV	A,#0
	MOV	DPTR,#0FD00H	;初始化行复位端口,置全零
	MOVX	@DPTR,A
	MOV	DPTR,#0FE00H	;初始化行置位端口,置全零
	MOVX	@DPTR,A
        MOV	A,#0FFH
	MOV	DPTR,#0FB00H
	MOVX	@DPTR,A		;初始化列选择1端口,送无效字
	MOV	DPTR,#0F700H
	MOVX	@DPTR,A		;初始化列选择2端口,送无效字
	MOV	DPTR,#0EF00H
	MOVX	@DPTR,A		;初始化列选择3端口,送无效字

LOGO:   MOV     R0,#40H         ;R0 IS DISPLAY BUFFER POINTER
        MOV     R1,#0           ;R1 IS DATA POINTER
        MOV     R2,#60          ;THERE ARE 40 Bytes Logo Buffer
LOG1:   MOV     A,R1            ;MOVE DATA POINER TO "A"
        MOV     DPTR,#300H      ;LOAD LOGO ADDRESS
        MOVC    A,@A+DPTR       ;MOVE DISPLAY DATA TO "A"
        MOV     @R0,A           ;MOVE "A" TO BUFFER
        INC     R0              ;INCREASE BUFFER POINTER
        INC     R1              ;INCREASE DATA POINTER
        DJNZ    R2,LOG1         ;IF !(R2=0) THEN GOTO LOG1
        MOV	R0,#40H         ;LOAD DISPLAY BUFFER ADDRESS TO R0
        LCALL   FIRST           ;GOTO DISPLAY SUBPROGRAM


TEST:   MOV     DPTR,#0BF00H    ;加载DATA标志端口地址
TES1:   MOVX    A,@DPTR         ;读入DATA标志
        ANL     A,#01H          ;屏蔽高7位
        JZ      TES1            ;为低,则继续查询DATA标志
        MOV     A,#0FFH
        MOV     P1,A            ;要从P1口读入,先置全“1”
        MOV     A,P1            ;读入P1口数据
        CJNE    A,#0F0H,TES1    ;若不为F0H则继续查询
        MOV     DPTR,#07F00H    ;加载ACK端口地址
        MOV     A,#01H          ;屏蔽高7位
        MOVX    @DPTR,A         ;ACK置高
        CALL    DELAY1S         ;延时1S
        MOV     A,#0
        MOVX    @DPTR,A         ;ACK置低

MAIN:	MOV	R0,#30H		;加载接收数据缓冲区起始地址指针

MAI1:	MOV	DPTR,#0BF00H	;加载DATA标志端口地址
MAI2:	MOVX	A,@DPTR		;读入主控制器数据标志
	ANL	A,#01H		;屏蔽A高7位
	JZ	MAI2		;查询DATA信号是否为高
	MOV	A,#0FFH
        MOV     P1,A            ;P1口要读入数据,先置全"1"
	MOV	A,P1		;读入P1口的数据
	PUSH	A		;压入最新接收的数据
	MOV	@R0,A		;将接收数据写入接收数据缓冲区
	INC	R0		;指向下一个缓冲存储单元
	MOV	A,#01H
	MOV	DPTR,#07F00H	;加载ACK端口地址
	MOVX	@DPTR,A		;ACK端口置高
	MOV	DPTR,#0BF00H	;加载DATA标志端口地址
MAI3:	MOVX	A,@DPTR
	ANL	A,#01H		;屏蔽高7位数据
	JNZ	MAI3		;若DATA未变低,等待
	MOV	A,#0
	MOV	DPTR,#07F00H	;加载ACK端口地址
	MOVX	@DPTR,A		;ACK端口置低
	POP	A		;弹出读入的数据
	CJNE	A,#0FFH,MAI1	;若不是0FFH结束符,读下一数据

DECODE:	MOV	DPTR,#0400H	;加载显示字库地址指针
	MOV	R0,#30H		;加载接收缓存地址指针
	MOV	R1,#40H		;加载显示缓存地址指针
DECO1:	INC	R0		;接收缓存指针加1
	MOV	A,@R0		;取一个接收缓存中的数据
	CJNE	A,#0FFH,DECO2	;不是FFH结束符,则继续译码
	LJMP	DRIVE		;若为FFH结束符,转驱动显示
DECO2:	MOV	R2,#4		;一个字符字库占用5字节
CAL:	ADD	A,@R0
	DJNZ	R2,CAL		;计算字库存储区偏移量
	MOV	R2,#5		;一个字符字库占用5字节
GET:	PUSH	A		;保护偏移量
	MOVC	A,@A+DPTR	;取ROM字库中点阵显示数据
	MOV	@R1,A		;保存点阵显示数据至显示缓冲区
	POP	A		;恢复偏移量
	INC	A		;取下一字节字库数据
	INC	R1		;显示缓存指针加1
	DJNZ	R2,GET		;不到5字节,继续取字库数据
 	LJMP	DECO1		;开始下一字符译码

DRIVE:	MOV	R0,#40H		;加载显示缓存起始地址
	MOV	R1,#30H		;判断显示模式
	MOV	A,@R1
	CJNE	A,#0F1H,NEXT1
        LJMP    MODE1        	;F1H表示显示模式一
NEXT1:	CJNE	A,#0F2H,NEXT2	;F2H表示显示模式二
        LJMP    MODE2
NEXT2:	CJNE	A,#0F3H,NEXT3	;F3H表示显示模式三
        LJMP    MODE3
NEXT3:  LJMP    MODE4           ;F4H表示显示MODE4

MODE1:	lCALL	FIRST		;刷新第一块显示板
	LJMP	MAIN		;返回主程序

MODE2:	LCALL	FIRST		;刷新第1块显示板
	LCALL	SECOND		;刷新第2块显示板
	LJMP	MAIN		;返回主程序

MODE3:	LCALL	FIRST		;刷新第1块显示板
	LCALL	SECOND		;刷新第2块显示板
	LCALL	THIRD		;刷新第3块显示板
	LJMP	MAIN		;返回主程序

MODE4:	LCALL	THIRD		;单独刷新第3块显示板
	LJMP	MAIN		;返回主程序

FIRST:	MOV	R1,#0		;列选择线指针置零,从第0列开始刷新
FIR1:	MOV	A,@R0		;取一列的行点阵显示数据
	PUSH	A		;保护行置位数据
        CPL     A               ;对A取反,得到行复位数据
	MOV	DPTR,#0FD00H	;加载行复位端口地址
	MOVX	@DPTR,A		;行置位数据送行置位口
	MOV	DPTR,#0FB00H	;加载第1块列驱动板地址
	MOV	A,R1		;列指针内容送A
	MOVX	@DPTR,A		;选中相应的列选择线
        LCALL   DELAY           ;延时5ms
	MOV	A,#0FFH		;送无效字
	MOVX	@DPTR,A		;以关闭列译码器
	MOV	A,#0
	MOV	DPTR,#0FD00H	;加载行复位端口地址
	MOVX	@DPTR,A		;行复位口清零
	INC	R1		;列选择数据加1
	POP	A		;恢复行置位数据
	MOV	DPTR,#0FE00H	;加载行置位端口地址
	MOVX	@DPTR,A		;送行复位数据
	MOV	DPTR,#0FB00H	;加载第1块列驱动板地址
	MOV	A,R1
	MOVX	@DPTR,A		;选中列置位驱动线
	LCALL   DELAY           ;延时5ms
	MOV	A,#0FFH		;送无效字
	MOVX	@DPTR,A		;关闭列译码器
	MOV	A,#0
	MOV	DPTR,#0FE00H	;加载行置位端口地址
	MOVX	@DPTR,A		;行置位口清零
	INC 	R1		;修改列驱动选择指针
	INC	R0		;修改显示缓存指针
	CJNE	R1,#40,FIR1	;不满二十列则继续刷新
	RET			;返回主程序

SECOND:	MOV	R1,#0		;列选择线指针置零,从第0列开始刷新
SEC1:	MOV	A,@R0		;取行点阵显示数据
	PUSH	A		;保护数据
        CPL     A               ;对A取反,得到行复位数据
	MOV	DPTR,#0FD00H	;加载行复位端口地址
	MOVX	@DPTR,A		;行复位数据送行复位口
	MOV	DPTR,#0F700H	;加载列驱动板2地址
	MOV	A,R1
	MOVX	@DPTR,A		;选中列复位选择线
	LCALL	DELAY		;延时5ms
	MOV	A,#0FFH		;送无效字
	MOVX	@DPTR,A		;以关闭列译码器
	MOV	A,#0		;
	MOV	DPTR,#0FD00H	;加载行复位端口地址
	MOVX	@DPTR,A		;行复位口清零
	POP	A		;弹出行置位数据
	MOV	DPTR,#0FE00H	;加载行置位端口地址
	MOVX	@DPTR,A		;送行置位数据
	INC 	R1		;列选择数据指针加1
	MOV	DPTR,#0F700H	;加载列驱动板2地址
	MOV	A,R1
	MOVX	@DPTR,A		;选中列置位驱动线
	LCALL	DELAY		;延时5ms
	MOV	A,#0FFH		;送无效字
	MOVX	@DPTR,A		;关闭列译码器
	MOV	A,#0
	MOV	DPTR,#0FE00H	;加载行置位端口地址
	MOVX	@DPTR,A		;行置位口清零
	INC 	R1		;修改列驱动选择指针
	INC	R0		;修改显示缓存指针
	CJNE	R1,#40,SEC1	;不满二十列则继续刷新
	RET			;返回主程序

THIRD:	MOV	R1,#0		;列选择线指针置零,从第0列开始刷新
THI1:	MOV	A,@R0		;取行点阵显示数据
	PUSH	A		;保护数据
        CPL     A               ;对A取反,得到行复位数据
	MOV	DPTR,#0FD00H	;加载行复位端口地址
	MOVX	@DPTR,A		;行复位数据送行复位口
	MOV	DPTR,#0EF00H	;加载列驱动板3地址
	MOV	A,R1
	MOVX	@DPTR,A		;选中列复位选择线
	LCALL	DELAY		;延时5ms
	MOV	A,#0FFH		;送无效字
	MOVX	@DPTR,A		;以关闭列译码器
	MOV	A,#0		;
	MOV	DPTR,#0FD00H	;加载行复位端口地址
	MOVX	@DPTR,A		;行复位口清零
	POP	A		;弹出行置位数据
	MOV	DPTR,#0FE00H	;加载行置位端口地址
	MOVX	@DPTR,A		;送行置位数据
	INC 	R1		;列选择数据指针加1
	MOV	DPTR,#0EF00H	;加载列驱动板3地址
	MOV	A,R1
	MOVX	@DPTR,A		;选中列置位驱动线
	LCALL	DELAY		;延时5ms
	MOV	A,#0FFH		;送无效字
	MOVX	@DPTR,A		;关闭列译码器
	MOV	A,#0
	MOV	DPTR,#0FE00H	;加载行置位端口地址
	MOVX	@DPTR,A		;行置位口清零
	INC 	R1		;修改列驱动选择指针
	INC	R0		;修改显示缓存指针
	CJNE	R1,#40,THI1	;不满二十列则继续刷新
	RET			;返回主程序

DELAY:	MOV	R7,#20          ;5ms延时子程序(12MHz)
DEL1:	MOV	R6,#125
DEL2:	DJNZ	R6,DEL2
	DJNZ	R7,DEL1
	RET

DELAY1s:MOV     R7,#10		;延时1S的子程序
DEL1S1: MOV     R6,#200
DEL1S2: MOV     R5,#125
DEL1S3: DJNZ    R5,DEL1S3
        DJNZ    R6,DEL1S2
        DJNZ    R7,DEL1S1
        RET

        ORG     0300H

        DB      7FH,04H,08H,10H,7FH
        DB      3FH,40H,40H,40H,3FH
        DB      7CH,12H,11H,12H,7CH
        DB      7CH,12H,11H,12H,7CH

        DB      0,0,0,0,0
        DB      0,0,0,0,0
        DB      0,0,0,0,0
        DB      0,0,0,0,0

        ORG	0400H
	DB	3EH,51H,49H,45H,3EH	;数字“0”的字库编码
	DB	00H,42H,7FH,40H,00H	;数字“1”的字库编码
	DB	42H,61H,51H,49H,46H	;数字“2”的字库编码
	DB	22H,49H,49H,49H,36H	;数字“3”的字库编码
	DB	18H,14H,12H,7FH,10H	;数字“4”的字库编码
	DB	2FH,49H,49H,49H,31H	;数字“5”的字库编码
	DB	3EH,49H,49H,49H,32H	;数字“6”的字库编码
	DB	01H,01H,79H,05H,03H	;数字“7”的字库编码
	DB	36H,49H,49H,49H,36H	;数字“8”的字库编码
	DB	26H,49H,49H,49H,36H	;数字“9”的字库编码
	DB	7CH,12H,11H,12H,7CH	;英文“A”的字库编码
	DB	7FH,49H,49H,49H,36H	;英文“B”的字库编码
	DB	3EH,41H,41H,41H,22H	;英文“C”的字库编码
	DB	41H,7FH,41H,41H,3EH	;英文“D”的字库编码
	DB	7FH,49H,49H,49H,41H	;英文“E”的字库编码
	DB	7FH,09H,09H,09H,01H	;英文“F”的字库编码
	DB	3EH,41H,41H,51H,32H	;英文“G”的字库编码
	DB	7FH,08H,08H,08H,7FH	;英文“H”的字库编码
	DB	00H,41H,7FH,41H,00H	;英文“I”的字库编码
	DB	20H,40H,40H,40H,3FH	;英文“J”的字库编码
	DB 	7FH,04H,14H,22H,41H	;英文“K”的字库编码
	DB	7FH,40H,40H,40H,40H	;英文“L”的字库编码
	DB	7FH,02H,04H,02H,7FH	;英文“M”的字库编码
	DB	7FH,04H,08H,10H,7FH	;英文“N”的字库编码
	DB	3EH,41H,41H,41H,3EH	;英文“O”的字库编码
	DB	7FH,09H,09H,09H,06H	;英文“P”的字库编码
	DB	3EH,41H,51H,61H,3EH	;英文“Q”的字库编码
	DB	7FH,09H,19H,29H,46H	;英文“R”的字库编码
	DB	26H,49H,49H,49H,32H	;英文“S”的字库编码
	DB	01H,01H,3FH,01H,01H	;英文“T”的字库编码
	DB	3FH,40H,40H,40H,3FH	;英文“U”的字库编码
	DB	1FH,20H,40H,20H,1FH	;英文“V”的字库编码
	DB	3FH,40H,38H,40H,3FH	;英文“W”的字库编码
	DB	63H,14H,08H,14H,63H	;英文“X”的字库编码
	DB	03H,04H,78H,04H,03H	;英文“Y”的字库编码
	DB	61H,51H,49H,45H,43H	;英文“Z”的字库编码
	DB	00H,00H,00H,00H,00H	;渐近条形图亮“0”条
	DB	01H,01H,01H,01H,01H	;渐近条形图亮“1”条
	DB	03H,03H,03H,03H,03H	;渐近条形图亮“2”条
	DB	07H,07H,07H,07H,07H	;渐近条形图亮“3”条
	DB	0FH,0FH,0FH,0FH,0FH	;渐近条形图亮“4”条
	DB	1FH,1FH,1FH,1FH,1FH	;渐近条形图亮“5”条
	DB	3FH,3FH,3FH,3FH,3FH	;渐近条形图亮“6”条
	DB	7FH,7FH,7FH,7FH,7FH	;渐近条形图亮“7”条
	DB	00H,00H,22H,00H,00H	;冒号“:”字库编码
	DB	08H,08H,08H,08H,08H     ;短横线“-”字库编码
        END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -