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

📄 calcmain.asm

📁 这是用台湾KingB 8位单片机开发的科学计算器程序
💻 ASM
📖 第 1 页 / 共 3 页
字号:
		brz	.DOAns
		cmpe	#0bbh			;Rad
		brz	.DOAns
		cmpe	#0ceh			;G%
		brz	.DOAns
		cmpe	#0h
		brz	.EndAutoaddANS		;ret
		cmpe	#31h			;shift abc
		brz	.EndAutoaddANS
		cmpe	#42h			;shift abc
		brz	.EndAutoaddANS
		cmpe	#52h			;sto
		brz	.EndAutoaddANS
		cmpe	#53h			;rcl
		brz	.EndAutoaddANS
		cmpe	#0c3h			;ab/c
		brz	.EndAutoaddANS
		cmpe	#0b7h			;degree
		brz	.EndAutoaddANS
		cmpe	#61h			;ins
		brz	.RndEnd
		cmpe	#65h			;del
		brz	.RndEnd
		cmpe	#60h			;ins
		brz	.RndEnd		
		cmpe	#0b5h			;m+
		brz	.EndCheckRnd 		
		cmpe	#0cch			;left
		brz	.EndCheckRnd 
		cmpe	#0ddh			;right
		brz	.EndCheckRnd 
		cmpe	#77h			;%
		brz	.EndCheckRnd 
		cmpe	#0a3h			;=
		brz	.EndCheckRnd 
;		cmpe	#0dfh			;;;;;;;
;		brz	.EndCheckRnd 
;		cmpe	#.MODE
;		brz	.EndCheckRnd 
;		cmpe	#0b6h		
;		brz	.EndCheckRnd		
;		cmpe	#0bdh
;		brz	.EndCheckRnd
;		cmpe	#0beh
;		brz	.EndCheckRnd
;		cmpe	#0a8h
;		brz	.EndCheckRnd
;		cmpe	#0b0h
;		brz	.EndCheckRnd
;		cmpe	#0c2h			;eng
;		brz	.EndCheckRnd
;		cmpe	#041h			;Shift eng
;		brz	.EndCheckRnd
		lda0	.KeyPos
		sta0	.DataBuf
		sta0	.DataBuf+1
		call	.CheckPari
		call	.CheckMem
		lda0	.AfterPari		 
		cmpe	#07h			;Pari 7 ex:2X^2 funct
		brz	.DOAns
		cmpe	#08h			;Pari 8 ex:5X^Y 6funct
		brz	.DOAns
		call	.ClrP2Data
		lda	#01h
		sta	PP
		lda	.SFlag			;cancel = flag
		anda	#~08h
		sta	.SFlag	
		lda	.SetFlag
		anda	#~3fh
		sta	.SetFlag					
		call	Rekeyindisp2		;only clear dotmatrix
		br	.EndCheckRnd
;;;;;;;;;;;;Auto add Ans to function oode				
.DOAns:
		lda	#>.SRFlag
		sta	PP
		lda	#0h
		sta	.SRFlag
		lda	#>.SetFlag
		sta	PP
		lda	.SetFlag
		anda	#80h
		brnz	 .PercntMul
.ANS12:		
		call	.ClrP2Data		;CLR Input data area Ram
;;;;;;Auto add Ans data to Function code	
.StartAns::	
		lda	#>.SFlag
		sta	PP
		lda	.SFlag
		anda	#80h
		brnz	.EndCheckRnd				 
		lda	#02h
		sta	PP
		lda	#0h
		sta	DP								 		
		lda	#.ANS
		sta	i	
		lda	#01h
		sta0	.DataDP				;Set auto add Ans key
		br	.EndCheckRnd
.PercntMul:
		lda0	.KeyPos
		cmpe	#0a4h
		brz	.DOXAddZ
		cmpe	#0a5h
		brz	.DOXDecZ
		br	.ANS12	
.DOXAddZ:
		call	.B_trans_X
		call	.Z_trans_Y
		call    Addition
		br	.EndCheckRnd
.DOXDecZ:
		call	.B_trans_X
		call	.Z_trans_Y
		call    Subtration
		br	.EndCheckRnd
								
;;;;;;;;;;;;disable display mode and rnd mode			
.EndCheckRnd:	
		lda	#01h
		sta	PP
		lda	.SetFlag		
		anda	#~21h
		sta	.SetFlag				
		ret	
.RndEnd:
		lda	#0h
		sta0	.KeyPos
		ret		
;===========================================
.AutoaddANS::
		
		lda0	.DataDP
		cmpe	#01h
		brnz	.EndAutoaddANS
		lda	#02h
		sta	PP
		lda	#0 
		sta	DP
		lda	i
		sta0	.DataBuf		
		sta0	.DataBuf+1		 
		call	.CheckPari
		call	.CheckMem
		lda0	.AfterPari		
		cmpe	#06h
		brz	.DOAns5
		br	.EndAutoaddANS	
