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

📄 最终程序.asm

📁 飞机泊位管理系统中单片机代码
💻 ASM
📖 第 1 页 / 共 2 页
字号:
	ORG	0000H
 	LJMP	0100H		;开机或复位后,跳转至100H单元执行程序

;***************端口初始化***************

        ORG	0100H
INIT:   MOV	A,#0
        MOV     DPTR,#0DF00H    ;ACK标志清零
        MOVX    @DPTR,A
	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端口

;***************开机画面加载**************

        MOV     R0,#40H         ;加载显示缓存区指针
        MOV     R1,#0           ;R1是显示数据指针
        MOV     R2,#60          ;开机画面存储区有60字节
LOG:    MOV     A,R1
        MOV     DPTR,#400H      ;加载开机画面存储区起始地址
        MOVC    A,@A+DPTR       ;查表法得到显示点阵数据
        XRL     A,#0101010B     ;此项由磁翻转显示器特性决定
        MOV     @R0,A           ;送点阵数据至显示缓存区
        INC     R0              ;显示缓存指针增1
        INC     R1              ;显示数据指针增1
        DJNZ    R2,LOG          ;若R2不为0,则继续读取显示点阵数据
        MOV	R0,#40H         ;加载显示缓存指针供刷新显示
        LCALL   BLOCK1          ;转显示驱动程序
        LCALL   BLOCK2
        LCALL   BLOCK3

;***************显示控制器状态检测***************

POST:   MOV     DPTR,#0BF00H    ;加载DATA标志端口地址
POS1:   MOVX    A,@DPTR         ;读DATA标志
        ANL     A,#01H          ;屏蔽A寄存器的高7位
        JZ      POS1            ;若DATA标志为低,再读DATA标志
        MOV     A,#0FFH
        MOV     P1,A            ;P1口读入数据时先置全“1”
        MOV     A,P1            ;读P1口数据
        CJNE    A,#0F0H,POS1    ;若读入数据不为F0H,则等待
        MOV     DPTR,#0DF00H    ;加载ACK标志端口地址
        MOV     A,#01H          ;
        MOVX    @DPTR,A         ;将ACK标志置高
        CALL    DELAY1S         ;延时1秒
        MOV     A,#0
        MOVX    @DPTR,A         ;将ACK清零

;***************状态显示数据加载****************

LOGO:   MOV     R0,#40H         ;加载显示缓存区指针
        MOV     R1,#0           ;R1是显示数据指针
        MOV     R2,#60          ;开机画面存储区有60字节
LOG1:   MOV     A,R1
        MOV     DPTR,#450H      ;加载开机画面存储区起始地址
        MOVC    A,@A+DPTR       ;查表法得到显示点阵数据
        XRL     A,#0101010B     ;此项由磁翻转显示器特性决定
        MOV     @R0,A           ;送点阵数据至显示缓存区
        INC     R0              ;显示缓存指针增1
        INC     R1              ;显示数据指针增1
        DJNZ    R2,LOG1         ;若R2不为0,则继续读取显示点阵数据
        MOV	R0,#40H         ;加载显示缓存指针供刷新显示
        LCALL   BLOCK1          ;转显示驱动程序
        LCALL   BLOCK2
        LCALL   BLOCK3

;***************主程序段**************

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,#0DF00H	;加载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,#0DF00H	;加载ACK端口地址
	MOVX	@DPTR,A		;ACK端口置低
	POP	A		;弹出读入的数据
	CJNE	A,#0FFH,MAI1	;若不是0FFH结束符,读下一数据

        LCALL   CONVERT         ;降接收到的ASCII字符转换并译码

;***************显示模式判断程序*****************

MODE:	MOV	R0,#40H		;加载显示缓存起始地址
	MOV	R1,#30H		;判断30H单元显示模式
	MOV	A,@R1
	CJNE	A,#0F1H,NEXT1
        LJMP    MODE1        	;0F1H表示显示模式一
NEXT1:	CJNE	A,#0F2H,NEXT2	;0F2H表示显示模式二
        LJMP    MODE2
NEXT2:	CJNE	A,#0F3H,NEXT3	;0F3H表示显示模式三
        LJMP    MODE3
NEXT3:  CJNE    A,#0F4H,NEXT4
        LJMP    MODE4           ;0F4H表示显示模式四
NEXT4:  CJNE    A,#0F5H,NEXT5
        LJMP    MODE5           ;0F5H表示显示模式五
NEXT5:  CJNE    A,#0F6H,NEXT6
        LJMP    TEST            ;0F6H为显示系统测试命令
NEXT6:  CJNE    A,#0F7H,MAIN
        LJMP    MODE7           ;0F7H表示显示模式七

MODE1:	LCALL	BLOCK1		;刷新第1块显示板
	LJMP	MAIN		;返回主程序

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

MODE3:	LCALL	BLOCK1		;刷新第1块显示板
	LCALL	BLOCK2		;刷新第2块显示板
	LCALL	BLOCK3		;刷新第3块显示板
	LJMP	MAIN		;返回主程序

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

MODE7:  LCALL   BLOCK1          ;刷新第1块显示板
        LCALL   BLOCK3          ;刷新第3块显示板
        LJMP    MAIN            ;返回主程序

;***************交替显示程序(方式五)********************

