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

📄 cm-941.asm

📁 本程序是测试脂肪的程序,利用他可以测试一个人的身上有多少脂肪,但是精度不是很高的
💻 ASM
📖 第 1 页 / 共 5 页
字号:
		LDS		TempR0,		1
		SUB		SData3
		JNZ		Exit_KeyProcess
		LDA		SData2
		JNZ		Exit_KeyProcess
		LDS		SData1,	0
		LDS		SData2,	0
		LDS		SData3,	0
		LDS		SData4,	1
		RTS	
;--------------
H_inchOverFlow:		
		INC*	SData1
		DAA*	SData1
		JNC		$+4
		INC*	SData2
		DAA*	SData2
		RTS
		
		LDS		TempR0,		2
		SUB		SData1
		LDS		TempR0,		1
		SBC		SData2
		JNZ		CheckH_inchOverFlow
		LDS		SData1,	0
		LDS		SData2,	0
		INC*	SData3
;-------------------------------6'10''
CheckH_inchOverFlow	
		LDS		TempR0,		1
		EOR		SData2
		JNZ		Exit_KeyProcess
		LDS		TempR0,		6
		EOR		SData3
		JNZ		Exit_KeyProcess
		LDS		SData3,		3
		LDS		SData2,		0
		LDS		SData1,		3
		RTS			 	
;;;;;;;;;;;;;;;;;;;;;;increase weight
Fat_A_Key1:
		ANDI	FatModeFlg,	2
		JNZ		W_lbOverFlow
		
		INC*	SData1
		DAA*	SData1
		JNZ		CheckWOverFlow
		INC*	SData2
		DAA*	SData2
		JNZ		Exit_KeyProcess
		INC*	SData3
		DAA*	SData3
		JNZ		Exit_KeyProcess
		INC*	SData4
		RTS
CheckWOverFlow:
		LDA		SData4
		JZ		Exit_KeyProcess
		LDS		TempR0,		5
		SUB		SData3
		JNZ		Exit_KeyProcess
		LDA		SData2
		JNZ		Exit_KeyProcess
		
		LDS		SData1,	0
		LDS		SData2,	0
		LDS		SData3,	1
		LDS		SData4,	0
		RTS
;--------------------------------
W_lbOverFlow:	  	
	  	LDS		TempR0,		2
	  	ADD*	SData1
	  	DAA*	SData1
	  	JNC		CheckW_lbOverFlow
	  	INC*	SData2
	  	DAA*	SData2
	  	JNC		CheckW_lbOverFlow
	 	INC*	SData3
	 	DAA*	SData3
	 	JNC		CheckW_lbOverFlow
	 	INC*    SData4
	 	DAA*	SData4
CheckW_lbOverFlow:
		LDS		TempR0,		7
		SUB		SData1
		LDS		TempR0,		0
		SBC		SData2
		LDS		TempR0,		3
		SBC		SData3
		LDS		TempR0,		3
		SBC		SData4
		JNC		Exit_KeyProcess
		LDS		SData1,	0
		LDS		SData2,	2
		LDS		SData3,	2
		LDS		SData4,	0
		RTS
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;		
Fat_A_Key_1:
		LDS		TempR0,	2
		EOR*	SData5
		RTS
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;increase timer Data
Timer_A_Key:
		LDA		Mode1
		JZ		Timer_A_Key0
		SUBI	Mode1,		1
		JZ		Timer_A_Key1
		RTS
Timer_A_Key1:
		LDS		TempR0,		0
		SUB		SData1
		LDS		TempR0,		0
		SBC		SData2
		LDS		TempR0,		0
		SBC		SData3
		LDS		TempR0,		6
		SBC		SData4
		JC		Exit_KeyProcess
		
		INC*	SData1
		DAA*	SData1
		JNC		Exit_KeyProcess
		INC*	SData2
		LDS		TempR0,		6
		SUB		SData2
		JNC		Exit_KeyProcess
		LDS		SData2,		0
		INC*	SData3
		DAA*	SData3
		JNC		$+3
		INC*	SData4
		DAA*	SData4
		RTS
Timer_A_Key0:	
		LDA		SData1
		OR		SData2
		JNZ		Timer_A_Key0_1
		
		LDS		TempR0,		0
		SUB		SData3
		LDS		TempR0,		6
		SBC		SData4
		JC		Exit_KeyProcess	
		JMP		Timer_A_Key0_1_1
Timer_A_Key0_1:
		LDS		TempR0,		9
		SUB		SData3
		LDS		TempR0,		5
		SBC		SData4
		JC		Exit_KeyProcess	
