DATORTEKNIK. Tangentbord, knappsatser och deras avkodning



Relevanta dokument
Nallelek Lärarvägledning

SLALOMINGÅNGAR hur svårt kan det vara?

DATORTEKNIK. Laboration D280 - D285. För Basic Stamp II

Switch Driver 5. Programvara för Radio Switch, JoyBox och JoyCable. Sensory Software

Programmering av stegmotorer ett miniprojekt i samarbete med Svensk Maskinprovning

Exempeluppgift i Logikstyrning. 1 Inledning. 2 Insignaler och utsignaler

Digital Display VDS / Bus2

Digitala Projekt (EITF11)

RödGrön-spelet Av: Jonas Hall. Högstadiet. Tid: minuter beroende på variant Material: TI-82/83/84 samt tärningar

Får jag be om ordet!

4:4 Mätinstrument. Inledning

Föreläsningsanteckningar 3. Mikroprogrammering II

Teckentavlor. Inställning av styrsätt med programvalsratten

Systemkonstruktion SERIEKOMMUNIKATION

- kvalitet till rätt pris. version krafer takskjutport modell Nordic

MONTERINGSANVISNING & BRUKSANVISNING för CARGARD Portstyrning RDC 30 / RDC 120

Programmeringsuppgifter 1

Objektorienterad programmering D2

DATORTEKNIK. Laboration D280 - D285. För Basic Stamp II

Ickelinjära ekvationer

ClaroRead Plus Mac Manual. Artikel.nr

ENKEL Programmering 3

Chapter 3: Using Classes and Objects

BRUKSANVISNING APPlicator

Handbok för knappexpansionsmodul (KEM) för IP-telefon. BCM Business Communications Manager

Grunderna i stegkodsprogrammering

En handledning för studerande på Högskolan Kristianstad

Positiv Ridning Systemet Arbetar min häst korrekt? Av Henrik Johansen

Elektroteknik MF1016 föreläsning 9 MF1017 föreläsning 7 Mikrodatorteknik

LABORATIONSINSTRUKTION

Datakommunikation med IR-ljus.

Peter Ottosson 31/ Introduktionskurs i datateknik II1310

Digitala Projekt(EITF40) - Larm

LEGO Mindstorm-robot

Nordline. Monteringsanvisning Garageport. Lertagsgatan Hallsberg

Pulsmätare med varningsindikatorer

Snabbguide AlphaSmart NEO2

Laboration D184. ELEKTRONIK Digitalteknik. Sekvensnät beskrivna med VHDL och realiserade med PLD

Programmering av Thangram portregister System XIP (VA/08)

Komma igång med Eventor

En ideal op-förstärkare har oändlig inimedans, noll utimpedans och oändlig förstärkning.

Sätt att skriva ut binärträd

Bruksanvisning DAB One

Programmering A C# VT Ett kompendie över Programmering A (50p) i c# Stefan Fredriksson

Att använda pekare i. C-kod

Bruksanvisning KABA MAS AUDITCON KABA MAS HAMILTON Modell 100, 200, 400, 50 och 52

Färgklövern. Färgklövern är gjord 1998 i samarbete mellan Datateket i Linköping och Hargdata AB i Linköping.

Bättre Självförtroende NU!

JP JOYSTICKS PJP-008 & PJP-014

Installatörs- och användarhandbok DI L

Rådgivningsbesökets utmaningar. Huvudbudskap: Varför är det värt att prata om samtal?

Programmeringsguide Picolo Porttelefon

EM2050 RotoBolt Elektroniskt Svängregellås. BRUKSANVISNING för ANVÄNDARE och MANAGER_EL1+9/S (EM2050) Att Öppna: Exempel: jjjjjj.

S ANSLUTNINGAR KOPPLINGSPLINT CN1

n-abler PRO JOYSTICK Handledning

Innehåll. WordWall låter dig som pedagog skapa övningar, aktiviteter och presentationer med några enkla klick.

Digitalt lärande och programmering i klassrummet. Introduktionsworkshop - Bygg ett akvarium i Scratch

Kursmaterial D-60 träning Tema: Timing

Fotbollsskolan. skott.indd

Inte någon komplett anläggning så, utan specifika smarta styrningar/lösningar på problem som ni kommit på?

Anpassning av Windows XP

D/A- och A/D-omvandlarmodul MOD687-31