.BasenModeAns::
		lda	#>.SFlag
		sta	PP
		lda	.SFlag
		anda	#08h
		brz	.EndAutoaddANS	
		lda0	.KeyPos
		sta0	.DataBuf
		call	.Paricmp
		lda0	.AfterPari
		cmpe	#07h
		brz	.BaseAns
		cmpe	#09h
		brz	.BaseAns
		cmpe	#0fh
		brz	.Clrp2Inp				
		br	.EndAutoaddANS	
.BaseAns:
		call	.ClrP2Edit
		lda	#02h
		sta	PP
		lda	#0h
		sta	DP		
		lda	#.ANS
		sta	i	
		lda	#01h
		sta0	.DataDP	
		br	.ClrAnsFlag	
.Clrp2Inp:
		call	.ClrP2Edit		
		lda	#0h
		sta0	.DataDP
		
		
.ClrAnsFlag:
		lda	#>.SFlag
		sta	PP
		lda	.SFlag
		anda	#~08h 
		sta	.SFlag
		lda	#>.SRFlag
		sta	PP
		lda	#0h
		sta	.SRFlag
		
		br	.EndAutoaddANS						
;;;;;;;;;;;;Auto add Ans to function mode				
.DOAns5:	
		lda0	.KeyPos
		cmpe	#0a8h
		brz	.EndAutoaddANS
		lda	#02h
		sta	PP	 
		lda0	.DataBuf
		sta	i
		incdp			
		lda	#.ANS
		sta	i			
		lda	#02h
		sta0	.DataDP				;Set auto add Ans key
		
;;;;;;;;;;;;disable display mode and rnd mode			
.EndAutoaddANS:	
				

		ret
	 	 		
				 
				
;-------------------------------------------
.BaseN:
		
		lda	#>.SetFlag
		sta	PP
		lda	.SetFlag
		anda	#20h
		brz	.EditMode
		call	.Buf_trans_X			
		lda0	.KeyPos
		cmpe	#.DecM		
		brz	.TransDec
		cmpe	#.HexM		
		brz	.TransHex
		cmpe	#.BinM		
		brz	.TransBin
		cmpe	#.OctM		
		brz	.TransOct
		br	.EditMode
.TransDec:
		call	.Buf_trans_Z
		call	.Z_trans_X
		call	CheckDecLimit		
		br	.DispBaseN
.TransHex:
		call	Base_Dec2Hex
		call	.Z_trans_X	
		call	CheckHexLimit	
		br	.DispBaseN	
.TransBin:
		call	Base_Dec2Bin
		call	.Z_trans_X
		call	CheckBinLimit	
		br	.DispBaseN		
.TransOct:
		call	Base_Dec2Oct
		call	.Z_trans_X
		call	CheckOctLimit
		br	.DispBaseN
.DispBaseN:	
		lda0	ErrorFlag
		cmpe	#0h
		brnz	.DispDotMatrix		
		call	ChkDispAns				 
		call	ShowAnschk
		call	.I_trans_Z							
		br	.EmitKeyD		
.EditMode:
		lda0	.KeyPos
		cmpe	#6ah
		brz	.Logic 
		lda	#>BasenFlag
		sta	PP
		lda	BasenFlag
		anda	#0fh
		brz	.NotBaseN
		call	LogicKeyChk
		lda0	.KeyPos
		cmpe	#0h
		brz	.EmitKeyD
		call	.BasenModeAns
		br	.Normalinput						
;===========================================
.InterruptT1:   
		
		sta0	.TempA
		lda	PP
		sta0 	.PPTemp							
		lda	OP1		
		sta0 	.OP1Temp														
		lda0	.RandCnt
		inca
		sta0	.RandCnt
		lda	#01h
		sta	PP	
		lda	T1Flag
		ora	#80h
		sta	T1Flag	
		
		lda0	.RandCnt
		anda	#0fh
		cmpe	#0fh
		brnz	.CKkeyCnt
		lda0	.Sec
		inca	
		sta0	.Sec
		 
.CKkeyCnt:				
;		lda0	.KeyCnt
;		ora	#10h
;		sta0	.KeyCnt							 
		lda0	.OP1Temp
		sta	OP1			
		lda0 	.PPTemp
		sta	PP		
		lda0	.TempA		
		reti
;===========================================
.InterruptT2:   
		
		sta0	.TempA
		lda	PP
		sta0 	.PPTemp								
		lda	OP1		
		sta0 	.OP1Temp
		call	.KeyScan 
		lda0	.TurboCnt
		inca
		sta0	.TurboCnt				 		 						
		lda0	.OP1Temp
		sta	OP1			
		lda0 	.PPTemp
		sta	PP		
		lda0	.TempA		
		reti

				
;-------------------------------------------		
;		.Initial:
;-------------------------------------------
.Initial::
		CLRINT
		lda	#0h
		sta	LCDC								
		lda	#0ffh
		sta	PRTD
		sta	PRT17
		lda 	#0h
		sta	PWMC
		sta	VOC	
;-------------------------------------------
;		Clear Lcd
;-------------------------------------------
.ClearLCD::	
		lda	#0h
		sta	PP			
		lda	#0h
		sta	DP
.Clrlcd:		
		lda	#0h
		sta	i
		incdp	
		lda	DP
		cmpe	#0f0h
		brz	.EndInitiallcd
		br	.Clrlcd
