📄 tester.a51
字号:
;Zdrojak pro testovani displeju Elatec
;Napsano pro ATMEL 89C2051
;pripojeny krystal 8MHz
RS equ p3.5 ;pin command / data select
RW EQU P3.4 ;data read/write
ENB equ p3.7 ;enable signal
RAD1 EQU 80h ;1 radek displeje
RAD2 EQU 0C0h ;2 radek displeje
RAD3 EQU 90h ;3 radek displeje
RAD4 EQU 0d0h ;4 radek displeje
org 0
jmp start
lcdbusy: ;test LCD na pripravenost
push acc ;uschova akumulator
lcd_b: setb rw ;R/W - '1'
clr rs ;RS - '0'
setb enb ;E - '1' enable po dobu min 220ns
mov acc,p1 ;do akumulatoru data z displeje
clr enb ;E - '0'
jb acc.7,lcd_b ;test BF jestli 1 skok na nove testovani
pop acc ;obnov akumulator
ret
;----------------------------------------------------------------
wait_power: ; ceka 15ms po zapnuti napajeni
mov r0,#28h ;40x255=10200 * 1.5us = 15.3ms
wait_next: mov r1,#0 ;r1=0
djnz r1,$
djnz r0,wait_next ;cyklus cekani 15ms
ret
;----------------------------------------------------------------
wait_init: ; ceka 4.2ms po inicializaci
mov r0,#0bh ;11x255=2805 * 1.5us = 4.2ms
wait_next1: mov r1,#0 ;r1=0
djnz r1,$
djnz r0,wait_next1 ;cyklus cekani 4.2ms
ret
;----------------------------------------------------------------
lcd_drive: ;posle ridici kod na displej
call lcdbusy ;test BF busy flag
clr rw ;R/W - '0'
clr rs ;RS - '0'
mov p1,a ;ridici znak na port P1
setb enb ;E - '1' enable po dobu min 220ns
clr enb ;E - '0'
ret
;-----------------------------------------------------------------
lcd_disp: ;zobrazi znak na displej
call lcdbusy ;test BF busy flag
clr rw ;R/W - '0'
setb rs ;RS - '1'
mov p1,a ;zobrazovany znak na port P1
setb enb ;E - '1' enable po dobu min 220ns
clr enb ;E - '0'
ret
;----------------------------------------------------------------
lcd_string:
clr a ;nuluje A
movc a,@a+DPTR ;do A znak na adrese DPTR
jz exit ;ukonceni kdyz je v A 0h
acall lcd_disp ;zobraz znak v A
inc DPTR ;zvetsi ukazatel DPTR o 1
sjmp lcd_string ;dalsi znak
exit: ret
;---------------------------------------------------------
start: ;zacatek programu
call wait_power ;cekani 15ms po zapnuti napajeni
mov a,#38h ;8 bits, 2 rows, 5 x 7 dots
call lcd_drive ;posle ridici znak na displej
call wait_init ;ceka dalsich 4,2ms
mov a,#08h ; display off,cursor off,no blink
call lcd_drive
mov a,#01h ; clear display
call lcd_drive
call wait_init ;cekej na clear
mov a,#0Ch ; display on, cursor off
call lcd_drive
mov a,#14h ; auto-increment, shift cursor
call lcd_drive
mov a,#RAD1 ;pozice 0, 1 radek
acall lcd_drive
mov DPTR,#Text1 ;do DPTR adresu 1 znaku sringu Text1
acall lcd_string ;zobrazi cely string na 1 radek
mov a,#RAD2 ;pozice 0, 2 radek
acall lcd_drive
mov dptr,#Text2 ;do DPTR adresu 1 znaku sringu Text2
acall lcd_string ;zobrazi cely string na 2 radek
mov a,#RAD3 ;pozice 0, 3 radek
acall lcd_drive
mov dptr,#Text3 ;do DPTR adresu 1 znaku sringu Text2
acall lcd_string ;zobrazi cely string na 3 radek
mov a,#RAD4 ;pozice 0, 4 radek
acall lcd_drive
mov dptr,#Text4 ;do DPTR adresu 1 znaku sringu Text2
acall lcd_string ;zobrazi cely string na 4 radek
jmp $
Text1: db 'Tester Displeje',00h
Text2: db 'Verze 1.0 ready.',00h
Text3: db 'Toto je 3 radek.',00h
Text4: db 'Toto je 4 radek.',00h
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -