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

📄 caldisp.asm

📁 这是用台湾KingB 8位单片机开发的科学计算器程序
💻 ASM
📖 第 1 页 / 共 3 页
字号:
;------------------------------------------------------------------------
;------------------------------------------------------------------------
Leftchk:					
		lda0	.DataDP
       		cmpe	#C_ZERO
       		brz	leftchkend
       		
		PP2One()		
		lda0	.SFDP
		cmpe	#C_ZERO
		brnz	doleftchk
		br	leftchkend	
		
doleftchk:								
		call	Clrfullmatrix		
notfullleft:		
		PP2One()
		lda	#C_12
		sta	GetCount
			
		lda	#C_TWO
		sta	cmpPP
		lda	#C_ZERO
		sta	cmpDP
nfleftloop:					
		call	Addplace				        	 				
		call	Chklength
		PP2One()		
        	lda	GetCount
        	suba	displength
        	sta	GetCount
        	brnc	fullleft       	      	
		lda0	.SFDP
        	cmpe	cmpDP
        	brnz	nfleftloop
		
		
nfldisp:				
		PP2One()
		lda	#C_11
		sta	GetCount
			
		lda	#C_TWO
		sta	cmpPP
		lda	#C_ZERO
		sta	cmpDP			
nfldisploop:											 				
		call	Addplace							
		PP2One()
		lda0	.SFDP		
		cmpe	cmpDP
		brnz	keepnfldisp
		lda	GetCount
		sta	blankCount
					
keepnfldisp:
		call	Font2disp
																			
		lda	GetCount
		cmpe	#MAX
		brz	leftchkend										
		lda0	.DataDP
		cmpe	cmpDP		
		brnz	nfldisploop		
		br	leftchkend
		
		
fullleft:		
		PP2One()
		lda	#C_12
		sta	GetCount
		lda	#C_TWO
		sta	cmpPP
		lda0	.SFDP
		sta	cmpDP					
leftloop:				  	        	        	        	
        	call	Decplace        	 				
		call	Chklength
		PP2One()		
        	lda	GetCount
        	suba	displength
        	sta	GetCount
        	brnc	set2leftdisp
        	lda	cmpDP
        	cmpe	#C_ZERO
        	brnz	leftloop
        	br	set2leftdisp
       
        	
							
set2leftdisp:
		PP2One()               		
		lda	#C_11
		sta	GetCount
		call	Addplace																
leftdisploop:									
		
		call	Addplace											
		PP2One() 
		lda0	.SFDP
		cmpe	cmpDP
		brnz	keepleftdisp
		lda	GetCount
		sta	blankCount
				
keepleftdisp:				
		call	Font2disp			
		lda	GetCount
		cmpe	#MAX
		brz	leftchkend												
		lda0	.DataDP
		cmpe	cmpDP		
		brnz	leftdisploop	
leftchkend:		
		ret
;------------------------------------------------------------------------
Rightchk::      		
		PP2One()
		lda	.SetFlag
		anda	#BLANKCHK
		brnz	Matrixanschk
				
		lda0	.SFDP
		cmpe	#C_ZERO
		brnz	dorightchk
		br	lastchk			
dorightchk:	
		lda0	.DataDP
       		cmpe	#C_ZERO
       		brz	rightchkend						
		call	Clrfullmatrix		
notfullright:		
		PP2One()
		lda	#C_12
		sta	GetCount
			
		lda	#C_TWO
		sta	cmpPP
		lda	#C_ZERO
		sta	cmpDP
nfrightloop:					
		call	Addplace				        	 				
		call	Chklength
		PP2One()		
        	lda	GetCount
        	suba	displength
        	sta	GetCount
        	brnc	fullright
		lda0	.SFDP
        	cmpe	cmpDP
        	brnz	nfrightloop
		br	nfrdisp
		
nfrdisp:				
		PP2One()
		lda	#C_11
		sta	GetCount
			
		lda	#C_TWO
		sta	cmpPP
		lda	#C_ZERO
		sta	cmpDP			
