Ensamblador - URGENTE... Como pintar el teclado en la pantalla

 
Vista:

URGENTE... Como pintar el teclado en la pantalla

Publicado por Mariledy Guerra Quintana (1 intervención) el 27/06/2008 22:49:42
Necesito por favor ue alguien me diga el codigo para pintar el teclado en la pantalla en lenguaje ensamblador y saber luego utilizando el codigo ascii cuando se pulse una tecla del teclado esta se señale de alguna manera en el teclado que tenemos pintado en la pantalla. Por favor envienme cualquier cosa, aunque sea un pedacito de codigo que ceran que me puede servir. Mi direccion de correo se las repito: [email protected]
Gracias.........
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:URGENTE... Como pintar el teclado en la pantall

Publicado por MSH (120 intervenciones) el 30/06/2008 00:36:30
Se va a llevar su tiempo, ya que esto es para darse una idea de como pintar el caracter en pantalla y nada más

.model small
.stack
.data

rowa db 0ah ;renglon y columna donde imprime la A en pantalla
cmna db 0ah

rowb db 0ah ;renglon y columna donde imprime la B en pantalla
cmnb db 0fh

color1 db 09h ;azul
color2 db 04h ;rojo

tinicio1 dw ?
tfinal1 dw ?


.code
inicio:

mov ax,@data
mov ds,ax
push ds
pop ds
pop es

call clear

displ:

mov dh,rowa ;renglon
mov dl,cmna ;columna
call q20curs
mov al,'A'
mov bl,0ch; fondo nergo,primer plano rojo
call q30print

mov dh,rowb ;renglon
mov dl,cmnb ;columna
call q20curs
mov al,'B'
mov bl,0ch; fondo nergo,primer plano rojo
call q30print

key:
mov ah,08h
int 21h
cmp al,65
je cambiaA
cmp al,66
je cambiaB
cmp al,27
je termina
jmp key

cambiaA:
mov dh,rowa ;renglon
mov dl,cmna ;columna
call q20curs
mov al,'A'
mov bl,09h; fondo nergo,primer plano azul
call q30print
call ciclore
jmp displ

cambiaB:
mov dh,rowb ;renglon
mov dl,cmnb ;columna
call q20curs
mov al,'B'
mov bl,09h; fondo nergo,primer plano AZUL
call q30print
call ciclore
jmp displ

termina:
call clear
mov ax,4c00h
int 21h
;....Limpia pantalla...................
clear proc near
mov ax,0600h ;limpia pantalla
mov bh,07h ;atributo: fondo negro -letra blanca
mov cx,0000h ;esquina superior izquierda: renglon-columna
mov dx,314fh ;esquina inferior derecha: renglon-columna
int 10h ;interrupcion del BIOS
clear endp

;....Coloca el cursor...................
q20curs proc near
mov ah,02h ;petición
mov bh,00 ;para colocar el cursor
int 10h
ret
q20curs endp

;....Imprime el caracter.................
q30print proc near
mov ah,09h
;mov al,char
mov bh,00h
;mov bl,04h
mov cx,01
int 10h
ret
q30print endp

;....retardo
ciclore proc near
mov tfinal1,1000
x1:
mov tinicio1,800
x2:
dec tinicio1
jnz x2
dec tfinal1
jnz x1
ret
ciclore endp
end inicio
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:URGENTE... Como pintar el teclado en la pantall

Publicado por Mariledy (1 intervención) el 01/07/2008 20:01:48
Muchas gracias, eso me va a servir, si por casualidad encontraras la forma de conectar el teclado real con los caracteres que estan dibujados en la pantalla me lo mandas, gracias de nuevo,
hasta pronto.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:URGENTE... Como pintar el teclado en la pantall