MODE5:  MOV     R0,#68H         ;加载显示缓存1指针
        MOV     R1,#80H         ;加载显示缓存2指针
        MOV     R2,#20          ;搬移字节数为20字节
MOD5A:  MOV     A,@R0
        MOV     @R1,A           ;将显示缓存1后20字节搬移至缓存2
        MOV     A,#0FFH         ;
        XRL     A,#0101010B     ;由显示器特性决定
        MOV     @R0,A           ;显存1后20字节送全亮
        INC     R0
        INC     R1
        DJNZ    R2,MOD5A
        MOV     R2,#40          ;显示缓存二共有40字节
MOD5B:  MOV     A,#0
        XRL     A,#0101010B
        MOV     @R1,A
        INC     R1
        DJNZ    R2,MOD5B

ALTER:  MOV     R0,#40H         ;显示缓存一起始地址
        LCALL   BLOCK1          ;显示驱动
        LCALL   BLOCK2
        MOV     DPTR,#0BF00H    ;DATA标志位地址
        MOVX    A,@DPTR
        ANL     A,#01H
        JNZ     J2M             ;DATA为高转主程序
        LCALL   DELAY2S
        MOV     R0,#80H         ;显示缓存二的起始地址
        LCALL   BLOCK1          ;驱动显示
        LCALL   BLOCK2
        MOV     DPTR,#0BF00H
        MOVX    A,@DPTR
        ANL     A,#01H
        JNZ     J2M             ;查询DATA标志
        LCALL   DELAY2S
        LJMP    ALTER
J2M:    LJMP    MAIN            ;若有新数据则跳转至主程序

;***************磁翻转显示屏测试程序*******************

TEST:   MOV     DPTR,#800H      ;测试画面图案数据地址指针
        MOV     R4,#14          ;测试画面一共14幅
TES1:   MOV	R0,#30H         ;接收缓存地址指针
	MOV	A,#0F3H         ;接收缓存模式字
	MOV	@R0,A
        INC     R0
	MOV	R1,#0           ;便宜数据指针
	MOV	R2,#12          ;一共须填入12字节数据
TES2:	MOV	A,R1
	MOVC	A,@A+DPTR
	MOV	@R0,A
	INC	R0
	INC	R1
	DJNZ	R2,TES2
	MOV	A,#0FFH         ;结束标志
	MOV	@R0,A
        PUSH    DPH
        PUSH    DPL             ;保护测试画面存储数据指针
	LCALL	CONVERT         ;显示代码转化和译码
	MOV	R0,#40H         ;显示存储区地址指针
	LCALL	BLOCK1
	LCALL	BLOCK2
	LCALL	BLOCK3
        POP     DPL
        POP     DPH
        MOV     R3,#10H
TES3:   INC     DPL
        DJNZ    R3,TES3
        LCALL	DELAY1S
        DJNZ    R4,TES1
        LJMP    MAIN

;***************显示代码转换和译码程序段******************

CONVERT:MOV     DPTR,#0500H     ;加载转换码表地址指针
        MOV     R0,#30H         ;加载接收缓存地址指针
CONV1:  INC     R0              ;接受缓存指针加1
        MOV     A,@R0           ;取一个接受缓存中的数据
        CJNE    A,#0FFH,CONV2   ;不是0FFH结束符,则继续转换
        LJMP    DECODE          ;若已经结束,转显示译码
CONV2:  MOVC    A,@A+DPTR       ;取转换码表数据
        MOV     @R0,A           ;将转换后的数据送回接受缓存
        LJMP    CONV1           ;继续接受缓存下一字节转换
DECODE:	MOV	DPTR,#0600H	;加载显示字库地址指针
	MOV	R0,#30H		;加载接收缓存地址指针
	MOV	R1,#40H		;加载显示缓存地址指针
DECO1:	INC	R0		;接收缓存指针加1
	MOV	A,@R0		;取一个接收缓存中的数据
	CJNE	A,#0FFH,DECO2	;不是FFH结束符,则继续译码
	LJMP	BACK		;若为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字库中点阵显示数据
        XRL     A,#0101010B     ;
	MOV	@R1,A		;保存点阵显示数据至显示缓冲区
	POP	A		;恢复偏移量
	INC	A		;取下一字节字库数据
	INC	R1		;显示缓存指针加1
	DJNZ	R2,GET		;不到5字节,继续取字库数据
 	LJMP	DECO1		;开始下一字符译码
BACK:   RET

;***************显示驱动程序(第一块)****************************

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

;***************显示驱动程序(第二块)****************************

BLOCK2:	MOV	R1,#0		;列选择线指针置零,从第0列开始刷新
BLO2:	MOV	A,@R0		;取一列的行点阵显示数据
	PUSH	A		;保护行置位数据
        MOV	DPTR,#0FE00H	;加载行置位端口地址
	MOVX	@DPTR,A		;行置位数据送行置位口
	MOV	DPTR,#0F700H	;加载第2块列驱动板地址
	MOV	A,R1		;列指针内容送A
	MOVX	@DPTR,A		;选中相应的列选择线
        LCALL   DELAY           ;延时5ms
	MOV	A,#0FFH		;送无效字
	MOVX	@DPTR,A		;以关闭列译码器
	MOV	A,#0
	MOV	DPTR,#0FE00H	;加载行置位端口地址

⌨️ 快捷键说明

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