nfrdisploop:											 				
		call	Addplace							
		PP2One()
		lda0	.SFDP		
		cmpe	cmpDP
		brnz	keepnfrdisp
		lda	GetCount
		sta	blankCount
						
keepnfrdisp:
		call	Font2disp
																				
		lda	GetCount
		cmpe	#MAX
		brz	rightchkend										
		lda0	.DataDP
		cmpe	cmpDP		
		brnz	nfrdisploop		
		br	rightchkend
		
		
fullright:		
		PP2One()
		lda	#C_12
		sta	GetCount
		lda	#C_TWO
		sta	cmpPP
		lda0	.SFDP
		sta	cmpDP				
rightloop:				  	        	        	        	
        	call	Decplace    	        	 				
		call	Chklength
		PP2One()		
        	lda	GetCount
        	suba	displength
        	sta	GetCount
        	brnc	set2rightdisp	        	
        	lda	cmpDP
        	cmpe	#C_ZERO
        	brnz	rightloop
        	br	set2rightdisp
       
        	
							
set2rightdisp:
		PP2One()               		
		lda	#C_11
		sta	GetCount
		call	Addplace																
rightdisploop:									
		
		call	Addplace											
		PP2One() 
		lda0	.SFDP
		cmpe	cmpDP
		brnz	keeprightdisp
		lda	GetCount
		sta	blankCount
				
keeprightdisp:				
		call	Font2disp			
		lda	GetCount
		cmpe	#MAX
		brz	rightchkend												
		lda0	.DataDP
		cmpe	cmpDP		
		brnz	rightdisploop	
		br	rightchkend	



		
lastchk:		
		PP2Zero() 		
		lda	.SFDP
		cmpe	.DataDP
		brnz	keepdolast
		
		call	Clrfullmatrix
		PP2One()
		call	Rekeyindisp2
clrpage2:				
		
		
		
		call	ClrPP2
		PP2One()				
		br	rightchkend
		
keepdolast:		
		call	Clrfullmatrix
		PP2One()
		lda	#C_11
		sta	GetCount
			
		lda	#C_TWO
		sta	cmpPP
		lda	#C_ZERO
		sta	cmpDP
chkoverloop:					
		call	Addplace				        	 				
		call	Chklength
		PP2One()		
        	lda	GetCount
        	suba	displength
        	sta	GetCount
        	brnc	Fulldisp   	      	
		lda0	.DataDP
        	cmpe	cmpDP
        	brnz	chkoverloop
		br	notoverdisp
		
					
notoverdisp:				
		
		PP2One()
		lda	#C_11
		sta	GetCount
			
		lda	#C_TWO
		sta	cmpPP
		lda	#C_ZERO
		sta	cmpDP	
novdisploop:					
		call	Addplace		 								
		call	Font2disp
		PP2One()													
		lda0	.DataDP
		cmpe	cmpDP		
		brnz	novdisploop
		lda	GetCount
		sta	blankCount								       			
rightchkend:
		ret
;------------------------------------------------------------------------
;------------------------------------------------------------------------
Matrixanschk:
		lda0	.DataDP
       		cmpe	#C_ZERO
       		brz	Matrixanschkend
		call	Clrfullmatrix				
Mansdisp:				
		PP2One()
		lda	#C_11
		sta	GetCount
			
		lda	#C_TWO
		sta	cmpPP
		lda	#C_ZERO
		sta	cmpDP			
Mdisploop:											 				
		call	Addplace							
		
		call	Font2disp
		
																						
		lda	GetCount
		cmpe	#MAX
		brz	Matrixanschkend		
		PP2One()
		lda0	.DataDP
		cmpe	cmpDP				
		brnz	Mdisploop
		
Matrixanschkend:		
		ret
;------------------------------------------------------------------------
;------------------------------------------------------------------------

