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

📄 综合a.asm

📁 单片机开发资料光盘-双龙-686M.zip
💻 ASM
📖 第 1 页 / 共 2 页
字号:
		sbic acsr,aco
		mov data,temp2
		lsr temp1
		dec cnt
		brne nextd
		rcall dataconv
		mov r4,hsb	;转换结果送显示。
		mov r3,msb
		mov r2,lsb
		rjmp adag	 	
dataconv:			;把已经转换的16进制换算为双字节的确10进制数。			
        ldi     datal,125
        clr     datah           ;c*p=hl
        ldi     cnt,8
        lsr     datal
m8u_1:  brcc    m8u_2
        add     datah,data
m8u_2:  ror     datah
        ror     datal
        dec     cnt
        brne    m8u_1

        ldi     cnt,6
d_64:   clc
        ror     datah
        ror     datal
        dec     cnt
        brne    d_64

        clr     hsb
bcd8_1: subi    datal,100
        brcs    bcd8_2
        inc     hsb
        rjmp    bcd8_1
bcd8_2: tst    datah
        breq   bcd8_3
        dec    datah
        inc    hsb
        rjmp   bcd8_1

bcd8_3: subi   datal,-100
bcd8_4: subi   datal,10
        brcs   bcd8_5
        inc    msb
        rjmp   bcd8_4
bcd8_5: subi   datal,-10
        ret
 .ORG $0500