Publicado por Perceval Ciro (23 intervenciones) el 05/07/2008 12:01:26
Hola Meriledy, me atrapo tu problema... hice algo a modo de ejemplo, hoy es tarde no puedo explicarlo, a mi se me ocurrio esto espero que te pueda guiar.... te indico mas o menos... Lo que hace es dibujar los numeros, y ponerlos encuadrados. Vos presionas el numero y lo selecciona, cuando presionas otro hace un barrido sobre el anterior y selecciona este. La forma en que lo hice es... Los ubique en la Columna 3... Y los dispuse segun una formula, a saber: EL numero (1,2,3,4,5,6,0... etc) * 5 + 10..(0ah)..entonces cuando me arroja el valor de la tecla pulsada hago un AND, y luego Aplico la formula nuevamente... Cometi un error en mi prevision... Yo crei que dividiendo por A siempre me arrojaria el 3 a AH, pero claro que no ahi va el resto... porque de esa manera me quedaba conformada la Columna y la fila con una sola operacion... Por eso este codigo a pesar de que funciona es un fiasco... Hay que mejorarlo muchisimo, yo luego continuo aca te lo pego... espero que te sirva, qe es lo que importa....

Macro Pos fil ,col
mov dh,Col
mov dl,Fil
mov ah,02h
int 10h
endm

Macro caracter Car
mov ah, 2
mov dl, car
int 21h
endm

Macro Codificar Num
mov al, num
mov bl, 5h
mul bl
add al, 0ah
endm

Macro DecodificarC
mov bl, 5h
div bl
add al, 0ah
endm

Macro Pin car
push cx
mov ah,02h
mov bh,00h
int 10h
mov ah,09h
mov bl, car
mov cx,01
int 10h
pop cx
endm

org 100h
jmp inicio
aer db 52 dup(0dch), '$'
aer2 db 52 dup(0dfh), '$'
inicio:

mov ch, 30h
mov cl, 0
bl1:
codificar cl
Pos al, 3
caracter ch
inc cl
inc ch
cmp cl, 10
je Arriba
jmp bl1


arriba: Pos 07h, 2

lea dx, aer
mov ah, 9
int 21h
Pos 07h, 4
lea dx, aer2
mov ah, 9
int 21h
mov cx, 11
mov bl, 7
separador:
pos bl, 3
caracter 0dbh
caracter 0dbh
add bl, 5
loop separador

MEGAPRUEBA:
mov cl, 0
bucle:
mov ah, 0
int 16h
cmp cl, 0
je numEE

Barrido:
xchg al, ch
Pin 07h
xchg ch, al
NumEE:
mov si, ax
and ax, 000fh
codificar al
mov ah, 3h
mov dx, ax
mov ax, si
Pin 10h, al
mov ch, al
inc cx
jmp bucle

salir: ret

Otra cosa, cuando juego con el ensamblador de 16b procuro hacerlo con el emu8086... quiza te sirva para observar lo que hace la maquina.... Bueno nos estamos hablando.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:URGENTE... Como pintar el teclado en la pantall

Publicado por Perceval Ciro (23 intervenciones) el 06/07/2008 18:49:40
Hola... aca traigo un codigo incompleto, todabia no lo pude terminar pero fijate que encontre una mejor forma de ubicar el teclado... En AH con la interrucion 16h AH= 2
queda el valor de la tecla pulsada segun la disposicion del teclado, asi el uno comienza con 02, el 2 con 03... despues la Q con 10, la A ya no me acuerdo, lo deje en las notas de abajo.. yo lo voy a ir mejorando... lo que hace el codigo es dibujar el teclado, pero no le coloque todabia las letras vos ingresa la tecla y se coloca el caracter correspondiente a la tecla pulsada... es decir, si es mayuscula te aparecera un mayuscula y sino lo contrario.
Tengo que modificar la macro increible,... porque?... facil porque quiero usar la int 10, para poder colorear los bordes del teclado con la macro, despues hacer un barrido a la proxima tecla pulsada, creo que es un buen comienzo, te dejo con notas y todo el codigo... tal como lo voy trabajando.

Macro printCa cad1
mov ah, 9
lea dx, cad1
int 21h
endm
Macro PosCur fila, columna
mov bh, 0

mov dh, fila
mov dl, columna
mov ah, 02
int 10h
endm
Macro PrintC Car
mov dl, car
mov ah, 2
int 21h
endm
Macro Codificar Num
mov al, num
mov bl, 3h
mul bl
add al, 01h
endm
Macro Color
MOV AH,02H
MOV DX,00H
INT 10H
MOV AX,0920H
MOV BL,17H
MOV CX,2000
INT 10H
endm