Chkkeylr::		
		
		lda	#>ErrorFlag
        	sta	PP
        	lda	#<ErrorFlag
        	sta	DP
        	lda	i
        	cmpe	#C_ZERO
		brnz	chkkeylrend0
				
		PP2One() 
		lda	#C_ZERO
		sta	Insetflag
		lda	.SFlag
		anda	#EQUCHK
		brnz	chkkeyEqu
		
		lda0	.KeyPos
		cmpe	#LEFTKEY
		brz	LeftGo
		cmpe	#RIGHTKEY
		brz	RightGo
		br	chkkeylrend1

		
chkkeyEqu:
		lda0	.KeyPos
		cmpe	#LEFTKEY
		brz	chkkeylrend2
		cmpe	#RIGHTKEY
		brz	chkkeylrend3
		br	chkkeylrend1		



					
LeftGo:					
		PP2One() 
		lda0	.SFDP
		cmpe	#C_ZERO
		brnz	3$			
2$:				
		lda0	.DataDP
		sta0	.SFDP						  	        	       				
		br	chkkeylrend0
		
3$:		
		lda	#C_TWO
		sta	cmpPP
		lda0	.SFDP
		sta	cmpDP								  	        	
        	call	Decplace
		lda	cmpDP
		cmpe	#C_ZERO
		brnz	4$
   		br	chkkeylrend4     	        	
4$:        			      	
		lda	cmpDP
		sta0	.SFDP			
		br	chkkeylrend0

		
		
RightGo:										
		PP2One()		
		lda0	.SFDP
		cmpe	#C_ZERO
		brz	chkkeylrend4		
1$:		
		PP2Zero()
		lda	.SFDP
		cmpe	.DataDP
		brnz	2$
		PP2One()
		br	chkkeylrend1
		
2$:		PP2One() 
		lda	#C_TWO
		sta	cmpPP
		lda0	.SFDP
		sta	cmpDP
        	call	Addplace
		lda	cmpDP
		sta0	.SFDP
		br	chkkeylrend0

chkkeylrend4:
		lda	.SFlag
		anda	#~ACCHK
		sta	.SFlag	
		lda	#C_TWO
		br	chkkeylrend
		
	
chkkeylrend3:		
		PP2One()
		lda	.SetFlag
		anda	#~BLANKCHK
		sta	.SetFlag				
		lda	#C_ZERO
		sta	cmpDP
		lda	#C_TWO
		sta	cmpPP
        	call	Addplace
		lda	cmpDP
		sta0	.SFDP
		br	chkkeylrend0
		
				
chkkeylrend2:		
		PP2One()
		lda	.SetFlag
		anda	#~BLANKCHK
		sta	.SetFlag
		lda	#RIGHTKEY
		sta0	.KeyPos		
chkkeylrend1:				
		lda	#C_ZERO
		sta0	.SFDP		
chkkeylrend0:
		lda	#>.SRFlag
		sta	PP
		lda	#C_ZERO
		sta	.SRFlag
		PP2One()
		lda	.SFlag
		anda	#~(ACCHK|EQUCHK)
		sta	.SFlag
		lda	T1Flag
		ora	#TIMEGO
		sta	T1Flag
		lda	#C_ZERO		
		sta	t1count
		lda	#C_ONE
chkkeylrend:
		ret		
;------------------------------------------------------------------------
;------------------------------------------------------------------------		
T1chkblank::															
		
allblankchk:		
		PP2One()
		lda	T1Flag
		anda	#TIMEGO
		brz	T1chkblankend1				
		lda0	ErrorFlag
        	cmpe	#C_ZERO
        	brnz	T1chkblankend	;ChkT1end        	        		
        	lda0	.ModeFlag
        	anda	#MASKLO
        	brnz	T1chkblankend	;ChkT1end        	 		
       		lda	BasenFlag
        	anda	#MASKHI
        	brnz	T1chkblankend	;ChkT1end       				
		lda	.SetFlag
		anda	#(DRGCHK|BLANKCHK)
		brnz	T1chkblankend	;ChkT1end	
	
			        	        	
        	lda	.SFlag
		anda	#ACCHK
		brnz	normalblank
                     	
    		lda	blankCount
    		cmpe	#MAX
    		brnz	1$
   		lda	#C_ZERO
   		sta	blankCount 		