LCD:	clr r4
	clr r5
	clr r6
	clr r7
	clr zh
	clr xh
	clr yh
	rcall indipramc  	;调用初始化显示内存。
         ldi temp,$ff
               out ddrd,temp
               out portd,temp
               ldi temp,$00
               out ddrb,temp
               out portb,temp       
		ldi temp1,$01
		rcall contd
		RCALL DELAYY
		ldi temp1,$38
		rcall contd
		LDI TEMP1,$06
		rcall contd
		LDI TEMP1,$0c
		RCALL CONTD
		RCALL WR1RAM     
		RCALL WR2RAM
    	scanadc:ldi temp,$07
		ldi yl,$60
	 scannc:rcall scan1c
	 	brts scannc
         scankc:rcall scan1c
	 	brtc scankc
	 	rcall scan1c
  	 scansc: clc
         	cpi keyn,$10
	 	brcc commkeyc         
	 	rcall wraddramc
		dec temp
		cpi temp,$03
		brne scannc
		rjmp scanadc
       commkeyc:nop
		cpi keyn,$13
		brne zadd
		rjmp reset
	zadd:	cpi keyn,$12
		breq srmemc
		cpi keyn,$11 	
		breq epmemc
		cpi keyn,$10
		breq directtc
		rjmp scannc
         srmemc: rjmp srmemtc
         epmemc: rjmp epmemtc
       directtc: rjmp direct
  epmemtc:       rcall meradd		;调用由R7-R4产生的地址入TEMP2TEMP1。
		cpi temp2,$02		;EEPROM必须小于0200H。
		brcs epdownc
                ldi temp2,$01
                ldi temp1,$ff
                rcall dviadd
	 epdownc:out eearh,temp2			
		out eearl,temp1
		sbi eecr,$00
 		in temp1,eedr
		mov r2,temp1
		mov r8,temp1
		rcall dtor32		;数据放入R3R2中。
		rcall disbyregc		;改变显示内存。
        epscannc:rcall scan1c		;键扫
	 	brts epscannc
        epscankc:rcall scan1c
	 	brtc epscankc
	 	rcall scan1c
  	epscansc:cpi keyn,$13
		brne epreturnc
		rjmp reset				
       epreturnc:cpi keyn,$10
	 	brcc epcommkeyc         
		mov r3,keyn
		rcall disbyregc
	 escannc:rcall scan1c
	 	brts escannc
         escankc:rcall scan1c
	 	brtc escankc
	 	rcall scan1c
  	 escansc:cpi keyn,$13
		brne ereturnc
		rjmp reset
        ereturnc:cpi keyn,$10
	 	brcc ecommkeyc
		mov r2,keyn
		rcall disbyregc
		rjmp epscannc   
      epcommkeyc:cpi keyn,$13
		brne epreturn1c
		rjmp reset
      epreturn1c:cpi keyn,$1e		
		breq eplastkeyc
		cpi keyn,$1f
		breq epnextkeyc
		rjmp epscannc
       ecommkeyc:cpi keyn,$13
		brne ereturn1c
		rjmp reset
       ereturn1c:cpi keyn,$1e
		breq eplastkeyc
		cpi keyn,$1f
		breq epnextkeyc
		rjmp escannc	
      eplastkeyc:rcall meradd
		mov temp,r3
		swap temp
		or temp,r2
		cp temp,r8
		breq eplastc
		cbi eecr,$00                
		out eearh,temp2
		out eearl,temp1
		sbi eecr,$02
		sbi eecr,$01
	epwrwtc: sbic eecr,$01	
		rjmp epwrwtc	
	eplastc:cpi temp1,$00
		brne eplastkey1c
		cpi temp2,$00
		brne eplastkey1c
		rjmp epscannc
     eplastkey1c:clc
		subi temp1,$01
		sbci temp2,$00
		rcall dviadd
		rjmp epmemtc
      epnextkeyc:rcall meradd
		mov temp,r3
		swap temp
		or temp,r2
		cp temp,r8
		breq epnextc
                cbi eecr,$00
		out eearh,temp2
		out eearl,temp1
		sbi eecr,$02
		sbi eecr,$01
	epwrwtnc:sbic eecr,$01	
		rjmp epwrwtnc	
	epnextc:cpi temp1,$ff
		brne epnextkey1c
		cpi temp2,$01
		brne epnextkey1c
		rjmp epscannc
     epnextkey1c:inc temp1
		brne epnextkey2c
		inc temp2
     epnextkey2c:rcall dviadd
		rjmp epmemtc			;整段EEPROM读写结束。
        srmemtc:rcall meradd			;调用由R7-R4产生的地址入TEMP2TEMP1。
		cpi temp2,$02			
		brcc srbeginc
		cpi temp2,$01
		breq srdownc
		cpi temp1,$70
		brcc srdownc
                ldi temp1,$70
                clr temp2
		rjmp srdownc
        srbeginc:ldi temp2,$01
                ldi temp1,$ff
        srdownc:rcall dviadd
	        rcall meradd
		mov yh,temp2
		mov yl,temp1
		ld temp1,y		
		mov r2,temp1
		mov r8,temp1
		rcall dtor32			;数据放入R3R2中。
		rcall disbyregc			;改变显示内存。
        srscannc:rcall scan1c			;键扫
	 	brts srscannc
        srscankc:rcall scan1c
	 	brtc srscankc
	 	rcall scan1c
  	srscansc:cpi keyn,$13
		brne srreturnc
		rjmp reset				
       srreturnc:cpi keyn,$10
	 	brcc srcommkeyc         
		mov r3,keyn
		rcall disbyregc
	 sscannc:rcall scan1c
	 	brts sscannc
         sscankc:rcall scan1c
	 	brtc sscankc
	 	rcall scan1c
  	 sscansc:cpi keyn,$13
		brne sreturnc
		rjmp reset
	sreturnc:cpi keyn,$10
	 	brcc scommkeyc
		mov r2,keyn
		rcall disbyregc
		rjmp srscannc   
      srcommkeyc:cpi keyn,$13
		brne srreturn1c
		rjmp reset
      srreturn1c:cpi keyn,$1e		
		breq srlastkeyc
		cpi keyn,$1f
		breq srnextkeyc
		rjmp srscannc
       scommkeyc:cpi keyn,$13
		brne srreturn2c
		rjmp reset
      srreturn2c:cpi keyn,$1e
		breq srlastkeyc
		cpi keyn,$1f
		breq srnextkeyc
		rjmp sscannc	
      srlastkeyc:rcall meradd
		mov temp,r3
		swap temp
		or temp,r2
		cp temp,r8
		breq srlastc
		mov yh,temp2
		mov yl,temp1
		st y,temp
		nop
		nop
	srlastc:cpi temp1,$70
		brne srlastkey1c
		cpi temp2,$00
		brne srlastkey1c
		rjmp srscannc
     srlastkey1c:clc
		subi temp1,$01
		sbci temp2,$00
		rcall dviadd
		rjmp srmemtc
      srnextkeyc:rcall meradd
		mov temp,r3
		swap temp
		or temp,r2
		cp temp,r8
		breq srnextc
		mov yh,temp2
		mov yl,temp1
		st y,temp
		nop
                nop
	srnextc:cpi temp1,$ff
		brne srnextkey1c
		cpi temp2,$01
		brne srnextkey1c
		rjmp srscannc
     srnextkey1c:inc temp1
		brne srnextkey2c
		inc temp2
     srnextkey2c:rcall dviadd
		rjmp srmemtc		;整段EEPROM读写结束。
