$modxx51 ;4-bitove pripojeni displeje, 12MHz krystal max. E equ P1.0 RS equ P1.1 ;DB4 equ P1.4 ;DB5 equ P1.5 ;DB6 equ P1.6 ;DB7 equ P1.7 mov P1,#255 clr E call Delay3 ;zpozdeni nez disp. po pripojeni napajeni muze prijimat data ;nejdriv inicializace v 8-bit modu do 4-bit modu mov P1,#00100000b ;4-bit mod nop mov P1,#00100001b nop mov P1,#00100000b ;znovu zbyte inicializace v 4-bit modu mov a,#00100000b ;4-bit mod, font 5x7 a jednoradkovy disp. acall PosliInstr ;ted zbytek inicializece uz 4-bitove mov a,#00000110b ;posuv kurzoru vpravo, a text se neposouva acall PosliInstr mov a,#00001111b ;zapnout disp., kurzor a blikani kurzoru acall PosliInstr mov a,#00000001b ;smaz displej a vrat kurzor na zacatek acall PosliInstr ;ted uz psani textu 1 mov dptr,#Text1 ;ukazatel na zacatek textu 1 mov R7,#0 ;nulovat ukazatel znaku Text1dalsi: mov a,R7 movc a,@a+dptr ;nacti znak z pozice R7 jz Text1OK ;jestli je znak 0, tak je text kompletni acall PosliData acall Delay3 ;zpozdeni 0.5s inc R7 ;dalsi znak jmp Text1dalsi ;vypis textu 2 Text1OK: acall Delay4 ;cekat asi 2s mov a,#00000010b ;nastav kurzor na zacatek radku acall PosliInstr mov dptr,#Text2 ;ukazatel na zacatek textu 2 mov R7,#0 ;nulovat ukazatel znaku Text2dalsi: mov a,R7 movc a,@a+dptr ;nacti znak z pozice R7 jz Text2OK ;jestli je znak 0, tak je text kompletni acall PosliData acall Delay3 ;zpozdeni 0.5s inc R7 ;dalsi znak jmp Text2dalsi ;vypis beziciho textu Text2OK: acall Delay4 ;cekat asi 2s mov a,#00000001b ;smazat displej acall PosliInstr mov a,#10010000b ;nastav adresu v DDRAM (kurzor) na pozici 16 acall PosliInstr mov a,#00000111b ;posun textu vlevo acall PosliInstr mov a,#00001100b ;vypnout kurzor a jeho blikani acall PosliInstr ;tady to zacina mov dptr,#Text3 ;ukazatel na zacatek textu 3 Text3OK: mov R7,#0 ;nulovat ukazatel znaku Text3dalsi: mov a,R7 movc a,@a+dptr ;nacti znak z pozice R7 jz Text3OK ;jestli je znak 0, tak pis znovu acall PosliData acall Delay3 ;zpozdeni 0.5s inc R7 ;dalsi znak jmp Text3dalsi ;tady jsou zobrazovane texty a jsou zakonceny 0 Text1: db 'Text 1, 2*1519',0 Text2: db 'Prepis',0 Text3: db 'Bezici text ............... bezi, bezi a bezi ........',0 ;podprogram "posli data na displej" PosliData: setb RS ;RS na log.1 - zapis dat acall PosliSpol ;deleni A na horni a dolni pulku acall Delay1 ;zpozdeni 100us ret ;podprogram "posli instrukci displeji" PosliInstr: clr RS ;RS na log.0 - zapis instrukce acall PosliSpol ;deleni A na horni a dolni pulku acall Delay2 ;zpozdeni asi 2ms ret ;vyber horni/dolni polovina bytu z A PosliSpol: push acc ;zaloha acc acall PosliNaP1 ;vyslani na P1 pop acc ;obnoveni acc swap a ;prohozeni hornich a dolnich 4 bitu v a acall PosliNaP1 ;vyslani na P1 ret ;vyslani horni poloviny a na P1 a pulz na E PosliNaP1: anl a,#11110000b ;vyber horni pulku A mov R0,a ;uloz do R0 mov a,P1 ;nacti do a P1 anl a,#00001111b ;vyber dolni pulku orl a,#00001100b ;nastav bity 2 a 3 orl a,R0 ;kombinuj s R0 mov P1,a ;posli na P1 vysledek nop ;pulz na E pin setb E nop clr E ret ;zpozdeni asi 100us Delay1: mov R0,#50 djnz R0,$ ret ;zpozdeni asi 2ms Delay2: mov b,#20 Delay2loop: acall Delay1 djnz b,Delay2loop ret ;zpozdeni asi 0.5s Delay3: mov b,#2 Delay3loop2: mov R0,#0 Delay3loop1: mov R1,#0 djnz R1,$ djnz R0,Delay3loop1 djnz b,Delay3loop2 ret ;zpozdeni asi 2s Delay4: mov b,#15 jmp Delay3loop2 end