Macro XXY carINI, fila, Bucle
Local Print3, salida
mov cl, carINI
mov ch, 0h

Print3:
Codificar ch
PosCur fila, al
PrintC cl
inc cl
inc ch
cmp ch, bucle
je salida
jmp print3
salida:
endm

MACRO INCREIBLE CANT
LOCAL SONAJERO, SALIDA
MOV AH, 00H
MOV AL, CANT
MOV BL, 3H
MUL BL
ADD AL, 5H
MOV V1[0], AL
SONAJERO:

MOV SI, CX
SUB CX, 0101H
POSCUR CH, CL

PRINTCA BLOQUE1
ADD CX, 0200H
POSCUR CH, CL
PRINTCA BLOQUE2
SUB CX, 0100H
POSCUR CH, CL
PRINTC 0BAH
ADD CX, 0002H
POSCUR CH, CL
PRINTC 0BAH
MOV CX, SI
ADD CX, 0003H
CMP CL, V1[0]
JE SALIDA
JMP SONAJERO
SALIDA:
ENDM
Macro FILA

endm
org 100h

jmp inicio:
; 0123456789ABCDEF
BLOQUE1 DB 0C9H, 0CDH, 0BBH, '$'
BLOQUE2 DB 0C8H, 0CDH, 0BCH, '$'
COLUM DB 00H
V1 DB ?
inicio:

Color ;2 = ah = 02 >>> AH, 3
MOV CX, 0305H
INCREIBLE 10
MOV CX, 0605H
INCREIBLE 10
MOV CX, 0905H
INCREIBLE 10
MOV CX, 0C05H
INCREIBLE 7


mov cx, 000ah
mov bl, 5
OTRO:
mov ah, 0
int 16h; AH = -1 = *3, Posicion en Columna.
MOV SI, AX
XCHG AL, AH
mov ah, 00h
add al, 1h
mov bl, 0Fh
DIV BL
mov ch, ah
add ch, al
mov ah, 00h
mov bl, 3
mul bl
add al, 3h
MOV CL, AL
mov al, ch
mov bl, 3h
mul bl
sub al, 4h
POSCUR cl, al

MOV AX, SI
MOV DL, AL
MOV AH, 2
INT 21H
POSCUR 19,COLUM
ADD COLUM, 01H
PRINTC al
jmp otro
salir: ret

;Para obtener la columna
;2 +4 = 5 / A = 0 * 3 =0 ; 02-0B (02-11)
;10 - 8 (08)=2 +4 = 13 / A = 2 * 3 =6 ; 10-19 (16-25)
;1E - 1C(28)=2 +4 = 21 / A = 3 * 3 =9 ; 1E-26 (30-38)
;2C - 2A(42)=2 +4 = 30 / A = 4 * 3 =12 ; 2C-32 (44-50)

;Solucion: Numero + 1 / F---> resultado * 3 + 3 =
; 0 * 3 + 3 = 3
; 1 * 3 + 3 = 6
; 2 * 3 + 3 = 9
; 3 * 3 + 3 = 12

;maX CAR 50H = 80D

;Mirar bien, dividiendo por A respectivamente los resultados son...
; 0, 1, 3, 4
; Las columnas son:
; Numero 3
;Primera fila 6
;Segunda fila 9
;Tercera 12

;Obtencion de FILA
;XCHG AL, AH
;mov ah, 00h
;add al, 1h
;mov bl, 0Fh
;DIv BL
;mov ch, ah
;mov ah, 00h
;mov bl, 3
;mul bl
;add al, 3h

;COLUMNA
;FILA 1 empieza en 3 + 0(Columna Inicial) = 3 * 3 = 9 - 4 = 5
;FILA 2 empieza en 2 + 1(Columna Inicial) = 3
;FILA 3 empieza en 1 + 2(Columna Inicial) = 3
;FILA 4 empieza en 0 + 3(Columna Inicial) = 3
;EL 4 es la posicion en cantidad que se agrego para que arranque
;la impresion en pantalla.

;TECLAS EN PANTALLA, COMO DIBUJAR?
;Bloque1 0c9h = É 0cdh(X2) = ÍÍ 0BBh = » (0C9H, 0CDH, 0CDH, 0BBH)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:URGENTE... Como pintar el teclado en la pantall

