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

📄 rmbscr.asm

📁 8051单片机汇编语言编写的银行汇率屏程序。使用红外遥控器修改利率。
💻 ASM
📖 第 1 页 / 共 3 页
字号:
if_tcolu3:	cjne	a,#3,if_tcolu4
		mov	tmp4,#0ah		;星期闪烁
		ljmp	nordisp
if_tcolu4:	cjne	a,#4,if_tcolu5
		mov	tmp3,#0ah		;小时闪烁
		mov	tmp2,#0ah
		ljmp	nordisp
if_tcolu5:	cjne	a,#5,nordisp
		mov	tmp1,#0ah		;分钟闪烁
		mov	tmp0,#0ah
		ljmp	nordisp
ledladj:	mov	ddotflash,#0ffh
nordisp:	mov	r3,#13			;显示时间,日期
		mov	r0,#tmp0
showtime:	mov	a,@r0
		lcall	shiftbit		
		inc	r0
		djnz	r3,showtime
		ret

;** CBCD_BCD: 压缩bcd码转换成bcd码 ***********************************
;** 入口参数: a--压缩的bcd码; @r0--转换结果存放单元 ******************
cbcd_bcd:	mov	r2,a
		anl	a,#00001111b		;压缩bcd码转换成bcd码
		mov	@r0,a
		inc	r0
		mov	a,r2
		swap	a
		anl	a,#00001111b
		mov	@r0,a
		inc	r0
		ret
		
;** SHIFTBIT: 8 bit 数据移位子程序 ***********************************
;** 入口参数: A-- 显示数据 *******************************************
shiftbit:	mov	r2,#08h			;每个数据右移8位
		clr	c
		mov	dptr,#caltab		;置字形表存放单元地址
		movc	a,@a+dptr		;寻找数据对应显示字段
cycleshift:	clr	p1.6
		rrc	a			;显示字段右移
		mov	p1.5,c			;串行输出字段数据
		setb	p1.6
		nop
		nop
		nop
		clr	p1.6
		djnz	r2,cycleshift
		ret
caltab:		db	81h,0edh,43h,49h,2ch	;"0--4"	
		db	19h,11h,0cdh,01h,09h	;"5--9"
		db	0ffh			;8段全灭

;** read 12887 *************************************************
readtime:	mov	dptr,#800ah
waituip:	movx	a,@dptr
		jb	acc.7,waituip		;是否可读时间,日期
		mov	dptr,#8002h		
		movx	a,@dptr
		mov	minute,a		;读分钟
		mov	dptr,#8004h
		movx	a,@dptr
		mov	hour,a			;读小时
		mov	r2,#4
		mov	dptr,#8006h
		mov	r0,#week
readcal:	movx	a,@dptr			;读日历
		mov	@r0,a			
		inc	dptr
		inc	r0
		djnz	r2,readcal
		ret

;** REMOTE: 遥控接收处理程序 *****************************************
remote:		setb	p1.4
		push	acc
		push	psw
		push	dph
		push	dpl
		push	b
		setb	rs0
		setb	rs1
		mov	a,int1times
		cjne	a,#0,recieve
		inc	int1times
		mov	th1,#0
		mov	tl1,#0
		setb	tr1
		pop	b
		pop	dpl
		pop	dph
		pop	psw
		pop	acc
		reti
recieve:	mov	tmpth1,th1		;read T1
		mov	tmptl1,tl1
		mov	th1,#0
		mov	tl1,#0
		mov	a,int1times
		cjne	a,#1,recievecode	;if leadercode
		mov	a,tmpth1		;if 3390h<T1<35e8h(13.2ms<T1<13.8ms)
		cjne	a,#33h,no_th33h		;if TH1=33h
		mov	a,tmptl1		;TH1=33h
		cjne	a,#90h,no_tl90h		;TH1=33h,if TL1=90h
		ljmp	okcode			;TH1=33h,TL1=90h,OK!
no_tl90h:	jnc	okcode			;TH1=33h,TL1>90h,OK!
		ljmp	exitint1		;TH1=33h,TL1<90h,BAD!
no_th33h:	jnc	glt33			;TH1>33h
		ljmp	exitint1		;TH1<33h,BAD!
