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

📄 zygd.asm

📁 利用点阵显示显示中文字符
💻 ASM
📖 第 1 页 / 共 4 页
字号:

                bsf       STATUS,RP0
                movlw     0xc7           ;  1100 0111
                movwf     TRISA          ;RA0,RA1,RA2为输入,RA3,RA4,RA5为输出
                bcf       STATUS,RP0
                movlw     0xff
                movwf     PORTA


                clrf      PORTB
                clrf      PORTC

                bsf       STATUS,RP0

                movlw     0x80           ;  1000 0100
                movwf     TRISC

                movlw     0x00           ;
                movwf     TRISB

                bcf       STATUS,RP0
                movlw     0xff
                movwf     PORTB
                movwf     PORTC
                movlw	0x6c
			movwf	FSR
clrdisbuf:                             ;清显示缓冲区从0x6c~
		movlw	0xff
		movwf	INDF
		incf	FSR,f
	      btfss	Fsr,7
	      goto	clrdisbuf
		movlw	0x20
		movwf	FSR		
;*****************************************
;*    set up timer2 for dispaly unit     *
;*****************************************
                bcf       STATUS,RP0
                movlw     0x02      ;  0 0000 0 00
                movwf     T2CON
                clrf      TMR2
		bsf	  TMR2,2

                bsf       STATUS,RP0
                movlw     0x40		;40
                movwf     PR2            ;SET TIMER2 PERIOD REGISTER

                bcf       INTCON,GIE
                bsf       INTCON,PEIE
                bsf       PIE1,TMR2IE
                bcf       STATUS,RP0
                bcf       PIR1,TMR2IF    ;clear intrupt flag
                bsf       T2CON,2        ;turn on timer2

;*****************************************
;*    set up startup parameter           *
;*****************************************
                movlw      0x00
                movwf      rcounterl
                movlw      0x6c
                movwf      ledaddress
                movlw	   0x0a
		movwf	   delay_int

		bsf	STATUS,RP0
                movlw     0xfe            ; 1111 1 110
                movwf     OPTION_REG
                bcf	STATUS,RP0
           

		BCF	PIR1,TMR1IF

		bsf	Flag1,PoweronF
		bcf	Flag1,updateF
;*****************************************
;*             MAIN PROGRAMM             *
;*****************************************
main
		 btfsc		PORTA,0
		 GOTO		wait_deal_encoder
		 CLRWDT
		 movlw       0xbf                ;clear all memory from 40~7f
                 movwf       optiondata
                 movlw       0x6c
                 movwf       startaddress
                 movlw       0x14
                 movwf       ledcounter
		 call	     fill_data


                 movlw       0x01                 ;set up delay timer for shift movtion
                 movwf       timerb
                 clrf        displayflag          ; 0 ,1 ,2=start testing line

                 movlw       0xff
                 movwf       dataleft
                 movwf       datactrl
                 movwf       tdataleft
                 movwf       tdatactrl

                 clrf        dataright
                 clrf        tdataright

                 clrf        keyb
                 clrf        keya

                 movlw       0x10	;50	;10	;40	;20	;10
                 movwf       key_count1
		 bsf	     displayflag,0
		 movlw	     0x20
		 movwf	     romcounter
		 bsf         INTCON,GIE             ;start int
		 movlw	     0x20
		 movwf	     databank
continu_scan
                 clrwdt
		 movf		databank,f
		 btfss		STATUS,Z
		 goto		continu_scan
		 movlw	   	0x20
		 movwf	 	databank
		 movlw		0x14
		 movwf		optiondata
		 movlw		0x6c
		 movwf		FSR

continu_mov	 bcf		STATUS,C
		 btfsc		INDF,0
		 bsf		STATUS,C
		 rrf		INDF,f
		 incf		FSR,f
		 decfsz		optiondata,f
		 goto		continu_mov
		 decfsz		romcounter,f
		 goto		continu_scan
;******************************************************************
check_key
		bcf		displayflag,0
		call		test_stop
                movlw       	0x6c
                movwf       	startaddress
                movlw       	0x14
                movwf       	ledcounter
                call        	fill_data
		bcf		datactrl,2
		clrf		Flag1
		CLRF		key_flag
		clrf		tdatactrl
check_key_sign

		clrwdt
		btfsc		tdatactrl,7
		call		out_service
		call	     	Read_key
		btfss		Flag1,updateF
		goto		check_key_sign
                btfss		Flag1,AllffF
		goto		subkey
		call		test_stop
		goto		check_key_sign
