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

📄 8279.asm

📁 又是本人自己编写的8279键盘显示芯片的程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;****************功能键-读************************        
RD_FUNC:   	CLR	WR_FLAG
           	MOV	NUM_COUNTER,#4
           	ACALL	GET_DPTR
           	JNB	RD_FLAG,FIRST_RD
           	INC	DPTR             ;RD_FALG为1,读下一个地址的内容
FIRST_RD:  	ACALL	DISP_DPTR        ;标志位0,则是第一次按RD功能键
           	ACALL	DATA_DISP        
           	MOV	A,#90H
           	ACALL	WRITE_CMD
           	CLR	TEMP_FLAG
           	SETB	RD_FLAG
           	LJMP	RE_SCAN           
;****************功能键-写************************
WR_FUNC:   	CLR	RD_FLAG
           	MOV	NUM_COUNTER,#4    ;此后输入的数据必在数据LED显示
           	ACALL	GET_DPTR
           	ACALL	DISP_DPTR
           	ACALL	WR_DATALED
           	ACALL	WR_OVER 
           	ACALL	DELAY250MS
        ;   	JNB	WR_FLAG,FIRST_WR
           	INC	DPTR
FIRST_WR:  	ACALL	DISP_DPTR          ;显示下一个地址
           	ACALL	DATA_DISP 
           	CLR	TEMP_FLAG       
           	SETB	WR_FLAG
           	LJMP	RE_SCAN
    
;将数据数码管的数据写到前四个确定的地址内           
WR_DATALED:	ACALL	GET_DPTR          ;
           	MOV	A,#4H             ;取数据数码管显示的数据写到前4位显示的地址中
           	ACALL	GET_LED
           	SWAP	A                 ;取第5个数码管的数据作为高四位存于R2
           	MOV	B,A
           	MOV	A,#5
           	ACALL	GET_LED
           	ORL	A,B
           	MOVX	@DPTR,A
           	RET
;****************功能键-执行***********************
EXE:       	ACALL	GET_DPTR
	   	LCALL	DISP_DPTR
           	CLR	A
           	JMP	@A+DPTR
;8155
CSEG		AT	 1000H
        	LCALL	CLEAR
        	LCALL	TEST8155RAM
        	JNC	ERR8155_1
        	LCALL	OK1
        	LCALL	DELAY500MS
        	SJMP	IO8155
ERR8155_1:	LCALL	ERR_SHOW
        	LCALL	ALARM
        	LCALL	DELAY500MS
        	LCALL	DELAY500MS        
IO8155: 	MOV	A,#0C1H              ;方式字设置8155PA输出,PB、PC口均为输入
        	LCALL	INIT8155
        	MOV	R6,#6
        	MOV	DPTR,#TAB232
REP8155:	CLR	A
        	MOVC	A,@A+DPTR 
        	PUSH	DPL	
        	PUSH	DPH       
        	LCALL	TEST8155IO
        	POP	DPH
        	POP	DPL
        	JNC	ERR8155
        	INC	DPTR
        	DJNZ	R6,REP8155
        	LCALL	OK1
        	SJMP	RE9
ERR8155:	LCALL	ERR_SHOW
		LCALL	ALARM 
RE9:    	LCALL	SCAN_KEY
        	CJNE	A,#0FFH,EXIT8      ;任意键退出
        	SJMP	RE9
EXIT8:		LJMP	MON 
;A_D      
CSEG		AT	 1100H
        	LCALL	CLEAR
        	MOV	A,#90H
        	LCALL	WRITE_CMD
        	MOV	A,#0AH             ;显示"AD"字符
        	LCALL	LED_DISP
        	MOV	A,#0DH
        	LCALL	LED_DISP 
RE_SCAN33:    	MOV	DATA_LED,#84H
        	MOV	NUM_COUNTER,#0
RE_SCAN3:	LCALL	SCAN_KEY        
		CJNE	A,#0FFH,KEY_DEPR3
		SJMP	RE_SCAN3        
KEY_DEPR3:  	LCALL	KEY_NUM         
        	CJNE	A,#10H,$+3	   ;判断是否为功能键	
        	JC	LOW3
        	CJNE	A,#16,NEXT3
        	LJMP	MON
