This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;------------------------------------------ | |
; =================================== | |
; == lcd 應用控制 == | |
; == 2014/12/29 == | |
; == 蘇偉諺 4a037052 == | |
; =================================== | |
;------------------------------------------ | |
;開機後,lcd第一列顯示'0123456789abcdef',並閃爍3次,接著每個字元依序跳至第二列顯示 | |
;----------------------------------------------------------------------------- | |
; parameter define | |
;----------------------------------------------------------------------------- | |
lcd_enable equ p3.7 | |
lcd_rs equ p2.1 | |
lcd_bus equ p0 | |
;----------------------------------------------------------------------------- | |
; main program | |
;----------------------------------------------------------------------------- | |
org 00h | |
mov sp,#5fh | |
call initlcd | |
; call clrlcd | |
; mov r7,#20 | |
; call delay50ms | |
; mov dptr,#str | |
; call prtstring | |
; mov r7,#20 | |
; call delay50ms | |
; call clrlcd | |
; mov r7,#20 | |
; call delay50ms | |
; mov dptr,#str | |
; call prtstring | |
; mov r7,#20 | |
; call delay50ms | |
; call clrlcd | |
; mov r7,#20 | |
; call delay50ms | |
; mov dptr,#str | |
; call prtstring | |
; mov r7,#20 | |
; call delay50ms | |
mov r5,#3 | |
glint: call clrlcd;;;;;;; | |
mov r7,#20 | |
call delay50ms | |
mov dptr,#str | |
call prtstring | |
mov r7,#20 | |
call delay50ms | |
djnz r5,glint | |
; mov a,#1 | |
; mov b,#0 | |
; call goxy | |
; mov a,#20h | |
; call wrdr | |
; mov a,#2 | |
; mov b,#0 | |
; call goxy | |
; mov dptr,#str | |
; mov a,#0 | |
; movc a,@a+dptr | |
; call wrdr | |
; mov a,#1 | |
; mov b,#1 | |
; call goxy | |
; mov a,#20h | |
; call wrdr | |
; mov a,#2 | |
; mov b,#1 | |
; call goxy | |
; mov dptr,#str | |
; mov a,#1 | |
; movc a,@a+dptr | |
; call wrdr | |
mov r3,#0 | |
mov dptr,#str | |
appear: mov a,#1 | |
mov b,r3 | |
call goxy | |
mov a,#20h | |
call wrdr | |
mov a,#2 | |
mov b,r3 | |
call goxy | |
mov a,r3 | |
movc a,@a+dptr | |
call wrdr | |
inc r3 | |
mov r7,#20 | |
call delay50ms | |
cjne r3,#16,appear | |
jmp $ | |
str: db '0123456789abcdef','$' | |
;----------------------------------------------------------------------------- | |
; display string | |
;----------------------------------------------------------------------------- | |
prtstring: push acc ; | |
prtloop: clr a ; | |
movc a,@a+dptr ; | |
cjne a,#'$',next ; | |
sjmp endprt ; | |
next: acall wrdr ; | |
inc dptr ; | |
jmp prtloop ; | |
endprt: pop acc ; | |
ret ; | |
;----------------------------------------------------------------------------- | |
; initial lcd | |
;----------------------------------------------------------------------------- | |
initlcd: mov a,#38h | |
call wrir | |
mov a,#0dh | |
call wrir | |
mov a,#06h | |
call wrir | |
clrlcd: mov a,#01h | |
call wrir | |
mov r7,#40;清除需延遲2ms | |
call delay | |
ret | |
;----------------------------------------------------------------------------- | |
; go x line, y char | |
;----------------------------------------------------------------------------- | |
goxy: anl b,#00001111b ; | |
cjne a,#1,chk1 ; | |
mov a,b ; | |
add a,#10000000b ; | |
call wrir ; | |
ret ; | |
chk1: mov a,b ; | |
add a,#11000000b ; | |
call wrir ; | |
ret ; | |
;----------------------------------------------------------------------------- | |
; write control word to instruction register | |
;----------------------------------------------------------------------------- | |
wrir: clr lcd_rs ; | |
setb lcd_enable ; | |
mov lcd_bus,a ; | |
clr lcd_enable ; | |
mov r7,#1 ; | |
call delay ;delay 50us | |
ret ; | |
;----------------------------------------------------------------------------- | |
; write data to data register | |
;----------------------------------------------------------------------------- | |
wrdr: setb lcd_rs ; | |
setb lcd_enable ; | |
mov lcd_bus,a ; | |
clr lcd_enable ; | |
mov r7,#1 ; | |
call delay ;delay 50us | |
ret ; | |
;------------------------------------------------------------------------------- | |
; delay time=r7*0.05ms | |
;------------------------------------------------------------------------------- | |
delay: mov tmod,#00010001b ;timer 0 : mode 1 | |
loopdy: mov th0,#high(65536-50); | |
mov tl0,#low(65536-50); | |
setb tr0 ; | |
wait: jnb tf0,wait ; | |
clr tf0 ; | |
clr tr0 ; | |
djnz r7,loopdy ; | |
ret ; | |
;------------------------------------------------------------------------------- | |
; delay time=r7*50ms | |
;------------------------------------------------------------------------------- | |
delay50ms: | |
loopdy1: mov th0,#high(65536-50000) | |
mov tl0,#low(65536-50000) | |
setb tr0 | |
jnb tf0,$ | |
clr tf0 | |
clr tr0 | |
djnz r7,loopdy1 | |
ret | |
end | |
沒有留言:
張貼留言
文章有誤或有問題麻煩您留言告知! 謝謝您~~