INSTRUKTIONSMANUAL QHW+

Åtkomst och användarhandledning

ViTex snabbguide. 1. Inläsning till ViTex från scanner eller PDF Läs in text via scanner Läs in text från en JPEG-bild eller ett PDF-dokument

Föreläsning 3.1: Datastrukturer, en översikt

Tentamen i. för D1 m fl, även distanskursen. fredag 13 januari 2012

Beskrivning av porthantering i mikroprocessorn SAM3U som används på vårt labkort SAM3U- EK.

Fortsättningskurs i programmering F 2. Algoritmer i Programutveckling Hugo Quisbert Problemexempel 1

Seriehantering. [En enkel guide för hur du som serieadministratör använder SVEMO TA.]

2. Komma igång Skapa grupper och elever Skriv också ut sidan 13 så att eleverna har en snabbguide till programmet.

Läs detta innan du fortsätter, eller skriv ut det, klicka runt lite och läs samtidigt.

PDA-applikationer med.net

Space Invaders - Slutrapport

Datorlära 3 Octave Workspace ovh mijlö Skriva text på skärmen Värdesiffror Variabler och typer Strängar Makro Vektorer

2011 Studsvik AB PANORAMA-BILDTAGNING. Tony Björkman

Sockets: server. with Ada.Command_Line; use Ada.Command_Line; with Ada.Exceptions; use Ada.Exceptions; with Ada.Text_IO; use Ada.

Begrepp Värde (mätvärde), medelvärde, median, lista, tabell, rad, kolumn, spridningsdiagram (punktdiagram)

KUNGLIGA TEKNISKA HÖGSKOLAN. Linefollower. Med LEGO Mindstorms och NXC. Paul Coada Introduktion i datateknik II1310

Handhavandeinstruktion

Felsökning av mjukvara

Lathund för att arbeta med pdf

SMARTBOX. Användarmanual

WordRead Plus för Mac

Projektarbete 2: Interaktiv prototyp

Nordisk Synsupport AB Informationsteknik för synskadade. Användarmanual & Monterings anvisning IDEA-CX

Innan passningen. Riktning och höjd

BRUKSANVISNING LH 1600 KÖRSPÅRSMONITOR

Clicker 5. Lathund kring de vanligaste och mest grundläggande funktionerna för att komma igång med Clicker. Habilitering & Hjälpmedel

Tentaupplägg denna gång

LEGO Robot programmering och felsökning Hur svårt ska det vara att följa den svarta linjen?

Föreläsning 6: Introduktion av listor

Installationsanvisning av proximityläsare 1103/2. Mod. 1103/2

Handhavande Stolsvåg Kern MCC-M

Klassuppgift: Hinderrally

Digital Termometer J10 B4 A4 GND GND GND B1 GND GND GND GND B3 A3 +5V +5V A3 +5V A2 +5V +5V A2. +5v B16 A16 UREG UREG B1 6 AC AC A1 6 A6 6

Doro Secure 580. Användarhandbok. Svenska

Matematik 2 Digitala övningar med TI-82 Stats, TI-84 Plus och TI-Nspire CAS

Sinnena den mänskliga hårdvaran

Transkript:

UMEÅ UNIVERSITET Tillämpad fysik och elektronik Datorteknik Håkan Joëlson 2001-08-30 v 1.1 DATORTEKNIK Innehåll Uppbyggnad Hårdvara Koppling Tangentbordsavkodning Knappidentifiering Metodval Avstudsning Dubbeltryckningar Key rollover Hantering av länge nertryckt knapp Kodkonvertering Programmering Sammanfattning Bilaga 1...Teknisk beskrivning av 12 resp. 16 knappars knappsats 2...Tabell för ASCII-kod Nyckelord (för sökning i databas) Tangentbord, tangentbordsavkodning, radavkänning, linjeomvändning, kod.scan, drivrutin, ASCII, avstudsning, dubbeltryckning, key rollover TANGB.DOC

