20*350ZO45°
Word moeilijk, toen ik nog een hd44780 had ben ik nooit iets voor de amiga tegengekomen
Echt raar eigenlijk, ik kan voor mijn Commodore CDTV (Amiga500 compatible) echt wel zeer leuke dingen bedenken om door te sturen naar de LCD, ik heb niet een volledig operating programma nodig net als Smartie, maar ik wil natuurlijk wel een klein opzetje.Stealth2000 schreef op 03 augustus 2002 @ 09:17:
Word moeilijk, toen ik nog een hd44780 had ben ik nooit iets voor de amiga tegengekomen
20*350ZO45°
check deze eens. Zoek even naar LCD op de pagina
Ég er eins ánægður og ég get orðið.
Verwijderd
Wat grappig, ik heb 9 jaar geleden een programma geschreven op mijn Amiga om een display met de HD44780 aan te sturen! Deze versie ondersteunt een 1-regelig display met 16 karakters, maar is heel makkelijk aan te passen. Hoe je hem kan aansluiten op de printerpoort heb ik er ook even bijgezet. Het assembleren heb ik gedaan met MasterSeka.
;lcd6.s
;Dit programma stuurt een 1*16 karakter-LCD-display van Hitachi aan.
;(Typenr. van Hitachi processor: HD44780)
;De LCD-displaymodule kan rechtstreeks worden aangesloten op de
;printerpoort!
;Aansluiten:
;LCD Display Module Printerpoort
; 1 Vss 20 GND
; 2 Vdd 14 +5V
; 3 Vlc 20 GND (kontrast LCD display)
; 4 RS (register select) 11 BUSY
; 5 R/W 12 POUT
; 6 E (enable) 13 SEL
; 7 DB0 2 D0
; 8 DB1 3 D1
; 9 DB2 4 D2
; 10 DB3 5 D3
; 11 DB4 6 D4
; 12 DB5 7 D5
; 13 DB6 8 D6
; 14 DB7 9 D7
;
;Gemaakt door Martin Meyerink op 3 juli 1993.
;Gebruik: <naam van dit programma> <parameter>
;de parameter is een string van 16 of minder karakters
;Hoofdprogramma:
bsr getstr ;haal parameter vanuit AmigaDOS op
bsr initprt ;initialiseer poort
bsr initlcd ;initialiseer lcd display module
bsr initgfx ;eigen karakters definieren
lea data1,a0 ;pointer naar data1
bsr update
move.l #0,d0
rts
update: move.w #$80,d0 ;cursor naar 1e positie
bsr send
move.w #$100,d0 ;bit 8 = register select
uloop1: move.b (a0)+,d0 ;haal 8 letters uit geheugen
bsr send ;stuur naar display
cmpi.l #data1+$08,a0
bne uloop1
move.w #$c0,d0 ;cursor naar 9e positie
bsr send
uloop2: move.w #$100,d0
move.b (a0)+,d0 ;haal de laatste 8 letters op
bsr send ;stuur naar display
cmpi.l #data1+$10,a0
bne uloop2
rts
initprt:move.b #$ff,$bfe301 ;ddr par poort wordt uitgang
move.b $bfd200,d0
ori.b #$07,d0 ;sel, pout en busy
move.b d0,$bfd200 ;ddr besturingssignalen
rts
initlcd:move.w #$38,d0 ;3 maal $38 sturen voor reset
bsr send
bsr delay2
move.w #$38,d0
bsr send
bsr delay2
move.w #$38,d0
bsr send
bsr delay2
move.w #$01,d0 ;clear display
bsr send
bsr delay2 ;na scherm wissen wat langer wachten
move.w #$0c,d0 ;display on
bsr send
move.w #$06,d0 ;2*8 lines
bsr send
rts
send: bsr delay
btst #8,d0 ;test rs bit
beq reg0
bsr rs1 ;selecteer register 1
bra skip
reg0: bsr rs0 ;selecteer register 0
skip:
bsr delay
bsr rw0 ;read/write=0 (write dus)
bsr delay
bsr e1 ;enable = 1
bsr delay
move.b d0,$bfe101 ;zet data op poort
bsr delay
bsr e0 ;data inklokken
bsr delay
rts
delay: move.w #$20,d1
dloop: subi #1,d1
bne dloop
rts
delay2: move.w #$800,d1
dloop2: subi #1,d1
bne dloop2
rts
e0: move.b $bfd000,d2
andi.b #%11111011,d2
move.b d2,$bfd000
rts
e1: move.b $bfd000,d2
ori.b #%00000100,d2
move.b d2,$bfd000
rts
rw0: move.b $bfd000,d2
andi.b #%11111101,d2
move.b d2,$bfd000
rts
rw1: move.b $bfd000,d2
ori.b #%00000010,d2
move.b d2,$bfd000
rts
rs0: move.b $bfd000,d2
andi.b #%11111110,d2
move.b d2,$bfd000
rts
rs1: move.b $bfd000,d2
ori.b #%00000001,d2
move.b d2,$bfd000
rts
initgfx:move.w #$40,d0 ;karakter 0, Hartje
bsr send
move.w #%100000000,d0
bsr send
move.w #%100001010,d0
bsr send
move.w #%100011111,d0
bsr send
move.w #%100011111,d0
bsr send
move.w #%100001110,d0
bsr send
move.w #%100000100,d0
bsr send
move.w #%100000000,d0
bsr send
move.w #%100000000,d0
bsr send
move.w #$48,d0 ;karakter 1, Telefoon
bsr send
move.w #%100000000,d0
bsr send
move.w #%100011111,d0
bsr send
move.w #%100010101,d0
bsr send
move.w #%100001110,d0
bsr send
move.w #%100001010,d0
bsr send
move.w #%100011011,d0
bsr send
move.w #%100011111,d0
bsr send
move.w #%100000000,d0
bsr send
move.w #$50,d0 ;karakter 2, Smiley
bsr send
move.w #%100001110,d0
bsr send
move.w #%100011111,d0
bsr send
move.w #%100010101,d0
bsr send
move.w #%100011111,d0
bsr send
move.w #%100010001,d0
bsr send
move.w #%100011011,d0
bsr send
move.w #%100001110,d0
bsr send
move.w #%100000000,d0
bsr send
move.w #$58,d0 ;karakter 3, Copyright
bsr send
move.w #%100001110,d0
bsr send
move.w #%100010001,d0
bsr send
move.w #%100010111,d0
bsr send
move.w #%100011001,d0
bsr send
move.w #%100010111,d0
bsr send
move.w #%100010001,d0
bsr send
move.w #%100001110,d0
bsr send
move.w #%100000000,d0
bsr send
move.w #$60,d0 ;karakter 4, Backslash
bsr send
move.w #%100000000,d0
bsr send
move.w #%100010000,d0
bsr send
move.w #%100001000,d0
bsr send
move.w #%100000100,d0
bsr send
move.w #%100000010,d0
bsr send
move.w #%100000001,d0
bsr send
move.w #%100000000,d0
bsr send
move.w #%100000000,d0
bsr send
move.w #$68,d0 ;karakter 5, Klein vierkantje
bsr send
move.w #%100000000,d0
bsr send
move.w #%100011110,d0
bsr send
move.w #%100010010,d0
bsr send
move.w #%100010010,d0
bsr send
move.w #%100010010,d0
bsr send
move.w #%100011110,d0
bsr send
move.w #%100000000,d0
bsr send
move.w #%100000000,d0
bsr send
move.w #$70,d0 ;karakter 6, Alarm Bel
bsr send
move.w #%100000000,d0
bsr send
move.w #%100000100,d0
bsr send
move.w #%100001110,d0
bsr send
move.w #%100001110,d0
bsr send
move.w #%100001110,d0
bsr send
move.w #%100011111,d0
bsr send
move.w #%100000100,d0
bsr send
move.w #%100000000,d0
bsr send
move.w #$78,d0 ;karakter 7, Glaasje
bsr send
move.w #%100010001,d0
bsr send
move.w #%100010001,d0
bsr send
move.w #%100011111,d0
bsr send
move.w #%100001110,d0
bsr send
move.w #%100000100,d0
bsr send
move.w #%100000100,d0
bsr send
move.w #%100001110,d0
bsr send
move.w #%100000000,d0
bsr send
move.w #$80,d0
bsr send
rts
getstr: lea data1,a1 ;hier word string neergezet
subq #2,d0 ;van DOS krijgen we de lengte
gloop: move.b (a0)+,d1
bsr altchr ;8 zelfgedef. chrs vertalen
cmp.b #$60,d1 ;test op quote `
bne noq ;geen quote dus
move.b #$20,d1 ;quote wordt spatie
noq: move.b d1,(a1)+ ;kopieer string
cmp.l #data1+$10,a1 ;string te lang? dan stoppen
beq quit
dbra d0,gloop ;tel lengte string af
quit: rts
altchr: cmp.b #$A2,d1 ;hartje
bne test1
move.b #$00,d1
test1: cmp.b #$B9,d1 ;telefoon
bne test2
move.b #$01,d1
test2: cmp.b #$B2,d1 ;smiley
bne test3
move.b #$02,d1
test3: cmp.b #$B3,d1 ;copyright
bne test4
move.b #$03,d1
test4: cmp.b #$5C,d1 ;backslash
bne test5
move.b #$04,d1
test5: cmp.b #$BC,d1 ;klein vierkantje
bne test6
move.b #$05,d1
test6: cmp.b #$BD,d1 ;alarm bel
bne test7
move.b #$06,d1
test7: cmp.b #$BE,d1 ;glaasje
bne tquit
move.b #$07,d1
tquit: rts
; 0123456789ABCDEF
data1: dc.b "vervang deze mededeling door 16 spaties"
;lcd6.s
;Dit programma stuurt een 1*16 karakter-LCD-display van Hitachi aan.
;(Typenr. van Hitachi processor: HD44780)
;De LCD-displaymodule kan rechtstreeks worden aangesloten op de
;printerpoort!
;Aansluiten:
;LCD Display Module Printerpoort
; 1 Vss 20 GND
; 2 Vdd 14 +5V
; 3 Vlc 20 GND (kontrast LCD display)
; 4 RS (register select) 11 BUSY
; 5 R/W 12 POUT
; 6 E (enable) 13 SEL
; 7 DB0 2 D0
; 8 DB1 3 D1
; 9 DB2 4 D2
; 10 DB3 5 D3
; 11 DB4 6 D4
; 12 DB5 7 D5
; 13 DB6 8 D6
; 14 DB7 9 D7
;
;Gemaakt door Martin Meyerink op 3 juli 1993.
;Gebruik: <naam van dit programma> <parameter>
;de parameter is een string van 16 of minder karakters
;Hoofdprogramma:
bsr getstr ;haal parameter vanuit AmigaDOS op
bsr initprt ;initialiseer poort
bsr initlcd ;initialiseer lcd display module
bsr initgfx ;eigen karakters definieren
lea data1,a0 ;pointer naar data1
bsr update
move.l #0,d0
rts
update: move.w #$80,d0 ;cursor naar 1e positie
bsr send
move.w #$100,d0 ;bit 8 = register select
uloop1: move.b (a0)+,d0 ;haal 8 letters uit geheugen
bsr send ;stuur naar display
cmpi.l #data1+$08,a0
bne uloop1
move.w #$c0,d0 ;cursor naar 9e positie
bsr send
uloop2: move.w #$100,d0
move.b (a0)+,d0 ;haal de laatste 8 letters op
bsr send ;stuur naar display
cmpi.l #data1+$10,a0
bne uloop2
rts
initprt:move.b #$ff,$bfe301 ;ddr par poort wordt uitgang
move.b $bfd200,d0
ori.b #$07,d0 ;sel, pout en busy
move.b d0,$bfd200 ;ddr besturingssignalen
rts
initlcd:move.w #$38,d0 ;3 maal $38 sturen voor reset
bsr send
bsr delay2
move.w #$38,d0
bsr send
bsr delay2
move.w #$38,d0
bsr send
bsr delay2
move.w #$01,d0 ;clear display
bsr send
bsr delay2 ;na scherm wissen wat langer wachten
move.w #$0c,d0 ;display on
bsr send
move.w #$06,d0 ;2*8 lines
bsr send
rts
send: bsr delay
btst #8,d0 ;test rs bit
beq reg0
bsr rs1 ;selecteer register 1
bra skip
reg0: bsr rs0 ;selecteer register 0
skip:
bsr delay
bsr rw0 ;read/write=0 (write dus)
bsr delay
bsr e1 ;enable = 1
bsr delay
move.b d0,$bfe101 ;zet data op poort
bsr delay
bsr e0 ;data inklokken
bsr delay
rts
delay: move.w #$20,d1
dloop: subi #1,d1
bne dloop
rts
delay2: move.w #$800,d1
dloop2: subi #1,d1
bne dloop2
rts
e0: move.b $bfd000,d2
andi.b #%11111011,d2
move.b d2,$bfd000
rts
e1: move.b $bfd000,d2
ori.b #%00000100,d2
move.b d2,$bfd000
rts
rw0: move.b $bfd000,d2
andi.b #%11111101,d2
move.b d2,$bfd000
rts
rw1: move.b $bfd000,d2
ori.b #%00000010,d2
move.b d2,$bfd000
rts
rs0: move.b $bfd000,d2
andi.b #%11111110,d2
move.b d2,$bfd000
rts
rs1: move.b $bfd000,d2
ori.b #%00000001,d2
move.b d2,$bfd000
rts
initgfx:move.w #$40,d0 ;karakter 0, Hartje
bsr send
move.w #%100000000,d0
bsr send
move.w #%100001010,d0
bsr send
move.w #%100011111,d0
bsr send
move.w #%100011111,d0
bsr send
move.w #%100001110,d0
bsr send
move.w #%100000100,d0
bsr send
move.w #%100000000,d0
bsr send
move.w #%100000000,d0
bsr send
move.w #$48,d0 ;karakter 1, Telefoon
bsr send
move.w #%100000000,d0
bsr send
move.w #%100011111,d0
bsr send
move.w #%100010101,d0
bsr send
move.w #%100001110,d0
bsr send
move.w #%100001010,d0
bsr send
move.w #%100011011,d0
bsr send
move.w #%100011111,d0
bsr send
move.w #%100000000,d0
bsr send
move.w #$50,d0 ;karakter 2, Smiley
bsr send
move.w #%100001110,d0
bsr send
move.w #%100011111,d0
bsr send
move.w #%100010101,d0
bsr send
move.w #%100011111,d0
bsr send
move.w #%100010001,d0
bsr send
move.w #%100011011,d0
bsr send
move.w #%100001110,d0
bsr send
move.w #%100000000,d0
bsr send
move.w #$58,d0 ;karakter 3, Copyright
bsr send
move.w #%100001110,d0
bsr send
move.w #%100010001,d0
bsr send
move.w #%100010111,d0
bsr send
move.w #%100011001,d0
bsr send
move.w #%100010111,d0
bsr send
move.w #%100010001,d0
bsr send
move.w #%100001110,d0
bsr send
move.w #%100000000,d0
bsr send
move.w #$60,d0 ;karakter 4, Backslash
bsr send
move.w #%100000000,d0
bsr send
move.w #%100010000,d0
bsr send
move.w #%100001000,d0
bsr send
move.w #%100000100,d0
bsr send
move.w #%100000010,d0
bsr send
move.w #%100000001,d0
bsr send
move.w #%100000000,d0
bsr send
move.w #%100000000,d0
bsr send
move.w #$68,d0 ;karakter 5, Klein vierkantje
bsr send
move.w #%100000000,d0
bsr send
move.w #%100011110,d0
bsr send
move.w #%100010010,d0
bsr send
move.w #%100010010,d0
bsr send
move.w #%100010010,d0
bsr send
move.w #%100011110,d0
bsr send
move.w #%100000000,d0
bsr send
move.w #%100000000,d0
bsr send
move.w #$70,d0 ;karakter 6, Alarm Bel
bsr send
move.w #%100000000,d0
bsr send
move.w #%100000100,d0
bsr send
move.w #%100001110,d0
bsr send
move.w #%100001110,d0
bsr send
move.w #%100001110,d0
bsr send
move.w #%100011111,d0
bsr send
move.w #%100000100,d0
bsr send
move.w #%100000000,d0
bsr send
move.w #$78,d0 ;karakter 7, Glaasje
bsr send
move.w #%100010001,d0
bsr send
move.w #%100010001,d0
bsr send
move.w #%100011111,d0
bsr send
move.w #%100001110,d0
bsr send
move.w #%100000100,d0
bsr send
move.w #%100000100,d0
bsr send
move.w #%100001110,d0
bsr send
move.w #%100000000,d0
bsr send
move.w #$80,d0
bsr send
rts
getstr: lea data1,a1 ;hier word string neergezet
subq #2,d0 ;van DOS krijgen we de lengte
gloop: move.b (a0)+,d1
bsr altchr ;8 zelfgedef. chrs vertalen
cmp.b #$60,d1 ;test op quote `
bne noq ;geen quote dus
move.b #$20,d1 ;quote wordt spatie
noq: move.b d1,(a1)+ ;kopieer string
cmp.l #data1+$10,a1 ;string te lang? dan stoppen
beq quit
dbra d0,gloop ;tel lengte string af
quit: rts
altchr: cmp.b #$A2,d1 ;hartje
bne test1
move.b #$00,d1
test1: cmp.b #$B9,d1 ;telefoon
bne test2
move.b #$01,d1
test2: cmp.b #$B2,d1 ;smiley
bne test3
move.b #$02,d1
test3: cmp.b #$B3,d1 ;copyright
bne test4
move.b #$03,d1
test4: cmp.b #$5C,d1 ;backslash
bne test5
move.b #$04,d1
test5: cmp.b #$BC,d1 ;klein vierkantje
bne test6
move.b #$05,d1
test6: cmp.b #$BD,d1 ;alarm bel
bne test7
move.b #$06,d1
test7: cmp.b #$BE,d1 ;glaasje
bne tquit
move.b #$07,d1
tquit: rts
; 0123456789ABCDEF
data1: dc.b "vervang deze mededeling door 16 spaties"
[ Voor 0% gewijzigd door Verwijderd op 12-09-2002 22:36 . Reden: 16 spaties in laatste regel. Dus data1: dc.b <tab><doublequote><16 spaties><double-quote> ]
Is er een GNU toolchain voor Amiga? Gcc, make, libs, dat soort meuk. Dan zou je eens lcdproc kunnen proberen te bouwen. Met een beetje mazzel doet het configure script het, anders moet je de source flink gaan aanpassen.
Als je dat al hebt, is het waarschijnlijk simpeler om LCDInf Linux om te bouwen......
"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney
Verwijderd
O ja, wat ik nog ff vergeten was, je kunt het programmaatje (genaamd LCD6) als volgt vanuit AmigaDOS aanroepen:
1> LCD6 dit`is`een`test
Let op dat je deze quote ` gebruikt in plaats van een spatie!
Op het LCD-schermpje wordt deze gewoon weer omgezet naar een spatie.
1> LCD6 dit`is`een`test
Let op dat je deze quote ` gebruikt in plaats van een spatie!
Op het LCD-schermpje wordt deze gewoon weer omgezet naar een spatie.
Pagina: 1