subkey:
		movf		tdataleft,w
		movwf		dataleft
		movf		tdataright,w
		movwf		dataright
		btfsc		tdatactrl,7
		goto		check_key_sign
		bcf		key_flag,0	;os flag
		call		Data_Floor
		call		arrow_judge
		goto		check_key_sign

Data_Floor
		movlw		0x03
		andwf		tdatactrl,w
		sublw		0x03
		bsf		flag_arrow,no_arrow_f
		btfss		STATUS,Z
		bcf		flag_arrow,no_arrow_f
		movlw       	0xFF                ;clear all memory from 40~7f
                movwf       	optiondata
                movlw       	0x50
                movwf       	startaddress
                movlw       	0x14
                btfss		flag_arrow,no_arrow_f
                movlw		0x0a
                movwf       	ledcounter
                call        	fill_data
		movlw		0xff
		movwf		0x5e
		subwf		tdataleft,w
		btfss		STATUS,Z
		goto		floor1
		movlw		0xff
		subwf		tdataright,w
		btfsc		STATUS,Z
		return

floor1
		movlw		0xff
		subwf		tdataleft,w
		btfsc		STATUS,Z
		goto		no_highfloor
		movlw		0xff
		subwf		tdataright,w
		btfsc		STATUS,Z
		goto		special_floor
		movf		tdataleft,w
		movwf		romaddress
		movlw		0x5a
		btfss		flag_arrow,no_arrow_f
		movlw		0x55
		movwf		FSR
		movlw		0x05
		movwf		rombank
		call		ReadanyByte
		movf		tdataright,w
		movwf		romaddress
		movlw		0x55
		btfss		flag_arrow,no_arrow_f
		movlw		0x50
		movwf		FSR
		movlw		0x05
		movwf		rombank
		call		ReadanyByte
		GOTO		deal_data

no_highfloor
		clrwdt
		movlw		0xff
		subwf		tdataright,w
		btfsc		STATUS,Z
		return
		movf		tdataright,w
		movwf		romaddress
		movlw		0x50
		movwf		FSR
		movlw		0x05
		movwf		rombank
		call		ReadanyByte
		btfsc		flag_arrow,no_arrow_f
		goto		no_a1
		movf		0x50,w
		movwf		0x56
		movf		0x51,w
		movwf		0x57
		movf		0x52,w
		movwf		0x58
		movf		0x53,w
		movwf		0x59
		movf		0x54,w
		movwf		0x50
		movlw		0xff
		movwf		0x51
		movwf		0x52
		movwf		0x53
		movwf		0x54
		movwf		0x5e
		return

no_a1:
		movf		0x50,w
		movwf		0x5c
		movf		0x51,w
		movwf		0x5d
		movf		0x52,w
		movwf		0x5e
		movf		0x53,w
		movwf		0x55
		movf		0x54,w
		movwf		0x56
		movlw		0xff
		movwf		0x50
		movwf		0x51
		movwf		0x52
		movwf		0x53
		movwf		0x54
		return


special_floor
		movf		tdataleft,w
		andlw		0x0f
		movwf		rombank
		addwf		rombank,w
		addlw		0x4d
		movwf		romaddress
		movlw		0x50
		btfsc		flag_arrow,no_arrow_f
		movlw		0x55
		movwf		FSR
		movlw		0x0a
		movwf		rombank
		call		ReadanyByte
		goto		deal_data

deal_data
		btfss		flag_arrow,no_arrow_f
		goto		deal_data_arr
		movf		0x5a,w
		movwf		0x63
		movf		0x5b,w
		movwf		0x5a
		movf		0x5c,w
		movwf		0x5b
		movf		0x5d,w
		movwf		0x5c
		movf		0x5e,w
		movwf		0x5d
		movlw		0xff
		movwf		0x5e   
		return

deal_data_arr
		movf		0x55,w
		movwf		0x5e
		movf		0x56,w
		movwf		0x55
		movf		0x57,w
		movwf		0x56
		movf		0x58,w
		movwf		0x57
		movf		0x59,w
		movwf		0x58
		movlw		0xff
		movwf		0x59
		movwf		0x5c
		movwf		0x5d       
		return

arrow_judge
		btfsc		tdatactrl,2
		bsf		Flag1,continue_m
		movlw		0x03
		andwf		datactrl,w
		movwf		tempa
		movlw		0x03
		andwf		tdatactrl,w
		subwf		tempa,w
		btfss		STATUS,Z
		goto		con_arrow
		movf		tdatactrl,w
		movwf		datactrl
		movlw		0x03
		andwf		tdatactrl,w
		sublw		0x03
		btfss		STATUS,Z
		goto		arrow01
		call		mirror_data
		return
