با سلام.من یک برنامه ای نوشتم که داستانش از این قراره.8051 به یک صفحه کلید 4*4 وصل میشه و از طرف دیگه هم به یک LCD 2*16 خوب حالا وقتی کاربر مثلا عدد 5 را میزند روی صفحه نمایش نشان دهد یا مثلا اگر دکمه MOD از صفحه کلید را بزند کلمه MOD نمایش داده بشه.خوب من اول اومدم این اعداد و حروف را توی خانه های حافظه قرار دادم اما اخر هر خونه یک X گذاشتم یعنی مثلا اگر از خانه 40h شروع کنم و بخواهم عدد 6 را تو حافظه بذارم 40h=6 و 41h=X خواهد شد.حالا تو برنامه یک حلقه است که وقتی به X میرسه می فهمه که دیگه بیشتر از این نباید جلو بره.نمیدونم چرا هیچ چیز رو LCD نمایش نمیده فکر کنم مشکل از دستورات LCD باشه.کد های LCD را از کتاب مزیدی برداشتم.لطفا اگه میتونید کمک کنید.در ضمن اینو من رو پروتئوس شبیه سازی کردم و جواب نگرفتم.
p3.5=RS
p3.6=w/r
p3.7=E
org 400h
mov 30h,#'1'
mov 31h,#'x'
mov 32h,#'2'
mov 33h,#'x'
mov 34h,#'3'
mov 35h,#'x'
mov 36h,#'4'
mov 37h,#'x'
mov 38h,#'5'
mov 39h,#'x'
mov 3ah,#'6'
mov 3bh,#'x'
mov 3ch,#'7'
mov 3dh,#'x'
mov 3eh,#'8'
mov 3fh,#'x'
mov 40h,#'9'
mov 41h,#'x'
mov 42h,#'0'
mov 43h,#'x'
mov 44h,#'r'
mov 45h,#'e'
mov 46h,#'s'
mov 47h,#'e'
mov 48h,#'t'
mov 49h,#'x'
mov 4ah,#'s'
mov 4bh,#'e'
mov 4ch,#'t'
mov 4dh,#'x'
mov 4eh,#'m'
mov 4fh,#'o'
mov 50h,#'d'
mov 51h,#'x'
mov 52h,#'s'
mov 53h,#'t'
mov 54h,#'o'
mov 55h,#'p'
mov 56h,#'x'
mov 57h,#'s'
mov 58h,#'t'
mov 59h,#'a'
mov 5ah,#'r'
mov 5bh,#'t'
mov 5ch,#'x'
mov 5dh,#'e'
mov 5eh,#'n'
mov 5fh,#'t'
mov 60h,#'e'
mov 61h,#'r'
mov 62h,#'x'
mov p2,#03h
mov a,#38h
acall command
mov a,#0eh
acall command
mov a,#01h
acall command
mov a,#06h
acall command
mov a,#86h
acall command
main:
acall keypad
mov r0,a
mov a,#01h ;for clearing lcd after next number
acall command
sevan:
mov a,@r0
acall dis
inc r0
mov b,@r0
cjne b,#'x',sevan
sjmp main
;---------------
keypad:
clr p1.0
setb p1.1
setb p1.2
setb p1.3
jnb p1.4,reset
jnb p1.5,set55
jnb p1.6,mod
jnb p1.7,stop
setb p1.0
clr p1.1
jnb p1.4,key1
jnb p1.5,key2
jnb p1.6,key7
jnb p1.7,start
setb p1.1
clr p1.2
jnb p1.4,key2
jnb p1.5,key5
jnb p1.6,key8
jnb p1.7,keyz
setb p1.2
clr p1.3
jnb p1.4,key3
jnb p1.5,key6
jnb p1.6,key9
jnb p1.7,enter
ljmp keypad
loop:
ret
;-----------------
key1:mov a,#30h
sjmp loop
key2:mov a,#32h
sjmp loop
key3:mov a,#34h
sjmp loop
key4:mov a,#36h
sjmp loop
key5:mov a,#38h
sjmp loop
key6:mov a,#3ah
sjmp loop
key7:mov a,#3ch
sjmp loop
key8:mov a,#3eh
sjmp loop
key9:mov a,#40h
sjmp loop
keyz:mov a,#42h
sjmp loop
reset:mov a,#44h
sjmp loop
set55:mov a,#4ah
sjmp loop
mod:mov a,#4eh
sjmp loop
stop:mov a,#52h
sjmp loop
start:mov a,#57h
sjmp loop
enter:mov a,#5dh
sjmp loop
;-------------------
command:
acall ready
mov p0,a
clr p3.5
clr p3.6
setb p3.7
clr p3.7
ret
;----------------
dis:
acall ready
mov p0,a
setb p3.5
clr p3.6
setb p3.7
clr p3.7
ret
ready:
setb p0.7
clr p3.5
setb p3.6
back:
clr p3.7
setb p3.7
jb p0.7,back
ret
end
p3.5=RS
p3.6=w/r
p3.7=E
org 400h
mov 30h,#'1'
mov 31h,#'x'
mov 32h,#'2'
mov 33h,#'x'
mov 34h,#'3'
mov 35h,#'x'
mov 36h,#'4'
mov 37h,#'x'
mov 38h,#'5'
mov 39h,#'x'
mov 3ah,#'6'
mov 3bh,#'x'
mov 3ch,#'7'
mov 3dh,#'x'
mov 3eh,#'8'
mov 3fh,#'x'
mov 40h,#'9'
mov 41h,#'x'
mov 42h,#'0'
mov 43h,#'x'
mov 44h,#'r'
mov 45h,#'e'
mov 46h,#'s'
mov 47h,#'e'
mov 48h,#'t'
mov 49h,#'x'
mov 4ah,#'s'
mov 4bh,#'e'
mov 4ch,#'t'
mov 4dh,#'x'
mov 4eh,#'m'
mov 4fh,#'o'
mov 50h,#'d'
mov 51h,#'x'
mov 52h,#'s'
mov 53h,#'t'
mov 54h,#'o'
mov 55h,#'p'
mov 56h,#'x'
mov 57h,#'s'
mov 58h,#'t'
mov 59h,#'a'
mov 5ah,#'r'
mov 5bh,#'t'
mov 5ch,#'x'
mov 5dh,#'e'
mov 5eh,#'n'
mov 5fh,#'t'
mov 60h,#'e'
mov 61h,#'r'
mov 62h,#'x'
mov p2,#03h
mov a,#38h
acall command
mov a,#0eh
acall command
mov a,#01h
acall command
mov a,#06h
acall command
mov a,#86h
acall command
main:
acall keypad
mov r0,a
mov a,#01h ;for clearing lcd after next number
acall command
sevan:
mov a,@r0
acall dis
inc r0
mov b,@r0
cjne b,#'x',sevan
sjmp main
;---------------
keypad:
clr p1.0
setb p1.1
setb p1.2
setb p1.3
jnb p1.4,reset
jnb p1.5,set55
jnb p1.6,mod
jnb p1.7,stop
setb p1.0
clr p1.1
jnb p1.4,key1
jnb p1.5,key2
jnb p1.6,key7
jnb p1.7,start
setb p1.1
clr p1.2
jnb p1.4,key2
jnb p1.5,key5
jnb p1.6,key8
jnb p1.7,keyz
setb p1.2
clr p1.3
jnb p1.4,key3
jnb p1.5,key6
jnb p1.6,key9
jnb p1.7,enter
ljmp keypad
loop:
ret
;-----------------
key1:mov a,#30h
sjmp loop
key2:mov a,#32h
sjmp loop
key3:mov a,#34h
sjmp loop
key4:mov a,#36h
sjmp loop
key5:mov a,#38h
sjmp loop
key6:mov a,#3ah
sjmp loop
key7:mov a,#3ch
sjmp loop
key8:mov a,#3eh
sjmp loop
key9:mov a,#40h
sjmp loop
keyz:mov a,#42h
sjmp loop
reset:mov a,#44h
sjmp loop
set55:mov a,#4ah
sjmp loop
mod:mov a,#4eh
sjmp loop
stop:mov a,#52h
sjmp loop
start:mov a,#57h
sjmp loop
enter:mov a,#5dh
sjmp loop
;-------------------
command:
acall ready
mov p0,a
clr p3.5
clr p3.6
setb p3.7
clr p3.7
ret
;----------------
dis:
acall ready
mov p0,a
setb p3.5
clr p3.6
setb p3.7
clr p3.7
ret
ready:
setb p0.7
clr p3.5
setb p3.6
back:
clr p3.7
setb p3.7
jb p0.7,back
ret
end
دیدگاه