1$:		
    		
		lda0	.SFDP
		cmpe	#C_ZERO
		brnz	spblank
		 
normalblank:						
		lda0	.DataDP
		cmpe	#WILLFULL
		brnc	0$		
		lda	t1count
		cmpe	#C_ZERO
		brz	1$
		cmpe	#C_ONE
		brz	Display_t1
		cmpe	#C_SEVEN
		brz	2$	
		cmpe	#C_EIGHT
		brz	Display_t1
		br	T1chkblankend
		
0$:		lda	t1count
		cmpe	#C_ONE
		brz	Display_t1_1
		cmpe	#C_TWO
		brz	Display_t1_2
		cmpe	#C_THREE
		brz	Display_t1_3
		cmpe	#C_FOUR
		brz	Display_t1_4
		cmpe	#C_FIVE
		brz	Display_t1_5	
		cmpe	#C_SIX
		brz	Display_t1_6			
		cmpe	#C_SEVEN
		brz	2$
		cmpe	#C_EIGHT
		brz	Display_t1_1
		cmpe	#C_NINE
		brz	Display_t1_2
		cmpe	#C_TEN
		brz	Display_t1_3
		cmpe	#C_11
		brz	Display_t1_4
		cmpe	#C_12
		brz	Display_t1_5	
		cmpe	#C_13
		brz	Display_t1_6
				
			
1$:		lda	Insetflag
		cmpe	#C_ONE
		brz	12$
		lda	.SFlag
		anda	#ACCHK
		brnz	10$		
		lda0	.DataDP
		cmpe	#WILLFULL
		brc	11$
10$:		lda	#SPACEDISP
		sta	t1dispbf  	
		br	T1chkblankend
11$:		lda	#BLANKDISP
		sta	t1dispbf        	    	
		br	T1chkblankend
12$:		lda	#INSETDISP
		sta	t1dispbf   	
		br	T1chkblankend
2$:		lda	#C_ZERO
		sta	t1dispbf
        	br	T1chkblankend

spblank:			
		lda	t1count
		cmpe	#C_ZERO
		brz	dispspace
		cmpe	#C_ONE
		brz	Display_t1
		cmpe	#C_SEVEN
		brz	dispword	
		cmpe	#C_EIGHT
		brz	Display_t1
		br	T1chkblankend
dispspace:
		lda	Insetflag
		cmpe	#C_ONE
		brz	2$				
		lda0	.DataDP
		cmpe	#WILLFULL
		brc	1$		
		lda	#SPACEDISP
		sta	t1dispbf       	  	
		br	127$			;br	T1chkblankend		
1$:		lda	#BLANKDISP
		sta	t1dispbf      	
		br	127$			;br	T1chkblankend
2$:		lda	#INSETDISP
		sta	t1dispbf 
		;br	127$
127$:		      	
		lda	#C_TWO
		sta	PP
		lda0	.SFDP
		deca
		sta	DP
		lda	I
		sta0	.DataBuf			
            	PP2One()
            	lda0	.DataBuf
            	sta	font
            	call	ChangeKeychk
		lda	font
		sta	t1fontbf
		br	T1chkblankend
		
dispword:						
		;lda	#^firstword
		;sta	tab_ptr+2	
		lda	#>firstword
		sta	tab_ptr+1		
		lda	#<firstword
		adda	t1fontbf		;font
		sta	tab_ptr
		call	GetLdv
		sta	t1dispbf
		br	T1chkblankend		
Display_t1:		
		lda	t1dispbf
		sta	font       	
        	lda   	blankCount
        	sta     dig_num        	
        	call    Display_5X7_1	
		br	T1chkblankend
Display_t1_1:
		lda	t1dispbf		
		sta	font       	
        	lda   	blankCount
        	sta     dig_num        	
        	call    Display_5X7_blk1 	
		br	T1chkblankend		
Display_t1_2:
		lda	t1dispbf
		sta	font       	

⌨️ 快捷键说明

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