Seriál - PIC16F84 - 19 - Klávesnice generující kódy
03. 11. 07 - 09:13. Napsal Jiří Chytil. Přečteno 4632x. 4 komentáře
Klávesnice generující kódy můžeme rozdělit na klávesnice generující paralelní kód a klávesnice generující sériový kód. Zpracování paralelního kódu je pro nás zatím mnohem jednodušší.
Jedná se o to, že čteme kód na několika pinech najednou (klávesnici může být vyhrazen různý počet pinů odvíjející se většinou od počtu tlačítek; čím více tlačítek tím více bude vodičů).
Zpracování takového kódu už by nám nemělo činit problémy. Kód ovšem může být různý od BCD přes 2 z 5 až kdoví kam. Na nás je potom vytvořit takový kód, který umožní uPčku s takovou klávesnicí pracovat. Na našem příkladu použijeme klávesnici, která generuje kód na čtyři vodiče a to kód od 0000 do 1111, může tedy obsahovat až 15 tlačítek. Kód 0000 je generován, když není stisknuto žádné tlačítko. A zareagovaní na stisk tlačítka nám ukazuje tento program.
INCLUDE "P16F84A.INC" LIST P=16F84A, R=DEC __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC ;------------------------------------------------------------- c1 EQU h'20' ;proměnné pro cykly c2 EQU h'21' ;------------------------------------------------------------- BSF STATUS,RP0 ;inicializace uP MOVLW b'00000000' MOVWF TRISB MOVLW b'00011111' MOVWF TRISA BCF STATUS,RP0 zacatek MOVF PORTA,0 ;čekání na nenulový BTFSC STATUS,Z ;kód od klávesnice GOTO zacatek MOVWF PORTB ;přesun informací na PORTB CALL cekej ;zrušení zákmitů keyup MOVF PORTA,0 ;čekání na nulový BTFSS STATUS,Z ;kód od klávesnice GOTO keyup GOTO zacatek cekej MOVLW 3 ;podprogram prodloužení MOVWF c2 wait2 MOVLW 255 MOVWF c1 wait1 DECFSZ c1,1 GOTO wait1 DECFSZ c2,1 GOTO wait2 RETURN ;návrat z podprogramu END ;konec programu
Tento program prozatím jen přenese vstup zPORTA na výstup PORTB. Ale to nám nestačí, mi podle různých kódu provedeme různou činnost, jak ukazuje následující kód.
INCLUDE "P16F84A.INC"
LIST P=16F84A, R=DEC
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
;-------------------------------------------------------------
c1 EQU h'20' ;proměnné pro cykly
c2 EQU h'21'
temp EQU h'22'
;-------------------------------------------------------------
BSF STATUS,RP0 ;inicializace uP
MOVLW b'00000000'
MOVWF TRISB
MOVLW b'00011111'
MOVWF TRISA
BCF STATUS,RP0
zacatek MOVF PORTA,0 ;čekání na nenulový
BTFSC STATUS,Z ;kód od klávesnice
GOTO zacatek
MOVWF temp ;přesun informací do temp
CALL dothis
GOTO zacatek
dothis MOVLW b'00000001' ;konstanta pro odečtení
SUBWF temp,0 ;odečtení
BTFSC STATUS,Z ;testování nulové hodnoty
CALL blik ;pokud je hodnota nulová
;provede se skok na
;funkci blik
;pokud ne volání se
;přeskočí a testuje se
;další hodnota
MOVLW b'00000010' ;kód se krom hodnot opakuje
SUBWF temp,0
BTFSC STATUS,Z
CALL blik2
MOVLW b'00000011'
SUBWF temp,0
BTFSC STATUS,Z
CALL blik3
MOVLW b'00000100'
SUBWF temp,0
BTFSC STATUS,Z
CALL svit
MOVLW b'00000101'
SUBWF temp,0
BTFSC STATUS,Z
CALL svitl
MOVLW b'00000110'
SUBWF temp,0
BTFSC STATUS,Z
CALL svitl
MOVLW b'00000111'
SUBWF temp,0
BTFSC STATUS,Z
CALL svitl
MOVLW b'00001000'
SUBWF temp,0
BTFSC STATUS,Z
CALL svitl
RETURN
;---- A TAK BY SE DALO POKRAČOVAT DÁL A DÁL --------------------
blik MOVLW b'11111111' ;různá zobrazovací funkce
MOVWF PORTB
CALL cekej
CLRF PORTB
RETURN
blik2 MOVLW b'00000011'
MOVWF PORTB
CALL cekej
CLRF PORTB
RETURN
blik3 MOVLW b'00000111'
MOVWF PORTB
CALL cekej
CLRF PORTB
RETURN
svit MOVLW b'11111111'
MOVWF PORTB
CALL cekej
CALL cekej
CLRF PORTB
RETURN
svitl MOVLW b'11111111'
MOVWF PORTB
CALL cekej
CALL cekej
CALL cekej
CALL cekej
CLRF PORTB
RETURN
cekej MOVLW 255 ;podprogram čekání
MOVWF c2
wait2 MOVLW 255
MOVWF c1
wait1 DECFSZ c1,1
GOTO wait1
DECFSZ c2,1
GOTO wait2
RETURN ;návrat z podprogramu
END ;konec programu
Program provádí rozpoznání pomocí kousku kódu. Kód je velice jednoduchý, je založen na nulovém výsledku. Máme-li totiž nějaké číslo a toto od něj odečteme získáme nulový výsledek, což otestováním Zero bitu velice snadno zjistíme. Klávesnice generující sériový kód se do této práce nevlezou, ale ke konci se podíváme na jejich podstatu a tou je sériový přenos.
Novinky Další novinky
Anketa
Jaký obchod preferujete při nákupu součástek?
TME
GES
GME
Farnell
SOS electronic
TIPA
EZK
PS Electronic
Mouser
Buček
Denkl Electronic
FK Technics
Hadex
Conrad
Jiný český
Jiný zahraniční
Poslední komentáře