NEXT3:  	CJNE	A,#19,RE_SCAN3
		MOV	A,NUM_COUNTER
		CJNE	A,#2,$+3
        	JC	RE_SCAN3
	  	MOV	A,#4
	  	LCALL	GET_LED
	  	SWAP	A
	  	MOV	R4,A		   ;暂存于R4
        	MOV	A,#5
        	LCALL	GET_LED
        	ORL	A,R4
        	LCALL	A_D
        	MOV	DPH,R6
        	MOV 	DPL,R7
        	LCALL	DISP_DPTR
        	MOV	A,#83H
        	LCALL	WRITE_CMD
        	MOV	A,#0FFH
               	LCALL	WRITE_DATA
               	LCALL	CL_DATALED
        	JMP	RE_SCAN33
LOW3:		MOV	B,A	            ; 暂存A
		MOV	A,DATA_LED
		LCALL	WRITE_CMD
		MOV	A,B
        	LCALL	LED_DISP
        	INC	NUM_COUNTER
	  	MOV	A,DATA_LED
              	CPL	ACC.0      	    ;在84H和85H中循环修改
              	MOV	DATA_LED,A
           	JMP	RE_SCAN3         		        

;D_A 	
CSEG		AT	 1200H
DA_START:	LCALL	CLEAR   
        	MOV	A,#90H
        	LCALL	WRITE_CMD
        	MOV	A,#0DH              ;显示DA
        	LCALL	LED_DISP
        	MOV	A,#0AH
        	LCALL	LED_DISP 
        	MOV	R6,#0H              ;COUNTER
        	MOV	R7,#0H
        	MOV	A,#90H
        	LCALL	WRITE_CMD
RE_SCAN2:	LCALL	SCAN_KEY        
		CJNE	A,#0FFH,KEY_DEPR2
		SJMP	RE_SCAN2         
KEY_DEPR2:  	LCALL	KEY_NUM         
        	CJNE	A,#10H,$+3	     ;判断是否为功能键
        	JC	LOW12
	        CJNE	A,#16,NEXT12	     ;判断是否为退出键
        	LJMP	MON
NEXT12:		CJNE	R6,#2,$+3
        	JC	RE_SCAN2	      ;R6<2,还没有输入两个数,忽略按功能键
        	CJNE	A,#19,RE_SCAN2        ;输入了两个数,可以按功能键
        	MOV	A,#0		      ;取出前3个数码管的数
        	LCALL	GET_LED
        	SWAP	A
        	MOV	R4,A			;暂存于R4
        	MOV	A,#1
        	LCALL	GET_LED
        	ORL	A,R4			;从数码管取出的数送A
              	LCALL	D_A
        	LCALL	WR_OVER
        	LCALL	DELAY250MS
        	JMP	DA_START
LOW12: 		CJNE	R6,#0,PASS1
        	LCALL	CLEAR
PASS1:  	LCALL	LED_DISP
	        INC	R6
        	INC	R7
        	CJNE	R7,#2,RE_SCAN2		;只能写到前两位数码管
        	MOV	A,#90H
        	LCALL	WRITE_CMD
        	MOV	R7,#0
        	JMP	RE_SCAN2   
 ;光藕           
CSEG		AT	 1300H
        	LCALL	CLEAR   
        	MOV	A,#55H                 
        	MOV	DPTR,#0FCFFH			;低速输入输出地址
        	MOVX	@DPTR,A
        	
        	mov	a,#20h				;延时
        	djnz	acc,$
        	
        	MOVX	A,@DPTR
        	ANL	A,#0FH
        	CJNE	A,#05H,ERR_PHO
        	MOV	A,#0AAH                 
        	MOVX	@DPTR,A

        	mov	a,#20h				;延时
        	djnz	acc,$

        	MOVX	A,@DPTR
        	ANL	A,#0FH
        	CJNE	A,#0AH,ERR_PHO
        	MOV	A,#55H                 
        	MOV	DPTR,#0F9FFH			;高速输入输出地址
        	MOVX	@DPTR,A
             	MOVX	A,@DPTR
        	ANL	A,#0FH
        	CJNE	A,#05H,ERR_PHO
        	MOV	A,#0AAH                 
        	MOVX	@DPTR,A
        	MOVX	A,@DPTR
        	ANL	A,#0FH
        	CJNE	A,#0AH,ERR_PHO
        	LCALL	OK1
        	SJMP	RE5
ERR_PHO:	LCALL	ERR_SHOW
        	LCALL	ALARM
RE5:    	LCALL	SCAN_KEY
        	CJNE	A,#0FFH,EXIT5             	;任意键退出
        	SJMP	RE5
EXIT5:  	LJMP	MON

DELAY1MS:	MOV	 R5,#2
     DL12:	MOV	 R4,#240
     DL11:	DJNZ	 R4,DL11
          	DJNZ	 R5,DL12 
          	RET   
