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

📄 pic16f877-led.asm

📁 pic16f877的led显示的源程序
💻 ASM
字号:
   		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   	0x00 
	nop
        goto  	START
        org	0x04
        retfie
;*****************共阴极数码管BCD码显示***********************
GetDisNum:
	addwf	PCL,f
	retlw	#3F	;0
	retlw	#06	;1
	retlw	#5B	;2
	retlw	#4F	;3
	retlw	#66	;4
	retlw	#6D	;5
	retlw	#7D	;6
	retlw	#07	;7
	retlw	#7F	;8
	retlw	#67	;9
;***************************************************
;-------------------PROGRAM------------------------  
        org  	0X40
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码子程序-------------
;***************************************************
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 + -