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

📄 getkeycode.asm

📁 这是用台湾KingB 8位单片机开发的科学计算器程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
			.area   getkeydata(data,abs)
       			.org	0x12a
.TPPTemp::		.ds	1
.TPHTemp::		.ds	1       			
.TPLTemp::		.ds	1
.SFlag::		.ds	1 
.FunctFlag::
.DelayCnt:		.ds	1
.AC			EQU	0x66
.ON			EQU	0x66
.OFF			EQU	0x17
.MODE			EQU	0x16
.SHIFT			EQU	0x12
.ALPHA			EQU	0x13
.LEFT			EQU	0x14
.RIGHT			EQU	0x15
.HYP			EQU	0x44
.STO			EQU	0x52
.RCL			EQU	0x53
.ENTER			EQU	0x06
.SinH			EQU	0xe9
.CosH			EQU	0xf0
.TanH			EQU	0xf1
.ASinH			EQU	0xf2
.ACosH			EQU	0xf3
.ATanH			EQU	0xf4





;SFlag    7   6   5   4   3   2   1   0
;On: 1	 cal AC	RCL STO EQU Sft Alf Hpy  
;Off:0

;SetFlag 7   6   5   4   3   2   1   0
;	 %+ cma	disp pt	num dms	drg rnd	

		        .area   getkeycode(code)
.GetKeyCode::
		
		lda	#01h
		sta	PP
		lda0	.KeyPos	
		cmpe	#0h
		brz	.EndGetKeyCode	
		cmpe	#.AC
		brz	.PowerOn
		cmpe	#.OFF
		brz	.PowerOff
		cmpe	#.LEFT
		brz	.ChangKEY
		cmpe	#.RIGHT
		brz	.ChangKEY
		lda0	ErrorFlag
		cmpe	#0h
		brnz	.EndGetKeyCode		
		lda0	.KeyPos		
		cmpe	#.ENTER
		brz	.EQU					
		cmpe	#.STO
		brz	.STOset
		cmpe	#.RCL
		brz	.RCLset
		
.ChangKEY:	
		
		lda 	.SFlag
		anda	#07h		
		cmpe	#0h		
		brz	.CkStoRcl
		cmpe	#01h
		brz	.HypAddNor		
		cmpe	#02h
		brz	.AlfAddNor		
		cmpe	#04h
		brz	.SftAddNor
		cmpe	#05h
		brz	.HypAddSft
.CkStoRcl:		
		lda	.SFlag
		anda	#30h
		brnz	.ChkStoRcl
		 
.NomlKey::		
		lda0	.KeyPos							
		cmpe	#.SHIFT
		brz	.SetShift
		cmpe	#.ALPHA
		brz	.SetAlpha
		cmpe	#.HYP
		brz	.SetHyp
		br	.KeyTrans
.ChkStoRcl:		
		lda0	.KeyPos	
		cmpe	#.SHIFT
		brz	.SetShift
		cmpe	#.ALPHA
		brz	.SetAlpha
.KeyTrans:		
		lda	#01h
		sta	PP
		lda0	.KeyPos	
		sta 	.M_bcdbuf+1
		lda	#0h
		sta 	.M_bcdbuf
		call	.Bcd2Hex
		lda 	.M_bcdbuf+1
		sta0	.KeyPos		
		lda	#01h
		sta	PP
		lda	#^(.NormalKey)
		sta	.TPPTemp
		lda	#@(.NormalKey)
		sta	.TPHTemp
		lda	#<(.NormalKey)
		sta	.TPLTemp						
		lda0	.KeyPos		
		adda	.TPLTemp
		sta	.TPLTemp
		brnc	.NoCarry
		lda	.TPHTemp	
		inca
		sta	.TPHTemp
.NoCarry:
		lda	.TPPTemp
		sta	TPP
		lda	.TPHTemp
		sta	TPH		
		lda	.TPLTemp
		sta	TPL
		ldv
		sta0	.KeyPos		 
		call	.CheckClrData
		br	.EndGetKeyCode
		
.PowerOn:	
			
		lda	#01h
		sta	PP
		lda0	ErrorFlag
		cmpe	#0h
		brz	1$
		lda	.SFlag
		anda	#~08h
		sta	.SFlag
1$:		
		lda	#0h
		sta	.CalcFlag
		sta	.SRFlag
		sta	Insetflag
		sta0	ErrorFlag		
		lda	.SFlag
		anda	#04h
		brnz	.ChangKEY
		sta0	ErrorFlag		
		lda	.SFlag
		anda	#~37h		
		ora	#40h		
		sta	.SFlag
		anda	#08h
		cmpe	#08h
		brz	.PwrEditMode
		call	.ClrP2Data