Många digitala konstruktioner har någon slags knappsats eller något slags tangentbord som inenhet för att mata in information i systemet. Olika sätt att känna av och identifiera knapptryckningar kallas tangentbordsavkodning. Sådana tillvägagångssätt utgår naturligtvis från hur tangentbord är konstruerade. I grund och botten finns det, grovt räknat, två sorters tangentbord: fullt avkodade tangentbord och icke avkodade tangentbord. Fullt avkodade tangentbord har inbyggd elektronik för att automatiskt ge den kod man har bestämt ska motsvara varje tangent som trycks ner. Tex är en vanlig PC utrustad med ett fullt avkodat tangentbord som seriellt överför ASCII-koden (se bilaga) för nertryckt tangent till datorn. Icke avkodade tangentbord består bara av grundläggande hårdvara som utnyttjas för att identifiera de olika knapparna. Avkodning måste man ordna med programvara. Detta häfte kommer enbart behandla icke avkodade tangentbord. Uppbyggnad Om varje tangent hade sin egen signalledning, skulle även enkla knappsatser behöva många ledningar och det skulle gå åt många portar på anslutna kretsar. Därför är tangentbord ofta byggda enligt en mycket enkel princip: under knapparna finns ledningar på längden och på tvären. De korsar varann precis under knapparna. Sålänge ingen knapp är nertryckt, är alla ledningar elektriskt helt isolerade från varann. När en knapp trycks ner, förbinds de ledningar som korsar varann under just den knappen. Elektriskt är själva tangentbordet alltså helt passivt. Det genererar inga signalnivåer av sig själv. Det enda som händer när man trycker ner en knapp, är att det uppstår elektrisk kontakt mellan två ledningar. En signal som ligger på ena ledningen fortplantas till den andra. Man kan se ledningarna som ett koordinatsystem, ett rutnät av rader och kolumner. Varje knapp har sin bestämda position i detta koordinatsystem. Eftersom tangentbordet är passivt, måste man tillföra signaler på en eller flera ledningar, och försöka spåra om de fortplantas och dyker upp på andra ledningar. Principen för att identifiera om en knapp är nertryckt - och isåfall vilken - är alltså ganska enkel: man lägger en digital signalbild på en grupp ledningar, och undersöker vilken signalbild som uppstår på de andra ledningarna. Utifrån den samlade informationen om signalbilderna kan man dra logiska slutsater om vilka ledningar som är i kontakt med varann, dvs man kan få koordinater till nertryckt knapp. För att förenkla denna process, gör man det förstås på ett systematiskt och strukturerat sätt. Lämpligen skickar man en bestämd kombination av ettor och nollor på ena ledden (rader eller kolumner), och undersöker vilken kombination som uppstår på den andra ledden. Tex kan man skicka signalbilden 1101 till raderna. På kolumnerna läser man av vilken signalbild som har uppstått. Kanske det är 1011. Nollorna representerar då koordinater för en nertryckt knapp. Detta är själva principen. Låt oss nu titta på detta lite mer i detalj. Hårdvara Tangentbord kan vara olika stora. De exempel som följer utgår från en 16 knappars knappsats organiserad i 4 rader och 4 kolumner. 3

Kolumn 4 Kolumn 3 Kolumn 2 Kolumn 1 1 2 3 A Rad 1 5 4 5 6 B Rad 2 6 8 9 C Rad 3 * 0 # D Rad 4 8 1234568 Anslutningar 1 2 3 4 Ledningsnät under tangenterna Koppling Tangentbord kan anslutas till flera typer av kretsar, med vars hjälp man avkodar det, tex mikroprocessorer, programmerbara digitala kretsar (PLD), avkodare, kommunikationskretsar. Förutsättningen i efterföljande exempel är en knappsats kopplad direkt till en mikroprocessor på det sätt som bilden visar. +5V R1-4 1 2 4 5 * 3 A 6 8 9 B C 0 # D 1 2 3 4 5 6 8 Vdd Mikroprocessor P P6 P5 P4 P3 P2 P1 P0 Vss I bilden är pullup-motstånd kopplade till de ledningar som är anslutna till portar (ben/pinnar) som initieras som ingångar, för att garantera att processorn uppfattar dem som logiska ettor ifall någon av dem inte dras ner av en logisk nolla som fortplantas av en nertryckt knapp. 4