indipramc:	ldi zh,high(label*2)	;初始化显示内存。
	 	ldi zl,low(label*2)
		ldi xl,$60
		ldi temp,$50
		st x+,temp
		LDI TEMP,$20
		clr temp1
          inlpc:st x+,temp
		inc temp1
 	 	cpi temp1,$05
		brne inlpc
		ldi xl,$60
	 	ret
 	SCAN1c: push xh			;键扫显示子程序。
		PUSH XL
		PUSH TEMP3
		PUSH TEMP2
		PUSH TEMP1
		PUSH TEMP
	 	LDI XL,$60
         	SET
		LDI CNT,$04
         	LDI  SCNN,$00
  	       	LDI  KSNI,0B11110111
	  COL1c:ldi temp,$0f
         	OUT  DDRC,TEMP
		OUT  PORTC,KSNI         	
		RCALL  DELAY
		LDI  TEMP1,$04
  	       	RCALL  DELYT
         	IN   TEMP,PINc
         	ANDI  TEMP,0B11110000
         	SWAP  TEMP
	  KROWc:SEC 
        	ROR  TEMP
         	BRCS  NOKEYc
         	CLT
         	MOV   KEYN,SCNN
		CBI DDRD,$07
		CBI PORTD,$07
	 	SBIS PINd,$07
	 	ADIW KEYN,$10
		RJMP WDISLCD		
         NOKEYc: INC  SCNN
          	DEC  TEMP1
          	BRNE  KROWc
          	SEC
          	ROR  KSNI
     	  NOSKc: DEC  CNT   
          	BRNE  COL1c
        WDISLCD:RCALL DISLCD
          	LDI   TEMP,$FF
          	OUT   DDRC,TEMP
		OUT   PORTC,TEMP
	 	POP TEMP
	  	POP TEMP1
		POP TEMP2
		POP TEMP3
	  	POP XL     
		pop xh   
	  	RET 
	DISLCD:ldi temp,$ff
               out ddrd,temp
               out portd,temp
               ldi temp,$00
               out ddrb,temp
               out portb,temp       
 		rcall wr2ram
		ret
wr2ram:	LDI CNT1,04
	LDI TEMP1,$a8
	RCALL CONTD
	clr zh
	ldi zl,$60
LPC:     LD R0,Z+
	MOV TEMP1,R0
	RCALL WRITD
	DEC CNT1
	BRNE LPC
	ldi temp1,$20
	rcall writd	
	ld r0,z+
	mov temp1,r0
	rcall writd
	ld r0,z
	mov temp1,r0
	rcall writd
	ret
.org $0700	
		ldi cnt,$8
		ldi temp1,$a8
		rcall contd
	lp80:	ldi temp1,$20
		rcall writd
		dec cnt
		brne lp80
	lp8:	clr cnt1		;循环程序。
	lp81:	clr cnt
		ldi temp1,$a8
		rcall contd
	lp82:	cp cnt1,cnt
		brne lp83
		ldi temp1,$7E		;字符代码。
	lp84:	rcall writd
		inc cnt
		cpi cnt,$10
		brne lp82
		ldi temp,$40
		rcall delaypa
		inc cnt1
		cpi cnt1,$10
		brne lp81
		rjmp lp88
	lp83:	ldi temp1,$20
		rjmp lp84
	lp88:	ldi cnt1,$10		;循环程序。
	lp881:	ldi cnt,$00
		ldi temp1,$a8
		rcall contd
	lp882:	cp cnt1,cnt
		brne lp883
		ldi temp1,$7f	;字符代码。
	lp884:	rcall writd
		inc cnt
		cpi cnt,$10
		brne lp882
		ldi temp,$40
		rcall delaypa
		dec cnt1
		brne lp881
		rjmp lp8
	lp883:	ldi temp1,$20
		rjmp lp884
.org $0740
		ldi cnt,$8		;0--F循环程序。
		ldi temp1,$a8
		rcall contd
	lpw0:	ldi temp1,$20
		rcall writd
		dec cnt
		brne lpw0
	lpw:	clr temp3		
		ldi zh,high(labelc*2)
		ldi zl,low(labelc*2)
	lpww:	clr cnt1	
		lpm
		inc zl
	lpw1:	clr cnt
		ldi temp1,$a8
		rcall contd
	lpw2:	cp cnt1,cnt
		brne lpw3
		mov temp1,r0		
	lpw4:	rcall writd
		inc cnt
		cpi cnt,$10
		brne lpw2
		ldi temp,$40		;设置时间常数TEMP。
		rcall delaypa		;调用延时子程序。
		inc cnt1
		cpi cnt1,$10
		brne lpw1
		inc temp3
		cpi temp3,$10
		brne lpww
		rjmp lpw
	lpw3:	ldi temp1,$20
		rjmp lpw4		