.PwrEditMode:	
		call	.ClrZ
		lda	#>.SetFlag
		sta	PP
		lda	.SetFlag
		anda	#~3fh		;ClrAllStatus
		sta	.SetFlag
		lda	#01h
		sta0	.ModeFlag
		lda	BasenFlag	;BaseN 0308	
		anda	#0f0h
		sta	BasenFlag	;						
		call	ClrAlldisp		 		
		;lda	#01h
		lda	#00000101b	;bit 2 1=B type 
		sta	LCDC
		lda	#0h
		sta0	.KeyPos
;;;;;;;formula AC
		lda	#>.SFlag
		sta	PP
		lda	.SFlag		
		ora	#40h
		anda	#~80h
		sta	.SFlag	
		lda0	.FormulaFlag
		cmpe	#01h
		brnz	.EndGetKeyCode
		call	.Formula2Input 
		lda	#0h
		sta0	.FormulaFlag
		lda	#>.ForLDP
		sta	PP
		lda	.ForLDP
		sta0	.DataDP
		br	.EndGetKeyCode
.PowerOff:	
		;lda	#0ffh
		;sta	SP		
		call	.Sleep				
		br	.EndGetKeyCode	
.EQU:
		
		lda	#01h
		sta	PP
		lda	.SFlag	
		anda	#40h	
		brnz	.SetKey0
		
		lda	#0h		
		sta	Insetflag
		br	.ChangKEY
.SetKey0:
		lda	#0h
		sta0	.KeyPos
		lda	.SFlag
		anda	#~37h						
		sta	.SFlag
		br	.EndGetKeyCode					
;-------------------------------------------	
;;;Judge mode choice enable ;if mdoe enable can't set sto or rcl	
.STOset:
		lda	#01h		 
		sta	PP		
		lda	.SetFlag
		anda	#02h
		brnz	.EndGetKeyCode
		lda	BasenFlag
		anda	#0fh
		brnz	.EndGetKeyCode    	        	        	         	      	
        	lda0	.ModeFlag
		anda	#0f0h
		brnz	.EndGetKeyCode	
		lda	.SFlag
		anda	#30h
		cmpe	#20h
		brz	.DosetSto
		cmpe	#10h
		brz	.ResetSto
		
.DosetSto:		
		
		lda 	.SFlag
		anda	#~37h
		ora	#10h
		sta 	.SFlag
		br	.EndSTOset
.ResetSto:				
		lda 	.SFlag
		anda	#~17h
		sta 	.SFlag
		lda	#0h
		sta0	.KeyPos 
		 	
.EndSTOset:
		call	.CheckClrData 
		br	.EndGetKeyCode

;-------------------------------------------
;;;Judge mode choice enable ;if mdoe enable can't set sto or rcl			
.RCLset:
		lda	#01h		 
		sta	PP	
		lda	.SetFlag
		anda	#02h
		brnz	.EndGetKeyCode
		lda	BasenFlag
		anda	#0fh
		brnz	.EndGetKeyCode    	        	        	         	      	
        	lda0	.ModeFlag
		anda	#0f0h
		brnz	.EndGetKeyCode	
		lda	.SFlag
		anda	#30h
		cmpe	#10h
		brz	.DosetRcl
		cmpe	#20h
		brz	.ResetRcl
		
.DosetRcl:		
		
		lda 	.SFlag
		anda	#~37h
		ora	#20h
		sta 	.SFlag
		br	.EndRCLset
.ResetRcl:				
		lda 	.SFlag
		anda	#~27h
		sta 	.SFlag
		lda	#0h
		sta0	.KeyPos 
		 	
		
.EndRCLset:
		;call	.CheckClrData 
		br	.EndGetKeyCode		
;-------------------------------------------		
.SetShift:
		lda	.SFlag
		anda	#07h		
		cmpe	#0h
		brz	.SetSF4
		cmpe	#01h
		brz	.ADDhpy
		cmpe	#02h
		brnz	.Sft
		lda	.SFlag
		anda	#~37h
		ora	#04h
		sta	.SFlag			
		lda	#0h
		sta0	.KeyPos
		br	.EndGetKeyCode
.Sft:		
		lda	.SFlag
		anda	#~04h		
		sta	.SFlag
		lda	#0h
		sta0	.KeyPos
		br	.EndGetKeyCode
.ADDhpy:
		lda	.SFlag
		anda	#~37h
		ora	#05h		
		sta	.SFlag
		lda	#0h
		sta0	.KeyPos
		br	.EndGetKeyCode		
.SetSF4:
		lda	.SFlag	
		ora	#04h
		sta	.SFlag
		lda	#0h
		sta0	.KeyPos
		br	.EndGetKeyCode		
;-------------------------------------------			
.SetAlpha:			
		lda	.SFlag
		anda	#~37h						
		ora	#02h
		sta	.SFlag
		lda	#0h
		sta0	.KeyPos
		br	.EndGetKeyCode