Vissa kretsar har inbyggda pullup på sina portar. Då behövs egentligen inga yttre pullup-motsånd. Följande exempel utgår från att inbyggt pullup saknas. Tangentbordsavkodning Tangentbordsavkodning innebär att man söker ta reda på vilken knapp som blivit nedtryckt och tar rätt på vilken kod (vilket tecken eller värde) man har bestämt att den ska motsvara. För fullständig avkodning måste fyra eller fem moment utföras, beroende vilken slutfunktion man vill ha: Identifiera nedtryckt knapp. Ta hand om feltryckningar. Ev. kontrollera att alla knappar släppts upp. Ta hand om kontaktstudsar. Generera motsvarande kod. Knappidentifiering Ett strategiskt val som man måste göra, är att ta ställning till om man ska använda logisk etta eller logisk nolla som "identifikator", för att bestämma en knapps koordinater. Jag väljer i mina exempel logisk nolla. Vilken metod för tangentbordsavkodning man än väljer, måste man förr eller senare ta ställning till vilka signalbilder som är giltiga. Man skapar lämpligen en lista, en tabell över alla de "knappkoder" som är giltiga för tangentbordet, dvs de kombinationer av ettor och nollor som kan ange alla enskilda knappars koordinater. För ett 16-knappars tangentbord blir det 16 giltiga koder, i vårt fall: 0111 0111 0111 1011 0111 1101 0111 1110 1 2 3 A 1011 0111 1011 1011 1011 1101 1011 1110 4 5 6 B 1101 0111 1101 1011 1101 1101 1101 1110 1110 0111 1110 1011 1110 1101 1110 1110 * 8 9 C 0 # D Metoder för att avkoda tangentbord kan se ut på många olika sätt. Här följer en beskrivning av tre stycken. I. Radavkänningsmetoden Denna metod kan förenklat beskrivas så, att man utnyttjar en "vandrande nolla". De portar som tangentbordets rader är anslutna till initieras som utgångar. Portar som kolumnerna är anslutna till initieras som ingångar. Metodens steg blir då: 1 a. Man skickar ett värde med en nolla och resten ettor, tex 0111, till raderna. b. Kolumnerna läses av. Om resultatet blir 1111 är ingen knapp på rad 1 nertryckt och man fortsätter med steg 2a. Om värdet innehåller en nolla, tex 1011, är en knapp på rad 1 nertryckt (i detta fallet i kolumn 2). c. Värdet man skickade till raderna kombineras med värdet man fick när kolumnerna avlästes, och nollorna ger koordinaterna. I vårt exempel blir det 1011 0111. Vi vet nu vilken knapp som var nertryckt: knappen på rad 1 i kolumn 2. 5

2 a. Om ingen knapp var nertryckt på rad 1, måste man leta vidare. Värdet 1011 läggs ut på raderna för att spana längs rad 2. b&c. Som steg b och c ovan. 3&4. Var ingen knapp nertryck på rad 2 heller fortsätter man på samma sätt med kvarvarande rader. Sen är det bara att börja om. Antingen har alla rader undersökts utan träff, vilket betyder att ingen knapp är nertryckt, eller så har man fått träff och då vet man vilken knapp som är nertryckt. II. Linjeomvändningsmetoden Till denna metod behöver kopplingen utökas med pullup-motstånd även till de ledningarna som tangentbordets rader är anslutna med (om inte kretsen man ansluter tangentbordet till har inbyggt pullup). Denna metod karakteriseras av att omväxlande lägga ut nollor på alla rader och läsa kolumnerna, och lägga ut nollor på alla kolumner och läsa raderna. Unik knappkod för eventuellt nertryckt knapp ges av att kombinera resultaten av de två läsningarna. Metodens steg blir: a. Som med radavkänningsmetoden börjar man med att initiera de portar som raderna är anslutna till som utgångar och de portar som kolumnerna är anslutna till som ingångar. b. Man skriver 0000 till raderna ocn läser av kolumnerna. En nertryckt knapp kommer att fortplanta en nolla från sin rad till sin kolumn. Är kolumnkoden 1111, visar det att ingen knapp är nertryckt. Man kan då gå direkt tillbaka till steg a. igen. Men får man träff på en nolla, går man vidare. c. Riktningen på portarna kastas om: portar till raderna initieras som ingångar och portar till kolumnerna initieras som utgångar. d. Man skriver 0000 till kolumnerna och läser av raderna. Nu kommer den nertryckta knappen att avslöja sig genom att fortplanta en nolla från sin kolumn till sin rad. e. Kombinerar man informationen från avlästa kolumner (tex 1011) och avlästa rader (tex 0111) får man knappkoden för en nertryckt knapp (1011 0111). Sen börjar man om. För denna metod gäller att vilken avläsning som helst där man får 1111 visar att ingen knapp är nertryckt.) III. Kodscan-metoden Denna metod utgår från listan/tabellen över giltiga knappkoder. Dessutom utnyttjar den det faktum att portar hos kretsar som tangentbordet lämpligen ansluts till oftast är konstruerade så, att ingenting händer om man skriver till ingångar och om man läser från utgångar får man det värde som man senast skrev dit. Som i radavkänningsmetoden behöver man bara initiera portarna en gång, tex med portar till raderna som utgångar och portar till kolumnerna som ingångar. Stegen blir: a. Man skriver första giltiga knappkoden i tabellen till tangentbordet. b. Man läser av tangentbordet. c. Man jämför de skrivna och lästa värdena. Är de lika, har man hittat en nertryckt knapp. Om inte måste man gå vidare i tabellen och göra om samma lilla procedur: skriva, läsa, jämföra. Får man ingen träff, är ingen knapp nertryckt, och det är bara att börja om. 6