.EndInitiallcd:		
							
		call	.ClrallP		
		call	.DispInitial
		call	.ClrData		
		call	.SetTimeClk
		
		ret	
;-------------------------------------------
;		ClrData
;-------------------------------------------
.ClrData::	
		call	.ClrP2Edit	 
		lda	#0h
		sta	PP		 
		sta	ErrorFlag
		sta	Temp1
		sta	Temp2
		sta	.Sec
		sta	.KeyC
		sta	.KeyD	
		sta	.Buf1
		sta	.Buf2				
		sta	.CntIndex
		sta	.FormulaFlag
		sta	.DmsCount 		
		sta	.DataDP	
		sta	.SFDP
		sta	.TFlag	
		sta	.KeyPos 		;save	Key Posit
		sta	.KeyCnt		 
		sta	.KeyBuf	
		sta	.KeyCodeBuf				 
		sta	.DataDP	
		sta	.TurboCnt
		lda	#.RealseTime
		sta0	.KeyTimeCnt	
;===============initial PP=1================
		lda	#>.Count
		sta	PP
		lda	#0h
		sta	.Count	
		lda	#01h
		sta	PP
		lda	#0h		
		sta	.SetFlag
		lda	#40H
		sta	.SFlag
		lda	#>.SRFlag
		sta	PP
		lda	#0h
		sta	.SRFlag
		sta	.CalcFlag
		call	.ClrZ							
		call	.DispInitial2
		ret
;-------------------------------------------
;		SetTimeCLK
;-------------------------------------------
.SetTimeClk: 				
		lda	#.SetT1H 
		sta	T1H
		lda	#.SetT1L 
		sta	T1L	
		lda	#.SetT2H 
		sta	T2H
		lda	#.SetT2L 
		sta	T2L	
		lda	#06h
		sta	IER
		lda	#00001100b		;T1 T2 enable
		sta	OP1				
		lda	#0h
		sta	OP2	
		call	.LcdcOn
		
		ret					
				;01 is open 00 is close lcd 101 B  001 A
;-------------------------------------------
;		SleepModeSet
;-------------------------------------------
.IntoSleepMode:
		lda	#0h		
		sta	LCDC				
		sta0	.Sec	
		call	.ClrData	
		lda	#0ffh
		sta	PRT17
		lda	#0ffh
		sta	PRTD					
		lda	OP1
		ora	#01001100b 		
		sta	OP1
		lda	#0h
		sta0	.KeyCnt
		sta0	.KeyBuf		
		sta0	.KeyCodeBuf			
		ret				
;-------------------------------------------
;		SleepWakeUpSet
;-------------------------------------------
.LcdcOn: 
 		lda	OP1
 		ora	#20h
 		sta	OP1			
		lda	#00000101b	;bit 2 1=B type 
		sta	LCDC	
		lda	OP1
 		anda	#~20h
 		sta	OP1				
		ret
;-------------------------------------------
;		.DisableInt
;-------------------------------------------						
.DI::
		 
		lda	OP1
		anda	#~10h						
		sta	OP1								 		
		ret		
;-------------------------------------------
;		.EnableInt
;-------------------------------------------						
.EI::	 
		lda	OP1
		ora	#14h						
		sta	OP1										 		
		ret						
;-------------------------------------------
;		.IdleMode
;-------------------------------------------
.IdleMode::			
		lda	#0h
		sta	PRT17
		sta0	.KeyCnt	
		lda	#0fch
		sta	PRTD			 		 
		lda	OP1
		anda	#~08h
		ora	#20h
		sta	OP1				 		 	
		lda	OP2
		ora	#10000000b	
		sta	OP2	
.EndIdle:
		ret
;-------------------------------------------
;		.NormalMode
;-------------------------------------------
.NormalMode::	
						 		 
		lda	OP1
		anda	#~20h
		ora	#0ch
		sta	OP1	 			 		 			  
		ret 
;-------------------------------------------
.KeyCheck::	
		lda	#>.Count
		sta	PP
		lda	.Count
		cmpe	#.HaveKey
		brz	.EndCheckKey
		lda	#0ffh
		sta	PRT17
		lda	#083h
		sta	PRTD
		lda	PRT17
		cmpe	#0ffh
		brnz	.SetNormal
		lda	PRTD
		anda	#83h
		cmpe	#83h
		brnz	.SetNormal
		lda	#>.Count
		sta	PP
		lda	#.NoKey
		sta	.Count	
		sta0	.KeyBuf
		sta0	.KeyCnt
		sta0	.KeyCodeBuf	 
		ret
.SetNormal:	
		lda	#>.Count
		sta	PP
		lda	.Count
		cmpe	#.KeyDown
		brnz	.EndCheckKey
		ret
.EndCheckKey:	
		lda	#>.Count
		sta	PP				 
		lda 	#.HaveKey
		sta 	.Count	
		call	.NormalMode

		ret		 
 ;----------------------------------------------
;.TestMode:
	;	call	testcode_start
;		br	.TestMode
.ATTestMode:
		call	.Test	
		br	.ATTestMode

⌨️ 快捷键说明

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