$modxx51 ;vytvareni vlastnich znaku, 8-bitova sbernice, 12MHz krystal max. E equ P3.1 RS equ P3.0 ;DB0 equ P1.0 ;DB1 equ P1.1 ;DB2 equ P1.2 ;DB3 equ P1.3 ;DB4 equ P1.4 ;DB5 equ P1.5 ;DB6 equ P1.6 ;DB7 equ P1.7 mov P1,#255 mov P3,#255 clr E call Delay3 ;zpozdeni nez disp. po pripojeni napajeni muze prijimat data ;inicializace mov a,#00110000b ;8-bit mod, font 5x7 a jednoradkovy disp. acall PosliInstr ;ted zbytek inicializece mov a,#00000110b ;posuv kurzoru vpravo, a text se neposouva acall PosliInstr mov a,#00001100b ;zapnout disp., vypnout kurzor acall PosliInstr mov a,#00000001b ;smaz displej a vrat kurzor na zacatek acall PosliInstr ;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.2s inc R7 ;dalsi znak jmp Text1dalsi ;pis dalsi Text1OK: acall Delay4 ;cekat asi 2s ;ted se vyrobi vlastni znaky mov dptr,#Znaky ;ukazatel na tabulku znaku mov R7,#0 ;adresa v CGRAM DalsiRadek: mov a,R7 orl a,#01000000b ;nastav 6. bit (zapis do CGRAM) acall PosliInstr mov a,R7 movc a,@a+dptr ;nacti radek acall PosliData ;posli do CGRAM inc R7 ;vzys adresu v CGRAM cjne R7,#16,DalsiRadek ;az je adresa 16, je hotovo ;znaky jsou ulozeny v CGRAM, zobrazeni dalsiho textu mov a,#00000001b ;mazat displej acall PosliInstr mov dptr,#Text2 ;ukazatel na text 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.2s inc R7 ;dalsi znak jmp Text2dalsi ;pis dalsi Text2OK: jmp $ ;tady jsou zobrazovane texty a jsou zakonceny 0 Text1: db 'Zkusebni text',0 Text2: db 'Zku',8,'ebn',9,' text',0 ;tabulka pro vytvoreni vlastnich znaku ;s + hacek Znaky: db 00001010b db 00000100b db 00001111b db 00010000b db 00001110b db 00000001b db 00011110b db 00000000b ;kurzor ;i + carka db 00000010b db 00000100b db 00001100b db 00000100b db 00000100b db 00000100b db 00001110b db 00000000b ;kurzor ;podprogram "posli data na displej" PosliData: setb RS ;RS na log.1 - zapis dat acall PosliSpol ;posli displeji acall Delay1 ;zpozdeni 100us ret ;podprogram "posli instrukci displeji" PosliInstr: clr RS ;RS na log.0 - zapis instrukce acall PosliSpol ;posli displeji acall Delay2 ;zpozdeni asi 2ms ret ;vlastni vyslani bytu PosliSpol: mov P1,a ;posli data na P1 nop ;pulz na E 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.2s Delay3: mov b,#1 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