Metodval Alla metoder har sina för- och nackdelar. När man ska välja, är det lämpligt att ta ställning till hårdvaran (hur den är konstruerad och vad den klarar av) och till programspråket (hur väl det lämpar sig för metoderna olika åtgärder). Radavkänningsmetoden följer en enkel princip, men kan med vissa programspråk kräva en hel del programmering. Linjeomvändningsmetoden har en ganska enkel mekanism för att få träff, men kräver att man initierar portarna stup i ett. Med denna metod undanröjs dubbeltryckningar (se nedan) nästan automatiskt. Kodscan-metoden har ett mycket enkelt grundmönster men innebär ganska mycket upprepning - vilket man kan lämna till kretsarna. Många programspråk har ju enkla kommandon för upprepning (tex for to-slingor). Konvertering till den kod man i slutänden önskar (se Kodgenerering nedan) blir lätt med denna metod m.h.a. indexering, som många programspråk har stöd för. Överväganden. Strategiska val Metodval för knappidentifiering är en sak. För att få ett fungerande tangentbord, återstår sedan flera saker att tänka på, där man ibland måste göra strategiska val, beroende på hur man vill att tangentbordet ska fungera i just det system som man arbetar med. Olika blandningar av dessa funktioner och åtgärder är möjliga. I progammeringen bakas i regel dessa åtgärderna ihop med realiseringen av den knappidentifieringsmetod som man har valt. Avstudsning Då en knapp trycks ner, uppstår ett svängningsförlopp. Stabil kontakt uppnås först efter ett antal millisekunder. Detta kallas kontaktstuds, och om man inte tar hänsyn till det, kan ett program för avkodning detektera ett stort antal knapptryckningar varje gång en knapp trycks ner. Eliminering av kontaktstudsar kan lämpligen utföras på ett av följande sätt: 1. Då en knapptryckning upptäckts kontrolleras samma knapp efter några millisekunder och om knappen även då är nedtryckt accepteras tryckningen. 2. Då en knapptryckning upptäckts kontrolleras samma knapp ett antal gånger (tex 50) efter varann, och om knappen alla gånger varit nedtryckt godkänns tryckningen. Dubbeltryckningar Det kan ju hända att någon av misstag - eller med flit - trycker ner mer än en knapp. Vad händer då? Vad vill man ska hända? Hur ska den tryckningen avkodas? (Undersök själv hur de olika identifieringsmetoderna påverkas av flerknappstryckningar.) Här måste man göra en del strategiska val: a) Ska man utesluta dubbeltryckningar helt och hållet, eller ska man dra någon slags nytta av att kunna trycka ner mer än en knapp? b) Ska varje knapp ha enbart en funktion, eller ska någon eller några knappar kunna betyda flera saker? Obs. att detta är två olika frågeställningar, vilket gör att det kan bli fråga om olika kombinationer.

