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

📄 display.asm

📁 自己制作的MAX038信号发生器程序
💻 ASM
字号:
RS		BIT		P3.0		;数据寄存器与命令寄存器选择信号
RW    	BIT   	P3.1		;读/写选择信号
E     	BIT   	P3.2		;启动命令信号

TIMES	EQU		30H         ;1定义变量
SEC		EQU		31H
MINU	EQU		32H

SECGW	EQU 	33H
SECSW	EQU		34H
MINUGW	EQU		35H
MINUSW	EQU		36H

	ORG	0000H			 ;2  指定程序在ROM中的开始位置,写中断向量表
	AJMP    START
	ORG	000BH
	AJMP	TIME50
	
START:MOV	SP,#60H	 	;3 初始化,启动定时器
	MOV	TH0,#03CH
	MOV	TL0,#0AFH
	MOV	TMOD,#01H
	SETB	TR0
	SETB	ET0
	SETB	EA
    						;4 初始化变量
	MOV	TIMES,#0H
	MOV	SEC,#0H
	MOV	MINU,#0H
	MOV	SECGW,#0
	MOV	SECSW,#0
	MOV	MINUGW,#0
	MOV	MINUSW,#0

MAIN:
  	   		LCALL     YS;	      	;去掉这几行回出现多余的字符
         	LCALL     TEST;
         	LCALL     F_BUSY;

	 		;初始化液晶显示器,往命令寄存器送11个命令字
	   		MOV       P1,#00000001B
         	LCALL     WCOMMAND		;清屏并置AC为0
         	MOV       P1,#3CH		;功能设置,8位接口,2 行显示,5X7点阵
         	LCALL     WCOMMAND		;等待直至LCM不忙
         	MOV       P1,#0CH		;开显示及光标,不闪烁
         	LCALL     WCOMMAND
         	MOV       P1,#06H		;显示不移位,AC为增量方式
         	CALL      WCOMMAND
         	MOV       P1,#80H		;写入显示起始地址,第一行第一个位置
         	CALL      WCOMMAND

XS:			MOV	A,SEC                    ;5  主程序,循环显示秒变量SEC                   
			MOV	B,#10
			DIV	AB
			MOV	SECGW,B
			MOV	SECSW,A			 ;把秒拆成个位与十位
	
			MOV	A,MINU
			MOV	B,#10
			DIV	AB
			MOV	MINUGW,B
			MOV	MINUSW,A                 ;把分拆成个位与十位

       	  	;把数据送往数据寄存器,并按初始化的格式显示
	   		MOV	A,MINUSW
	   		ADD	A,#30H
         	MOV       P1,A			
         	LCALL     WDATA		;显示分的十位

	   		MOV	A,MINUGW
	   		ADD	A,#30H
         	MOV       P1,A			
         	LCALL     WDATA		;显示分的个位

	   		MOV	A,SECSW
	   		MOV       P1,#3AH			
         	LCALL     WDATA		;显示:

         	MOV	A,SECSW
	   		ADD	A,#30H
         	MOV       P1,A			
         	LCALL     WDATA		;显示秒的十位

         	MOV	A,SECGW
	   		ADD	A,#30H
         	MOV      P1,A			
         	LCALL    WDATA		      ;显示秒的个位

	   		MOV	P1,#80H		;光标回到第一行开始位置
	   		LCALL     WCOMMAND
         
	   		AJMP	XS			;循环显示
;***********定时中断服务子程序************	
TIME50:	
	INC	TIMES                      ;6 中断服务程序  修改秒变量SEC
	MOV	R0,TIMES
	CJNE	R0,#20,EXIT
	INC	SEC
	MOV	TIMES,#0
	MOV	R0,SEC
	CJNE	R0,#60,EXIT
	INC	MINU
	MOV	SEC,#0
	MOV	R0,MINU
	CJNE	R0,#60,EXIT
	MOV	MINU,#0
	
EXIT:	MOV	TH0,#03CH
	MOV	TL0,#0AFH
	RETI

DELAY:	MOV	R3,#100
DEL1:	MOV	R4,#100
	DJNZ	R4,$
	DJNZ	R3,DEL1
	RET
	   
;***********写入控制命令字子程序**********************
WCOMMAND:  	CLR       RS;
         	CLR       RW;
         	CLR       E;
         	CALL      F_BUSY;
         	SETB      E;
         	RET

;***********写入数据寄存器***************************
WDATA: 		SETB      RS;
         	CLR       RW;
         	CLR       E;
         	CALL      F_BUSY;
         	SETB      E;
         	RET
;***********查"忙"标志子程序*************************
F_BUSY:  	PUSH      PSW		;
         	PUSH      ACC		;
         	PUSH      0A0H		;P2口进栈保护
         	PUSH      90H		;P1口进栈保护
LOOP:    	MOV       P1,#0FFH 	;判断液晶显示器是否忙的子程序
         	CLR       RS
         	SETB      RW
         	CLR       E
         	NOP
         	SETB      E
         	JB        P1.7,LOOP ;如果P1.7为高电平表示忙就循环等待
         	POP       90H		
         	POP       0A0H		
         	POP       ACC		;不忙,恢复现场返回
         	POP       PSW;
         	RET
;****************延时子程序(5ms)*************************
YS:      	PUSH    01H;
         	PUSH    02H;
         	MOV     R1,#25;
DL5_PA:  	MOV     R2,#100;
         	DJNZ    R2,$;
         	DJNZ    R1,DL5_PA;
         	POP     02H;
         	POP     01H;
         	RET
;**********************测试子程序***************************
TEST:    	MOV       P1,#38H;
         	CLR       RS;
         	CLR       RW;
         	CLR       E;
         	NOP
         	SETB      E;
         	RET
         	
         	
END

⌨️ 快捷键说明

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