.org $0800			;LCD显示LCD字符
wr2ram1:LDI ZL,LOW($0BC0*2)
	LDI ZH,HIGH($0BC0*2)
	ldi cnt1,$07
lp1:	LDI CNT,16
	LDI TEMP1,$a8
	RCALL CONTD
LP:     LPM
	MOV TEMP1,R0
	RCALL WRITD
	LD R0,Z+
	DEC CNT
	BRNE LP
	dec cnt1
	breq lp2
	rcall delayY
	rcall delayY
	rjmp lp1
lp2:	rcall delayY
	ldi zl,low($Cc0*2)
	ldi zh,high($Cc0*2)
	ldi cnt,168
	mov prl,zl
	mov prh,zh
rout:	ldi cnt1,$16
	ldi temp1,$a8
	rcall contd
rout1:	lpm
	mov temp1,r0
	rcall writd
	ld r0,z+
	dec cnt1
	brne rout1
	rcall delayY
	dec cnt
	breq wr2ram1
	rcall incprlh
	rjmp rout	
incprlh:mov xl,prl
	mov xh,prh
	ld r0,x+
	mov prl,xl
	mov prh,xh
	mov zl,prl
	mov zh,prh
	ret 
wr1ram:	wdr
	ldi temp1,$80
	rcall contd
	ldi cnt1,$02
    w1r:ldi cnt,20
	ldi zl,low($Ba0*2)
	ldi zh,high($Ba0*2)
  redsp:lpm
	mov temp1,r0
	rcall writd
	ld r0,z+
	dec cnt
	brne redsp
	dec cnt1
	brne w1r
	ret
syset:	wdr
	ldi temp1,$01
	RCALL contd
	ldi temp1,$38
	rcall contd
	ldi temp1,$06
	rcall contd
	ret

CONTD:  LDI   TEMP,0B00110000	
	 OUT   PORTD,TEMP
	 RCALL DELT3		
	CBI PORTD,$05
	RCALL DELT3
	sbi portd,$05
BUSYY:  WDR
	SBIC PINB,$07
	RJMP BUSYY
	 ldi temp,0b00100000		
	 OUT   PORTD,TEMP
	 RCALL DELT3
	 LDI   TEMP,$ff   	
	 OUT   DDRB,TEMP
	 OUT   PORTB,TEMP1  	
	 WDR
	 cBI   PORTD,$05	
	 RCALL DELT3
	 LDI   TEMP,0B00111000	
	 OUT   PORTD,TEMP
	 CLR   TEMP		
	 OUT   DDRB,TEMP
	 OUT   PORTB,TEMP	
	 RET	
WRITD:  LDI TEMP,0B00110000	
	 OUT PORTD,TEMP
	 RCALL DELT3
	cbi portd,$05
	rcall delt3
	sbi portd,$05
BUZY1:WDR
	 SBIC PINB,$07		
	 RJMP BUZY1  	
	 LDI TEMP,0B00101000	
	 OUT PORTD,TEMP
	 OUT PORTB,TEMP1	
	 LDI TEMP,$ff		
	 OUT DDRB,TEMP
	 cbi PORTD,$05		
	 RCALL DELT3
	 LDI TEMP,0B00111000	
   	 OUT PORTD,TEMP
	 RCALL DELT3
	 CLR TEMP		
	 OUT DDRB,TEMP
	 OUT PORTB,TEMP
	 RET 
DELT3:  LDI TEMP2,$24	
   DT111:WDR			
	 DEC TEMP2
	 BRNE DT111
	 RET
delayY:  ldi temp,$55
delaypa:push temp
m1:	push temp
m2:	push temp
m3:	dec temp
	brne m3
	pop temp
	dec temp
	brne m2
	pop temp
	dec temp
	brne m1
	pop temp
	dec temp
	brne delaypa
	ret
