اطلاعیه

Collapse
No announcement yet.

مشکل در ارتباط با LCD و کاراکتر ورودی از صفحه کلید

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    مشکل در ارتباط با LCD و کاراکتر ورودی از صفحه کلید

    با سلام.من یک برنامه ای نوشتم که داستانش از این قراره.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

    #2
    پاسخ : مشکل در ارتباط با LCD و کاراکتر ورودی از صفحه کلید

    من بهت پیشنهاد میکنم از تست کلید مزیدی استفاده کنی.


    org 0000h
    sjmp main
    org 0030h
    main:mov p2,#0ffh
    k1:mov p1,#0
    mov a,p2
    anl a,#00001111b
    cjne a,#00001111b,k1
    k2:acall delay
    mov a,p2
    anl a,#00001111b
    cjne a,#00001111b,over
    sjmp k2
    over:acall delay
    mov a,p2
    anl a,#00001111b
    cjne a,#00001111b,over1
    sjmp k2
    over1:mov p1,#11111110b
    mov a,p2
    anl a,#00001111b
    cjne a,#00001111b,row0
    mov p1,#11111101b
    mov a,p2
    anl a,#00001111b
    cjne a,#00001111b,row1
    mov p1,#11111011b
    mov a,p2
    anl a,#00001111b
    cjne a,#00001111b,row2
    mov p1,#11110111b
    mov a,p2
    anl a,#00001111b
    cjne a,#00001111b,row3
    ljmp k2
    row0:mov dptr,#kcode0
    sjmp find
    row1:mov dptr,#kcode1
    sjmp find
    row2:mov dptr,#kcode2
    sjmp find
    row3:mov dptr,#kcode3
    find:rrc a
    jnc match
    inc dptr
    sjmp find
    match:clr a
    movc a,@a+dptr
    mov p0,a
    ljmp k1
    org 300h
    kcode0:db 78h,00h,10h,08h
    kcode1:db 19h,12h,02h,03h
    kcode2:db 79h,24h,30h,46h
    kcode3:db 21h,40h,06h,0eh

    delay:mov tmod,#01h
    mov th0,#high(-20000)
    mov tl0,#low(-20000)
    setb tr0
    wait:jnb tf0,wait
    clr tr0
    clr tf0
    ret
    end




    به جای اینکه پورت هارو برای کنترل lcd به کار ببری همون اول برنامه از دستور EQU استفاده بکنی خیلی بهتره.
    EN EQU P3.7
    RS EQU P3.5
    r/w equ p3.6

    تو برنامه lcd حتما از تاخیر استفاده کن.
    www.icesi.ir

    دیدگاه


      #3
      پاسخ : مشکل در ارتباط با LCD و کاراکتر ورودی از صفحه کلید

      ba salam
      age dar barnameye keypad ta vared nashodane yek klid sabr nakone va be barnameye asli bargarde bayadam chizi to lcd nabini :sad:

      دیدگاه


        #4
        پاسخ : مشکل در ارتباط با LCD و کاراکتر ورودی از صفحه کلید

        نوشته اصلی توسط ktec1
        ba salam
        age dar barnameye keypad ta vared nashodane yek klid sabr nakone va be barnameye asli bargarde bayadam chizi to lcd nabini :sad:
        سلام.
        دوست عزیز قانون سایت این هست که پست ها به فارسی، نه انگلیسی و نه فینگلیش، ارسال بشه.
        لطفا پستها تون رو فارسی ارسال کنید.
        با سپاس
        شأن انسان در ایمان و هجرت و جهاد است و هجرت، مقدمهآ‌ی جهاد فیآ‌سبیلآ‌الله.
        هجرت، هجرت از سنگینیآ‌هاست و جاذبهآ‌هایی که تو را به خاک میآ‌چسباند.
        چکمهآ‌هایت را بپوش، رهآ‌توشهآ‌ات را بردار و هجرت کن.

        دیدگاه


          #5
          پاسخ : مشکل در ارتباط با LCD و کاراکتر ورودی از صفحه کلید

          نوشته اصلی توسط ktec1
          ba salam
          age dar barnameye keypad ta vared nashodane yek klid sabr nakone va be barnameye asli bargarde bayadam chizi to lcd nabini :sad:
          به فاری بنویسی منظورتونو بهتر میفهمیم.
          www.icesi.ir

          دیدگاه


            #6
            پاسخ : مشکل در ارتباط با LCD و کاراکتر ورودی از صفحه کلید

            با سلام
            دوست عزیز برنامه ای که نوشته بودی خیلی کم تغییر دادم خوبم جواب میده یه کم بهینه سازی میخواد که اونم به عهده ی خودته
            نکا تی که باید رعایت کنی
            1)گر چه برنامه ی کیبورد که خودت نوشتی نشون از تلاشته ولی توی عمل جواب نمیده(تاخیر20میلی ثانیه یادت رفته)
            2)کدی که نوشتی بیشترازمعموله که با تمرین بهتر میشه
            3) از کلمات کلیدی تو برنامه استفاده نکن
            4)خوب برنامه رو اسمبل کن
            موفق باشی :nice: :job:

            دیدگاه


              #7
              پاسخ : مشکل در ارتباط با LCD و کاراکتر ورودی از صفحه کلید

              اینم کد
              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 a,@r0
              cjne a,#'x',sevan
              sjmp main
              ;---------------
              keypad:
              clr p1.0
              setb p1.1
              setb p1.2
              setb p1.3
              jnb p1.4,reset1
              jnb p1.5,set55
              jnb p1.6,mod1
              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
              reset1:mov a,#44h
              sjmp loop
              set55:mov a,#4ah
              sjmp loop
              mod1: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 p2,a
              clr p3.5
              clr p3.6
              setb p3.7
              clr p3.7
              ret
              ;----------------
              dis:
              acall ready
              mov p2,a
              setb p3.5
              clr p3.6
              setb p3.7
              clr p3.7
              ret
              ready:
              setb p2.7
              clr p3.5
              setb p3.6
              back:
              clr p3.7
              setb p3.7
              jb p2.7,back
              ret
              end


              دیدگاه

              لطفا صبر کنید...
              X