Es kann jetz sein das ich deine Anforderunge nicht ganz genau kapiert hab, aber ich geh mal davon aus das du die Tasten nicht mechanisch steuern willst.
ich kann dir allerdings eine fertige elektriche Ansteuerung liefer die für Nokia Hanys mit "Kompass" passt und garantiert leicht auf ander Handys umzuschreiben ist.

Programm ist im Anhang (wennns funktioniert ) ist mein erster Beitrag.

Hier kurze Beschreibung (bin nicht der Dokumentierer und auch kein Elektriker)

Die Tasten bestehen ja aus 2 Kontaktflächen die eine 4x5 Matrix (20 Tasten) ergeben
der Ring ist die Zeile der mittlere Punkt die Spalte (oder anders Herum)
d.h wenn du nur das Tastenfeld nutzen Willst musst du 9 drähte anlöten und fertig.
Diese werden über Optokoppler verbunden die in zwei Gruppen unterteilt sind zeile und Spalte. also OPT von zeile und Opt von Spalte anwählen und fertig (wie Schiffe versenken) Mittlerer Kontakt-Spalten OPT -Zeilen OPT-Ringkontakt.
ich hab daraus Eine Alarmanlage gebaut (für unser Vereinsheim) die eine Rundsms sendet und dann angerufen werden kann um GEGENMAßNAHMEN [-X
einleiten zu können .
Handy nimmt ab und man kann in den Raum hören wenn man die S..u hört muss mann 2s reinschreien dann ta ta ta.
Das gelöte ist einfach, schafft sogar ein Maschinenbauer.
Das programm funktioniert ist zwar sicher nicht optimal aber auch mein erstes Projekt.

so nun genug gelabert wenn du interesse Hast meld dich noch mal




Handybedienprogramm

;************************************************* ****************************************
;
;************************************************* ****************************************


;Includedatei zum anschreiben eines Handys. Die Tastenmatrix ist wie folgt auf
;die Ports A und B verteilt.Der ausenring der Zahl bezeichnet die Zeile, der innenri

;Pin PA4 PA5 PA6 PA7 PB0

;PA0 1 2 3 left lud (linke Taste unterm Display)
;PA1 4 5 6 ghr(GrünerHöhrer) up
;PA2 7 8 9 rhr(RoterHörer) down
;PA3 stern 0 raute right rud (rechte Taste unterm Display)
;-----------------------------------------------------------------------------------------
;Includedatei für ATmega16

.include "m16def.inc"


;-----------------------------------------------------------------------------------------


.def Temp = r16 ;allg. Tempregister
.def temp1 = r17
.def temp2 = r18
.def temp3 = r19


;------------------------------------------------------------------------------------------------------------------------------


;**************************** Tasten Drücken *****************************************
;---------------------------------------------------------------------------------------------------
;1 Drücken

_1: ;Name

rcall wbp
ldi Temp, 0b11111111 ;Port A auf Ausgabe stellen
out DDRA,Temp
sbi DDRB,0 ;PortB Bit 0 auf Ausgabe stellen
ldi Temp, 0b00010001 ;Taste drücken
out PORTA, Temp
cbi PORTB,0
rcall hp ;Taste halten
ldi Temp, 0b00000000 ;Taste loslassen
out PORTA, Temp
cbi PORTB,0
rcall wap ;nach dem Tastendruck warten
ret
;--------------------------------------------------------------------------------------------------
;2 Drücken

_2: ;Name

rcall wbp
ldi Temp, 0b11111111 ;Port A auf Ausgabe stellen
out DDRA,Temp
sbi DDRB,0 ;PortB Bit 0 auf Ausgabe stellen
ldi Temp, 0b00100001 ;Taste drücken
out PORTA, Temp
cbi PORTB,0
rcall hp ;Taste halten
ldi Temp, 0b00000000 ;Taste loslassen
out PORTA, Temp
cbi PORTB,0
rcall wap ;nach dem Tastendruck warten
ret
;--------------------------------------------------------------------------------------------------

;3 Drücken

_3: ;Name

rcall wbp
ldi Temp, 0b11111111 ;Port A auf Ausgabe stellen
out DDRA,Temp
sbi DDRB,0 ;PortB Bit 0 auf Ausgabe stellen
ldi Temp, 0b01000001 ;Taste drücken
out PORTA, Temp
cbi PORTB,0
rcall hp ;Taste halten
ldi Temp, 0b00000000 ;Taste loslassen
out PORTA, Temp
cbi PORTB,0
rcall wap ;nach dem Tastendruck warten
ret
;--------------------------------------------------------------------------------------------------
;left Drücken

left: ;Name

rcall wbp
ldi Temp, 0b11111111 ;Port A auf Ausgabe stellen
out DDRA,Temp
sbi DDRB,0 ;PortB Bit 0 auf Ausgabe stellen
ldi Temp, 0b10000001 ;Taste drücken
out PORTA, Temp
cbi PORTB,0
rcall hp ;Taste halten
ldi Temp, 0b00000000 ;Taste loslassen
out PORTA, Temp
cbi PORTB,0
rcall wap ;nach dem Tastendruck warten
ret
;--------------------------------------------------------------------------------------------------
;lud Drücken linke Taste unter dem Display

lud: ;Name

rcall wbp
ldi Temp, 0b11111111 ;Port A auf Ausgabe stellen
out DDRA,Temp
sbi DDRB,0 ;PortB Bit 0 auf Ausgabe stellen
ldi Temp, 0b00000001 ;Taste drücken
out PORTA, Temp
sbi PORTB,0
rcall hp ;Taste halten
ldi Temp, 0b00000000 ;Taste loslassen
out PORTA, Temp
cbi PORTB,0
rcall wap ;nach dem Tastendruck warten
ret
;--------------------------------------------------------------------------------------------------
;4 Drücken

_4: ;Name

rcall wbp
ldi Temp, 0b11111111 ;Port A auf Ausgabe stellen
out DDRA,Temp
sbi DDRB,0 ;PortB Bit 0 auf Ausgabe stellen
ldi Temp, 0b00010010 ;Taste drücken
out PORTA, Temp
cbi PORTB,0
rcall hp ;Taste halten
ldi Temp, 0b00000000 ;Taste loslassen
out PORTA, Temp
cbi PORTB,0
rcall wap ;nach dem Tastendruck warten
ret
;--------------------------------------------------------------------------------------------------
;5 Drücken

_5: ;Name

rcall wbp
ldi Temp, 0b11111111 ;Port A auf Ausgabe stellen
out DDRA,Temp
sbi DDRB,0 ;PortB Bit 0 auf Ausgabe stellen
ldi Temp, 0b00100010 ;Taste drücken
out PORTA, Temp
cbi PORTB,0
rcall hp ;Taste halten
ldi Temp, 0b00000000 ;Taste loslassen
out PORTA, Temp
cbi PORTB,0
rcall wap ;nach dem Tastendruck warten
ret
;--------------------------------------------------------------------------------------------------
;6 Drücken

_6: ;Name

rcall wbp
ldi Temp, 0b11111111 ;Port A auf Ausgabe stellen
out DDRA,Temp
sbi DDRB,0 ;PortB Bit 0 auf Ausgabe stellen
ldi Temp, 0b01000010 ;Taste drücken
out PORTA, Temp
cbi PORTB,0
rcall hp ;Taste halten
ldi Temp, 0b00000000 ;Taste loslassen
out PORTA, Temp
cbi PORTB,0
rcall wap ;nach dem Tastendruck warten
ret
;--------------------------------------------------------------------------------------------------
;ghr Drücken ;Grüner Höhrer

ghr: ;Name

rcall wbp
ldi Temp, 0b11111111 ;Port A auf Ausgabe stellen
out DDRA,Temp
sbi DDRB,0 ;PortB Bit 0 auf Ausgabe stellen
ldi Temp, 0b10000010 ;Taste drücken
out PORTA, Temp
cbi PORTB,0
rcall hp ;Taste halten
ldi Temp, 0b00000000 ;Taste loslassen
out PORTA, Temp
cbi PORTB,0
rcall wap ;nach dem Tastendruck warten
ret
;--------------------------------------------------------------------------------------------------
;up Drücken ;Pfeil nach oben

up: ;Name

rcall wbp
ldi Temp, 0b11111111 ;Port A auf Ausgabe stellen
out DDRA,Temp
sbi DDRB,0 ;PortC Bit 0 auf Ausgabe stellen
ldi Temp, 0b00000010 ;Taste drücken
out PORTA, Temp
sbi PORTB,0
rcall hp ;Taste halten
ldi Temp, 0b00000000 ;Taste loslassen
out PORTA, Temp
cbi PORTB,0
rcall wap ;nach dem Tastendruck warten
ret
;--------------------------------------------------------------------------------------------------
;7 Drücken

_7: ;Name

rcall wbp
ldi Temp, 0b11111111 ;Port A auf Ausgabe stellen
out DDRA,Temp
sbi DDRB,0 ;PortB Bit 0 auf Ausgabe stellen
ldi Temp, 0b00010100 ;Taste drücken
out PORTA, Temp
cbi PORTB,0
rcall hp ;Taste halten
ldi Temp, 0b00000000 ;Taste loslassen
out PORTA, Temp
cbi PORTB,0
rcall wap ;nach dem Tastendruck warten
ret
;--------------------------------------------------------------------------------------------------
;8 Drücken

_8: ;Name

rcall wbp
ldi Temp, 0b11111111 ;Port A auf Ausgabe stellen
out DDRA,Temp
sbi DDRB,0 ;PortB Bit 0 auf Ausgabe stellen
ldi Temp, 0b00100100 ;Taste drücken
out PORTA, Temp
cbi PORTB,0
rcall hp ;Taste halten
ldi Temp, 0b00000000 ;Taste loslassen
out PORTA, Temp
cbi PORTB,0
rcall wap ;nach dem Tastendruck warten
ret
;--------------------------------------------------------------------------------------------------
;9 Drücken

_9: ;Name

rcall wbp
ldi Temp, 0b11111111 ;Port A auf Ausgabe stellen
out DDRA,Temp
sbi DDRB,0 ;PortB Bit 0 auf Ausgabe stellen
ldi Temp, 0b01000100 ;Taste drücken
out PORTA, Temp
cbi PORTB,0
rcall hp ;Taste halten
ldi Temp, 0b00000000 ;Taste loslassen
out PORTA, Temp
cbi PORTB,0
rcall wap ;nach dem Tastendruck warten
ret
;--------------------------------------------------------------------------------------------------
;rhr Drücken ;Roter Höhrer

rhr: ;Name

rcall wbp
ldi Temp, 0b11111111 ;Port A auf Ausgabe stellen
out DDRA,Temp
sbi DDRB,0 ;PortB Bit 0 auf Ausgabe stellen
ldi Temp, 0b10000100 ;Taste drücken
out PORTA, Temp
cbi PORTB,0
rcall hp ;Taste halten
ldi Temp, 0b00000000 ;Taste loslassen
out PORTA, Temp
cbi PORTB,0
rcall wap ;nach dem Tastendruck warten
ret
;--------------------------------------------------------------------------------------------------
;down Drücken ;Pfeil nach unten

down: ;Name

rcall wbp
ldi Temp, 0b11111111 ;Port A auf Ausgabe stellen
out DDRA,Temp
sbi DDRB,0 ;PortB Bit 0 auf Ausgabe stellen
ldi Temp, 0b00000100 ;Taste drücken
out PORTA, Temp
sbi PORTB,0
rcall hp ;Taste halten
ldi Temp, 0b00000000 ;Taste loslassen
out PORTA, Temp
cbi PORTB,0
rcall wap ;nach dem Tastendruck warten
ret
;--------------------------------------------------------------------------------------------------
;stern Drücken

_stern: ;Name

rcall wbp
ldi Temp, 0b11111111 ;Port A auf Ausgabe stellen
out DDRA,Temp
sbi DDRB,0 ;PortB Bit 0 auf Ausgabe stellen
ldi Temp, 0b00011000 ;Taste drücken
out PORTA, Temp
cbi PORTB,0
rcall hp ;Taste halten
ldi Temp, 0b00000000 ;Taste loslassen
out PORTA, Temp
cbi PORTB,0
rcall wap ;nach dem Tastendruck warten
ret
;--------------------------------------------------------------------------------------------------
;0 Drücken

_0: ;Name

rcall wbp
ldi Temp, 0b11111111 ;Port A auf Ausgabe stellen
out DDRA,Temp
sbi DDRB,0 ;PortB Bit 0 auf Ausgabe stellen
ldi Temp, 0b00101000 ;Taste drücken
out PORTA, Temp
cbi PORTB,0
rcall hp ;Taste halten
ldi Temp, 0b00000000 ;Taste loslassen
out PORTA, Temp
cbi PORTB,0
rcall wap ;nach dem Tastendruck warten
ret
;--------------------------------------------------------------------------------------------------
;Raute Drücken

_raute: ;Name

rcall wbp
ldi Temp, 0b11111111 ;Port A auf Ausgabe stellen
out DDRA,Temp
sbi DDRB,0 ;PortB Bit 0 auf Ausgabe stellen
ldi Temp, 0b01001000 ;Taste drücken
out PORTA, Temp
cbi PORTB,0
rcall hp ;Taste halten
ldi Temp, 0b00000000 ;Taste loslassen
out PORTA, Temp
cbi PORTB,0
rcall wap ;nach dem Tastendruck warten
ret
;--------------------------------------------------------------------------------------------------
;right Drücken ;Pfeil nach rechts

right: ;Name

rcall wbp
ldi Temp, 0b11111111 ;Port A auf Ausgabe stellen
out DDRA,Temp
sbi DDRB,0 ;PortB Bit 0 auf Ausgabe stellen
ldi Temp, 0b10001000 ;Taste drücken
out PORTA, Temp
cbi PORTB,0
rcall hp ;Taste halten
ldi Temp, 0b00000000 ;Taste loslassen
out PORTA, Temp
cbi PORTB,0
rcall wap ;nach dem Tastendruck warten
ret
;--------------------------------------------------------------------------------------------------
;rud Drücken ;Rechte taste unte dem Display

rud: ;Name

rcall wbp
ldi Temp, 0b11111111 ;Port A auf Ausgabe stellen
out DDRA,Temp
sbi DDRB,0 ;PortB Bit 0 auf Ausgabe stellen
ldi Temp, 0b00001000 ;Taste drücken
out PORTA, Temp
sbi PORTB,0
rcall hp ;Taste halten
ldi Temp, 0b00000000 ;Taste loslassen
out PORTA, Temp
cbi PORTB,0
rcall wap ;nach dem Tastendruck warten
ret
;--------------------------------------------------------------------------------------------------
;********************* Zeiten für Tastendruck ************************************************** ***
;---------------------------------------------------------------------------------------------------
wbp: ;Wait befor press

rcall Delay100m ;Einstellen der Wartezeit vor dem Drücken einer Taste
rcall Delay100m
ret
;---------------------------------------------------------------------------------------------------
hp: ;Hold pressure
;Einstellen wie lange eine Taste gedrückt wird
rcall Delay100m
rcall Delay100m


ret
;---------------------------------------------------------------------------------------------------
wap: ;Wait after press
rcall Delay100m

ret
;---------------------------------------------------------------------------------------------------

;************************************************* **************************************************