;RS232    
CSEG		AT	1400H
        	LCALL	CLEAR
        	MOV	TMOD,#20H		
		MOV	TH1,#0F4H          	;设置波特率为4800
		MOV	TL1,#0F4H
		SETB	TR1
        	MOV	SCON,#050H
        	MOV	R7,#6
        	MOV	DPTR,#TAB232
REP232: 	CLR	A
        	MOVC	A,@A+DPTR
        	LCALL	Send_Receive0
        	JNZ	ERR232
        	DJNZ	R7,REP232
        	LCALL	OK1
        	SJMP	EXIT3
ERR232:		LCALL	ERR_SHOW
        	LCALL	ALARM
EXIT3:		CLR	TR1
RE6:    	LCALL	SCAN_KEY
        	CJNE	A,#0FFH,EXIT6             ;任意键退出
        	SJMP	RE6
EXIT6:  	LJMP	MON
TAB232:   	DB    	55H,0AAH,01H,80H,00H,0FFH	
;RS485
CSEG		AT	1500H
        	LCALL	CLEAR
        	MOV	TMOD,#20H	;定时器选用工作模式2
		MOV	TH1,#0FAH	;设定波特率为4800
		MOV	TL1,#0FAH
		SETB	TR1		;
		MOV	SCON,#50H	;串口工作模式1
        	MOV	R7,#6
        	MOV	DPTR,#TAB485
REP485: 	CLR	A
        	MOVC	A,@A+DPTR
        	LCALL	R485_Send_Receive0
        	JNZ	ERR485
        	DJNZ	R7,REP485
        	LCALL	OK1
        	SJMP	EXIT4
ERR485:		LCALL	ERR_SHOW
        	LCALL	ALARM
EXIT4:  	CLR	TR1
RE8:    	LCALL	SCAN_KEY
        	CJNE	A,#0FFH,EXIT485            ;任意键退出
        	SJMP	RE8
EXIT485:  	LJMP	MON
TAB485:   	DB    55H,0AAH,01H,80H,00H,0FFH 		
;12887
CSEG		AT	1600H
RE_DISP:	MOV	R0,#30H
		LCALL   Read_Time
		MOV	R6,#3
		MOV     R0,#32H
		MOV	A,#90H
		LCALL	WRITE_CMD
NEXT_LED:	MOV	A,@R0
		MOV	R2,A
		SWAP	A
		ANL	A,#0FH
		LCALL	LED_DISP
		MOV	A,R2
		ANL	A,#0FH
		LCALL	LED_DISP
		DEC	R0
		DJNZ	R6,NEXT_LED
		LCALL	SCAN_KEY
		CJNE	A,#0FFH,JUDGE2
		JMP	RE_DISP
JUDGE2: 	CJNE	A,#0C3H,RE_DISP
        	LJMP	MON
;61C1024
CSEG		AT	 1700H
		MOV	B,#55H
		LCALL   T_61C1024
		JC	ERROR1
		MOV	B,#0AAH
		LCALL	T_61C1024
		JC	ERROR1
        	CALL	OK1
RE7:    	LCALL	SCAN_KEY
        	CJNE	A,#0FFH,EXIT7             ;任意键退出
        	SJMP	RE7
EXIT7:  	LJMP	MON        
ERROR1:		CALL	ERR_SHOW
        	CALL	ALARM
		LJMP	RE_SCAN
;X5045		
CSEG		AT	 1800H
		LCALL	T_25045
		JC	ERR5045
		LCALL	OK1
		SJMP	RE11
ERR5045:	LCALL	ERR_SHOW
        	LCALL	ALARM
RE11:    	LCALL	SCAN_KEY
        	CJNE	A,#0FFH,EXIT5045            ;任意键退出
        	SJMP	RE11
EXIT5045:  	LJMP	MON 
;8250  
CSEG	AT	 1900H  
		LCALL	START_8250
		JC	ERR16C550
		LCALL	OK1  
		JMP	RE11
ERR16C550:	JMP	ERR5045		 				
CSEG	AT	 1950H
		LCALL	CLEAR
		MOV	A,#90H
		LCALL	WRITE_CMD
		MOV	A,#0BEH
		LCALL	WRITE_DATA
		MOV	A,#0F8H
		LCALL	WRITE_DATA
		MOV	A,#0BAH
		LCALL	WRITE_DATA
		LJMP	START0   

	   END

⌨️ 快捷键说明

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