Timer_A_Key0_1_1:		
		INC*	SData3
		DAA*	SData3
		JNC		$+3
		INC*	SData4
		DAA*	SData4
		RTS
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;inscrease Alm data
Alarm_A_Key:
		LDA		Mode1
		JZ		Alarm_A_Key0
		SUBI	Mode1,		1
		JZ		IncHr
		JMP		IncMin
Alarm_A_Key0:
		EORI*	AlmFlg,		1
		RTS	
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;inscrease clock data
SetClock_A_Key:
		ANDI*	FlgSet_12Hr,1101B
		LDA		Mode1
		JZ		IncHr
IncMin:		
		LDS		TempR1,		0AH
		LDS		TempR2,		1
		LDS		TempR0,		0
		MVU		TempR0
		MVH		TempR2
		MVL		TempR1
		CALL	AddSecMin
		RTS
IncHr:
		LDS		TempR1,		0CH
		LDS		TempR2,		1
		LDS		TempR0,		0
		MVU		TempR0
		MVH		TempR2
		MVL		TempR1
		CALL	AddHour
		RTS	
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;enter alm Mode
Clock_A_Key:
		LDS		MainMode,	2
		LDS		Mode1,		0
		JMP     SetKeySound		
;;;;;;;;;;;;;;;				
T_Key:
		LDA		R_Error
		JNZ		Exit_KeyProcess
		LDA		MainMode
		JZ		Clock_T_Key
		SUBI	MainMode,	1
		JZ		SetClock_T_Key
		SUBI	MainMode,	2
		JZ		Alarm_T_Key
		SUBI	MainMode,	3
		JZ		Timer_T_Key
Fat_T_Key:
		ANDI	FatModeFlg,	1
		JNZ		Fat_T_Key_1					;if at Set Unit Mode ?yes ,skip to Fat_T_Key_1
		
		SUBI	Mode1,		1
		JZ		Fat_T_Key1
		SUBI	Mode1,		2
		JZ		Fat_T_Key2
		SUBI	Mode1,		3
		JZ		Fat_T_Key3
		SUBI	Mode1,		4	
		JZ		Fat_T_Key4
		RTS
;-----------------------------convert gender
Fat_T_Key4:
		LDS		TempR0,	8
		EOR*	SData1
		RTS
;-----------------------------decrease age value
Fat_T_Key3:
		DEC*	SData1
		DAS*	SData1
		JC		Exit_KeyProcess	
		DEC*	SData2
		DAS*	SData2
CheckAgeUnderFlow:
		LDA		SData2
		JNZ		Exit_KeyProcess				
		LDS		SData1,		0
		LDS		SData2,		8
		RTS
;-----------------------------descrease height value
Fat_T_Key2:
		ANDI	FatModeFlg,	2
		JNZ		H_inchUnderFlow
		
		LDS		TempR0,		5
		SUB*	SData1
		DAS*	SData1
		JC		Exit_KeyProcess
		DEC*	SData2
		DAS*	SData2
		JC		Exit_KeyProcess
		DEC*	SData3
		DAS*	SData3
		JC		Exit_KeyProcess
		DEC*	SData4
;------------------------------------100cm
CheckHUnderFlow:
		LDA 	SData4
		JNZ		Exit_KeyProcess
		LDS		SData1,	0
		LDS		SData2,	0
		LDS		SData3,	1
		LDS		SData4,	2
		RTS	
;;;;;;;;;;;;;;;;;;;;;;;
H_inchUnderFlow:
		DEC*	SData1
		DAS*	SData1
		JC		CheckH_inchUnderFlow
		DEC*	SData2
		DAS*	SData2
		JC		Exit_KeyProcess
		DEC*	SData3
		LDS		SData1,	1
		LDS		SData2,	1
		RTS
;------------------------------------3'03''
CheckH_inchUnderFlow:
		LDS		TempR0,		3
		SUB		SData1
		LDS		TempR0,		0
		SBC		SData2
		LDS		TempR0,		3
		SBC		SData3
		JC		Exit_KeyProcess
		LDS		SData1,	0		
		LDS		SData2,	1
		LDS		SData3,	6
		RTS	
;------------------------descrease weight value
Fat_T_Key1:
		ANDI	FatModeFlg,	2
		JNZ		W_lbUnderFlow             ;lb? yes,skip
		
		DEC*	SData1
		DAS*	SData1
		JC		Exit_KeyProcess
		DEC*	SData2
		DAS*	SData2
		JC		Exit_KeyProcess
		DEC*	SData3
		DAS*	SData3
		JC		CheckWUnderFlow
		DEC*	SData4
		RTS