glt33:		cjne	a,#35h,no_th35h		;if TH1=35h
		mov	a,tmptl1		;TH1=35h
		cjne	a,#0e8h,no_tl18h	;TH1=35h,if TL1=0e8h
		ljmp	okcode			;TH1=35h,TL1=0e8h,OK!
no_tl18h:	jc	okcode			;TH1=35h,TL1<0e8h,OK!
		ljmp	exitint1		;TH1=35h,TL1>0e8h,BAD!
no_th35h:	jc	okcode			;TH1<35h,OK!
		ljmp	exitint1		;TH1>35h,BAD!
okcode:		inc	int1times
		ljmp	quitint1		;leadercode OK!

recievecode:	mov	a,tmpth1		;if 0401<T1<04c9(1.025ms<T1<1.225ms)
		cjne	a,#04h,no_th04h		;if TH1=04h
		mov	a,tmptl1		;TH1=04h
		cjne	a,#01h,no_tl01h		;TH1=04h,if TL1=01h
		ljmp	yescode0		;TH1=04h,TL1=01h,"0"
no_tl01h:	jnc	tlglt01			;TH1=04h,TL1>01h
		ljmp	exitint1		;TH1=04h,TL1<01h,BAD!
tlglt01:	cjne	a,#0c9h,no_tlc9h	;TH1=04h,if TL=0c9h 
		ljmp	yescode0		;TH1=04h,TL1=0c9h,"0"
no_tlc9h:	jc	yescode0		;TH1=04h,TL1<0c9h,"0"		
		ljmp	exitint1		;TH1=04h,TL1>0c9h,BAD!

no_th04h:	cjne	a,#08h,no_th08h		;if 0866<T1<092eh(2.15ms<T1<2.35ms)
		mov	a,tmptl1		;TH1=08h
		cjne	a,#66h,no_tl66h		;TH1=08h,if TL1=66h
		ljmp	yescode1		;TH1=08h,TL1=66h,"0"
no_tl66h:	jnc	yescode1		;TH1=08h,TL1>66h,"0"
		ljmp	exitint1		;TH1=08h,TL1<66h,BAD!
no_th08h:	jnc	glt08			;TH1>08h
		ljmp	exitint1		;TH1<08h,BAD!
glt08:		cjne	a,#09h,no_th09h		;if TH1=09h
		mov	a,tmptl1		;TH1=09h
		cjne	a,#2eh,no_tl2eh		;TH1=09h,if TL1=2eh
		ljmp	yescode1		;TH1=09h,TL1=2eh,OK!
no_tl2eh:	jc	yescode1		;TH1=09h,TL1<2eh,OK!
		ljmp	exitint1		;TH1=09h,TL1>2eh,BAD!
no_th09h:	ljmp	exitint1		;TH1>09h,BAD!

yescode0:	clr 	c
		ljmp	sendcode
yescode1:	setb	c
sendcode:	mov	a,coderam3
		rlc	a
		mov	coderam3,a
		mov	a,coderam2
		rlc	a
		mov	coderam2,a
		mov	a,coderam1
		rlc	a
		mov	coderam1,a
		mov	a,coderam0
		rlc	a
		mov	coderam0,a
		mov	a,int1times
		cjne	a,#33,mid_code
		ljmp	processkey
mid_code:	inc	int1times
		ljmp	quitint1

processkey:	mov	a,coderam0
		cjne	a,#usercode,renewkey	;比较是否用户码
		ljmp	cmpusercode
renewkey:	ljmp	exitint1
cmpusercode:	add	a,coderam1
		cjne	a,#0ffh,renewkey
		ljmp	cmpdatacode


cmpdatacode:	mov	dptr,#codetab		;取遥控码表首址
getcode:	clr	a
		movc	a,@a+dptr		;取遥控码
		cjne	a,#0ffh,nextdatacode
		ljmp	exitint1		;非法码,舍弃
nextdatacode:	inc	dptr			;表址加1
		cjne	a,coderam2,nextcode
		add	a,coderam3
		cjne	a,#0ffh,renewkey
		clr	a
		movc	a,@a+dptr
		mov	b,a
		inc	dptr
		clr	a
		movc	a,@a+dptr
		mov	dpl,a
		mov	dph,b
		clr	a
		jmp	@a+dptr