Enbart nertryck ning av en knapp i taget tillåts. Att fler knappar än en trycks ner är tillåtet och ger meningsf ulla kombinationer. Varje knapp står bara för en sak ("endimensionellt tangentbord"). I detta fall vill man inte att oönskade dubbeltryckningar ska ställa till något trassel. Enklast löses det genom att enbart godkänna knappkodskombinationer som finns i tabellen och ignorera alla andra knappkoder. I Radavkänningsmetoden och Kodscan-metoden betyder det att man måste genomföra kontroll av hela tangentbordet för att upptäcka alla nertryckta knappar. Om det är fler än en, ignoreras den tryckningen/omgången. Det enda fall i denna kategori som har någon större mening är key rollover (se nästa avsnitt). Förutom key rollover är denna kategori teoretiskt tänkbar, men för det mesta inte särskilt meningsfull. Det finns i regel ingen större poäng med att någon knapp skulle ha en giltig funktion endast om en annan knapp trycks ner samtidigt - fast det är klart, nån gång kanske man vill det... En och samma knapp kan ha olika funktioner ("flerdimensionellt tangentbord"). Man kan låta en eller flera knappar ha funktionen att "byta dimension" (växla läge, nivå, mode eller vad man föredrar att kalla det). Varje gång man trycker en sådan knapp, växlar man läge. Programmet kan man då skapa så, att man låter godkänd tryckning av en sådan knapp leda till att man går in i en särskild rutin, som har en egen kodkonvertering (se avsnitt Kodkonvertering nedan). Ett vanligt sätt att göra ett tangentbord flerdimensionellt är att låta funktionen hos någon eller några knappar vara att hållas nere för att byta dimension på det sätt som <Ctrl>, <Alt> och <Skift>knapparna fungerar på en PC. I programmet måste man då lägga in koder för giltiga dubbeltryckningar i knappkodstabellen (se avsnitt Knappkodsidentifiering), eller låta en nertryckt sådan specialknapp föranleda att man går in i en rutin med egen knappkodstabell. En annan variant är att man låter någon knapp ha specialfunktionen att när man trycker och släpper den går man in i ett annat läge (byter dimension). Då kan man ha det så att i det läget förblir man tills man trycker på specialknappen igen. I ett visstsystem kan man mycket väl ha både någon av dessa varianter och key rollover (se nästa avsnitt). Key rollover Ett speciellt fall av dubbeltryckning är följande. Tangentbord kan programmeras så, att om en knapp hålls nere aktiveras den knappens funktion (tex för knapp 5 matas tecknet "5" ut). Om sedan en annan knapp (tex knapp 6) trycks ner innan den första släppts upp, går utmatningen automatiskt över till den andra knappens funktion (tecknet "6" matas ut). Detta kallas key rollover. Det förutsätter nästan att man har teckenrepetition (se nästa avsnitt). Hantering av länge nertryckt knapp Om ingen särskild åtgärd vidtas kommer en knapp som hålls intryckt uppfattas av programmet som att samma tangent tryckts ner flera gånger i rad, dvs. det kommer spruta tecken. Hur ska man alltså hantera fallet att en knapp hålls inne längre än en avstudsningscykel? Här måste ytterligare ett strategiskt val göras: 1. Man vill få bara ett enda tecken varje gång man trycker ner en knapp. 8

2. Man vill ha teckenrepetition (som på en PC), dvs knappens tecken/funktion upprepas så länge man håller knappen nertryckt. Väljer man det förra, kan man lösa det såhär: när man har detekterat en godkänd knapptryckning, kontrollerar man att alla knappar släppts upp (tex genom att stanna i en slinga till så har skett) innan man går vidare. Väljer man det senare, behövs troligen ingen extra programmeringen. Men man måste ändå ha med nån mekanism som styr hastigheten på teckenupprepningen. Kodkonvertering Alla metoder för knappidentifiering resulterar i ett unikt kodvärde för en viss knapp. Men i regel har man inte direkt nytta av det värdet, utan man vill att en knapptryckning ska generera någon slags beteckning som representerar knappen, tex ASCII-koden (se bilaga) för det tecken som knappen representerar. En lämplig programanordning kan då vara att koppla knappkodstabellen till en tabell med de värden man vill att knapparna i slutänden ska representera. Tex gör man en ASCII-tabell som är organiserad parallellt med knapptabellen. Indexeringen (positionsnumreringen) man använder i knapptabellen kan man då använda för att peka ut önskad ASCII-kod. Programmering De programstycken man skapar för att få tangentbordet att tangentbordet att fungera som man vill utgör tangentbordets drivrutin[er]. Hur man ska programmera för att förverkliga den metod för tangentbordsavkodning man har valt, beror naturligtvis både på vilken hårdvara man arbetar med, och vilket programspråk man använder. Här följer några exempel med pseudokod (programkod som har likheter med många programmeringsspråk utan att vara ett specifikt sådant). Exemplena utgår från kopplingen på sidan 3 och knapptabellen på sidan 4 samt följande ASCII/funktions-tabell, som position för position korresponderar med knapptabellen (och knapparna). 0011 0001 0011 0010 0011 0011 0100 0001 1 2 3 A 0011 0100 0011 0101 0011 0110 0100 0010 4 5 6 B 0011 0111 0011 1000 0011 1001 0100 0011 0010 1010 0011 0000 0010 0011 0100 0100 * 8 9 C 0 # D Radavkänningsmetoden row, column, button, position#, functioncode declared as variables port[0-3] = output port[4-] = input row = 0111 loop row -> port[0-3] port[4-] -> column if column = 1111 then shift row right go loop convert scan buttontable else button = row append column go convert 9