;-------------------------------------------			
.SetHyp:			
							
		lda	.SFlag		
		anda	#07h
		cmpe	#01h
		brz	.SetSftF
		cmpe	#02h
		brz	.ClrAF
		cmpe	#05h
		brz	.SetSftF
		br	.NoClrhyp
.SetSftF:		
		lda	.SFlag
		anda	#~01h
		sta	.SFlag
		lda	#0h
		sta0	.KeyPos
		br	.EndGetKeyCode	
.NoClrhyp:		
		lda	.SFlag		
		ora	#01h
		sta	.SFlag
		lda	#0h
		sta0	.KeyPos
		br	.EndGetKeyCode	
.ClrAF:
			
		lda	.SFlag
		anda	#~33h		
		ora	#01h
		sta	.SFlag
.ClrKeyPos1:		
		lda	#0h
		sta0	.KeyPos
		br	.EndGetKeyCode	
					
;-------------------------------------------		
.SftAddNor:
		lda0	.KeyPos	
		cmpe	#.HYP
		brz	.SetHyp
		lda0	.KeyPos	
		cmpe	#.ALPHA
		brz	.SetAlpha
		lda0	.KeyPos	
		cmpe	#.SHIFT
		brnz	.GetShfKey
		lda	#0h
		sta0	.KeyPos
		lda	#01h
		sta	PP
		lda	.SFlag
		anda	#~04h	;	#~44h				;12/30
		sta	.SFlag
		br	.EndGetKeyCode
.GetShfKey:			
		lda0	.KeyPos	
		cmpe	#0ffh
		brz	.EndGetKeyCode
		lda	#01h
		sta	PP
		lda0	.KeyPos
		sta 	.M_bcdbuf+1
		lda	#0h
		sta 	.M_bcdbuf
		call	.Bcd2Hex
		lda 	.M_bcdbuf+1
		sta0	.KeyPos
		lda	#01h
		sta	PP
		lda	#^(.ShiftKey)
		sta	.TPPTemp
		lda	#@(.ShiftKey)
		sta	.TPHTemp
		lda	#<(.ShiftKey)
		sta	.TPLTemp
						
		lda0	.KeyPos		
		adda	.TPLTemp
		sta	.TPLTemp
		brnc	.NoCarrySft
		lda	.TPHTemp	
		inca
		sta	.TPHTemp
.NoCarrySft:
		lda	.TPPTemp
		sta	TPP
		lda	.TPHTemp
		sta	TPH		
		lda	.TPLTemp
		sta	TPL
		ldv
		sta0 	.KeyPos
		cmpe	#60h
		brz	.IsRntCheck
		call	.CheckClrData
.22$:		
		lda	.SFlag
		anda	#~04h		
		sta	.SFlag
		br	.EndGetKeyCode	
.IsRntCheck:		
		lda	.SFlag
		anda	#08h
		brz	.22$	
		lda	.SFlag	
		anda	#~44h		
		sta	.SFlag					
		br	.EndGetKeyCode		
					
;-------------------------------------------		
.AlfAddNor:
		lda0	.KeyPos	
		cmpe	#.SHIFT
		brz	.SetShift
		;lda0	.KeyPos	
		;cmpe	#.HYP
		;brz	.SetHyp
		lda0	.KeyPos	
		cmpe	#.ALPHA
		brnz	.GetAlfKey
		lda	#0h
		sta0	.KeyPos
		lda	.SFlag
		anda	#~02h
		sta	.SFlag
		br	.EndGetKeyCode
.GetAlfKey:				
		lda	#01h
		sta	PP					
		lda0	.KeyPos
		sta	.M_bcdbuf+1
		lda	#0h
		sta 	.M_bcdbuf
		call	.Bcd2Hex
		lda 	.M_bcdbuf+1
		sta0	.KeyPos		
		lda	#^(.AlphaKey)
		sta	.TPPTemp
		lda	#@(.AlphaKey)
		sta	.TPHTemp
		lda	#<(.AlphaKey)
		sta	.TPLTemp						
		lda0	.KeyPos		
		adda	.TPLTemp
		sta	.TPLTemp
		brnc	.NoCarryAlf
		lda	.TPHTemp	
		inca
		sta	.TPHTemp
.NoCarryAlf:
		lda	.TPPTemp
		sta	TPP
		lda	.TPHTemp
		sta	TPH		
		lda	.TPLTemp
		sta	TPL
		ldv
		sta0 	.KeyPos	
		call	.CheckClrData
		lda	#>StateFlag
		sta	PP
		lda	StateFlag
		anda	#08h
		brz	1$
		lda0	.KeyPos
		cmpe	#7ah		;calc key
		brnz	1$
		lda	#0h
		sta0	.KeyPos		
1$:		
		lda	.SFlag
		anda	#~02h		
		sta	.SFlag		
		br	.EndGetKeyCode	
		 	
;-------------------------------------------				
.HypAddNor:	

⌨️ 快捷键说明

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