Scan kód stlačenej klávesy uloží podprogram na vrchol posuvného registra. Po kompletnom zoscanovaní vloží počet stlačených kláves do registra "PocTlac". Jednoduchou kontrolou tohto registra môžeme vylúčiť chybné stlačenie na klávesnici.
Program počíta s pripojením klávesnice k portu P2 (P2.0-P2.3 riadky, P2.4-P2.7 stĺpce). Pripojenie portu je možné meniť v konštantách "keybPort" a usporiadanie riadky - stĺpce v časti "keyScan". Scan kódy jednotlivých tlačítok je možné meniť v časti "keyCode" a veľkosť posuvného registra v "fifiLenght".
$ TITLE(Key/8xc51/1.0) ;*********************************************************************** ;* Telo programu na odskusanie ;* stack segment idata rseg stack ds 10h cseg at 00 org 0 using 0 mov sp,#Stack call keyb jmp 00 ;*********************************************************************** ;* Copyright (c) 2002 Garaj ;* Author: Dalibor Garaj ;*********************************************************************** ;*Tento program sluzi na zosnimanie stlacenej klavesy na maticovej ;*klavesnici. ;* ;* Pouzitie programu: ;*--------------------------- ;*Podprogram detekuje stlacenu klavesu a jej ScanKod vlozi do FIFO ;*registra a incrementuje register poctu stlacenych tlacitok. Nakoniec ;*nastavi port klavesnice na zoskenovanie dalsieho riadku. Podprogram ;*pri jednom volani zoskenuje jeden riadok, takze na kompletne ;*zoskenovanie je nutne ho volat pre 4 riadky 4krat. ;* ;*********************************************************************** ;* Konstanty ;*--------------------------- keybPort equ p2 ;* ;*********************************************************************** ;* Registre ;*--------------------------- KeybData segment data rseg KeybData pocTlac: ds 1 ;pocet stlacenych tlacitok pocTlacPrac: ds 1 ;pracovny register riadok: ds 1 ;cislo aktivneho riadku ;* ;*********************************************************************** ;* Nazov: Keyb ;* Popis: Obsluha maticovej klavesnice ;* Funkcia: Nastavuje, cita port a dekoduje stlacenu klavesu ;* Podprogramy: FIFO ;* Vstupy: Port klavesnice ;* Vystupy: FIFO Data ;* Registre: Acc,b,R1,DPTR ;*--------------------------- KeybCode segment code rseg keybCode keyb: mov a,keybPort ;nacitaj port klavesnice cpl a ;neguj anl a,#0f0h ;vymaskuj jz keybInit ;dalsi riadok keyb1: mov r1,#4 mov a,keybPort ;nacitaj port klavenice cpl a anl a,#0fh ;vymaskuj data keybLoop: rrc a ;rotuj jc KeybDekod ;ak je stlacena dekoduj keybLoop1: djnz r1,keybLoop ;test dalsieho tlacitka v riadku ;bolo posledne inc riadok ;nastav dalsi riadok mov a,riadok cjne a,#4,keybAll ;je posledny? keybInit: mov riadok,#0 ;na stav prvy riadok mov pocTlac,pocTlacPrac mov pocTlacPrac,#0 ;vynuluj pracovny register keybAll: mov a,riadok ;nastav port pre dalsie citanie mov dptr,#keyScan movc a,@a+dptr mov keybPort,a keybEnd: ret keyScan: db 11101111b ; db 11011111b db 10111111b db 01111111b keybDekod: push acc ;zalohuj aktualny stav riadku mov dptr,#keyCode ;nastav zaciatok dekodovacej tabulky mov a,Riadok ;nacitaj cislo riadku mov b,#4 mul ab ;uprav pre dekodovanie add a,r1 ;pripocitaj aktualne tlacitko movc a,@a+dptr ;vycitaj z tabulky call Fifo ;uloz do Fifo registra inc pocTlacPrac ;pripocitaj pocet stlacenych tlacitiek pop Acc ;do acc aktulany stav riadku jmp keybLoop1 keyCode: db 0 db 00h,00h,00h,00h ;kody tlacitiek db 33h,36h,39h,42h db 31h,34h,37h,41h db 32h,35h,38h,30h ;* ;*********************************************************************** ;* Nazov: FIFO ;* Popis: Posuvny register ;* Funkcia: Nove data ulozi na prvu adresu a ostatne posunie ;* Podprogramy: Ziadne ;* Vstupy: Acc - Nove data ;* Vystupy: Acc - Najstarsie data ;* Registre: R0,b,acc ;*--------------------------- ;* fifoLenght equ 5 ;dlzka Fifo registra ;* FifoData segment data rseg FifoData ds fifoLenght ; ;* FifoCode Segment Code rseg FifoCode FIFO: mov r0,#fifoData ;do r0 adresa FIFO mov b,#fifoLenght ;do b dlzka FIFO FifoLoop: xch a,@r0 ;vymen data medzi Acc a inc r0 ;dalej djnz b,FifoLoop ;koniec? ret ;ano ;* ;*********************************************************************** ;* end
DOWNLOAD & Odkazy
- Program ke stažení - key.asm