;--------------------------------10Kg
CheckWUnderFlow:
		LDA		SData4
		JNZ		Exit_KeyProcess
		LDA		SData3
		JNZ		Exit_KeyProcess
		LDS		TempR0,		9
		SUB		SData2
		JNZ		Exit_KeyProcess
		
		LDS		SData1,	0
		LDS		SData2,	0
		LDS		SData3,	5
		LDS		SData4,	1
		RTS
;;;;;;;;;;;;;;;;;;;;;;;;
W_lbUnderFlow:
		LDS		TempR0,		2
	  	SUB*	SData1
	  	DAS*	SData1
	  	JC		Exit_KeyProcess
	  	DEC*	SData2
	  	DAS*	SData2
	  	JC		CheckW_lbUnderFlow
	 	DEC*	SData3
	 	DAS*	SData3
	 	JC		Exit_KeyProcess
	 	DEC*   	SData4
	 	DAS*	SData4
	 	RTS
;--------------------------------22.0lb
CheckW_lbUnderFlow:
		LDA		SData4
		JNZ		Exit_KeyProcess		
		LDS		TempR0,		2
		EOR		SData3
		JNZ		Exit_KeyProcess
		LDS		TempR0,		1
		EOR		SData2
		JNZ		Exit_KeyProcess
		LDS		SData1,	6
		LDS		SData2,	0
		LDS		SData3,	3
		LDS		SData4,	3
		RTS
;---------------------------------
Fat_T_Key_1:
		LDS		TempR0,	2
		EOR*	SData5
		RTS
;-----------------------------------descrease timer data
Timer_T_Key:
		LDA		Mode1
		JZ		Timer_T_Key0
		SUBI	Mode1,		1
		JZ		Timer_T_Key1
		RTS
Timer_T_Key1:
		DEC*	SData1
		DAS*	SData1
		JC		Exit_KeyProcess
		DEC*	SData2
		DAS*	SData2
		JC		Exit_KeyProcess
		LDS		SData2,		5
Timer_T_Key0:
		DEC*	SData3
		DAS*	SData3
		JC		Exit_KeyProcess
		DEC*	SData4
		DAS*	SData4
		JC		Exit_KeyProcess
		
		LDA		Mode1
		JZ		Timer_T_Key0_1
		LDS		SData1,		0
		LDS		SData2,		0
Timer_T_Key0_1:		
		LDS		SData3,		0
		LDS		SData4,		0
		RTS
;------------------------------------descrease alm  data
Alarm_T_Key:
		LDA		Mode1
		JZ		Alarm_T_Key0
		SUBI	Mode1,		1
		JZ		DecHr
		JMP		DecMin
Alarm_T_Key0:
		EORI*	AlmFlg,		1
		RTS				
;-------------------------------------descrease clock data
SetClock_T_Key:
		ANDI*	FlgSet_12Hr,1101B
		LDA		Mode1
		JZ		DecHr
DecMin:		
		LDS		TempR1,		0AH
		LDS		TempR2,		1
		LDS		TempR0,		0
		MVU		TempR0
		MVH		TempR2
		MVL		TempR1
		CALL 	SubSecMin
		RTS
DecHr:
		LDS		TempR1,		0CH
		LDS		TempR2,		1
		LDS		TempR0,		0
		MVU		TempR0
		MVH		TempR2
		MVL		TempR1
		CALL	SubHour
		RTS	
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;enter Timer Mode
Clock_T_Key:		
		LDS		MainMode,	3
		LDS		Mode1,		0
;----------------------------Timer copyto SData
		LDA		TSec_L
		STA		SData1
		LDA		TSec_H
		STA		SData2
		LDA		TMin_L
		STA		SData3
		LDA		TMin_H
		STA		SData4
		JMP		SetKeySound
;;;;;;;;;;;;;;;;;;
F_Key:
		
		
		LDA		MainMode
		JZ		Clock_F_Key
		SUBI	MainMode,	1
		JZ		SetClock_F_Key
		SUBI	MainMode,	2
		JZ		Alarm_F_Key
		SUBI	MainMode,	3
		JZ		Timer_F_Key
;---------------------------------F Key in FatMode
Fat_F_Key:
		ANDI	FatModeFlg,	1
		JNZ		Fat_F_Key_1
		LDS		R_Error,	0
		
		LDA		M_FatFlg
		JZ		Fat_F1_Key
		LDS		M_FatFlg,	0
		LDS		PortA,		2
		OPA		PortA	
		RF		4
