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

📄 base2.asm

📁 07全国电子设计大赛C题获奖作品的单片机源码(个人信息部分已除去)
💻 ASM
字号:
		ORG 	0000H
		AJMP	START
		
		ORG		002EH
KSEG	EQU		30H
KBUF	EQU		36H
KBUFF	EQU		35H
DCTL	EQU		40H
SEG:	DB		'C-+0E321D654SUTM',0
MENU10:	DB		'数字存储  示波器',0
MENU40:	DB		'  请按确定键继续',0
MENU11:	DB		'触发方式:  ',0
MENU21:	DB		'扫描速度: ',0
MENU31:	DB		'垂直分辨率:',0
MENU12:	DB		'连续',0
MENU13:	DB		'单次',0
MENU22:	DB		'200ms',0
MENU23:	DB		' 20ms',0
MENU24:	DB		'  2ms',0
MENU25:	DB		'200us',0
MENU26:	DB		' 20us',0
MENU32:	DB		'   1V',0
MENU33:	DB		' 0.1V',0
MENU34:	DB		' 10mV',0
MENU35:	DB		'  1mV',0
MENU41:	DB		'存贮',0
MENU42:	DB		'显示',0
MENU43:	DB		'    ',0
MENU44:	DB		'波形一',0
MENU45:	DB		'波形二',0

		ORG		0080H
START:	MOV		SP,		#07FH
		MOV		TMOD,	#01H
		MOV		IE,		#82H
		MOV		09H,	#KSEG
		MOV		TH0,	#00H
		MOV		TL0,	#00H
		MOV		DCTL,	#00H
		MOV		R0,		#KSEG
DP:		MOV		@R0,	#30H
		INC		R0
		CJNE	R0,		#KBUF,	DP

		MOV		R4,		#2
LCDRST:	MOV		R5,		#255
		ACALL	LCDELAY	
		DJNZ	R4,		LCDRST
				
;基本指令集
;		MOV		A,		#30H	;	A5=1,A4=8位数据,A2=扩展指令集(不可同时改变)
;	   	ACALL	LCTRL
		MOV		A,		#0CH	;   A3=1,A2=开显示,A1=开光标,A0=光标位反白
		ACALL	LCTRL
	 	MOV		A,		#01H	;	显示复位
		ACALL	LCTRL
		MOV		R5,		#20
		ACALL	LCDELAY
;		MOV		A,		#06H	;   A2=1,A1=光标右移,A0=画面移动(A1=1左移)
;		ACALL	LCTRL
;	 	MOV		A,		#02H	;  	地址归位
;		ACALL	LCTRL
;		MOV		A,		#14H	;	A4=1,A3=0游标移动,1画面移动.A2=0左移1右移(只移光标)
;	   	ACALL	LCTRL
;	 	MOV		A,		#40H	;	A6=1,A5~A0=CGRAM
;		ACALL	LCTRL
;	 	MOV		A,		#80H	;	A7=1,A6~A0=DDRAM
;		ACALL	LCTRL
;扩充指令集
;	 	MOV		A,		#01H	;	待机模式
;		ACALL	LCTRL
;	 	MOV		A,		#02H	;	A1=1,A0(SR)=1允许输入垂直卷动位,0允许输入IRAM,CGRAM
;		ACALL	LCTRL
;	 	MOV		A,		#04H	;	A2=1,A1~A0选择整行反白显示(设置一次反白,再设一次恢复)
;		ACALL	LCTRL
;	 	MOV		A,		#08H	;	A3=1,A2=0睡眠模式
;		ACALL	LCTRL
;	 	MOV		A,		#35H	;	A5=1,A4=8bit,A2=扩展指令集,A1=绘图显示
;		ACALL	LCTRL
;	 	MOV		A,		#01H	;	A6=1,SR=1:A5~A0垂直卷动位,SR=0:A3~A0 ICONRAM
;		ACALL	LCTRL
;	 	MOV		A,		#01H	;	A7=1,第一次A6~A0垂直位址,第二次A3~A0水平位址
;		ACALL	LCTRL
		
		MOV		DPTR,	#MENU10		;欢迎界面
		ACALL	STRDISP
		MOV		A,		#90H
		ACALL	LCTRL
		MOV		DPTR,	#MENU20
		ACALL	STRDISP
		MOV		A,		#88H
		ACALL	LCTRL
		MOV		DPTR,	#MENU30
		ACALL	STRDISP
		MOV		A,		#98H
		ACALL	LCTRL
		MOV		DPTR,	#MENU40
		ACALL	STRDISP
