اطلاعیه

Collapse
No announcement yet.

LCD ( دوستان هیچ کس نظری نداره)

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

    LCD ( دوستان هیچ کس نظری نداره)

    سلام:
    من برای کار با LCD دچار مشکل شدم برنامه پایین رو نوشتم ولی داره توی پروتئوس جواب نمی ده.
    #include <reg51.h>
    int a,x;
    sbit e =P2^0;
    sbit rs=P2^2;
    sbit p=P1^7;
    void delay ()
    {
    for (x=0;x<850;x++);
    }
    void instruction()
    {
    delay();
    P1=a;
    rs=0;
    e=1;
    e=0;
    }
    void send_dat()
    {
    delay();
    P1=a;
    rs=1;
    e=1;
    e=0;
    }

    void main()
    {
    a=0x38;
    instruction();
    a=0x0f;
    instruction();
    a=0x01;
    instruction();
    a=0x06;
    instruction();
    a=0x80;
    instruction();
    while (1)
    {
    a=1;
    send_dat();
    }
    }













    #2
    پاسخ : LCD

    سلام دوست عزیز
    حتماً میدونید که برای راه اندازی LCD باید اون رو پیکر بندی کنید. من زیاد زبان C بلد نیستم ولی اینطور که میبینم شما این موضوع رو رعایت نکردید.

    اینا مقادیری هست که باید در ابتدا به ال سی دی بفرستید. بعد از اینها میتونید کد اسکی بفرستید.
    00000001B
    00111000B
    00001100B
    00000110B

    دیدگاه


      #3
      پاسخ : LCD

      سلام.
      برنامه تون درسته من یه تغییرات کوچیک توش دادم که البته فکر کنم تفاوتی نکنه:
      کد:
      #include <reg51.h>
      #include<stdio.h>
      int a,x;
      sbit e =P2^0;
      sbit rs=P2^2;                 
      sbit p=P1^7;
      void delay ()
      {
       for (x=0;x<850;x++);
      } 
      void instruction()
      {
       delay();
       P1=a;
       rs=0;
       e=1;
       e=0;
      }
      void send_dat()
      {
       delay();
       P1=a;
       rs=1;
       e=1;
       e=0;
      }
      
      void main()
      {
       a=0x38;
       instruction();
       a=0x0c;
       instruction();
       a=0x06;
       instruction();
       a=0x01;
       instruction();
       while (1)
       {
       a=1;
       send_dat();
       }
      }
      فقط فکر کنم شما یه کار نکردید :mrgreen: پایه WR رو به زمین وصل کردید؟
      موفق باشید.
      شأن انسان در ايمان و هجرت و جهاد است و هجرت، مقدمهآ‌ي جهاد فيآ‌سبيلآ‌الله.
      هجرت، هجرت از سنگينيآ‌هاست و جاذبهآ‌هايي كه تو را به خاك ميآ‌چسباند.
      چكمهآ‌هايت را بپوش، رهآ‌توشهآ‌ات را بردار و هجرت كن.

      دیدگاه


        #4
        پاسخ : LCD

        سلام:
        ممنون از راهنمایی تون
        نوشته اصلی توسط محمد نحوی
        سلام.
        فقط فکر کنم شما یه کار نکردید :mrgreen: پایه WR رو به زمین وصل کردید؟
        موفق باشید.
        بله من توی پروتئوس این پایه رو مستقیم دادم به زمین

        دیدگاه


          #5
          پاسخ : LCD

          سلام.
          چرا مقدار 1 دادید به a ؟
          لا اقل 49 بدید که بشه کاراکتر "1"
          اینو تغیر بده اگه کار نکرد فایل پروتئوستونو بگذارید
          الهم عجل لولیک الفرج

          دیدگاه


            #6
            پاسخ : LCD

            سلام و ممنون از جوابتون:
            پس اگر بخوایم عدد 1 نمایش پیدا کنه می بایست اون رو به صورت "1" بنویسیم
            هالا وقتی برنامه رو با پروتئوس اجرامیکنم کل صفحه می نویسه 1

            دیدگاه


              #7
              پاسخ : LCD

              یه سئوال دیگه اگه بخوایم حروف رو رویه LCD نمایش بدیم باید متغییری مثل a از چه نوعی باشه

              دیدگاه


                #8
                پاسخ : LCD

                باید از نوع char باشه.
                چون دستور رو توی حلقه گذاشتید تمام صفحه پر از عدد 1 شده.
                آخر برنامه رو اگه به شکل زیر تغیر بدی فقط 1 بار مینویسه

                بجای


                while (1)
                {
                a=1;
                send_dat();
                }
                }

                بنویس

                a = 49;
                send_dat();
                while(1)
                {
                }
                }


                l
                همین.

                اگر a را از نوع char انتخاب کنی میتونی بجای
                a = 49;
                lبنویسی
                a = "1";

                l
                موفق باشید.
                الهم عجل لولیک الفرج

                دیدگاه


                  #9
                  پاسخ : LCD

                  نوشته اصلی توسط Iran-PC
                  باید از نوع char باشه.
                  چون دستور رو توی حلقه گذاشتید تمام صفحه پر از عدد 1 شده.
                  آخر برنامه رو اگه به شکل زیر تغیر بدی فقط 1 بار مینویسه

                  بجای


                  while (1)
                  {
                  a=1;
                  send_dat();
                  }
                  }

                  بنویس

                  a = 49;
                  send_dat();
                  while(1)
                  {
                  }
                  }


                  l
                  همین.

                  اگر a را از نوع char انتخاب کنی میتونی بجای
                  a = 49;
                  lبنویسی
                  a = "1";

                  l
                  موفق باشید.
                  سلام:
                  برای اینکه یه مثال داشته باشی


                  #include <reg51.h>
                  #include<stdio.h>
                  int x,a,z=0,i=0;
                  char mn[7]=(" jafar "
                  sbit e =P2^0;
                  sbit rs=P2^2;
                  sbit p=P1^7;
                  void delay ()
                  {
                  for (x=0;x<850;x++);
                  }
                  void instruction()
                  {
                  delay();
                  P1=a;
                  rs=0;
                  e=1;
                  e=0;
                  }
                  void send_dat()
                  {
                  delay();
                  P1=a;
                  rs=1;
                  e=1;
                  e=0;
                  }
                  void main()
                  {
                  a=0x38;
                  instruction();
                  instruction();
                  a=0x0c;
                  instruction();
                  a=0x06;
                  instruction();
                  a=0x01;
                  instruction();
                  while (1)
                  {
                  if(i<=6)
                  {
                  a=mn[i];
                  i++;
                  send_dat();
                  }
                  }
                  }

                  دیدگاه


                    #10
                    پاسخ : LCD

                    صالح جان به نظرم آخر برنامه یه چیزی جا انداختی
                    اونجا که نوشتی a=mn
                    فکر کنم میخواستی اینجوری بنویسی
                    a=mn[ i ];


                    l
                    درسته؟
                    الهم عجل لولیک الفرج

                    دیدگاه


                      #11
                      پاسخ : LCD

                      گذاشتم :question:

                      دیدگاه


                        #12
                        پاسخ : LCD

                        سلام.
                        درسته.
                        فهمیدم قضیه چیه.
                        منظورم
                        [ i ]
                        بود که شما هم گذاشتید.
                        منتها ادیتور اونو به عنوان دستور ایتالیک کردن متن فرض میکنه.
                        هم شما این رو گذاشتید هم من.
                        من مال خودم رو ویرایش میکنم.
                        الهم عجل لولیک الفرج

                        دیدگاه


                          #13
                          پاسخ : LCD

                          خیلی خیلی ازشمادوستان ممنونم که بنده رو راهنمایی می کنید
                          یه مشکل دیگه من اومدم LCD وکیبرد رو به میکرو متصل کردم و میخوام وقتی که از روی کیبرد مثلا عدد1 رو فشار می دم فقط 1 بار رو ی lcd عدد1 نمایش پیدا کنه نه بیشتر
                          وبرای اینکه عدد11 نمایش بده برنامه طوری باشه که کلید 1 می بایست 2 بار فشرده بشه
                          من توی برنامه این شرط رو گذاشتم (وقتی که نیستش برنامه کل lcd رو پر عدد می کنه)
                          if(P1!=a)
                          {
                          lcd();
                          }

                          برای همین نمیشه که دو بار یه عددرو نشون داد (مثلا11)
                          ممنون میشم مثل همیشه راهنمایی کنید

                          http://www.4shared.com/file/15402750...ew_Folder.html

                          دیدگاه


                            #14
                            پاسخ : LCD (دوستان خواهش می کنم یه نفر کمک کنه )

                            دوستان خواهش می کنم یه نفر کمک کنه :cry: :cry: :cry: :cry:

                            دیدگاه


                              #15
                              پاسخ : LCD

                              سلام.
                              جعفر جان خوب شما یه حلقه گذاشتید تا زمانی که دستتون روی کلید هست مداوم داره عدد یک رو میخونه . شما تا زمانی که عدد رو نشون دادید باید صبر کنید تا کاربر دستش رو از روی کیبرد برداره بعد از حلقه خارج بشید. مثلا اینطوری

                              if(P1!=a)
                              {
                              lcd();
                              while(P1!=a)
                              {}
                              }
                              موفق باشید.
                              شأن انسان در ايمان و هجرت و جهاد است و هجرت، مقدمهآ‌ي جهاد فيآ‌سبيلآ‌الله.
                              هجرت، هجرت از سنگينيآ‌هاست و جاذبهآ‌هايي كه تو را به خاك ميآ‌چسباند.
                              چكمهآ‌هايت را بپوش، رهآ‌توشهآ‌ات را بردار و هجرت كن.

                              دیدگاه

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