專注差異化嵌入式產(chǎn)品解決方案 給智能產(chǎn)品定制注入靈魂給予生命
提供開發(fā)工具、應(yīng)用測試 完善的開發(fā)代碼案例庫分享
從全面的產(chǎn)品導入到強大技術(shù)支援服務(wù) 全程貼心伴隨服務(wù),創(chuàng)造無限潛能!
提供新的芯片及解決方案,提升客戶產(chǎn)品競爭力
提供最新的單片機資訊,行業(yè)消息以及公司新聞動態(tài)
;******************單鍵控制8個LED左閃程序******************
;1、按鍵有暫停功能(定住其中1個LED常亮)
;2、按鍵有開啟功能(在暫停的狀態(tài)下,開啟后LED繼續(xù)閃爍)
;3、按鍵有開機功能(在關(guān)機狀態(tài)下,開機,程序從頭開始)
;4、按鍵有關(guān)機功能(程序在運行狀態(tài)還是在暫停狀態(tài),都可關(guān)機)
;************************************************
list p=16f877a
include "p16f877a.inc"
;***************定義變量*************************
flag_A equ 20h
flag_B equ 21h
x equ 22h
y equ 23h
z equ 24h
;***************主程序***************************
main
org 000h
nop
bsf STATUS,RP0
movlw 00h
movwf TRISC
movlw 0ffh
movwf TRISB
bcf STATUS,RP0
movlw 01h
movwf PORTC
call delay1
bcf flag_A,0
bcf flag_B,0
bcf STATUS,0
main_loop btfss PORTB,0
call check
rlf PORTC,w
movwf PORTC
call delay1
btfss STATUS,0
goto main_loop
goto main
;****************按鍵處理*************************
check
call delay2
check_loop1 btfsc PORTB,0
goto check_loop1
check_loop2 btfss PORTB,0
goto check_loop5
call delay2 ;延時12ms
;**********暫停**********
btfss PORTB,0 ;\
goto check_loop5 ;轉(zhuǎn)向關(guān)機 ; \
check_loop3 btfsc flag_A,0 ; \
goto check_loop7 ;轉(zhuǎn)向開機 ; \
btfsc flag_B,0 ; \
goto check_loop8 ;轉(zhuǎn)向開啟 ; /暫停
comf flag_B,f ; /
check_loop4 btfsc PORTB,0 ; /
goto check_loop4 ; /
goto check ;/
;**********關(guān)機**********
check_loop5
call delay3 ;延時589ms ;\
btfsc PORTB,0 ; \
goto check_loop3 ; \
call delay4 ; \
bsf flag_A,0 ; \
movlw 0 ; \
movwf PORTC ; \
check_loop11 btfss PORTB,0 ; /關(guān)機程序
goto check_loop11 ; /
check_loop6 btfsc PORTB,0 ; /
goto check_loop6 ; /
movlw 01h ; /
movwf PORTC ; /
goto check ;/
;**********開機**********
check_loop7
bcf flag_A,0 ;\
movf PORTC,w ; \
movwf PORTC ; 開機程序
call delay1 ; /
goto check_loop9 ;/
;**********開啟**********
check_loop8
comf flag_B,f ;\
movf PORTC,w ; \
movwf PORTC ; /開啟程序
call delay1 ;/
;**********返回**********
check_loop9 return
;****************閃燈延時196ms處理程序**********************
delay1
movlw 0FFh
movwf x
delay1_loop0 movlw 0FFh
movwf y
delay1_loop1 decfsz y,1
goto delay1_loop1
decfsz x,1
goto delay1_loop0
return
;****************按鍵延時12ms處理程序**********************
delay2
movlw 10h
movwf x
clrf y
delay2_loop0 decfsz y,1
goto delay2_loop0
decfsz x,1
goto delay2_loop0
return
;****************按鍵延時589ms處理程序**********************
delay3
movlw 0FFh
movwf x
movlw 03h
movwf z
delay3_loop0 movlw 0FFh
movwf y
delay3_loop1 decfsz y,1
goto delay3_loop1
decfsz x,1
goto delay3_loop0
decfsz z,1
goto delay3_loop0
return
;****************按鍵延時1500ms處理程序**********************
delay4
movlw 0FFh
movwf x
movlw 08h
movwf z
delay4_loop0 movlw 0FFh
movwf y
delay4_loop1 decfsz y,1
goto delay4_loop1
decfsz x,1
goto delay4_loop0
decfsz z,1
goto delay4_loop0
return
end