arrow01:
		call		mirror_data1
		return



con_arrow	
            btfss       tdatactrl,2 
            bcf		Flag1,continue_m
            movf		tdatactrl,w
		movwf		datactrl
		btfsc		flag_arrow,no_arrow_f
		goto		no_arrow1
		movlw		0xff
		movwf		0x5a
		movwf		0x5b
		movwf		0x5c
		movwf		0x5d
		movwf		0x5f
		movwf		0x60
		movwf		0x61
		movwf		0x62
		movwf		0x63
		movlw      	0x00
                movwf      	coladdress
                movlw      	0x50
                movwf      	ledaddress
		clrwdt
		bcf		displayflag,0
		btfss		tdatactrl,0
		goto		up_arrow
		btfsc		tdatactrl,1
		goto		no_arrow

down_arrow	movlw		0x27
		movwf		romaddress
		movlw		0x5f
		movwf		FSR
		movlw		0x05
		movwf		rombank
		call		ReadanyByte
no_arrow	movf		0x5f,w
		movwf		0x5b
		movf		0x60,w
		movwf		0x5a
		bsf		INTCON,GIE
no_arrow1
		call		mirror_data
		return

up_arrow	movlw		0x25
		movwf		romaddress
		movlw		0x5f
		movwf		FSR
		movlw		0x05
		movwf		rombank
		call		ReadanyByte
		goto		no_arrow

mirror_data:    
		bcf		INTCON,GIE
		movf		0x5a,w
		movwf		0x76
		movf		0x5b,w
		movwf		0x77
		movf		0x5f,w
		movwf		0x7b
		movf		0x60,w
		movwf		0x7c
		movf		0x61,w
		movwf		0x7d
		movf		0x62,w
		movwf		0x7e
		movf		0x63,w
		movwf		0x7f
mirror_data1:		
		movf		0x50,w
		movwf		0x6c
		movf		0x51,w
		movwf		0x6d
		movf		0x52,w
		movwf		0x6e
		movf		0x53,w
		movwf		0x6f
		movf		0x54,w
		movwf		0x70
		movf		0x55,w
		movwf		0x71
		movf		0x56,w
		movwf		0x72
		movf		0x57,w
		movwf		0x73
		movf		0x58,w
		movwf		0x74
		movf		0x59,w
		movwf		0x75
		movf		0x5c,w
		movwf		0x78
		movf		0x5d,w
		movwf		0x79
		movf		0x5e,w
		movwf		0x7a
		bsf		INTCON,GIE
		return
		
		
		
		

;**********************************************************
;key_flag define:
;0---1:there is os just now
;1---0:display X ,1:display Floor
;2---1:clear display
;**********************************************************
out_service	 clrwdt
		 btfsc		key_flag,0
		 goto		serviceX
servicex1:
		 call		test_stop
		 ;clrf		key_flag
		 bsf		key_flag,0
		 bcf		key_flag,1
		 bcf		key_flag,2
		 movlw		0xff
		 movwf		delay_a
		 movlw		0x1a
		 movwf		delay_b
		 movf		tdatactrl,w
		 movwf		datactrl
		 movlw		0x44
		 movwf		romaddress
		 movlw		0x55
		 movwf		FSR
		 movlw		0x0a
		 movwf		rombank
		 call		ReadanyByte
		 call		mirror_data
		 return

serviceX:
		btfsc		key_flag,1
		goto		service_fl1
		decfsz		delay_a,f
		return
		decfsz		delay_b,f
		return
		btfsc		key_flag,2
		goto		service_fl
		bsf		key_flag,2
		movlw		0xff
		movwf		delay_a
		movlw		0x0a
		movwf		delay_b
		call		test_stop
		call		mirror_data
		return
service_fl:
		bsf		key_flag,1
		bcf		key_flag,2
		call		Data_Floor
		movlw		0x1a
		movwf		delay_b
		movlw		0xff
		movwf		delay_a
		call		mirror_data
		return

service_fl1:	decfsz		delay_a,f
		return
		decfsz		delay_b,f
		return
		btfsc		key_flag,2
		goto		servicex1
		bsf		key_flag,2
		movlw		0x0a
		movwf		delay_b
		movlw		0xff
		movwf		delay_a
		call		test_stop 
		call		mirror_data
		return
;***************************************************
;***************************************************
move_uparrow

⌨️ 快捷键说明

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