اطلاعیه

Collapse
No announcement yet.

مشکل در پبرنامه راه اندازی نمایشسگر

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

    مشکل در پبرنامه راه اندازی نمایشسگر

    سلام دوستان.
    من یه برنامه مینویسم که اعداد بین ٠تاز٩٩٩ رو کاربر بتونه با کیپد وارد کنه و روی ال سی دی نمایش داده بشه. اعداد توسط کاربر شانسی ممکنه دو رقمی بزنه ممکنه سه رقمی بزنه. هر عددی زیر ١٠٠٠.
    برنامه راه اندازی ال سی دی و راه اندازی کیپد رو نوستم مشکلی نیست. اعداد رو هم میگیره و کی پد نشون میده.
    مشکل من اینه که چون ال سی دی کارکتر چاپ مکنه من مخام تو برنامم چیزی بنویسم که کارکترهارو بگیره تو یه ارایه ذخیره کنه و اونارو بصورت عدد دراره.
    یعنی اگه ٢ و ٥و ٨ مثلا زده شد برام ٢٥٨ روزتو یه متغیر عددی ذخیره کنه. یا اگر ٣و ٧ مثلا زده شد ٣٧ رو ذخیره کنه.
    نتونستم کدمو اینجا بذارم بینین.
    الان برنامم اینه که کیپد اسکن میشه اگه عدد زده شد به یه تابع فرستاده میشه اون تابع یه عدد رو متنلظر با اون کبید برمیگردونه اون بصورت کارکتر روی ال سی دی نملیش میشه تا زمانی که کمتر از سه رقمه. الان میخام این عددها تو یه ارایه ذخیره شه و پس از اینکه طرف کلید ستاره رو زد اون اعداد وارد شده بصورت یک عدد تو یه متغیر ذخیره شه. مثلا ٣و ٥ رو زد و بعد ستاره رو ٣٥ توی یه متغیر ذخیره شه.
    مننون میشم از راهنمایتون.
    کد:
    
    
    جدیدترین ویرایش توسط aashkanpasha; ۲۱:۳۴ ۱۳۹۸/۰۵/۱۳.

    #2
    پاسخ : مشکل در پبرنامه راه اندازی نمایشگر کارکتری و کی پد در اتمل استودیو با مگا ٣٢ در ذخیره عدد وارد شده

    نوشته اصلی توسط aashkanpasha نمایش پست ها
    سلام دوستان.
    من یه برنامه مینویسم که اعداد بین ٠تاز٩٩٩ رو کاربر بتونه با کیپد وارد کنه و روی ال سی دی نمایش داده بشه. اعداد توسط کاربر شانسی ممکنه دو رقمی بزنه ممکنه سه رقمی بزنه. هر عددی زیر ١٠٠٠.
    برنامه راه اندازی ال سی دی و راه اندازی کیپد رو نوستم مشکلی نیست. اعداد رو هم میگیره و کی پد نشون میده.
    مشکل من اینه که چون ال سی دی کارکتر چاپ مکنه من مخام تو برنامم چیزی بنویسم که کارکترهارو بگیره تو یه ارایه ذخیره کنه و اونارو بصورت عدد دراره.
    یعنی اگه ٢ و ٥و ٨ مثلا زده شد برام ٢٥٨ روزتو یه متغیر عددی ذخیره کنه. یا اگر ٣و ٧ مثلا زده شد ٣٧ رو ذخیره کنه.
    نتونستم کدمو اینجا بذارم بینین.
    الان برنامم اینه که کیپد اسکن میشه اگه عدد زده شد به یه تابع فرستاده میشه اون تابع یه عدد رو متنلظر با اون کبید برمیگردونه اون بصورت کارکتر روی ال سی دی نملیش میشه تا زمانی که کمتر از سه رقمه. الان میخام این عددها تو یه ارایه ذخیره شه و پس از اینکه طرف کلید ستاره رو زد اون اعداد وارد شده بصورت یک عدد تو یه متغیر ذخیره شه. مثلا ٣و ٥ رو زد و بعد ستاره رو ٣٥ توی یه متغیر ذخیره شه.
    مننون میشم از راهنمایتون.
    کد:
    
    
    سلام.
    میتونید 3 رو در 10 ضرب کنید بعد به اضافه 5 کنید که بشه 35. برای نمایش روی lcd هم اول کد اسکی 3 رو بفرستید بعد کد اسکی 5 .
    موفق باشید.

    دیدگاه


      #3
      پاسخ : مشکل در پبرنامه راه اندازی نمایشگر کارکتری و کی پد در اتمل استودیو با مگا ٣٢ در ذخیره عدد وارد شده

      نوشته اصلی توسط saati.sms نمایش پست ها
      سلام.
      میتونید 3 رو در 10 ضرب کنید بعد به اضافه 5 کنید که بشه 35. برای نمایش روی lcd هم اول کد اسکی 3 رو بفرستید بعد کد اسکی 5 .
      موفق باشید.

      ممنونم. ولی نمیشه. چون هم عدد تک رفمی هم دو رقمی هم سه رقمی باید بتونه بگیره. نمتونم. کدمو حطوری میتونم بفرستم ببینین.
      من مشکلم تو اینه که اعداد گرفته شده رو تو یه ارایه نمتونم بریزم.

      دیدگاه


        #4
        پاسخ : مشکل در پبرنامه راه اندازی نمایشگر کارکتری و کی پد در اتمل استودیو با مگا ٣٢ در ذخیره عدد وارد شده

        نوشته اصلی توسط aashkanpasha نمایش پست ها
        ممنونم. ولی نمیشه. چون هم عدد تک رفمی هم دو رقمی هم سه رقمی باید بتونه بگیره. نمتونم. کدمو حطوری میتونم بفرستم ببینین.
        من مشکلم تو اینه که اعداد گرفته شده رو تو یه ارایه نمتونم بریزم.
        سلام
        مشکلتون رو واضح بفرمایید! الآن مشکل دریافت یه عدد 3 رقمی با کیپده یا نمایش اون؟
        اگر منظورتون اینه که مثلا کاربر میخواد عدد وارد شده در سری اول، یک عدد 2 رقمی باشه و دفعه بعد بخواد یه عدد با رقم دلخواه وارد کنه، این عدد سری دوم با عدد سری اول قاطی نشه، باید از تایمر استفاده کنید. به این نحو که مثلا کاربر مدت 3 ثانیه فرصت داره عدد خودش رو وارد کنه و اگر از این 3 ثانیه رد شد، عدد دریافت شده به عنوان عدد جدید در نظر گرفته بشه.
        یا اینکه یک کلید اختصاص بدید مثل کلید اینتر که کاربر بعد از وارد کردن عدد خودش اون رو بزنه و به برنامه بفهمونه عدد من همینقدر بود. یا مثلا جوری باشه که برای اعداد 1 یا 2 رقمی حتما باید صفرهای رقم های دهگان و صدگان وارد بشه.
        به غیر از این راه هایی که گفتم فکر نمیکنم راه دیگه ای باشه. البته اگر منظور شما رو درست فهمیده باشم

        دیدگاه


          #5
          پاسخ : مشکل در پبرنامه راه اندازی نمایشگر کارکتری و کی پد در اتمل استودیو با مگا ٣٢ در ذخیره عدد وارد شده

          نوشته اصلی توسط aashkanpasha نمایش پست ها
          ممنونم. ولی نمیشه. چون هم عدد تک رفمی هم دو رقمی هم سه رقمی باید بتونه بگیره. نمتونم. کدمو حطوری میتونم بفرستم ببینین.
          من مشکلم تو اینه که اعداد گرفته شده رو تو یه ارایه نمتونم بریزم.
          کدتون رو میتونید توی سایت picofile اپلود کنید و بعدش با گزینه link بفرستید. یا اینکه با برچسب c++ کدتون رو کپی و پیست کنید.
          در عکس زیر قسمت های مربوطه رو رنگی کردم براتون.
          به سوال اقای hossein.m98 هم جواب بدید که اگر منظورتون اون بود پاسخ درست بدیم.

          دیدگاه


            #6
            پاسخ : مشکل در پبرنامه راه اندازی نمایشگر کارکتری و کی پد در اتمل استودیو با مگا ٣٢ در ذخیره عدد وارد شده

            ممنونم از پاسختون.
            کل سیستم رو اجازه بدین توضیح بدم.
            این برای یک نانوایی طراحی میشه. نانوایی شماره هایی رو به مشتری ها داده تا در صف باشند.
            یک صفحه کلیده ٤در٤ هستش که ١٠ کلیدش برای شماره هاس و یک کلید برای تایید یک کلید برای تکرار. یک کلید برای اصافه کردن عدد یک کلید برای کم کرذن از عدد و یک کلید هم پاک کردن عدد.
            مثلا نانوا عدد ٢ و ٣ رو میزنه در حال زدن هر عدد اون عدد رو ال سی دی نمایش میشه بعد کلید تایید رو و عدد ٢٣ رو سون سگمنت نمایش میشه. ممکنه بعدش اعداد ١و٤و٨ رو بزنه و بعد تایید رو بزنه باید اون موقع اون عدد نمایش بشه. یا ممکنه کلید اصافه کردن رو بزنه اون موقع باید عدد به عدد قبلی اضافه شه
            مشمل من اینه که اعداد رو از سون سگمنت میگیرم رو الدسی دی نمایش میدم. ولی نمتونم کاری کنم اون اعداد بیشتر از سه تا رو نگیره و پاک شه کلا. یا اینکه اعداد ٤و٦ رو مثلا زد بعد تایید رو زد ٤٦ تو یه متغیر ذهیره بمونه. تا ببینه بعد چکار میکنه. من کدی که نوشتم رو عکسشو بفرستم میشه؟١

            دیدگاه


              #7
              پاسخ : مشکل در پبرنامه راه اندازی نمایشگر کارکتری و کی پد در اتمل استودیو با مگا ٣٢ در ذخیره عدد وارد شده

              نوشته اصلی توسط aashkanpasha نمایش پست ها
              ممنونم از پاسختون.
              کل سیستم رو اجازه بدین توضیح بدم.
              این برای یک نانوایی طراحی میشه. نانوایی شماره هایی رو به مشتری ها داده تا در صف باشند.
              یک صفحه کلیده ٤در٤ هستش که ١٠ کلیدش برای شماره هاس و یک کلید برای تایید یک کلید برای تکرار. یک کلید برای اصافه کردن عدد یک کلید برای کم کرذن از عدد و یک کلید هم پاک کردن عدد.
              مثلا نانوا عدد ٢ و ٣ رو میزنه در حال زدن هر عدد اون عدد رو ال سی دی نمایش میشه بعد کلید تایید رو و عدد ٢٣ رو سون سگمنت نمایش میشه. ممکنه بعدش اعداد ١و٤و٨ رو بزنه و بعد تایید رو بزنه باید اون موقع اون عدد نمایش بشه. یا ممکنه کلید اصافه کردن رو بزنه اون موقع باید عدد به عدد قبلی اضافه شه
              مشمل من اینه که اعداد رو از سون سگمنت میگیرم رو الدسی دی نمایش میدم. ولی نمتونم کاری کنم اون اعداد بیشتر از سه تا رو نگیره و پاک شه کلا. یا اینکه اعداد ٤و٦ رو مثلا زد بعد تایید رو زد ٤٦ تو یه متغیر ذهیره بمونه. تا ببینه بعد چکار میکنه. من کدی که نوشتم رو عکسشو بفرستم میشه؟١
              شما همونطوری که دوستمون saati.sms گفتن از برچسب ++C استفاده کن و کد را داخل برچسب کپی کن
              جدیدترین ویرایش توسط hossein.m98; ۱۴:۱۷ ۱۳۹۸/۰۵/۱۳.

              دیدگاه


                #8
                پاسخ : مشکل در پبرنامه راه اندازی نمایشگر کارکتری و کی پد در اتمل استودیو با مگا ٣٢ در ذخیره عدد وارد شده

                ممنونم از پاسختون.
                کل سیستم رو اجازه بدین توضیح بدم.
                این برای یک نانوایی طراحی میشه. نانوایی شماره هایی رو به مشتری ها داده تا در صف باشند.
                یک صفحه کلیده ٤در٤ هستش که ١٠ کلیدش برای شماره هاس و یک کلید برای تایید یک کلید برای تکرار. یک کلید برای اصافه کردن عدد یک کلید برای کم کرذن از عدد و یک کلید هم پاک کردن عدد.
                مثلا نانوا عدد ٢ و ٣ رو میزنه در حال زدن هر عدد اون عدد رو ال سی دی نمایش میشه بعد کلید تایید رو و عدد ٢٣ رو سون سگمنت نمایش میشه. ممکنه بعدش اعداد ١و٤و٨ رو بزنه و بعد تایید رو بزنه باید اون موقع اون عدد نمایش بشه. یا ممکنه کلید اصافه کردن رو بزنه اون موقع باید عدد به عدد قبلی اضافه شه
                مشمل من اینه که اعداد رو از سون سگمنت میگیرم رو الدسی دی نمایش میدم. ولی نمتونم کاری کنم اون اعداد بیشتر از سه تا رو نگیره و پاک شه کلا. یا اینکه اعداد ٤و٦ رو مثلا زد بعد تایید رو زد ٤٦ تو یه متغیر ذهیره بمونه. تا ببینه بعد چکار میکنه. من کدی که نوشتم رو عکسشو بفرستم میشه؟١

                دلیل: ادغام دو پست برای جلوگیری از اسپم
                [QUOTE=hossein.m98;702483]شما همونطوری که دوستمون saati.sms گفتن از برچسب ++C استفاده کن و کد را داخل برچسب کپی کن

                [CPP
                جدیدترین ویرایش توسط aashkanpasha; ۲۱:۴۵ ۱۳۹۸/۰۵/۱۳.

                دیدگاه


                  #9
                  پاسخ : مشکل در پبرنامه راه اندازی نمایشگر کارکتری و کی پد در اتمل استودیو با مگا ٣٢ در ذخیره عدد وارد شده

                  نوشته اصلی توسط aashkanpasha نمایش پست ها
                  [COLOR=#101094][FONT=inherit]while[/FONT][/COLOR][COLOR=#303336][FONT=inherit] [/FONT][/COLOR][COLOR=#303336][FONT=inherit]([/FONT][/COLOR][COLOR=#7D2727][FONT=inherit]1[/FONT][/COLOR][COLOR=#303336][FONT=inherit])[/FONT][/COLOR][COLOR=#303336][FONT=inherit][/FONT][/COLOR][COLOR=#303336][FONT=inherit]{[/FONT][/COLOR][COLOR=#303336][FONT=inherit]
                  kp[/FONT][/COLOR][COLOR=#303336][FONT=inherit]=[/FONT][/COLOR][COLOR=#303336][FONT=inherit]keypad[/FONT][/COLOR][COLOR=#303336][FONT=inherit]();[/FONT][/COLOR][COLOR=#303336][FONT=inherit] [/FONT][/COLOR][COLOR=#858C93][FONT=inherit]//this code is scaning my keypad every minisecond.[/FONT][/COLOR][COLOR=#303336][FONT=inherit]
                  t[/FONT][/COLOR][COLOR=#303336][FONT=inherit]=[/FONT][/COLOR][COLOR=#303336][FONT=inherit]kpd_scan[/FONT][/COLOR][COLOR=#303336][FONT=inherit]([/FONT][/COLOR][COLOR=#303336][FONT=inherit]kp[/FONT][/COLOR][COLOR=#303336][FONT=inherit]);[/FONT][/COLOR][COLOR=#303336][FONT=inherit] [/FONT][/COLOR][COLOR=#858C93][FONT=inherit]//this code send kp to a function and that function for each key return a int number.[/FONT][/COLOR][COLOR=#303336][FONT=inherit]
                  [/FONT][/COLOR][COLOR=#858C93][FONT=inherit]// if kp=1 return 1 and kp=2 return 2 and ... and if no key press return 16.[/FONT][/COLOR][COLOR=#303336][FONT=inherit]
                  [/FONT][/COLOR][COLOR=#101094][FONT=inherit]if[/FONT][/COLOR][COLOR=#303336][FONT=inherit]([/FONT][/COLOR][COLOR=#303336][FONT=inherit]t[/FONT][/COLOR][COLOR=#303336][FONT=inherit]<[/FONT][/COLOR][COLOR=#7D2727][FONT=inherit]10[/FONT][/COLOR][COLOR=#303336][FONT=inherit]){[/FONT][/COLOR][COLOR=#303336][FONT=inherit]
                  sprintf[/FONT][/COLOR][COLOR=#303336][FONT=inherit]([/FONT][/COLOR][COLOR=#303336][FONT=inherit]str[/FONT][/COLOR][COLOR=#303336][FONT=inherit],[/FONT][/COLOR][COLOR=#7D2727][FONT=inherit]"%d"[/FONT][/COLOR][COLOR=#303336][FONT=inherit],[/FONT][/COLOR][COLOR=#303336][FONT=inherit]t[/FONT][/COLOR][COLOR=#303336][FONT=inherit]);[/FONT][/COLOR][COLOR=#303336][FONT=inherit] [/FONT][/COLOR][COLOR=#858C93][FONT=inherit]//convert returned number to string.[/FONT][/COLOR][COLOR=#303336][FONT=inherit]
                  alcd_puts[/FONT][/COLOR][COLOR=#303336][FONT=inherit]([/FONT][/COLOR][COLOR=#303336][FONT=inherit]str[/FONT][/COLOR][COLOR=#303336][FONT=inherit]);[/FONT][/COLOR][COLOR=#303336][FONT=inherit] [/FONT][/COLOR][COLOR=#858C93][FONT=inherit]// show number string on lcd.[/FONT][/COLOR][COLOR=#303336][FONT=inherit]
                  i[/FONT][/COLOR][COLOR=#303336][FONT=inherit]=[/FONT][/COLOR][COLOR=#303336][FONT=inherit]i[/FONT][/COLOR][COLOR=#303336][FONT=inherit]+[/FONT][/COLOR][COLOR=#7D2727][FONT=inherit]1[/FONT][/COLOR][COLOR=#303336][FONT=inherit];[/FONT][/COLOR][COLOR=#303336][FONT=inherit] [/FONT][/COLOR][COLOR=#858C93][FONT=inherit]// for each key showed add i.[/FONT][/COLOR][COLOR=#303336][FONT=inherit]
                  [/FONT][/COLOR][COLOR=#101094][FONT=inherit]if[/FONT][/COLOR][COLOR=#303336][FONT=inherit]([/FONT][/COLOR][COLOR=#303336][FONT=inherit]i[/FONT][/COLOR][COLOR=#303336][FONT=inherit]>[/FONT][/COLOR][COLOR=#7D2727][FONT=inherit]3[/FONT][/COLOR][COLOR=#303336][FONT=inherit]){[/FONT][/COLOR][COLOR=#303336][FONT=inherit]alcd_clear[/FONT][/COLOR][COLOR=#303336][FONT=inherit]();[/FONT][/COLOR][COLOR=#303336][FONT=inherit] alcd_gotoxy[/FONT][/COLOR][COLOR=#303336][FONT=inherit]([/FONT][/COLOR][COLOR=#7D2727][FONT=inherit]1[/FONT][/COLOR][COLOR=#303336][FONT=inherit],[/FONT][/COLOR][COLOR=#7D2727][FONT=inherit]0[/FONT][/COLOR][COLOR=#303336][FONT=inherit]);[/FONT][/COLOR][COLOR=#303336][FONT=inherit] alcd_puts[/FONT][/COLOR][COLOR=#303336][FONT=inherit]([/FONT][/COLOR][COLOR=#7D2727][FONT=inherit]" Number:"[/FONT][/COLOR][COLOR=#303336][FONT=inherit]);[/FONT][/COLOR][COLOR=#303336][FONT=inherit] i[/FONT][/COLOR][COLOR=#303336][FONT=inherit]=[/FONT][/COLOR][COLOR=#7D2727][FONT=inherit]0[/FONT][/COLOR][COLOR=#303336][FONT=inherit];}[/FONT][/COLOR][COLOR=#303336][FONT=inherit] [/FONT][/COLOR][COLOR=#858C93][FONT=inherit]// if i>3 it mean number become bigger than 999 clear screen.[/FONT][/COLOR][COLOR=#303336][FONT=inherit]
                  [/FONT][/COLOR][COLOR=#858C93][FONT=inherit]//???code 01: //store the entered numbers in a array and convert that array to a int number.[/FONT][/COLOR][COLOR=#303336][FONT=inherit]
                  [/FONT][/COLOR][COLOR=#858C93][FONT=inherit]//for example if 1 and 7 entered y=17 if 1 and 4 and 9 ented y=149 .... (between0-999)[/FONT][/COLOR][COLOR=#303336][FONT=inherit] [/FONT][/COLOR][COLOR=#303336][FONT=inherit] [/FONT][/COLOR][COLOR=#303336][FONT=inherit]}[/FONT][/COLOR]
                  اینجا اصلا چیزی مشخص نیست. یبار دیگه کپی کنید

                  دیدگاه


                    #10
                    پاسخ : مشکل در پبرنامه راه اندازی نمایشگر کارکتری و کی پد در اتمل استودیو با مگا ٣٢ در ذخیره عدد وارد شده

                    نوشته اصلی توسط hossein.m98 نمایش پست ها
                    اینجا اصلا چیزی مشخص نیست. یبار دیگه کپی کنید
                    فرستادم بالا
                    ابنجا مشخصه؟

                    دیدگاه


                      #11
                      پاسخ : مشکل در پبرنامه راه اندازی نمایشگر کارکتری و کی پد در اتمل استودیو با مگا ٣٢ در ذخیره عدد وارد شده

                      نوشته اصلی توسط aashkanpasha نمایش پست ها
                      فرستادم بالا
                      ابنجا مشخصه؟
                      مشخصه ولی بهتر بود کل کد رو میفرستادید. البته با همینم میشه بررسی کرد. صبر کنید تا بررسی کنیم

                      دیدگاه


                        #12
                        پاسخ : مشکل در پبرنامه راه اندازی نمایشگر کارکتری و کی پد در اتمل استودیو با مگا ٣٢ در ذخیره عدد وارد شده

                        نوشته اصلی توسط hossein.m98 نمایش پست ها
                        مشخصه ولی بهتر بود کل کد رو میفرستادید. البته با همینم میشه بررسی کرد. صبر کنید تا بررسی کنیم
                        اینم کل کد:
                        جدیدترین ویرایش توسط aashkanpasha; ۲۱:۴۷ ۱۳۹۸/۰۵/۱۳.

                        دیدگاه


                          #13
                          پاسخ : مشکل در پبرنامه راه اندازی نمایشگر کارکتری و کی پد در اتمل استودیو با مگا ٣٢ در ذخیره عدد وارد شده

                          نوشته اصلی توسط aashkanpasha نمایش پست ها
                          فرستادم بالا
                          ابنجا مشخصه؟
                          توضیح کد:
                          متغیر pressed_key همون کلیدی است که توسط کیپد فشرده میشه.
                          تابع scankeypad هم تابعی هست که کیپد رو اسکن میکنه.
                          متغیر state هم وضعیت یکان و دهگان و صدگان رو نمایش میده.
                          خوب در ابتدا چک میکنیم ببینیم کلید *(یا همون اینتر) فشرده شده یا نه اگر فشرده شده یعنی ارقام وارد شدن و باید به state =3 بریم که در این state دستورات مربوط به ارسال داده به lcd صورت میگیرد. اگر فشرده نشده با توجه به شماره state رقم یکان و دهگان و صدگان تشخیص داده میشه.
                          برای اینکه متوجه بشید فرض کنید میخواهیم عدد 53 رو وارد کنیم. ابتدا عدد 5 رو میزنیم چون در ابتدا مقدار state رو 0 کردیم. هنگام ورود له دستور switch---case وارد state =0 شده و مقدار number برابر 5 میشود و مقدار State یکی اضافه میشود. دوباره با بازگشت به ابتدای while و ورود به دستور switch وارد state =1 شده و عدد 5 در 10 ضرب شده و با عدد 3 جمع میشود. حال کلید ستاره فشرده میشود و شرط if برقرار میگردد و وارد state =3 میشویم و عدد مد نظر رو به lcd یا سون سگمنت میفرستید.

                          unsigne char pressed_key ;

                          unsigne char state = 0;


                          while (1)
                          {
                          pressed_key = scankeypad();
                          if (pressed_key == '*')
                          {
                          state = 3;
                          }


                          switch (state)
                          {
                          case 0 :
                          number = pressed_key;
                          state++;
                          break;

                          case 1 :
                          number = (number*10)+ pressed_key;
                          state++;
                          break;

                          case 2 :
                          number = (number*10) + pressed_key;
                          state++;
                          break;

                          case 3 :
                          state = 0 ;
                          /// send number to lcd
                          break;




                          }
                          }
                          جدیدترین ویرایش توسط saati.sms; ۱۴:۵۳ ۱۳۹۸/۰۵/۱۳.

                          دیدگاه


                            #14
                            پاسخ : مشکل در پبرنامه راه اندازی نمایشگر کارکتری و کی پد در اتمل استودیو با مگا ٣٢ در ذخیره عدد وارد شده

                            ممنونم از وقتی که گذاشتین. اما چند سوال:
                            تابع اسکن کیپد ، هر ثانیه کیپد رو اسکن مکنه و اگر کلیدی فشرده نشه عدد 16 رو برمیگردونه و اگر کلیدی فشرده بشه عد متناظر وانو برمی
                            ردونه- تو دستوری که شما نوشتین اونوخت هر بار که کلید فشرده نمیشه هم preesedkey مقدار داره و درست درنمیاد.
                            و اینکه من این دستوری که شما نوشتین رو جایگزین کدوم خطوط دستور خودم کنم تا بهتر متوجه بشم. ممنونم

                            نوشته اصلی توسط saati.sms نمایش پست ها
                            توضیح کد:
                            متغیر pressed_key همون کلیدی است که توسط کیپد فشرده میشه.
                            تابع scankeypad هم تابعی هست که کیپد رو اسکن میکنه.
                            متغیر state هم وضعیت یکان و دهگان و صدگان رو نمایش میده.
                            خوب در ابتدا چک میکنیم ببینیم کلید *(یا همون اینتر) فشرده شده یا نه اگر فشرده شده یعنی ارقام وارد شدن و باید به state =3 بریم که در این state دستورات مربوط به ارسال داده به lcd صورت میگیرد. اگر فشرده نشده با توجه به شماره state رقم یکان و دهگان و صدگان تشخیص داده میشه.
                            برای اینکه متوجه بشید فرض کنید میخواهیم عدد 53 رو وارد کنیم. ابتدا عدد 5 رو میزنیم چون در ابتدا مقدار state رو 0 کردیم. هنگام ورود له دستور switch---case وارد state =0 شده و مقدار number برابر 5 میشود و مقدار State یکی اضافه میشود. دوباره با بازگشت به ابتدای while و ورود به دستور switch وارد state =1 شده و عدد 5 در 10 ضرب شده و با عدد 3 جمع میشود. حال کلید ستاره فشرده میشود و شرط if برقرار میگردد و وارد state =3 میشویم و عدد مد نظر رو به lcd یا سون سگمنت میفرستید.

                            unsigne char pressed_key ;

                            unsigne char state = 0;


                            while (1)
                            {
                            pressed_key = scankeypad();
                            if (pressed_key == '*')
                            {
                            state = 3;
                            }


                            switch (state)
                            {
                            case 0 :
                            number = pressed_key;
                            state++;
                            break;

                            case 1 :
                            number = (number*10)+ pressed_key;
                            state++;
                            break;

                            case 2 :
                            number = (number*10) + pressed_key;
                            state++;
                            break;

                            case 3 :
                            state = 0 ;
                            /// send number to lcd
                            break;




                            }
                            }

                            دیدگاه


                              #15
                              پاسخ : مشکل در پبرنامه راه اندازی نمایشگر کارکتری و کی پد در اتمل استودیو با مگا ٣٢ در ذخیره عدد وارد شده

                              نوشته اصلی توسط aashkanpasha نمایش پست ها
                              اینم کل کد:

                              #include <avr/io.h>
                              #include <util/delay.h>
                              #define F_CPU 1000000
                              #include "keypad.h"
                              #include "hd44780.h"
                              #include <stdlib.h>


                              unsigned char kp;
                              unsigned char t;
                              int i=0,j=0;
                              char l[16];
                              unsigned char y;
                              char str[16];



                              int kpd_scan(kp)
                              {
                              if(kp==1) { return 1; }
                              if(kp==2) { return 2;}
                              if(kp==3) { return 3;}
                              if(kp==4) {return 10; } //A
                              if(kp==5) {return 4; }
                              if(kp==6) { return 5;}
                              if(kp==7) { return 6;}
                              if(kp==8) { return 11; } //B
                              if(kp==9) { return 7;}
                              if(kp==10) { return 8;}
                              if(kp==11) { return 9;}
                              if(kp==12) { return 12; } //C
                              if(kp==13) { return 13; } //*
                              if(kp==14){ return 0; }
                              if(kp==15) { return 14;} //#
                              if(kp==16) {return 15;} //D
                              return 16;
                              }


                              void kpd_lcd(int t){
                              if(t==1) alcd_putc('1');
                              if(t==2) alcd_putc('2');
                              if(t==3) alcd_putc('3');
                              if(t==4) alcd_putc('4');
                              if(t==5) alcd_putc('5');
                              if(t==6) alcd_putc('6');
                              if(t==7) alcd_putc('7');
                              if(t==8) alcd_putc('8');
                              if(t==9) alcd_putc('9');
                              if(t==0) alcd_putc('0');
                              }






                              int main(void)
                              {
                              keypad_init();
                              alcd_init(); /* Initialize LCD */
                              alcd_cursor(CURSER_OFF); //0,1,2
                              alcd_gotoxy(0,3);

                              unsigned char hi[11]="Welcome To:";
                              for(uint8_t i=0;i<12;i++){
                              alcd_gotoxy(0,i+3);
                              alcd_putc(hi[i]);
                              _delay_ms(100);
                              }
                              alcd_clear();
                              alcd_gotoxy(1,0);
                              alcd_puts(" Number:");

                              while (1)
                              {
                              kp=keypad(); //this code is scaning my keypad every minisecond.
                              t=kpd_scan(kp); //this code send kp to a function and that function for each key return a int number.
                              // if kp=1 return 1 and kp=2 return 2 and ... and if no key press return 16.
                              if(t<10){
                              sprintf(str,"%d",t); //convert number to string.
                              alcd_puts(str); // show number string on lcd.
                              i=i+1; // for each key showed add i.
                              if(i>3){alcd_clear(); alcd_gotoxy(1,0); alcd_puts(" Number:"); i=0;} // if i>3 it mean number become bigger than 999 clear screen.
                              //???code 01: //store the entered numbers in a array and convert that array to a int number.
                              //for example if 1 and 7 entered y=17 if 1 and 4 and 9 ented y=149 .... (between0-999)
                              }

                              if(10<=t<16){ //if any key pressed:
                              if (t==14){ // if this key pressed (key was # or t=14) then:

                              //???code 02: //show on lcd y+1 (y in number maked in code01 abvve)
                              }
                              if (t==13){ // if this key pressed (key was * or t=13) then:
                              //???code 03: //show on lcd y-1 (y in number maked in code01 abvve)
                              }
                              }

                              خوب این کد رو من کمی اصلاح کردم و فکر میکنم درست کار کنه. کمی تو کد شلوغ کاری شده بود و چندتایی متغیر اضافه بود که اصلاح کردم.
                              #include <avr/io.h>#include <util/delay.h>
                              #define F_CPU 1000000
                              #include "keypad.h"
                              #include "hd44780.h"
                              #include <stdlib.h>


                              unsigned char kp = 0;
                              unsigned int num = 0;
                              unsigned char c = 0;
                              char str[17];



                              int kpd_scan(unsigned char key)
                              {
                              if(key==1) { return 1; }
                              if(key==2) { return 2;}
                              if(key==3) { return 3;}
                              if(key==4) {return 10; } //A
                              if(key==5) {return 4; }
                              if(key==6) { return 5;}
                              if(key==7) { return 6;}
                              if(key==8) { return 11; } //B
                              if(key==9) { return 7;}
                              if(key==10) { return 8;}
                              if(key==11) { return 9;}
                              if(key==12) { return 12; } //C
                              if(key==13) { return 13; } //*
                              if(key==14){ return 0; }
                              if(key==15) { return 14;} //#
                              if(key==16) {return 15;} //D
                              return 16;
                              }


                              void kpd_lcd(int t){
                              if(t==1) alcd_putc('1');
                              if(t==2) alcd_putc('2');
                              if(t==3) alcd_putc('3');
                              if(t==4) alcd_putc('4');
                              if(t==5) alcd_putc('5');
                              if(t==6) alcd_putc('6');
                              if(t==7) alcd_putc('7');
                              if(t==8) alcd_putc('8');
                              if(t==9) alcd_putc('9');
                              if(t==0) alcd_putc('0');
                              }






                              int main(void)
                              {
                              keypad_init();
                              alcd_init(); /* Initialize LCD */
                              alcd_cursor(CURSER_OFF); //0,1,2
                              alcd_gotoxy(0,3);

                              unsigned char hi[11]="Welcome To:";
                              for(uint8_t i=0;i<12;i++){
                              alcd_gotoxy(0,i+3);
                              alcd_putc(hi[i]);
                              _delay_ms(100);
                              }
                              alcd_clear();
                              alcd_gotoxy(1,0);
                              alcd_puts(" Number:");

                              while (1)
                              {
                              kp=keypad();
                              kp=kpd_scan(kp);


                              if(kp<10)
                              {
                              c++;
                              if(c>3)
                              {
                              c = 0;
                              num = 0;
                              }
                              alcd_gotoxy(1,0);
                              alcd_puts(" ");
                              num = (num*10) + kp;
                              alcd_gotoxy(1,0);
                              sprintf(str, " Number:%d", num);
                              alcd_puts(str);
                              }

                              else if((kp>=10) && (kp<16))
                              {

                              }
                              }
                              }
                              جدیدترین ویرایش توسط hossein.m98; ۱۵:۱۲ ۱۳۹۸/۰۵/۱۳.

                              دیدگاه

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