.cseg			;LCD第一行显示GZ Shuang Long
.org 0xBa0
.db 0x20,0x47,0x5a,0x20,0x53,0x68,0x75,0x61
.db 0x6e,0x67,0x20,0x4c,0x6f,0x6e,0x67,0x20
.cseg
.org 0xBc0		;LCD第二显示字符
.db 0x20,0x57,0x65,0x6c,0x63,0x6f,0x6d,0x65,0x20,0x62
.db 0x72,0x6f,0x77,0x73,0x65,0x20
.db 0x20,0x20,0x6f,0x75,0x72,0x20,0x20,0x77,0x65,0x62
.db 0x73,0x69,0x74,0x65,0x20,0x20
.db 0x20,0x48,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x20,0x20
.db 0x20,0x20,0x20,0x20,0x20,0x20
.db 0x20,0x20,0x77,0x77,0x77,0x2e,0x53,0x4c,0x2e,0x63
.db 0x6f,0x6d,0x2e,0x63,0x6e,0x20
.db 0x20,0x20,0x48,0x65,0x72,0x65,0x20,0x79,0x6f,0x75
.db 0x20,0x63,0x61,0x6e,0x20,0x20
.db 0x20,0x66,0x69,0x6e,0x64,0x20,0x77,0x68,0x61,0x74
.db 0x20,0x79,0x6f,0x75,0x20,0x20
.db 0x20,0x20,0x20,0x20,0x20,0x20,0x77,0x61,0x6e,0x74
.db 0x2e,0x20,0x20,0x20,0x20,0x20
.cseg
.org 0xCc0		;LCD所有显示字符
.db 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39
.db 0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,0x50
.db 0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x61,0x62,0x63,0x64,0x65,0x66
.db 0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,0x70,0x71,0x72,0x73,0x75,0x76,0x77
.db 0x78,0x79,0x7a,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e
.db 0x2f,0x3b,0x3c,0x3d,0x3e,0x3f,0x5b,0x5c,0x5d,0x5e,0x5f,0x7b,0x7d,0x7c,0x7e,0xa1
.db 0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf
.db 0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0xbe,0xbf
.db 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf
.db 0xd0,0xd1,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xdb,0xdc,0xdd,0xde,0xdf
.db 0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xeb,0xec,0xed,0xee,0xef
.db 0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff
 .cseg
 .org $0f00 		;LED字形表0-F
  .dw 0x063f,0x4f5b,0x6d66,0x077d
  .dw 0x6f7f,0x7c77,0x5e39,0x7179		
  .dw 0x0000 
.cseg
 .org $0f10 		;LCD显示0-F	;
  .dw 0x3130,0x3332,0x3534,0x3736
  .dw 0x3938,0x4241,0x4443,0x4645	

   .equ   plytab=0x0f20
   .equ   mustab=0x0fda
   .cseg
   .org   plytab	;祝你生日快乐曲码
   .db   20,02,00,01,20,01,22,04,20,04
   .db   25,04,24,04,00,04
   .db   20,02,00,01,20,01,22,04,20,04
   .db   27,04,25,04,00,04
   .db   20,02,00,01,20,01,32,04,29,04
   .db   25,04,24,04,22,04
   .db   30,02,00,01,30,01,29,04,25,04
   .db   27,04,25,04,00,04
 ;			万水千山总是情曲码

 .db 17,04,18,04,20,06,20,02,22,04,20,04,17,12,15,04	;

 .db 13,06,17,02,15,04,13,04,10,12,10,04,8,8,13,04	;

 .db 15,04,17,04,20,04,22,04,17,04,15,15,15,04,00,04	;

 .db 17,04,18,04,20,06,20,02,22,04,20,04,17,12,15,04	;

 .db 13,06,17,02,15,04,13,04,10,12,10,04,8,8,13,06	;

 .db 17,02,15,06,13,02,13,04,10,04,13,15,13,8,17,04	;

 .db 20,04,22,12,25,10,22,04,18,04,20,06,22,02,20,12	;

 .db 17,04,20,8,17,04,20,04,22,12,25,04,25,04,22,04	;

 .db 20,04,17,04,15,15,15,8,17,04,18,04,20,06,20,02	;

 .db 22,04,20,04,17,12,15,04,13,06,17,02,15,04,13,04	;

 .db 10,12,10,04,8,8,13,04,17,04,15,06,13,02,10,04

 .db 12,04,13,15,13,15	;
   .db   00,00
   
   .cseg
   .org  mustab		;音符表
   .dw   63627,63730,63835,63927
   .dw   64020,64102,64185,64259
   .dw   64330,64399,64463,64523
   .dw   64579,64632,64683,64731
   .dw   64776,64819
   .dw   64859,64897
   .dw   64933,64967,64999,65029
   .dw   65057,65084,65109,65133
   .dw   65156,65177,65197,65216
   .dw   65243,65251,65267,65282  

⌨️ 快捷键说明

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