nextcode:	inc	dptr			;准备比较下一个遥控码
		inc	dptr
		ljmp	getcode	
codetab:	db 	codeup			;"↑"的遥控码
		dw	keyup			;按键"↑"处理程序入口
		db 	codedown		;"↓"的遥控码		
		dw	keydown			;按键"↓"处理程序入口
		db 	codeleft		;"←"的遥控码		
		dw	keyleft			;按键"←"处理程序入口
		db 	coderight		;"→"的遥控码		
		dw	keyright		;按键"→"处理程序入口
		db 	code0			;"0"的遥控码		
		dw	key0			;按键"0"处理程序入口
		db 	code1			;"1"的遥控码		
		dw	key1			;按键"1"处理程序入口
		db 	code2			;"2"的遥控码		
		dw	key2			;按键"2"处理程序入口
		db 	code3			;"3"的遥控码		
		dw	key3			;按键"3"处理程序入口
		db 	code4			;"4"的遥控码		
		dw	key4			;按键"4"处理程序入口
		db 	code5			;"5"的遥控码		
		dw	key5			;按键"5"处理程序入口
		db 	code6			;"6"的遥控码		
		dw	key6			;按键"6"处理程序入口
		db 	code7			;"7"的遥控码		
		dw	key7			;按键"7"处理程序入口
		db 	code8			;"8"的遥控码		
		dw	key8			;按键"8"处理程序入口
		db 	code9			;"9"的遥控码		
		dw	key9			;按键"9"处理程序入口
		db 	codedot			;"."的遥控码		
		dw	keydot			;按键"."处理程序入口
		db	codedark
		dw	keydark
		db 	codestart		;"启动"的遥控码		
		dw	keystart		;按键"启动"处理程序入口
		db 	codeltinc		;"亮度调整+"的遥控码		
		dw	keylightinc		;按键"亮度调整+"处理程序入口
		db 	codeltdec		;"亮度调整-"的遥控码		
		dw	keylightdec		;按键"亮度调整-"处理程序入口
		db 	codeonoff		;"开/关机"的遥控码		
		dw	keyonoff		;按键"开/关机"处理程序入口
		db 	codetime		;"时间校准"的遥控码		
		dw	keyadjtime		;按键"时间校准"处理程序入口
		db	0ffh			;结束标志

keyup:		mov	a,modify
		cjne	a,#00h,modista1
		ljmp	exitint1
modista1:	mov	a,numchar
		cjne	a,#0,mustsave1
		ljmp	nosave1
mustsave1:	lcall	savedata
nosave1:	mov	numchar,#0
		mov	a,modiline		;取上次闪烁行数
		cjne	a,#0,no_firstline	;比较是否第一行闪烁
		mov	modiline,#10		;是,则置最后1行1列闪烁
		mov	modicolu,#0
		ljmp	exitint1		
no_firstline:	dec	modiline		;上移一行
		ljmp	exitint1		

keydown:	mov	a,modify
		cjne	a,#00h,modista2
		ljmp	exitint1
modista2:	mov	a,numchar
		cjne	a,#0,mustsave2
		ljmp	nosave2
mustsave2:	lcall	savedata
nosave2:	mov	numchar,#0
		mov	a,modiline		;取上次闪烁行数
		cjne	a,#10,no_lastline	;比较是否最后一行闪烁
		mov	modiline,#0		;是,则置第一行闪烁
		ljmp	exitint1		
no_lastline:	cjne	a,#6,if_line9
		mov	a,modicolu
		cjne	a,#1,norlinc
		mov	modicolu,#0
		ljmp	norlinc
if_line9:	cjne	a,#9,norlinc
		mov	modicolu,#0
norlinc:	inc	modiline		;下移一行
		ljmp	exitint1		

keyleft:	mov	a,modify
		cjne	a,#00h,modista3
		ljmp	exitint1
modista3:	mov	a,adjtime
		cjne	a,#00h,is_moditime0
		ljmp	modi_data0
is_moditime0:	mov	a,modicolu
		cjne	a,#0,deccol
		mov	modicolu,#5
		ljmp	exitint1