Fat_F1_Key:		
		LDA		Mode1
		JZ		Fat_F_Key0
		SUBI	Mode1,		1
		JZ		Fat_F_Key1
		SUBI	Mode1,		2
		JZ		Fat_F_Key2
		SUBI	Mode1,		3
		JZ		Fat_F_Key3
		SUBI	Mode1,		4
		JZ		Fat_F_Key4
		JMP		Fat_F_Key5
;------------------------------------Mode4--Mode5 & SData copyto gender & calc BMI
Fat_F_Key4:
		ANDI*	FatModeFlg,	1011B
		LDS		Mode1,		5		
		CALL	F_BMI
		ORI*	OptionR,	8
		LDS		TempR0,		8
		AND		SData1
		JNZ		SetKeySound		
		ANDI*	OptionR,	7
		JMP		SetKeySound	
;-------------------------------------Mode3--Mode4 & SData copyto Age & Gender copyto SData
Fat_F_Key3:
		LDS		Mode1,		4
		LDA		SData1
		STA		Age1
		LDA		SData2
		STA		Age2	
		
		LDA		OptionR
		STA		SData1
		JMP		SetKeySound	
;-------------------------------------Mode2--Mode3 & SData copyto Height &  Age copyto SData
Fat_F_Key2:
		LDS		Mode1,		3		
		ANDI	FatModeFlg,	2
		JZ		$+2
		CALL	Inch_Cm
		LDA		SData1
		STA		Height1
		LDA		SData2
		STA		Height2		
		LDA		SData3
		STA		Height3
		LDA		SData4
		STA		Height4	
		
		LDA		Age1
		STA		SData1
		LDA		Age2
		STA		SData2
		JMP		SetKeySound			
;--------------------------------------Mode1--Mode2 & SData copyto Weight &  Height copyto SData
Fat_F_Key1:
		LDS		Mode1,		2
		ANDI	FatModeFlg,	2
		JZ		$+2
		CALL	Lb_Kg
		LDA		SData1
		STA		Weight1
		LDA		SData2
		STA		Weight2		
		LDA		SData3
		STA		Weight3
		LDA		SData4
		STA		Weight4	
		
		LDA		Height1
		STA		SData1
		LDA		Height2
		STA		SData2
		LDA		Height3
		STA		SData3
		LDA		Height4
		STA		SData4
		
		ANDI	FatModeFlg,	2
		JZ		$+2
		CALL	Cm_Inch
		JMP		SetKeySound
;---------------------------------------Mode0--Mode1 &Weight copyto SData
Fat_F_Key0:
		LDS		Mode1,		1		

		LDA		Weight1
		STA		SData1
		LDA		Weight2
		STA		SData2
		LDA		Weight3
		STA		SData3
		LDA		Weight4
		STA		SData4
		
		ANDI	FatModeFlg,	2
		JZ		$+2
		CALL	Kg_Lb
		JMP		SetKeySound		
;----------------------------------------Exit Set FatUnit Mode 
Fat_F_Key_1:			
		ANDI*	FatModeFlg,	1110B       ;no	at set FatUnit Mode
		
		LDS		TempR0,		0010B
		AND*	SData5
		ANDI	FatModeFlg,	 0010B
		EOR		SData5
		JZ		SetKeySound	
	
	
		ANDI*	FatModeFlg,	1101B
		LDS		TempR0,		2			
		AND		SData5
		JZ		$+2
		ORI*	FatModeFlg, 2
		
		
		ANDI	FatModeFlg,	2
		JNZ		Fat_F_Key_1_1
		SUBI	Mode1,		1
		JNZ		$+3
		CALL	Lb_Kg
		JMP		SetKeySound	
		SUBI	Mode1,		2
		JNZ		$+2
		CALL	Inch_Cm
		JMP		SetKeySound	
Fat_F_Key_1_1:		
		SUBI	Mode1,		1
		JNZ		$+3
		CALL	Kg_Lb
		JMP		SetKeySound	
		SUBI	Mode1,		2
		JNZ		$+2
		CALL	Cm_Inch
		JMP		SetKeySound	
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Timer_F_Key:
		LDS		Keyms,		5
		LDA		Mode1
		JZ		Timer_F_Key0
		SUBI	Mode1,		1
		JZ		Timer_F_Key1
		RTS	
