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 == | |
; == 蘇偉諺 == | |
; ================================== | |
;------------------------------------------ | |
;於lcd顯示第二列顯示'THIS IS 2ND LINE'並閃爍三次,然後由左而右依序清除 | |
;----------------------------------------------------------------------------- | |
; 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 | |
mov r5,#3 | |
glint: call clrlcd;;;;;;; | |
mov r7,#20 | |
call delay50ms | |
mov a,#1 | |
mov b,#0 | |
call goxy | |
mov dptr,#str | |
call prtstring | |
mov r7,#20 | |
call delay50ms | |
djnz r5,glint | |
mov r4,#16 | |
mov b,#15 | |
clrrr: mov a,#1 | |
call goxy | |
mov a,#20h | |
call wrdr | |
mov r7,#20 | |
call delay50ms | |
dec b | |
djnz r4,clrrr | |
jmp $ | |
str: db 'THIS IS 2ND LINE','$' | |
;----------------------------------------------------------------------------- | |
; go x line, y char | |
;----------------------------------------------------------------------------- | |
goxy: anl b,#00001111b | |
cjne a,#1,chk1 | |
mov a,b | |
add a,#10000000b;setb a.7 orl 10000000b | |
call wrir | |
ret | |
chk1: mov a,b | |
add a,#11000000b | |
call wrir | |
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 | |
;------------------------------------------------------------------------------- | |
; delay time=r7*0.05ms | |
;------------------------------------------------------------------------------- | |
delay: mov tmod,#00100001b | |
dloop: mov th0,#high(65536-50) | |
mov tl0,#low(65536-50) | |
setb tr0 | |
jnb tf0,$ | |
clr tr0 | |
clr tf0 | |
djnz r7,dloop | |
ret | |
;------------------------------------------------------------------------------- | |
; delay time=r7*50ms | |
;------------------------------------------------------------------------------- | |
delay50ms: | |
dloop1: mov th0,#high(65536-50000) | |
mov tl0,#low(65536-50000) | |
setb tr0 | |
jnb tf0,$ | |
clr tr0 | |
clr tf0 | |
djnz r7,dloop1 | |
ret | |
prtstring: push acc | |
prtloop: clr a | |
movc a,@a+dptr | |
cjne a,#'$',next | |
jmp endprt | |
next: call wrdr | |
inc dptr | |
jmp prtloop | |
endprt: pop acc | |
ret | |
;----------------------------------------------------------------------------- | |
; write control word to instruction register | |
;----------------------------------------------------------------------------- | |
wrir: setb lcd_enable | |
clr lcd_rs | |
mov lcd_bus,a | |
clr lcd_enable | |
mov r7,#1 | |
call delay | |
ret | |
;----------------------------------------------------------------------------- | |
; write data to data register | |
;----------------------------------------------------------------------------- | |
wrdr: setb lcd_enable | |
setb lcd_rs | |
mov lcd_bus,a | |
clr lcd_enable | |
mov r7,#1 | |
call delay | |
ret | |
end |
沒有留言:
張貼留言
文章有誤或有問題麻煩您留言告知! 謝謝您~~