Jít k navigaci - Jít k vyhledávání


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
Kód: Assembler pro PIC16F84A - Snímání vztupu z klávesnice

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
Kód: Assembler pro PIC16F84A - Zpracování vstupu z klávesnice

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.



Autor
Jiří Chytil

Jiří Chytil24 let

Šéfredaktor 8bitu.cz. V současné době je studentem prvního ročníku magisterského studia na Fakultě elektrotechické na VUT v Brně. Mezi jeho koníčky patří elektrotechnika, bastlení, programování a hudba. Pracuje na částečný úvazrek ve společnosti Honeywell HTS ACS.


Novinky Další novinky

[10. 03.]  Tak jsem pro Vás připravil novou anketu. A snažím se pokračovat na projektu jehož výsledky bych zde rád zveřejnil, ale poněkud mě brzdí diplomová práce a práce.
[30. 01.]  Omlouvám se za nečinnost způsobenou značným nedostatkem času. Nevím, ale jestli se mi to podaří změnit. To víte, člověk stárne a jeho čas je potřeba jinde než na internetu.
[07. 03.]  Po dlouhé době jsme pro vás přichystali novou anketu - najdete ji níže v pravém panelu.
[12. 12.]  Zajímavý počin v oblasti měřící techniky jsou Real-time spektrální analyzátory - odkaz
[07. 12.]  Sice již starší video, ale stále mě uchvacuje. Výroba elektronek "doma" - odkaz

Reklama

Morphy Richards elektronika Okruháři.cz

Programujte.com

Léčivé obrazy - enkaustika Lenka Blažíková

Keramika Věra Coufalová - užitková keramika

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í