deccol:		dec	modicolu
		ljmp	exitint1
modi_data0:	mov	a,numchar
		cjne	a,#0,mustsave3
		ljmp	nosave3
mustsave3:	lcall	savedata
nosave3:	mov	numchar,#0
		mov	a,modiline		;取闪烁行数
		cjne	a,#7,if_twoclou1	;比较是否7,8,9,10行闪烁
		ljmp	twocolu
if_twoclou1:	cjne	a,#8,if_twoclou2
		ljmp	twocolu
if_twoclou2:	cjne	a,#9,if_twoclou3
		ljmp	twocolu
if_twoclou3:	cjne	a,#10,if_twoclou4
		mov	modiline,#0		
		mov	modicolu,#0
		ljmp	exitint1		
if_twoclou4:	mov	a,modicolu
		cjne	a,#0,norcolinc
		mov	modicolu,#2
		ljmp	exitint1		
norcolinc:	dec	modicolu		
		ljmp	exitint1		
twocolu:	mov	a,modicolu
		cjne	a,#0,is_colu2
		mov	modicolu,#2
		ljmp	exitint1
is_colu2:	mov	modicolu,#0
		ljmp	exitint1

keyright:	mov	a,modify
		cjne	a,#00h,modista4
		ljmp	exitint1
modista4:	mov	a,adjtime
		cjne	a,#00h,is_moditime1
		ljmp	modi_data1
is_moditime1:	mov	a,modicolu
		cjne	a,#5,inccol
		mov	modicolu,#0
		ljmp	exitint1
inccol:		inc	modicolu
		ljmp	exitint1
modi_data1:	mov	a,numchar
		cjne	a,#0,mustsave4
		ljmp	nosave4
mustsave4:	lcall	savedata
nosave4:	mov	numchar,#0
		mov	a,modiline		;取闪烁行数
		cjne	a,#7,iftwoclou1		;比较是否7,8,9,10行闪烁
		ljmp	two_colu
iftwoclou1:	cjne	a,#8,iftwoclou2
		ljmp	two_colu
iftwoclou2:	cjne	a,#9,iftwoclou3
		ljmp	two_colu
iftwoclou3:	cjne	a,#10,iftwoclou4
		mov	modiline,#0		
		mov	modicolu,#0
		ljmp	exitint1
iftwoclou4:	mov	a,modicolu
		cjne	a,#2,nor_colinc
		mov	modicolu,#0
		ljmp	exitint1
nor_colinc:	inc	modicolu
		ljmp	exitint1
two_colu:	mov	a,modicolu
		cjne	a,#2,iscolu2
		mov	modicolu,#0
		ljmp	exitint1
iscolu2:	mov	modicolu,#2
		ljmp	exitint1
		
key0:		mov	a,modify
		cjne	a,#00h,modista5
		ljmp	exitint1
modista5:	mov	a,adjtime
		cjne	a,#0ffh,modi_data2
		mov	a,#0
		lcall	timemodi
		ljmp	exitint1
modi_data2:	mov	a,#0
		lcall	common0_9
		ljmp	exitint1

key1:		mov	a,modify
		cjne	a,#00h,modista6
		ljmp	exitint1
modista6:	mov	a,adjtime
		cjne	a,#0ffh,modi_data3
		mov	a,#1
		lcall	timemodi
		ljmp	exitint1
modi_data3:	mov	a,#1
		lcall	common0_9
		ljmp	exitint1

key2:		mov	a,modify
		cjne	a,#00h,modista7
		ljmp	exitint1
modista7:	mov	a,adjtime
		cjne	a,#0ffh,modi_data4
		mov	a,#2
		lcall	timemodi
		ljmp	exitint1
modi_data4:	mov	a,#2
		lcall	common0_9
		ljmp	exitint1
		
key3:		mov	a,modify
		cjne	a,#00h,modista8
		ljmp	exitint1
modista8:	mov	a,adjtime
		cjne	a,#0ffh,modi_data5
		mov	a,#3
		lcall	timemodi
		ljmp	exitint1
modi_data5:	mov	a,#3
		lcall	common0_9
		ljmp	exitint1

key4:		mov	a,modify

⌨️ 快捷键说明

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