Publicado por Perceval Ciro (23 intervenciones) el 07/07/2008 14:26:04
Que tal, bueno este ,me gusta mas... despues lo arreglo para que quede presentable.

Macro printCa cad1
mov ah, 9
lea dx, cad1
int 21h
endm
Macro PosCur fila, columna
mov bh, 0

mov dh, fila
mov dl, columna
mov ah, 02
int 10h
endm
Macro PrintC Car
mov dl, car
mov ah, 2
int 21h
endm
Macro Codificar Num
mov al, num
mov bl, 3h
mul bl
add al, 01h
endm
Macro Color
MOV AH,02H
MOV DX,00H
INT 10H
MOV AX,0920H
MOV BL,17H
MOV CX,2000
INT 10H
endm

Macro XXY carINI, fila, Bucle
Local Print3, salida
mov cl, carINI
mov ch, 0h

Print3:
Codificar ch
PosCur fila, al
PrintC cl
inc cl
inc ch
cmp ch, bucle
je salida
jmp print3
salida:
endm

MACRO INCREIBLE INT1, INT2, VAR, VAR1, VAR2

MOV CH, INT1
MOV CL, INT2
SUB CX, 0101H
POSCUR CH, CL
PRINTCA VAR
ADD CX, 0200H
POSCUR CH, CL
PRINTCA VAR1
SUB CX, 0100H
POSCUR CH, CL
PRINTC VAR2
ADD CX, 0002H
POSCUR CH, CL
PRINTC VAR2

ENDM
org 100h

jmp inicio:
a1 db 10 dup(0C9H, 0CDH, 0BBH),0ah,0dh,'$';
a2 db 10 DUP(0BAH, 00H, 0BAH),0ah,0dh,'$'
a3 db 10 dup(0C8H, 0CDH, 0BCH),0ah, 0dh,'$'
B1 DB '1234567890'
B2 DB 'QWERTYUIOP'
B3 DB 'ASDFGHJKLÑ'
B4 DB 'ZXCVBNM,.-'
BLOQUE1 DB 0C9H, 0CDH, 0BBH, '$'
BLOQUE2 DB 0C8H, 0CDH, 0BCH, '$'
BLOQUE3 DB 0DAH, 0C4H, 0BFH, '$'
BLOQUE4 DB 0C0H, 0C4H, 0D9H, '$' ;B3
KEYANT DB ?,?
COLUM DB 00H
CONT DB 0
CARACT DB ?
V1 DB ?
inicio:

Color
MOV CX, 4
MOV BL, 2

BU:
Poscur BL,4
printca a1
INC BL
Poscur BL,4
printca a2
INC BL
Poscur BL,4
PRINTCA A3
INC BL
LOOP BU
MOV CX, 10
MOV SI, 0
MOV BL, 5
LE1:
POSCUR 3,BL
MOV DL, B1[SI]
MOV AH, 2
INT 21H
POSCUR 6, BL
MOV DL, B2[SI]
MOV AH, 2
INT 21H
POSCUR 9, BL
MOV DL, B3[SI]
MOV AH, 2
INT 21H
POSCUR 12, BL
MOV DL, B4[SI]
MOV AH, 2
INT 21H
INC SI
ADD BL, 3
LOOP LE1

OTRO:
mov ah, 0
int 16h
MOV CARACT[0], AL
XCHG AL, AH
mov ah, 00h
add al, 1h
mov bl, 0Fh
DIV BL
mov ch, ah
add ch, al
mov ah, 00h
mov bl, 3
mul bl
add al, 3h
MOV CL, AL
mov al, ch
mov bl, 3h
mul bl
sub al, 4h
MOV AH, CL
CMP CONT[0], 0
PUSH AX
JNE ANT
JE PROSEGUR
ANT:

INCREIBLE KEYANT[0], KEYANT[1], BLOQUE1, BLOQUE2, 0BAH

PROSEGUR:
POP AX
MOV KEYANT[0], AH
MOV KEYANT[1], AL
INCREIBLE AH, AL, BLOQUE3, BLOQUE4, 0B3H
MOV AX, SI
POSCUR 19,COLUM
ADD COLUM, 01H
PRINTC CARACT[0]
INC CONT[0]
jmp otro
salir: ret

