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

📄 rmbscr.asm

📁 8051单片机汇编语言编写的银行汇率屏程序。使用红外遥控器修改利率。
💻 ASM
📖 第 1 页 / 共 3 页
字号:
		cjne	a,#00h,modista9
		ljmp	exitint1
modista9:	mov	a,adjtime
		cjne	a,#0ffh,modi_data6
		mov	a,#4
		lcall	timemodi
		ljmp	exitint1
modi_data6:	mov	a,#4
		lcall	common0_9
		ljmp	exitint1
		
key5:		mov	a,modify
		cjne	a,#00h,modistaa
		ljmp	exitint1
modistaa:	mov	a,adjtime
		cjne	a,#0ffh,modi_data7
		mov	a,#5
		lcall	timemodi
		ljmp	exitint1
modi_data7:	mov	a,#5
		lcall	common0_9
		ljmp	exitint1
		
key6:		mov	a,modify
		cjne	a,#00h,modistab
		ljmp	exitint1
modistab:	mov	a,adjtime
		cjne	a,#0ffh,modi_data8
		mov	a,#6
		lcall	timemodi
		ljmp	exitint1
modi_data8:	mov	a,#6
		lcall	common0_9
		ljmp	exitint1

key7:		mov	a,modify
		cjne	a,#00h,modistac
		ljmp	exitint1
modistac:	mov	a,adjtime
		cjne	a,#0ffh,modi_data9
		mov	a,#7
		lcall	timemodi
		ljmp	exitint1
modi_data9:	mov	a,#7
		lcall	common0_9
		ljmp	exitint1

key8:		mov	a,modify
		cjne	a,#00h,modistad
		ljmp	exitint1
modistad:	mov	a,adjtime
		cjne	a,#0ffh,modi_dataa
		mov	a,#8
		lcall	timemodi
		ljmp	exitint1
modi_dataa:	mov	a,#8
		lcall	common0_9
		ljmp	exitint1

key9:		mov	a,modify
		cjne	a,#00h,modistae
		ljmp	exitint1
modistae:	mov	a,adjtime
		cjne	a,#0ffh,modi_datab
		mov	a,#9
		lcall	timemodi
		ljmp	exitint1
modi_datab:	mov	a,#9
		lcall	common0_9
		ljmp	exitint1

keydot:		mov	a,modify
		cjne	a,#00h,inhibdot
		ljmp	exitint1
inhibdot:	mov	a,adjtime
		cjne	a,#0ffh,modistaf
		ljmp	exitint1
modistaf:	mov	a,numchar
		cjne	a,#0,modidot
		ljmp	exitint1
modidot:	mov	a,data0
		anl	a,#11111110b
		mov	data0,a
		ljmp	exitint1

keydark:	mov	a,modify
		cjne	a,#00h,inhibdark
		ljmp	exitint1
inhibdark:	mov	a,adjtime
		cjne	a,#0ffh,modista10
		ljmp	exitint1
modista10:	mov	a,#0ah
		lcall	common0_9
		ljmp	exitint1

keystart:	mov	a,modify
		cjne	a,#00h,keyrst
		setb	tr0		;开T0中断
		mov	th0,#94h
		mov	tl0,#94h
		mov	t0times,#0
		mov	modify,#0ffh		;遥控修改标志: 00h--正常显示状态, 0ffh--修改状态
		mov	flashmark,#00h	  	;显示闪烁标志: 00h--亮, 0ffh--暗
		mov	modiline,#0 		;修改数据所在行数--0行
		mov	modicolu,#0  		;修改数据所在列数--0列	
		mov	adjtime,#00h
		mov	int1times,#0		;初始化INT1中断次数
		mov	numchar,#0		;当前修改字符在块中的顺序号置0
		mov	data0,#01h
		mov	data1,#01h
		mov	data2,#01h
		mov	data3,#01h
		mov	data4,#01h
		ljmp	exitint1		
keyrst:		mov	a,numchar
		cjne	a,#0,mustsaver
		ljmp	nosaver
mustsaver:	lcall	savedata
nosaver:	clr	tr0
		mov	modify,#00h		;遥控修改标志: 00h--正常显示状态, 0ffh--修改状态
		mov	flashmark,#00h	  	;显示闪烁标志: 00h--亮, 0ffh--暗
		mov	modiline,#0 		;修改数据所在行数--0行
		mov	modicolu,#0  		;修改数据所在列数--0列	
		mov	t0times,#0		;初始化T0中断次数
		mov	int1times,#0		;初始化INT1中断次数
		mov	numchar,#0		;当前修改字符在块中的顺序号置0
		mov	data0,#01h
		mov	data1,#01h
		mov	data2,#01h
		mov	data3,#01h
		mov	data4,#01h
		ljmp	exitint1

keylightinc:	mov	a,modify
		cjne	a,#00h,isincl
		ljmp	exitint1
isincl:		mov	a,leddark
		cjne	a,#0,norinc
		ljmp	judlight
norinc:		clr 	c
		subb	a,#25
		mov	leddark,a
judlight:	mov	a,ledlight
		cjne	a,#190,inclight
		ljmp	exitint1
inclight:	add	a,#20
		mov	ledlight,a
		ljmp	exitint1

keylightdec:	mov	a,modify
		cjne	a,#00h,isdecl
		ljmp	exitint1
isdecl:		mov	a,leddark
		cjne	a,#200,incdark
		ljmp	judlight1
incdark:	add	a,#25
		mov	leddark,a
judlight1:	mov	a,ledlight
		cjne	a,#30,declight
		ljmp	exitint1
declight:	clr	c
		subb	a,#20
		mov	ledlight,a
		ljmp	exitint1

keyonoff:	mov	a,switch
		cjne	a,#00h,is_off
		mov	switch,#0ffh
		mov	a,numchar
		cjne	a,#0,mustsavenf
		ljmp	restart
mustsavenf:	lcall	savedata
nosavenf:	ljmp	restart
is_off:		mov	switch,#00h
restart:	mov	modify,#00h		;遥控修改标志: 00h--正常显示状态, 0ffh--修改状态
		mov	flashmark,#00h	  	;显示闪烁标志: 00h--亮, 0ffh--暗
		mov	modiline,#0 		;修改数据所在行数--0行
		mov	modicolu,#0  		;修改数据所在列数--0列	
		mov	adjtime,#00h
		mov	t0times,#0		;初始化T0中断次数
		mov	int1times,#0		;初始化INT1中断次数
		mov	numchar,#0		;当前修改字符在块中的顺序号置0
		mov	data0,#01h
		mov	data1,#01h
		mov	data2,#01h
		mov	data3,#01h
		mov	data4,#01h
		ljmp	exitint1

keyadjtime:	mov	a,modify
		cjne	a,#00h,isupdatasta
		ljmp	exitint1
isupdatasta:	mov	a,adjtime
		cjne	a,#00h,endtime
		mov	adjtime,#0ffh
		mov	modiline,#0 		;修改数据所在行数--0行
		mov	modicolu,#0  		;修改数据所在列数--0列	
		mov	numchar,#0		;当前修改字符在块中的顺序号置0
		ljmp	exitint1
endtime:	mov	adjtime,#00h
		mov	modiline,#0 		;修改数据所在行数--0行
		mov	modicolu,#0  		;修改数据所在列数--0列	
		mov	numchar,#0		;当前修改字符在块中的顺序号置0
		mov	dptr,#8002h		;WRITE TIME
		mov	a,minute
		movx	@dptr,a
		mov	dptr,#8004h
		mov	a,hour
		movx	@dptr,a
		mov	a,week
		cjne	a,#07h,no_sunday1
		ljmp	weekok
no_sunday1:	jc	weekok
		mov	a,#07h
weekok:		mov	dptr,#8006h
		movx	@dptr,a
		mov	dptr,#8007h
		mov	a,day
		movx	@dptr,a
		mov	dptr,#8008h
		mov	a,month
		movx	@dptr,a
		mov	dptr,#8009h
		mov	a,year
		movx	@dptr,a
		lcall	readtime
		lcall	disptime
		ljmp	exitint1
		
exitint1:	clr	tr1
		mov	int1times,#0
quitint1:	pop	b
		pop	dpl
		pop	dph
		pop	psw
		pop	acc
		reti

;** COMMON0_9: 处理键0--9公共子程序 **********************************
;** 入口参数: a--按键所对应的数值; numchar--当前修改字符在块中的顺序号
common0_9:	mov	dptr,#numsegtab
		movc	a,@a+dptr
		mov	tmpd,a
		mov	a,numchar
		cjne	a,#0,modimid
		mov	data0,#01h
		mov	data1,#01h
		mov	data2,#01h
		mov	data3,#01h
		mov	data4,#01h
modimid:	mov	data4,data3
		mov	data3,data2
		mov	data2,data1
		mov	data1,data0
		mov	data0,tmpd
		mov	a,numchar
		cjne	a,#4,no_lastchar
		lcall	savedata
		mov	numchar,#0
incmodicolu:	mov	a,modicolu
		cjne	a,#0,if_colu1
		mov	a,modiline
		cjne	a,#10,incline
		mov	modiline,#0
		mov	modicolu,#1
		ret
if_colu1:	cjne	a,#1,is_column2		
		mov	a,modiline
		cjne	a,#6,incline
		mov	modiline,#0
		mov	modicolu,#2
		ret
is_column2:	mov	a,modiline
		cjne	a,#9,incline
		mov	modiline,#0
		mov	modicolu,#0
		ret
incline:	inc	modiline		
		ret
no_lastchar:	inc	numchar			;字符序号加1
		ret

;** save modified data ****************************		
savedata:	mov	a,modiline		;求修改字符所在的2864单元
		mov	b,#15			;计算公式: (modiline*15+modicolu*5+6000h)
		mul	ab
		mov	tmpe,a
		mov	a,modicolu
		mov	b,#5
		mul	ab
		add	a,tmpe
		mov	dpl,a
		mov	dph,#60h
		mov	r1,#5
		mov	r0,#data4
savemodi:	mov	a,@r0
		movx	@dptr,a
		lcall	delay
		inc	r0
		inc	dptr
		djnz	r1,savemodi
		ret

;** MODIFY TIME ***********************************************
timemodi:	mov	tmpd,a
		mov	a,modicolu
		cjne	a,#3,no_week
		mov	week,tmpd
		inc	modicolu
		ret
no_week:	mov	a,numchar
		cjne	a,#0,overtime
		inc	numchar
		mov	a,modicolu
if_year:	cjne	a,#0,if_month
		mov	a,tmpd
		swap	a
		anl	a,#11110000b
		mov	tmpd,a
		anl	year,#00001111b
		add	a,year		
		mov	year,a
		ret
if_month:	cjne	a,#1,if_day
		mov	a,tmpd
		swap	a
		anl	a,#11110000b
		mov	tmpd,a
		anl	month,#00001111b
		add	a,month		
		mov	month,a
		ret
if_day:		cjne	a,#2,if_hour
		mov	a,tmpd
		swap	a
		anl	a,#11110000b
		mov	tmpd,a
		anl	day,#00001111b
		add	a,day		
		mov	day,a
		ret
if_hour:	cjne	a,#4,is_minu
		mov	a,tmpd
		swap	a
		anl	a,#11110000b
		mov	tmpd,a
		anl	hour,#00001111b
		add	a,hour		
		mov	hour,a
		ret
is_minu:	mov	a,tmpd
		swap	a
		anl	a,#11110000b
		mov	tmpd,a
		anl	minute,#00001111b
		add	a,minute		
		mov	minute,a
		ret
overtime:	mov	numchar,#0
		mov	a,modicolu
		cjne	a,#0,if_month0
		anl	year,#11110000b
		mov	a,tmpd
		add	a,year
		mov	year,a
		inc	modicolu
		ret
if_month0:	cjne	a,#1,if_day1
		anl	month,#11110000b
		mov	a,tmpd
		add	a,month
		mov	month,a
		inc	modicolu
		ret
if_day1:	cjne	a,#2,if_hour1
		anl	day,#11110000b
		mov	a,tmpd
		add	a,day
		mov	day,a
		inc	modicolu
		ret
if_hour1:	cjne	a,#4,is_minu1
		anl	hour,#11110000b
		mov	a,tmpd
		add	a,hour
		mov	hour,a
		inc	modicolu
		ret
is_minu1:	mov	a,tmpd
		anl	minute,#11110000b
		add	a,minute
		mov	minute,a
		mov	modicolu,#0
		ret

;** T1 interupt ********************
timer1:		clr	tr1
		mov	int1times,#0
		reti
		
delay:		mov	r7,#15
loop:		mov	r6,#255
		djnz	r6,$
		djnz	r7,loop
		ret

numsegtab:	db	0dfh,045h,0bdh,07dh,067h	;0--4显示码
		db	07bh,0fbh,55h,0ffh,07fh		;5--9显示码
		db	21h				;dark

		end
		

⌨️ 快捷键说明

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