PIC單片機(jī)按鍵檢測單雙擊、長短按識(shí)別_第1頁
PIC單片機(jī)按鍵檢測單雙擊、長短按識(shí)別_第2頁
PIC單片機(jī)按鍵檢測單雙擊、長短按識(shí)別_第3頁
PIC單片機(jī)按鍵檢測單雙擊、長短按識(shí)別_第4頁
PIC單片機(jī)按鍵檢測單雙擊、長短按識(shí)別_第5頁
已閱讀5頁,還剩21頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、硬件PIC16F883芯片,10個(gè)按鍵,4位數(shù)碼管。【芯片引腳】 【數(shù)碼管連接】PORTC連接數(shù)碼管的8段LED,PORTA<3:0>連接數(shù)碼管的4個(gè)共陰極(控制選通位)?!景存I連接】 按鍵掃描程序在上一篇博文里面有說明,現(xiàn)在還是使用上面的掃面方式(代碼都是一樣的)。用記錄按鍵按下和彈起的時(shí)間判斷是不是長按和雙擊。TMR1設(shè)置,1:4分頻、1:8預(yù)分頻,計(jì)數(shù)周期為8uS。TMR1溢出一次時(shí)間為0.524288 S keypress記錄TMR1溢出的次數(shù)。keypress大于等于2就跳出檢測,認(rèn)為他是長按(時(shí)間為1.048576S)。keypress<1 且

2、keyrelease <1 ,再次按下的keypress<1就認(rèn)為是雙擊。如下圖:KP按鍵按下,KR按鍵彈起?!緦?shí)現(xiàn)代碼】?1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131

3、141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132

4、142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133

5、143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134

6、144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135

7、145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136

8、146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137

9、147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138

10、148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139

11、14915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992#include<p16f883.inc>    _CONFIG 

12、   _CONFIG1, _LVP_OFF & _FCMEN_ON & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT _CONFIG    _CONFIG2, _WRT_OFF & _BOR21V    udata_shr counter res 1 ;計(jì)數(shù)

13、個(gè)位 counter0 res 1 ;計(jì)數(shù)十位 counter1 res 1 ;掃描按鍵變量 counter2 res 1 ;延時(shí)程序微調(diào)參數(shù) key_state res 1 ;按鍵狀態(tài) keynum res 1 ;按鍵標(biāo)號(hào) swap res 1 ;確認(rèn)按鍵轉(zhuǎn)換值 keypress res 1 keypressbak res 1 keyrelease res 1 LED1 res 1 LED2 res 1 LED3 res 1 LED4 res 1 

14、60;   UDATA counter3 res 1 counter4 res 1 sign res 1    reset code 0x0000 pagesel start goto start    int_vector code 0x0004 code start banksel ANSEL ;設(shè)置PORTA為數(shù)字模式 clrf ANSEL banksel ANSELH ;設(shè)置PO

15、RTB為數(shù)字模式 clrf ANSELH banksel TRISB ;設(shè)置PORTB為輸入模式 movlw b'11111111' movwf TRISB banksel WPUB ;設(shè)置PORTB弱上拉 movlw b'11111111' movwf WPUB banksel OPTION_REG movlw b'01000101' ;TMR0 64分頻 movwf OPTION_REG banksel T1CON movl

16、w b'10010001' ;打開TMR1,設(shè)置1:8預(yù)分頻,內(nèi)部時(shí)鐘源1:4分頻 movwf T1CON banksel TRISA ;設(shè)置PORTA<3:0>為輸出,接數(shù)碼管的共陰極 movlw b'11110000' movwf TRISA banksel PORTA clrf PORTA banksel TRISC movlw b'00000000' ;設(shè)置PORTC為輸出,接8段數(shù)碼管 movwf TRISC clrf cou

17、nter1    loop movlw HIGH Table1 movwf PCLATH movf counter1,0 call Table1 banksel TRISB movwf TRISB movf counter1,0 call Table1 banksel PORTB movwf PORTB movf PORTB,0 movwf key_state movlw b'11001000' io

18、rwf key_state,1 movf counter1,0 call Table1    xorwf key_state,0 movwf swap comf swap,1 incfsz swap,1 goto case1    incf counter1,1 movf counter1,0 call Table1 banksel TRISB movwf TRISB movf counter1,0

19、0;call Table1 banksel PORTB movwf PORTB movf PORTB,0 ;讀取I/O狀態(tài) movwf key_state movlw b'11001000' iorwf key_state,1 movf counter1,0 call Table1 xorwf key_state,0 movwf swap comf swap,1 incfsz swap,1 goto case2   &#

20、160;incf counter1,1 movf counter1,0 call Table1 banksel TRISB movwf TRISB movf counter1,0 call Table1 banksel PORTB movwf PORTB movf PORTB,0 ;讀取I/O狀態(tài) movwf key_state movlw b'11001000' iorwf key_state,1 movf counter1,0 call

21、 Table1 xorwf key_state,0 movwf swap comf swap,1 incfsz swap,1 goto case3    incf counter1,1 movf counter1,0 call Table1 banksel TRISB movwf TRISB movf counter1,0 call Table1 banksel PORTB movwf PORTB movf PORT

22、B,0 ;讀取I/O狀態(tài) movwf key_state movlw b'11001000' iorwf key_state,1 movf counter1,0 call Table1 xorwf key_state,0 movwf swap comf swap,1 incfsz swap,1 goto case4 goto continue    case1 btfsc key_state,4 goto ke