;Para obtener la columna
;2 +4 = 5 / A = 0 * 3 =0 ; 02-0B (02-11)
;10 - 8 (08)=2 +4 = 13 / A = 2 * 3 =6 ; 10-19 (16-25)
;1E - 1C(28)=2 +4 = 21 / A = 3 * 3 =9 ; 1E-26 (30-38)
;2C - 2A(42)=2 +4 = 30 / A = 4 * 3 =12 ; 2C-32 (44-50)

;Solucion: Numero + 1 / F---> resultado * 3 + 3 =
; 0 * 3 + 3 = 3
; 1 * 3 + 3 = 6
; 2 * 3 + 3 = 9
; 3 * 3 + 3 = 12

;maX CAR 50H = 80D

;Mirar bien, dividiendo por A respectivamente los resultados son...
; 0, 1, 3, 4
; Las columnas son:
; Numero 3
;Primera fila 6
;Segunda fila 9
;Tercera 12

;Obtencion de FILA
;XCHG AL, AH
;mov ah, 00h
;add al, 1h
;mov bl, 0Fh
;DIv BL
;mov ch, ah
;mov ah, 00h
;mov bl, 3
;mul bl
;add al, 3h

;COLUMNA
;FILA 1 empieza en 3 + 0(Columna Inicial) = 3 * 3 = 9 - 4 = 5
;FILA 2 empieza en 2 + 1(Columna Inicial) = 3
;FILA 3 empieza en 1 + 2(Columna Inicial) = 3
;FILA 4 empieza en 0 + 3(Columna Inicial) = 3
;EL 4 es la posicion en cantidad que se agrego para que arranque
;la impresion en pantalla.

;TECLAS EN PANTALLA, COMO DIBUJAR?
;Bloque1 0c9h = É 0cdh(X2) = ÍÍ 0BBh = » (0C9H, 0CDH, 0CDH, 0BBH)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:URGENTE... Como pintar el teclado en la pantall

Publicado por Perceval Ciro (23 intervenciones) el 07/07/2008 23:35:26
Fijate que con el codigo anterior podes descubrir la ubicacion de un par de letras mas ... y otras se mezclan, queda en vos diferenciarlas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:URGENTE... Como pintar el teclado en la pantall

Publicado por mariledy (2 intervenciones) el 10/07/2008 14:33:19
Muchas gracias Percelval, no sabes como me has ayudado, yo no te habia respondido antes porque no tenia conexion desde el dia 4, hasta ahora que acabo de leer todas tus respuestas, de nuevo gracias.
Aqui tienes una amiga.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:URGENTE... Como pintar el teclado en la pantall

Publicado por mariledy (2 intervenciones) el 10/07/2008 14:33:22
Muchas gracias Percelval, no sabes como me has ayudado, yo no te habia respondido antes porque no tenia conexion desde el dia 4, hasta ahora que acabo de leer todas tus respuestas, de nuevo gracias.
Aqui tienes una amiga.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:URGENTE... Como pintar el teclado en la pantall

Publicado por Perceval Ciro (23 intervenciones) el 10/07/2008 17:15:35
Es un Placer
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:URGENTE... Como pintar el teclado en la pantall

Publicado por abraham (1 intervención) el 25/11/2010 23:21:57
hola hmm tengo ese mismo trabajo no se si todavia existas pero pues necesito ayuda tambien.. tuve clases de ensamblador y necesito hacer que se vea el teclado. con que solo se vea y cuando tecleen algo, se ponga el codigo ascii de las letras o numeros.. pero el profe lo quiere hecho en masm de hace años entonces no lo puedo compilar ahi.. no se si me ayudaras a editarlo para que sirva en masm? D:
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:URGENTE... Como pintar una bandera

Publicado por karina  (1 intervención) el 05/03/2009 00:29:18
Mega Urgente.......Como pintar un abandera en el emu8086
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:URGENTE... Como pintar el teclado en la pantall

Publicado por jesus (1 intervención) el 09/12/2008 18:42:16
nesesito hacer un teclado en pantalla en lenguaje ensamblador .asm
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar