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

📄 pic16f877-led.asm.bak

📁 pic16f877的led显示的源程序
💻 BAK
字号:
   		LIST 	P=16f877A
  		#INCLUDE <P16f877A.INC>   
;***************************************************
#define	dis1	0x7f
#define	dis2	0xBf
#define	dis3	0xDf
#define	dis4	0xEf
#define	dis5	0xf7
#define	dis6	0xfB	
;***************************************************
R1		equ	0x21
R2		equ	0x22
R3		equ	0x23
count	equ	0x24
disnum	equ	0x25
numg	equ	0x26
nums	equ	0x27
numb	equ	0x28
numq	equ	0x30
numw	equ	0x30
numsw	equ	0x31
num		equ	0x32
ADR		equ	0x33
;***************************************************
        org   	0x0 
		nop
        goto  	START
;-------------------PROGRAM------------------------  
        org  	0X20
START:
		banksel TRISD
		movlw	0x00
		movwf   TRISD
		movwf	TRISB
		movlw	0xff
		movwf	TRISC
		banksel PORTD
		movlw	0xff
		movfw	PORTD
		clrf	count
		clrf	num
		clrf	numb
		clrf	nums
		clrf	numg
	goto	xx
tt:
		movlw	.1
		call	GetDisNum
		movwf	PORTB
		movlw	dis1
		movwf	PORTD
		call	delay10ms
		movlw	.2
		call	GetDisNum
		movwf	PORTB
		movlw	dis2
		movwf	PORTD
		call	delay10ms
		movlw	.3
		call	GetDisNum
		movwf	PORTB
		movlw	dis3
		movwf	PORTD
		call	delay10ms
		movlw	.4
		call	GetDisNum
		movwf	PORTB
		movlw	dis4
		movwf	PORTD
		call	delay10ms
		movlw	.5
		call	GetDisNum
		movwf	PORTB
		movlw	dis5
		movwf	PORTD
		call	delay10ms
		movlw	.6
		call	GetDisNum
		movwf	PORTB
		movlw	dis6
		movwf	PORTD
		call	delay10ms
		goto	tt		
xx:
		call	AD_trans
		movfw	ADR
		movwf	num
		call	bintobcd
		call	displayBCD
		goto	xx
;***************************************************
;======================按键子程序===================             
;***************************************************
key:	
		btfsc	PORTC,0
		goto	knext1
		call	delay10ms
		btfsc	PORTC,0
		goto	knext1
		goto	key_back	
knext1:
		btfsc	PORTC,1
		goto	knext2
		call	delay10ms
		btfsc	PORTC,1
		goto	knext2
		call	key_add
knext2:
		btfsc	PORTC,2
		goto	knext3
		call	delay10ms
		btfsc	PORTC,2
		goto	knext3
		call	key_sub
knext3:
		btfsc	PORTC,3
		goto	knext4
		call	delay10ms
		btfsc	PORTC,3
		goto	knext4
		call	key_cof
		goto	key
knext4:
		return
key_back:
		return
key_add:
		incf	count,f
		return	
key_sub:
		decf	count,f
		return
key_cof:
		return
;***************************************************
;-------------------显示程序------------------------
;***************************************************
displayBCD:
		movfw	numb
		call	GetDisNum
		movwf	PORTB
		movlw	dis4
		movwf	PORTD
		call	delay10ms
		movfw	nums
		call	GetDisNum
		movwf	PORTB
		movlw	dis5
		movwf	PORTD
		call	delay10ms
		movfw	numg
		call	GetDisNum
		movwf	PORTB
		movlw	dis6
		movwf	PORTD
		call	delay10ms
		return
;*************************************************************
;*****************共阴极数码管BCD码显示***********************
GetDisNum:
		addwf	PCL,f
		retlw	#3F
		retlw	#06
		retlw	#5B
		retlw	#4F
		retlw	#66
		retlw	#6D
		retlw	#7D
		retlw	#07
		retlw	#7F
		retlw	#67	
;***************************************************
;-------------------二进制转BCD码子程序-------------
;***************************************************
bintobcd:
		clrf	numg
		clrf	nums
		clrf	numb
		movlw	64H
BAI		subwf	num,f	;NUM-100>0,则NUMB+1
		btfss	STATUS,0
		goto	BAI1
		incf	numb,f
		goto	BAI
BAI1	addwf	num,f
		movlw	0ah
SHI		subwf	num,f
		btfss	STATUS,0
		goto	GE
		incf	nums,f
		goto	SHI
GE		addwf	num,f
		movfw	num
		movwf	numg
		return
;***************************************************
;-------------------AD采集子程序--------------------
;***************************************************
adinit:
		nop
AD_trans:
		BSF   		STATUS,5       
 		MOVLW 		0EH
 		MOVWF 		ADCON1          ;设RA0为模拟输入,采样结果左对齐
 		BCF   		STATUS,5
 		MOVLW 		41H
 		MOVWF 	    ADCON0          ;选择A/D转换时钟,选择采样通道0,开采样允许位
 		BSF   		ADCON0,2        ;采样开始
LOOP_AD:
		NOP 
		BTFSC 		ADCON0,2        ;采样结束?
 		GOTO  		LOOP_AD         ;否,转LOOP_AD
 		MOVF  		ADRESH,0        ;是,读取采样结果
 		MOVWF 		ADR      		
 		RETURN		
;***************************************************
delay10ms:
		movlw	0x02
		movwf	R2
LOOP01:
		movlw	0xfe
		movwf	R1
LOOP02:	
		nop
		decfsz	R1,1
		goto	LOOP02
		decfsz	R2,1
		goto	LOOP01
		return
;***************************************************
delay1S:
		MOVLW	#0AH ;1s DELAY
		MOVWF  	R3
LOOP1:  MOVLW 	#64H  
		MOVWF  	R2
LOOP2:	MOVLW 	#0FAH
		MOVWF  	R1
LOOP3:	NOP
		DECFSZ 	R1,1
		GOTO   	LOOP3
		DECFSZ 	R2,1	
		GOTO   	LOOP2
		DECFSZ 	R3,1
	    GOTO   	LOOP1
		RETURN	
;*************************************************************
        END   

⌨️ 快捷键说明

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