23、y2 movlw d'1' movwf keynum call DealKeyPress goto continue key2 btfsc key_state,2 goto key3 movlw d'2' movwf keynum call DealKeyPress goto continue key3 btfsc key_state,1 goto key4 movlw d'3' movw

24、f keynum call DealKeyPress goto continue key4 btfsc key_state,0 goto continue movlw d'4' movwf keynum call DealKeyPress goto continue             case2 - 下面代碼實(shí)現(xiàn)K10K8K5的按鍵處理

25、 btfsc key_state,2 goto key8 movlw d'10' movwf keynum call DealKeyPress goto continue - 處理K8 key8 btfsc key_state,1 goto key5 movlw d'8' movwf keynum call DealKeyPress goto continue - 處理K5 key5&

26、#160;btfsc key_state,0 goto case3 movlw d'5' movwf keynum call DealKeyPress goto continue    case3 - 處理K6/K9 btfsc key_state,1 goto key6 movlw d'9' movwf keynum call DealKeyPress goto continue k

27、ey6 btfsc key_state,0 goto case4 movlw d'6' movwf keynum call DealKeyPress goto continue case4 - 處理K7 btfsc key_state,0 goto continue movlw d'7' movwf keynum call DealKeyPress    continue c

28、all display clrf counter1 goto loop       - 按鍵去抖,約8mS delay movlw d'4' movwf counter2 LOOP2 banksel TMR0 clrf TMR0 LOOP1 banksel INTCON btfss INTCON,T0IF goto LOOP1 bcf INTCON,T0IF d

29、ecfsz counter2,1 goto LOOP2 return    delay2 incfsz counter3,1 goto delay2 return    - 按鍵處理程序  DealKeyPress clrf LED1 clrf LED2 clrf LED3 clrf LED4 call delay    banksel TMR1H

30、 clrf TMR1H banksel TMR1L clrf TMR1L clrf keypress presstime banksel PIR1 btfss PIR1,TMR1IF goto next bcf PIR1,TMR1IF incf keypress movlw d'2' subwf keypress,0 banksel STATUS btfsc STATUS,C goto longpress next

31、60;movf counter1,0 call Table1 banksel TRISB movwf TRISB banksel PORTB movwf PORTB movf PORTB,0 ;讀取I/O狀態(tài) movwf key_state movlw b'11001000' iorwf key_state,1 movf counter1,0 call Table1 xorwf key_state,0 movwf swap comf swa

32、p,1 incfsz swap,1 goto presstime  call delay    banksel TMR1H clrf TMR1H banksel TMR1L clrf TMR1L clrf keyrelease releasetime banksel PIR1 btfss PIR1,TMR1IF goto next1 bcf PIR1,TMR1IF incf keyrelease movlw

33、 d'1' subwf keyrelease,0 banksel STATUS btfsc STATUS,C goto click next1 movf counter1,0 call Table1 banksel TRISB movwf TRISB banksel PORTB movwf PORTB movf PORTB,0 ;讀取I/O狀態(tài) movwf key_state movlw b'11001000' i

34、orwf key_state,1 movf counter1,0 call Table1 xorwf key_state,0 movwf swap comf swap,1 incfsz swap,1 goto over goto releasetime over call delay banksel TMR1H clrf TMR1H banksel TMR1L clrf TMR1L clrf keypress presstime1

35、60;banksel PIR1 btfss PIR1,TMR1IF goto next2 bcf PIR1,TMR1IF incf keypress movlw d'1' subwf keypress,0 banksel STATUS btfsc STATUS,C goto click next2 movf counter1,0 call Table1 banksel TRISB movwf TRISB banksel PORTB

36、 movwf PORTB movf PORTB,0 ;讀取I/O狀態(tài) movwf key_state movlw b'11001000' iorwf key_state,1 movf counter1,0 call Table1 xorwf key_state,0 movwf swap comf swap,1 incfsz swap,1 goto presstime1 movf keynum,0    

37、0;               ;雙擊 movwf LED1 movlw d'10' movwf LED2 incf counter goto back longpress                 

38、60;       ;長按 movf keynum,0 movwf LED2 movlw d'10' movwf LED1 goto back click                         ;單擊 m

39、ovf keynum,0 movwf LED1 movwf LED2    back call CountNum return    - 按鍵計(jì)數(shù)     CountNum movlw d'9' subwf counter,0 banksel STATUS btfsc STATUS,C goto add incf counter g

40、oto over1 add incf counter0 clrf counter movlw d'10' subwf counter0,0 banksel STATUS btfsc STATUS,C goto clear goto over1 clear clrf counter0 over1 movf counter,0 movwf LED4 movf counter0,0 movwf LED3 return

41、             - 顯示數(shù)碼管  display    banksel PORTA movlw b'11111110' movwf PORTA movf LED1,0 call Table3 banksel PORTC movwf PORTC call delay2   &

42、#160;banksel PORTA movlw b'11111101' movwf PORTA movf LED2,0 call Table3 banksel PORTC movwf PORTC call delay2    banksel PORTA movlw b'11111011' movwf PORTA movf LED3,0 call Table3 banksel PORTC movwf PORTC call delay2    banksel PORTA movlw b'11110111' movwf PORTA movf LED4,0 call Table3 banksel PORTC movwf POR

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論