MUK:	ACALL	KINT
		MOV		A,		DCTL
		CJNE	A,		#'E',	MUK
		MOV		A,		#80H		;显示界面
		MOV		DPTR,	#MENU11		
		ACALL	STRDISP
		MOV		DPTR,	#MENU12		
		ACALL	STRDISP
		MOV		A,		#90H
		ACALL	LCTRL
		MOV		DPTR,	#MENU21
		ACALL	STRDISP
		MOV		DPTR,	#MENU22		
		ACALL	STRDISP
		MOV		A,		#88H
		ACALL	LCTRL
		MOV		DPTR,	#MENU31
		ACALL	STRDISP
		MOV		DPTR,	#MENU32		
		ACALL	STRDISP
		MOV		A,		#98H
		ACALL	LCTRL

JSK:	ACALL	KINT
		MOV		A,		DCTL
		CJNE	A,		#'M',	J1
		ACALL	MSET
		SJMP	JSK
J1:		CJNE	A,		#'T',	J2
		ACALL	TSET
		SJMP	JSK
J2:		CJNE	A,		#'U',	J3
		ACALL	USET
		SJMP	JSK
J3:		CJNE	A,		#'S',	J4
		ACALL	SSET
		SJMP	JSK
J4:		CJNE	A,		#'D',	JSK
		ACALL	DSET
		SJMP	JSK

MSET:	PUSH	ACC
		PUSH	PSW
		SETB	RS1
		MOV		A,		#34H	;	A5=1,A4=8位数据,A2=扩展指令集(不可同时改变)
	   	ACALL	LCTRL
	 	MOV		A,		#04H	;	A2=1,A1~A0选择整行反白显示(设置一次反白,再设一次恢复)
		ACALL	LCTRL
		MOV		A,		#30H	;	A5=1,A4=8位数据,A2=扩展指令集(不可同时改变)
	   	ACALL	LCTRL
		MOV		A,		R1
		MOV		R0,		A

MSK:	ACALL	KINT
		MOV		A,		DCTL
		CJNE	A,		#'C',	MS1
		AJMP	MSC
MS1:	CJNE	A,		#'E',	MS2
		AJMP	MSE
MS2:	CJNE	A,		#'+',	MS3
		AJMP	MSA
MS3:	CJNE	A,		#'-',	MS4
		AJMP	MSD
MS4:	SJMP	MSK

MSA:	CJNE	R0,		#1,		MSA1
	 	DEC		R0
MSA1:	INC		R0
		MOV		A,		#86H
		ACALL	LCTRL
		MOV		DPTR,	#MENU13
		ACALL	STRDISP
		
		SJMP	MSK

MSD:	CJNE	R0,		#0,		MSD1
		INC		R0
MSD1:	DEC		R0
		MOV		A,		#86H
		ACALL	LCTRL
		MOV		DPTR,	#MENU12
		ACALL	STRDISP
		SJMP	MSK

MSE:	MOV		A,		R0
		MOV		R1,		A
		CJNE	A,		#0,		MSE0
		CLR		P3.0
		SJMP	MSED
MSE0:	CJNE	A,		#1,		MSE1
		SETB	P3.0
		SJMP	MSED
MSE1:	MOV		R1,		#0
		SJMP	MSC

	

MSC:	MOV		A,		R1
		JB		ACC.0,	MSC1
		MOV		A,		#86H
		ACALL	LCTRL
		MOV		DPTR,	#MENU12
		ACALL	STRDISP
		SJMP	MSED
MSC1:	MOV		A,		#86H
		ACALL	LCTRL
		MOV		DPTR,	#MENU13
		ACALL	STRDISP

MSED:	MOV		A,		#34H	;	A5=1,A4=8位数据,A2=扩展指令集(不可同时改变)
	   	ACALL	LCTRL
	 	MOV		A,		#04H	;	A2=1,A1~A0选择整行反白显示(设置一次反白,再设一次恢复)
		ACALL	LCTRL
		MOV		A,		#30H	;	A5=1,A4=8位数据,A2=扩展指令集(不可同时改变)
	   	ACALL	LCTRL
		MOV		DCTL,	#00H
		POP		PSW
		POP		ACC
		RET

TSET:	PUSH	ACC
		PUSH	PSW
		SETB	RS1
		MOV		A,		#34H	;	A5=1,A4=8位数据,A2=扩展指令集(不可同时改变)
	   	ACALL	LCTRL
	 	MOV		A,		#05H	;	A2=1,A1~A0选择整行反白显示(设置一次反白,再设一次恢复)
		ACALL	LCTRL
		MOV		A,		#30H	;	A5=1,A4=8位数据,A2=扩展指令集(不可同时改变)
	   	ACALL	LCTRL
		MOV		A,		R3
		MOV		R2,		A