Timer_F_Key1:
		LDS		MainMode,	0
		LDA		SData1
		OR		SData2
		OR		SData3
		OR		SData4
		JZ		Timer_F_Key1_1
		
		ORI*	OptionR,	4	  ;Timer running
		
		LDS		MainMode,	3
		LDS		Mode1,		2     ;Enable Timer
		LDS		T_2Hz,		1
		
		ORI*	FlgSet_12Hr,4     ;SoundKey 
		LDS		KeySound,	6
		ALM		80H
Timer_F_Key1_1:		
		LDA		SData1
		STA		TSec_L
		LDA		SData2
		STA		TSec_H
		LDA		SData3
		STA		TMin_L
		LDA		SData4
		STA		TMin_H
		JMP		ActiveTMR2
;----------------------------------change to adjust TimerMin Mode at Timer Mode
Timer_F_Key0:
		LDS		Mode1,		1
		JMP		SetKeySound			
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;F Key at Alarm Mode
Alarm_F_Key:
		LDS		Keyms,		5
		LDA		Mode1
		JZ		Alarm_F_Key0
		SUBI	Mode1,		1
		JZ		Alarm_F_Key1
;--------------------------------return to Clock Mode & SData copyto  ALM Registers
;Alarm_F_Key2:
		
		LDS		MainMode,	0
		LDA		SData1
		STA		AlmMin_L
		LDA		SData2
		STA		AlmMin_H
		LDA		SData3
		STA		AlmHr_L
		LDA		SData4
		STA		AlmHr_H
		JMP		SetKeySound	
;----------------------------------change to adjust ALMMin Mode at ALM Mode
Alarm_F_Key1:
		LDS		Mode1,		2
		JMP		SetKeySound	
;-----------------------------------set alm on /off
Alarm_F_Key0:
		LDS		MainMode,	0
		ANDI	AlmFlg,		1  
		JZ		SetKeySound			;if alm off ,exit to Mainmode0
		
		LDS		MainMode,	2
		LDS		Mode1,		1
		LDA		AlmMin_L
		STA		SData1
		LDA		AlmMin_H
		STA		SData2
		LDA		AlmHr_L
		STA		SData3
		LDA		AlmHr_H
		STA		SData4
		JMP		SetKeySound
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;F Key at SetClock Mode
SetClock_F_Key:
		LDS		Keyms,		5
		LDA		Mode1
		JZ     	SetClock_F_Key0
;----------------------------------return to Clock Mode & SData copyto  clock Registers
		LDS		MainMode,	0
		LDA		SData1
		STA		Min_L
		LDA		SData2
		STA		Min_H
		LDA		SData3
		STA		Hr_L
		LDA		SData4
		STA		Hr_H
		JMP		SetKeySound
;------------------------------change to adjust clockMin Mode at setclock Mode
SetClock_F_Key0:
		LDS		Mode1,		1
		JMP		SetKeySound	
;------------------------------enter FatMode	
Clock_F_Key:					
		LDS		MainMode,	4
		ANDI*	FatModeFlg,	1110B
										;Mode5-Mode0/Mode1 
Fat_F_Key5:		
		LDS		Mode1,		0
		LDA		P_FAT1
		OR		P_FAT2
		OR		P_FAT3
		JNZ		SetKeySound				;Have Fat test value?
	
		LDS		Mode1,		1
		LDA		Weight1
		STA		SData1
		LDA		Weight2
		STA		SData2
		LDA		Weight3
		STA		SData3
		LDA		Weight4
		STA		SData4
		
		ANDI	FatModeFlg,	2
		JZ		$+2
		CALL	Kg_Lb
		JMP		SetKeySound				
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;enter SetUnit Mode 
A_T_Key:
		SUBI	MainMode,	4
		JNZ		Exit_KeyProcess
		ANDI	FatModeFlg,	1
		JNZ		Exit_KeyProcess      
										;MainMode=4 & no SetUnit Mode
		ANDI	KeyDoneFlg,	8
		JNZ		Exit_KeyProcess			;hold key 
		ORI*	KeyDoneFlg,	8
			
		ORI*	FatModeFlg,	1		 
		LDA		FatModeFlg
		STA		SData5			
		RTS
;;;;;;;;;;;;;;;;;;;;;;;;;;;Set Fat default Parameter
T_F_Key:
		SUBI	MainMode,	4
		JNZ		Exit_KeyProcess
		ANDI	FatModeFlg,	1
		JNZ		Exit_KeyProcess
		LDA		M_FatFlg
		JNZ		Exit_KeyProcess
										;MainMode=4 & Mode1=0 & no SetUnit Mode

⌨️ 快捷键说明

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