Witam,
mam na zaliczenie z pracowni napisać taki program:
na wyświetlaczu LCD w Dsm-51 w pierwszej lini ma być moje imie i nazwisko a w lini pod spodem imie i nazwisko kolegi z tym ze ma zawierac polskie znaki.z tym sobie umię poradzić. problem jest w tym ze po naciśnięciu klawisza ENTER na klawiaturze matrycowej imiona i nazwiska mają się zamienić miejscami (gorna linia na miesjce dolnej i na odwrót).mam już coś takiego i dalej nie rusze:
LJMP START
ORG 100H
START:
MOV R0,#LCDWC
MOV R1,#LCDRC
MOV A,#48H
LCALL WRITE
INC R0
MOV DPTR,#LITERA
MOV R3,#8
LOOP:
CLR A
MOVC A,@A+DPTR
LCALL WRITE
INC DPTR
DJNZ R3,LOOP
DEC R0
MOV A,#1
LCALL WRITE
MOV A,#0FH
LCALL WRITE
;kursora
INC R0
MOV DPTR,#TEXT
WRITE_TXT:
CLR A
MOVC A,@A+DPTR
JZ TEXT_END
LCALL WRITE
INC DPTR
SJMP WRITE_TXT
TEXT_END:
DEC R0
MOV DPTR,#KEY_COD
LOOP1:
LCALL WAIT_KEY
CJNE A,#0AEH,NO_DOWN
DOWN:
MOVX A,@R1
JB ACC.7,DOWN
MOVX A,@R1
CPL ACC.6
SETB ACC.7
ACALL WRITE
SJMP LOOP
NO_DOWN:
MOV R2,A
MOVC A,@A+DPTR
JZ WRITE_DAT
ACALL WRITE
SJMP LOOP1
WRITE_DAT:
MOV A,R2
ADD A,#30H
INC R0
ACALL WRITE
DEC R0
SJMP LOOP
;**************************************
;Podprogram wpisu danych lub instrukcji
;na wyświetlacz LCD
;Zakłada prawidłowe adresy w R0 i R1
WRITE:
MOV R2,A
BUSY:
MOVX A,@R1
JB ACC.7,BUSY
MOV A,R2
MOVX @R0,A
RET
;**************************************
;Tabela przekodowania numeru klawisza
;na instrukcję, 0->klawisz jako znak
KEY_COD:
DB 30H,31H,32H ;0,1,2
DB 33H,34H,35H ;3,4,5
DB 36H,37H,38H ;6,7,8
DB 39H,3CH,3EH ;9,<,>
DB 5EH,76H,7FH ;^,v,Esc
DB 0AEH ;Enter
;**************************************
;Tabela bajtów definiujących literę 'ś'
LITERA:
DB 00000010B
DB 00000100B
DB 00001110B
DB 00010000B
DB 00001110B
DB 00000001B
DB 00011110B
DB 00000000B
;**************************************
TEXT:
DB 'Imie i nazwisko '
DB 'Mi',1,' Uszatek ',0
Bardzo proszę o pomoc kogoś kto sie na tym zna, można nawet całkiem przerobić to co juz mam, byle było w asemblerze i pod 8051.
[Temat poprawiłem. Regulamin, punkt 11.1. Mariusz Ch.]
mam na zaliczenie z pracowni napisać taki program:
na wyświetlaczu LCD w Dsm-51 w pierwszej lini ma być moje imie i nazwisko a w lini pod spodem imie i nazwisko kolegi z tym ze ma zawierac polskie znaki.z tym sobie umię poradzić. problem jest w tym ze po naciśnięciu klawisza ENTER na klawiaturze matrycowej imiona i nazwiska mają się zamienić miejscami (gorna linia na miesjce dolnej i na odwrót).mam już coś takiego i dalej nie rusze:
LJMP START
ORG 100H
START:
MOV R0,#LCDWC
MOV R1,#LCDRC
MOV A,#48H
LCALL WRITE
INC R0
MOV DPTR,#LITERA
MOV R3,#8
LOOP:
CLR A
MOVC A,@A+DPTR
LCALL WRITE
INC DPTR
DJNZ R3,LOOP
DEC R0
MOV A,#1
LCALL WRITE
MOV A,#0FH
LCALL WRITE
;kursora
INC R0
MOV DPTR,#TEXT
WRITE_TXT:
CLR A
MOVC A,@A+DPTR
JZ TEXT_END
LCALL WRITE
INC DPTR
SJMP WRITE_TXT
TEXT_END:
DEC R0
MOV DPTR,#KEY_COD
LOOP1:
LCALL WAIT_KEY
CJNE A,#0AEH,NO_DOWN
DOWN:
MOVX A,@R1
JB ACC.7,DOWN
MOVX A,@R1
CPL ACC.6
SETB ACC.7
ACALL WRITE
SJMP LOOP
NO_DOWN:
MOV R2,A
MOVC A,@A+DPTR
JZ WRITE_DAT
ACALL WRITE
SJMP LOOP1
WRITE_DAT:
MOV A,R2
ADD A,#30H
INC R0
ACALL WRITE
DEC R0
SJMP LOOP
;**************************************
;Podprogram wpisu danych lub instrukcji
;na wyświetlacz LCD
;Zakłada prawidłowe adresy w R0 i R1
WRITE:
MOV R2,A
BUSY:
MOVX A,@R1
JB ACC.7,BUSY
MOV A,R2
MOVX @R0,A
RET
;**************************************
;Tabela przekodowania numeru klawisza
;na instrukcję, 0->klawisz jako znak
KEY_COD:
DB 30H,31H,32H ;0,1,2
DB 33H,34H,35H ;3,4,5
DB 36H,37H,38H ;6,7,8
DB 39H,3CH,3EH ;9,<,>
DB 5EH,76H,7FH ;^,v,Esc
DB 0AEH ;Enter
;**************************************
;Tabela bajtów definiujących literę 'ś'
LITERA:
DB 00000010B
DB 00000100B
DB 00001110B
DB 00010000B
DB 00001110B
DB 00000001B
DB 00011110B
DB 00000000B
;**************************************
TEXT:
DB 'Imie i nazwisko '
DB 'Mi',1,' Uszatek ',0
Bardzo proszę o pomoc kogoś kto sie na tym zna, można nawet całkiem przerobić to co juz mam, byle było w asemblerze i pod 8051.
[Temat poprawiłem. Regulamin, punkt 11.1. Mariusz Ch.]
.