TSK:	ACALL	KINT
		MOV		A,		DCTL
		CJNE	A,		#'C',	TS1
		AJMP	TSC
TS1:	CJNE	A,		#'E',	TS2
		AJMP	TSE
TS2:	CJNE	A,		#'+',	TS3
		AJMP	TSA
TS3:	CJNE	A,		#'-',	TS4
		AJMP	TSD
TS4:	SJMP	TSK

TSA:	CJNE	R2,		#4,		TSA1
	 	DEC		R2
TSA1:	INC		R2
		ACALL	TSDS
		SJMP	TSK

TSD:	CJNE	R2,		#0,		TSD1
		INC		R2
TSD1:	DEC		R2
		ACALL	TSDS
		SJMP	TSK

TSE:	MOV		A,		R2
		MOV		R3,		A
		CJNE	A,		#0,		TSE0
		CLR		P1.0
		CLR		P1.1
		CLR		P1.2
		SJMP	TSED
TSE0:	CJNE	A,		#1,		TSE1
		SETB	P1.0
		CLR		P1.1
		CLR		P1.2
		SJMP	TSED
TSE1:	CJNE	A,		#2,		TSE2
		CLR		P1.0
		SETB	P1.1
		CLR		P1.2
		SJMP	TSED
TSE2:	CJNE	A,		#3,		TSE3
		SETB	P1.0
		SETB	P1.1
		CLR		P1.2
		SJMP	TSED
TSE3:	CJNE	A,		#4,		TSE4
		CLR		P1.0
		CLR		P1.1
		SETB	P1.2
		SJMP	TSED
TSE4:	MOV		R3,		#0
		SJMP	TSC	

TSC:	MOV		A,		R3
		MOV		R2,		A
		ACALL	TSDS
		SJMP	TSED

TSED:	MOV		A,		#34H	;	A5=1,A4=8位数据,A2=扩展指令集(不可同时改变)
	   	ACALL	LCTRL
	 	MOV		A,		#05H	;	A2=1,A1~A0选择整行反白显示(设置一次反白,再设一次恢复)
		ACALL	LCTRL
		MOV		A,		#30H	;	A5=1,A4=8位数据,A2=扩展指令集(不可同时改变)
	   	ACALL	LCTRL
		MOV		DCTL,	#00H
		POP		PSW
		POP		ACC
		RET
		
TSDS:	MOV		A,		#96H
		ACALL	LCTRL
		MOV		A,		R2
		ADD		A,		R2
		ADD		A,		R2
		JMP		@A+PC
		MOV		DPTR,	#MENU22
		SJMP	TSDD
		MOV		DPTR,	#MENU23
		SJMP	TSDD
		MOV		DPTR,	#MENU24
		SJMP	TSDD
		MOV		DPTR,	#MENU25
		SJMP	TSDD
		MOV		DPTR,	#MENU26
TSDD:	ACALL	STRDISP
		RET

USET:	PUSH	ACC
		PUSH	PSW
		SETB	RS1
		MOV		A,		#34H	;	A5=1,A4=8位数据,A2=扩展指令集(不可同时改变)
	   	ACALL	LCTRL
	 	MOV		A,		#06H	;	A2=1,A1~A0选择整行反白显示(设置一次反白,再设一次恢复)
		ACALL	LCTRL
		MOV		A,		#30H	;	A5=1,A4=8位数据,A2=扩展指令集(不可同时改变)
	   	ACALL	LCTRL
		MOV		A,		R5
		MOV		R4,		A

USK:	ACALL	KINT
		MOV		A,		DCTL
		CJNE	A,		#'C',	US1
		AJMP	USC
US1:	CJNE	A,		#'E',	US2
		AJMP	USE
US2:	CJNE	A,		#'+',	US3
		AJMP	USA
US3:	CJNE	A,		#'-',	US4
		AJMP	TSD
US4:	SJMP	USK

USA:	CJNE	R4,		#4,		USA1
	 	DEC		R4
USA1:	INC		R4
		ACALL	USDS
		SJMP	USK

USD:	CJNE	R4,		#0,		USD1
		INC		R4
USD1:	DEC		R4
		ACALL	USDS
		SJMP	USK

USE:	MOV		A,		R2
		MOV		R3,		A
		CJNE	A,		#0,		USE0
		CLR		P1.3
		CLR		P1.4
		SJMP	TSED
USE0:	CJNE	A,		#1,		USE1
		SETB	P1.3
		CLR		P1.4
		SJMP	USED
USE1:	CJNE	A,		#2,		USE2
		CLR		P1.3
		SETB	P1.4
		SJMP	USED
USE2:	CJNE	A,		#3,		USE3
		SETB	P1.3
		SETB	P1.4
		SJMP	USED
USE3:	MOV		R5,		#0
		SJMP	USC	

USC:	MOV		A,		R5
		MOV		R4,		A
		ACALL	USDS
		SJMP	USED

USED:	MOV		A,		#34H	;	A5=1,A4=8位数据,A2=扩展指令集(不可同时改变)
	   	ACALL	LCTRL
	 	MOV		A,		#06H	;	A2=1,A1~A0选择整行反白显示(设置一次反白,再设一次恢复)
		ACALL	LCTRL
		MOV		A,		#30H	;	A5=1,A4=8位数据,A2=扩展指令集(不可同时改变)
	   	ACALL	LCTRL
		MOV		DCTL,	#00H
		POP		PSW
		POP		ACC
		RET
		
USDS:	MOV		A,		#8EH
		ACALL	LCTRL
		MOV		A,		R4
		ADD		A,		R4
		ADD		A,		R4
		JMP		@A+PC
		MOV		DPTR,	#MENU32
		SJMP	USDD
		MOV		DPTR,	#MENU33
		SJMP	USDD
		MOV		DPTR,	#MENU34
		SJMP	USDD
		MOV		DPTR,	#MENU35
USDD:	ACALL	STRDISP
		RET

SSET:	PUSH	PSW
		PUSH	ACC
		SETB	00H
		SETB	P3.2
		MOV		A,		#9BH
		ACALL	LCTRL
		MOV		DPTR,	#MENU41
		ACALL	STRDISP
		CLR		P3.2
		POP		PSW
		POP		ACC
		RET

DSET:	PUSH	PSW
		PUSH	ACC
		JNB		00H,	DEND
		MOV		A,		#9EH
		ACALL	LCTRL
		JB		P3.3,	DCAN
		SETB	P3.3
		MOV		DPTR,	#MENU42
		ACALL	STRDISP
		SJMP	DEND
DCAN:	CLR		P3.3
		MOV		DPTR,	#MENU43
		ACALL	STRDISP
DEND:	POP		ACC
		POP		PSW
		RET		

KINT:	PUSH	PSW
		PUSH	ACC
		SETB	RS0
		ACALL	KS
		JZ		KEND
		ACALL	KDELAY
		ACALL	KS
		JZ		KEND
		MOV		P2,		#07FH
		MOV		R0,		#0CH
		ACALL	KP
		JZ		KMEM
		MOV		P2,		#0BFH
		MOV		R0,		#08H
		ACALL	KP
		JZ		KMEM
		MOV		P2,		#0DFH
		MOV		R0,		#04H
		ACALL	KP
		JZ		KMEM
		MOV		P2,		#0EFH
		MOV		R0,		#0H
		ACALL	KP
		JZ		KMEM
		AJMP	KEND
KMEM:	MOV		DPTR,	#SEG
		MOV		A,		R0
		MOVC	A,		@A+DPTR
		MOV		DCTL,	A
		SJMP	KEND
KEND:	POP		ACC
		POP		PSW
KEND1:	ACALL	KS
		JNZ		KEND1
		MOV		TL0,	#00H
		MOV		TH0,	#00H
		SETB	TR0
		RETI
			
KP:		MOV		A,		P2
		JNB		ACC.3,	KL1
		JNB		ACC.2,	KL2
		JNB		ACC.1,	KL3
		JNB		ACC.0,	KL4
		SJMP	KPED
KL1:	INC		R0
KL2:	INC		R0
KL3:	INC		R0
KL4:	MOV		A,		#0
KPED:	RET
		
KS:		MOV		P2,		#0FH
		MOV		A,		P2
		CPL		A
		ANL		ACC,	#0FH
		RET

KDELAY:	MOV		R4,		#25
DL1:	MOV		R3,		#100
DL2:	DJNZ	R3,		DL2
		DJNZ	R4,		DL1
		RET

STRDISP:MOV		R7,		#0
MENI:	MOV		A,		R7
		MOVC	A,		@A+DPTR
		JZ		MENO
		ACALL	LDATA
		INC		R7
		SJMP	MENI
MENO:	RET

LCTRL:	CLR		P3.6
		SETB	P3.7
		MOV		P0,	A
		NOP
		NOP
		NOP
		NOP
		CLR		P3.7
		ACALL	LBUSY
		RET

LDATA:	SETB	P3.6
		SETB	P3.7
		MOV		P0,	A
		NOP
		NOP
		NOP
		NOP
		CLR		P3.7
		ACALL	LBUSY
		RET

LCDELAY:ACALL	LBUSY
		DJNZ	R5,		LCDELAY
		RET

LBUSY:	MOV		R6,		#255
LB1:	DJNZ	R6,		LB1		  
		RET

		END
	

⌨️ 快捷键说明

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