for button (return position#) functioncode = ASCIItable[position#] (Här görs inte kontroll av dubbeltryckning. Koden måste utökas för att åstadkomma det.) 10

Linjeomvändningsmetoden row, column, button, position#, functioncode declared as variables port[0-3] = output port[4-] = input 0000 -> port[0-3] port[4-] -> column port[0-3] = input port[4-] = output 0000 -> port[4-] port[0-3] -> row button = row append column go convert - som ovan Kodscan-metoden button1, button2, position#, functioncode declared as variables port[0-3] = output port[4-] = input position# = 01 try-again button1 = buttontable[position#] button1 -> port[0-] port[0-] -> button2 if button2 = button1 then functioncode = ASCIItable[position#] else go try-again (Här görs inte kontroll av dubbeltryckning. Koden måste utökas för att åstadkomma det.) Sammanfattning Ett vanligt sätt att konstruera ett tangentbord är att utgå från ett passivt rutnät av ledningar, som är organiserade i rader och kolumner. När alla knappar är i viloläge, är ledningarna helt isolerade från varandra. När en knapp trycks ner, skapas elektrisk kontakt mellan den rad och kolumn som korsar varann omedelbart under knappen. Det gäller att hitta system för att lägga på logiska signaler (spänningsnivåer), som fortplantas via "tryckkortslutningar", så att tangentbordet avger signaler, som kan tolkas som kod. Olika metoder för att identifiera nertryckta knappar kallas metoder för tangentbordsavkodning. Dessutom måste man tänka på (och ev. göra en del startegiska val beträffande) avstudsning, dubbeltryckningar, key rollover, teckenrepetition, kodkonvertering. 11

Bilaga 1 Knappsats 1 AK-804 12 knappar (ELFA best.nr. 35-68-0) Yttre anslutningar, benplacering Kopplingar under tangenterna 3 1 5 1 2 3 2 1 2 3 Rad 1 4 5 6 4 5 6 Rad 2 8 9 6 8 9 Rad 3 * 0 # 4 * 0 # Rad 4 1 2 3 4 5 6 Kolumn 3 Kolumn 2 Kolumn 1 Varje nertryckt tangent kopplar samman en radledare med en kolumnledare. 12

Knappsats 2 AK-1604 16 knappar (ELFA best.nr. 35-68-31) Kolumn 4 Kolumn 3 Kolumn 2 Kolumn 1 1 2 3 A Rad 1 5 4 5 6 B Rad 2 6 8 9 C Rad 3 * 0 # D Rad 4 8 1 2 3 4 5 6 8 1 2 3 4 Anslutningar Ledningsnät under tangenterna Varje nertryckt tangent kopplar samman en radledare med en kolumnledare. 13

Bilaga 2 ASCII code ASCII - The American Standard Code for Information Interchange is a standard seven-bit code that was proposed by ANSI in 1963, and finalized in 1968. Other sources also credit much of the work on ASCII to work done in 1965 by Robert W. Bemer (www.bobbemer.com). ASCII was established to achieve compatibility between various types of data processing equipment. Later-day standards that document ASCII include ISO-14962-199 and ANSI-X3.4-1986(R199). ASCII, pronounced "ask-key", is the common code for microcomputer equipment. The standard ASCII character set consists of 128 decimal numbers ranging from zero through 12 assigned to letters, numbers, punctuation marks, and the most common special characters. The Extended ASCII Character Set also consists of 128 decimal numbers and ranges from 128 through 255 representing additional special, mathematical, graphic, and foreign characters. 14