اطلاعیه

Collapse
No announcement yet.

سوال در مورد یکی از پروژه های کتاب علی کاهه

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

    سوال در مورد یکی از پروژه های کتاب علی کاهه

    سلام
    دوستان صفحه 314 این کتاب یه پروژه هست که توی سه تا عکس توی فایل زیر گذاشتم ، اگه زحمت نیست دانلود کنید و روش زوم کنید تا بتونم سوالامو بپرسم
    http://sadedelan.persiangig.com/ali%20kahe.zip



    توی صفحه 314 اون پایین نوشته که :
    با فشردن کلید (44) delet تمام صفحه نمایش پاک شده و مکانما به سطر و ستون اول پرش میکند . با فشردن کلید (56) home (ستون و سطر اول ) میرود . با فشردن کلید (8) backspace حرف ستون قبل پاک شده و مکان نما در آن مکان میماند . با فشردن کلید ( 13) enter مکانما به خط پایین پرش میکند و در نهایت با فشرده شدن دکمه (9) tab مکان نما 4 ستون به راست جهش میکند.
    حالا سوالم اینه که این اعداد 44 و 56 و 8 و 13 و 9 رو از کجا اورده ؟؟، اینا کد هگز کلیدهان؟ اگه کد هگز هستن چرا توی اون عکس کیبرد مقدارشون یه چیز دیگه است مثلا کلید delet مقدار64 رو داره و کلید tab مقدار 0d رو داره.....

    سوال دیگه اینکه توی صفحه 315 اون آخر برنامه دو تا جدول نظاره داره میخواستم بدونم که
    1- اون کدها رو چطوری به دست آورده؟
    2 - منظور از عبارت normal keys lower case و shifted keys upper case چیه؟
    3 - من با طرز کار این جدول و نحوه ایجادش آشنا نیستم اگه میشه یه توضیح در موردش بدین ، مثلا اینکه کدوم خط از برنامه به این جدول اشاره میکنه و برنامه به چه شکلی کد کلید رو از توی جدول پیدا میکنه؟

    #2
    پاسخ : سوال در مورد یکی از پروژه های کتاب علی کاهه

    1-توی فایل bbb به طور کامل توضیح داده شده که این اعداد چی هستن.کافیه با دقت بخونید!
    2-منظورش اینه که اگه کلید ها بدون شیفت فشار داده بشن، حروف کوچک هستن و اگه با شیفت فشار داده بشن حروف بزرگ میشن(راهنمایی برنامه نویس هست)
    کلمه آخر خط 4 برنامه به اسم جدول اشاره میآ‌کنه.

    دیدگاه


      #3
      پاسخ : سوال در مورد یکی از پروژه های کتاب علی کاهه

      ممنون ولی توضیحاتتون خیلی مختصر بود
      من تا حالا با 8051 کار میکردم ، این اولین پروژه امه که کوچ کردم به سمت avr ، اگه لطف کنید یه مقدار بیشتر توضیح بدین ممنون میشم

      -توی فایل bbb به طور کامل توضیح داده شده که این اعداد چی هستن.کافیه با دقت بخونید!
      حداقل 37 بار اونو خوندم ولی خداییش نفهمیدم چجوری مقدارشون با اون چیزی که روی کیبرد زده فرق میکنه مثلا کلید enter رو با عدد13 مشخص کرده ولی توی اون عکس کیبرد مقدار 5a روی کلید enter نوشته شده...

      یه چیز دیگه اینکه ، توی 8051 بعداز end هر چیزی بیاد دیگه کامپایل نمیشه ، اینجا هم اینجوریه ؟ ، اگه اینجوریه پس اون جدول هم خونده نمیشه ؟ خب میکرو چطوری مقدار اسکی رو از توی جدول میخونه؟
      --------------------------
      راستش من اصل پروژه ام اینه که با کیبرد کامپیوتر یه متنی رو فارسی روی ال سی دی کارکتری نشون بدم ، حالا هدفم از این سوالا اینه که بفهمم اون کلیدی که فشار داده میشه چه کدی رو به میکرو ارسال میکنه ، و میکرو چه کدی رو به ال سی دی ارسال میکنه (و توی کدوم قسمت برنامه این اتفاق میافته) که بعد اون کد رو با دستور deflcdchar و lcd chr عوض کنم....

      دیدگاه


        #4
        پاسخ : سوال در مورد یکی از پروژه های کتاب علی کاهه

        برای اینتر عدد 5a هگز روی کیبورد نوشته شده که میشه 90 در مبنای ده
        خوب حالا خونهآ‌ی 90 ام جدول رو پیدا میآ‌کنیم و عدد توش رو میآ‌خونیم که میشه 13

        در بسکام جداول lookup بعد از END میان و به راحتی هم خونده میشن!

        دیدگاه


          #5
          پاسخ : سوال در مورد یکی از پروژه های کتاب علی کاهه

          سلام
          نگاه کنین چون داده ها دقیقا چیزی که روی کیبور وارد می کنین به میکرو نمی رسه از جدول Lookup استفاده می کنیم.در سیستم های کامپیوتری اینها قرار داد هستن مثلا باید دکمه اینتر عدد 13 رو داشته باشه و backspace عدد 8.برای اینکه بخواین بدونین کدوم یک از اعداد مروبط به چه کارکتری هستن باید معادل اسکی این اعداد رو بدونین.چون تعدادش زیاد هست کسی حفظ نمی کنه و تنها با رجوع کردن می تونین مقادیر رو به دست بیارین
          این جدول اسکی رو ببینین



          carriage return یا همون اینتر معادل عدد 13 هست
          backspace معادل عدد 8
          و ...

          حالا چرا به جای اینتر نوشتن carriage return؟ این بر می گرده به روزهای ابتدایی که داشتن استاندارد اسکی رو برای پرینتر ها و ادوات دیگه استفاده می کردن و اکثر این لغات از اونجا یا برای صفحه نمایش های قبلی انشایی در نظر گرفته شده بودن

          دیدن اگر بخواین یه حرف انگلیسی رو بزرگ تایپ کنین ابتدا shift رو می گیرین و اون حرف انگلیسی رو فشار می دیدین اینجا هم دقیقا همین هست می گه که وقتی shift رو نگرفتیم اعداد کوچیک و کارکترهای مخصوصی که بدون shift هستن رو معادل اسکیشون رو بر گردونه
          normal keys lower case

          و اگر shif گرفتیم معادل بزرگر شده و کاکترهایی که با شیفت کار می کنن رو بر گردون
          shifted keys upper case

          منظورم و از کارکترهای مخصوص بگم
          دکمه / رو بزنین مستیم می نویسه / اما اگر شیفت رو بگیرین می نویسه ?

          خوب سوال بعدیتون که در مورد Lookup هست
          نگاه کنین این دستور رو جاهایی به کار می بریم که مثلا منتظر یه کارکتر از یک دکمه هستیم اما یه چیز دیگه رو تحویل می گیریم حالا ما با این جدول و دستور lookup می یام جای کارکترها رو با هم عوض می کنیم.فرض کنین یه keypad داریم وقتی دکمه 0 رو فشار می دیم عدد 9 و اگر 1 رو فشار می دین عدد 0 و عدد 2 رو فشار می دیم عدد 1 رو نشون می ده و به ترتیب حالا ما می یام چه کار می کنیم؟ که اگر عدد 1 رو فشار بده به جای اینکه عدد صفر رو نشون بده همون یک رو نشون بده؟ 4 راه داریم
          1-اتصالات کیپد و میکرو رو درست سیم بندی کنیم(که همیشه قابل انجام نیست بعد از تهیه برد)
          2-از if استفاده کنیم که بگیم اگر شد صفر یعنی یک و ....
          3-از select case استفاده کنیم که به ازای هر case یک دکمه رو تعریف کرده باشیم
          4-استفاده از جدول lookup

          حالا ما هم می یام مورد 4 رو بررسی می کنیم
          جدول lookup به این صورت نوشته می شه

          اسم لیبل دلخواه
          مکان n , .... , مکان یک , lمکان صفر Data

          خوب برای صفحه کلید فرضیمون داریم (مثلا من اسم لیبل رو baby در نظر می گیرم)


          baby:
          Data 1,2,3,4,5,6,7,8,9,0

          خوب در این دستور یعنی در مکان صفر عدد یک رو بر گردون (یعنی اگر کاربر معادل 1 رو وارد کرده باشه و مقدارش برابر صفر هست (یعنی مکانش صفر هست) پس در مکان صفر اگر من یک رو قرار بدم یک بر می گرد و بقیه هم به این ترتیب
          پس اگر عدد 9 به جای صفر نشون داده بشه به مکان نه می ریم و به جاش صفر می زاریم

          دستور end تنها می گه انتهای برنامه اصلی اینجاست اما می تونه زیر برنامه ، لیبل و ... بعد از این end قرار بگیره و همانند 8051 این دستور end یه حلقه بی نهایت رو تولید می کنه که اگر برنامه در این end بیوفته دیگه بیرون نمی یاد تا وقفه و ... رخ بده

          موفق باشین :bye
          هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

          دیدگاه


            #6
            پاسخ : سوال در مورد یکی از پروژه های کتاب علی &#170

            برای اینتر عدد 5a هگز روی کیبورد نوشته شده که میشه 90 در مبنای ده
            خوب حالا خونه‌ی 90 ام جدول رو پیدا می‌کنیم و عدد توش رو می‌خونیم که میشه 13
            ممنون ولی فقط کلید tab ظاهرا جاش درسته مثلا همین اینتر خونه 91 عدد 13 نوشته شده
            یا مثلا کلید delet روی کیبرد نوشته 64 که به دسیمال میشه 100 ولی خونه 100ام عدد صفر نوشته شده
            کلید home روی کیبرد نوشته 6e که به دسیمال میشه 110
            کلید backspace هم عدد 66 نوشته که به دسیمال میشه 102 و اون خونه هم باز صفر هست
            فقط کلید tab که مقدار 0d رو نوشته و خونه 13ام عدد نه درست هست؟؟؟؟
            توی این عکس علامت زدمشون

            در بسکام جداول lookup بعد از END میان و به راحتی هم خونده میشن!
            (راهنمایی برنامه نویس هست)
            منظورم اینه که شما گفتین راهنمایی برنامه نویس ، اگه مثلا این جداول رو از برنامه حذف کنیم دیگه میکرو درست کار نمیکنه؟، یعنی میکرو هم ازشون استفاده میکنه یا فقط واسه درک بهتر خواننده کتاب هست؟

            ----------------------------------------------
            سلام
            نگاه کنین چون داده ها دقیقا چیزی که روی کیبور وارد می کنین به میکرو نمی رسه از جدول Lookup استفاده می کنیم.در سیستم های کامپیوتری اینها قرار داد هستن مثلا باید دکمه اینتر عدد 13 رو داشته باشه و backspace عدد 8.برای اینکه بخواین بدونین کدوم یک از اعداد مروبط به چه کارکتری هستن باید معادل اسکی این اعداد رو بدونین.چون تعدادش زیاد هست کسی حفظ نمی کنه و تنها با رجوع کردن می تونین مقادیر رو به دست بیارین
            این جدول اسکی رو ببینین
            دستتون درد نکنه ، توضیحات کاملی بود
            منتها چرا کلید home نیستش و چرا کلید delet مقدارش فرق میکنه مگه نباید مقدارش 44 باشه؟


            راه داریم
            1-اتصالات کیپد و میکرو رو درست سیم بندی کنیم(که همیشه قابل انجام نیست بعد از تهیه برد)
            2-از if استفاده کنیم که بگیم اگر شد صفر یعنی یک و ....
            3-از select case استفاده کنیم که به ازای هر case یک دکمه رو تعریف کرده باشیم
            4-استفاده از جدول lookup
            آفرین دنبال یه همچین تعریفی بودم
            حالا با توجه به اینکه من باید فارسی بنویسم ، بهتر نیست اصلا از جدول استفاده نکنم و جدول رو حذف کنم؟ و به جاش از دستور select case استفاده کنم و به ازای هر case با استفاده از دستورات deflcdchar و lcdchr کد فارسیش رو به ال سی دی بفرستم ؟ ، به نظرتون اگه این راه عملیه ممنون میشم یه سر به این تایپیک بزنید ، در مورد این دو تا دستور یه سوال دارم که هیشکی جواب نداد...
            http://www.eca.ir/forum2/index.php?topic=65009.0


            دیدگاه


              #7
              پاسخ : سوال در مورد یکی از پروژه های کتاب علی کاهه

              سلام
              منتها چرا کلید home نیستش و چرا کلید delet مقدارش فرق میکنه مگه نباید مقدارش 44 باشه؟
              خوب دکمه Home ترکیبی از دو دستور هست یکی new line و دیگه ای return یعنی کارکتر شماره 10 و 13
              این عدد 56 و 44 اینها احتمالا غلط هستن شما یه چکی کنین حتما ، چون معادل اسکی اعداد صفر و ... به هم می ریزه و کارکترهای کنترلی رو اشتباهی اجرا می کنه(مثلا آخرین پروژه من که یه قسمتش تبدیل اعداد اسکی به دسیمال و بلعکس بود اگر این ترکیب کتاب کاهه بود حتما برنامم اشتباه می شد.
              الان باز برای تایید حرفام یه برنامه نوشتم با زبان vb.net که در زیر هم می بینین معادل اسکی (تابع مورد استفاده chr هست یعنی)

              TextBox2.Text = ChrW(TextBox1.Text)

              خروجی های برنامه




              آفرین دنبال یه همچین تعریفی بودم
              حالا با توجه به اینکه من باید فارسی بنویسم ، بهتر نیست اصلا از جدول استفاده نکنم و جدول رو حذف کنم؟ و به جاش از دستور select case استفاده کنم و به ازای هر case با استفاده از دستورات deflcdchar و lcdchr کد فارسیش رو به ال سی دی بفرستم ؟ ، به نظرتون اگه این راه عملیه ممنون میشم یه سر به این تایپیک بزنید ، در مورد این دو تا دستور یه سوال دارم که هیشکی جواب نداد...
              نگاه کنین در bascom فارسی نویسی اشتباه هست یعنی نمی تونین فارسی تایپ کنین برای نمایش فونتهای فارسی باید معادل هگزشون رو دقیقا مثل همین جدول بفرستین یعنی ابتدا چک کنین که مثلا اگر فارسی شد و حرف S تایپ شد باید بنویسه س و ... و مشکل اصلی این هست که حروف فارسی سر هم و جدا از هم هم هستن یعنی س و سـ یعنی با select case وحشتناک سرعت میکروتون نسبت به دستور lookup گرفته می شه و حجم زیادی از برنامه مختص صفحه کیبرد می شه پس بهتره از همون جدول lookup برای فونت فارسی هم استفاده کنین
              هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

              دیدگاه


                #8
                پاسخ : سوال در مورد یکی از پروژه های کتاب علی کاهه

                جداول که واسه راهنمایی نیستن.منظورم اون دو عبارتی بود که بعد از "'" اومده بود.
                ظاهرا اطلاعات کلیدهای روی کیبورد اشتباه هستن ولی روال همونیه که گفتم

                دیدگاه


                  #9
                  پاسخ : سوال در مورد یکی از پروژه های کتاب علی کاهه

                  ظاهرا اطلاعات کلیدهای روی کیبورد اشتباه هستن
                  این عدد 56 و 44 اینها احتمالا غلط هستن
                  دوستان الان من باید چکار کنم ؟ معادل اسکی درست کلیدها رو از کجا بیارم؟


                  نگاه کنین در bascom فارسی نویسی اشتباه هست یعنی نمی تونین فارسی تایپ کنین برای نمایش فونتهای فارسی باید معادل هگزشون رو دقیقا مثل همین جدول بفرستین
                  درسته ، میدونم که نباید فارسی تایپ کرد ، از منوی tools توی بسکام و گزینه lcd designer میخوام کارکترمو طراحی کنم مثلا واسه حرف "ب" اینجوری میشه:
                  Deflcdchr 0 , 32 , 32 , 17 , 17 , 31 , 32 , 4 , 32
                  cls
                  (0)lcd chr
                  end

                  منتها الان مشکل من اینه که بالاخره نفهمیدم معادل اسکی کلیدها چی شد و توی عنوان دستور case چی بنویسم؟
                  مثلا واسه این حرف "ب" وقتی کلید F فشار داده بشه یعنی حرف ب زده شده که توی اون جدولی که جناب baby_1 گذاشتن معادل این حرف به دسیمال ( آخرش فرق دسیمال و اسکی رو توی این جداول نفهمیدم ) رو نوشته 70
                  حالا الان این برنامه ای که من واسه تشخیص حرف " ب " نوشتم درسته؟
                  main:
                  ()a=getatkbd
                  :select case a
                  :case70
                  Deflcdchr 0 , 32 , 32 , 17 , 17 , 31 , 32 , 4 , 32
                  cls
                  (0)lcd chr
                  end
                  من طبق همون جدول جناب baby_1 جلو برم درسته؟

                  مشکل اصلی این هست که حروف فارسی سر هم و جدا از هم هم هستن یعنی س و سـ
                  خب فکر نکنم زیاد مشکلی ایجاد کنه ، به جای 32 حرف فارسی ، 55 تا کارکتر طراحی میکنم ، که حروف آ ، ب ، ت ، ث ، ج ، ح ، چ ، خ ، س ، ش ، ص ، ض ، ع ، غ ، ف ، ق ، ک ، گ ، ل ، م ، ن ، ه ، ی رو هم حالت کوچیکشون رو طراحی میکنم هم بزرگ...

                  با select case وحشتناک سرعت میکروتون نسبت به دستور lookup گرفته می شه
                  یعنی چقدر سرعت میکرو کم میشه؟ مثلا وقتی یه کلید رو میزنیم چقدر طول میکشه تا روی ال سی دی نشون بده ؟ من زیاد سرعت برام مهم نیست ها ، فقط این پروژه درست کار کنه که استاد نمره رو بده...
                  اگه به نظرتون مشکل جدی ایجاد نمیکنه من همون از روش select case برم و 55 تا از این دستور رو استفاده کنم ، چون راحت تره ، در ضمن یه چیز دیگه که ذهنم رو مشغول کرده اینه که اگه بخوام از دستور look up برم باید توی جدولی که واسه میکرو طراحی میکنم کد اسکی حروف فارسی رو بزنم که خب نمیشه ، چون حروف فارسی اصلا کد اسکی ندارن و کد اسکی فقط شامل حروف انگلیسی و اعداد و چند تا علامت میشه ، بنابراین فقط باید کد هگزشون رو توسط lcd chr به ال سی دی فرستاد این حرف من درسته؟؟؟

                  و من همچنان منتظرم تا به این تایپیک دوستان یه سر بزنن
                  یه مشکل با این دو تا دستور دارم...
                  http://www.eca.ir/forum2/index.php?topic=65009.0

                  دیدگاه


                    #10
                    پاسخ : سوال در مورد یکی از پروژه های کتاب علی کاهه

                    دوستان من تو یه تاپیک دیگه هم نوشتم
                    ما تو برنامه کیبرد کامپیوتر بایستی چه اعدادی رو بنویسیم؟
                    خواهشاً اگه کسی میدونه کمک کنه
                    مردود شدن بهتر از با تقلب قبول شدن است

                    دیدگاه


                      #11
                      پاسخ : سوال در مورد یکی از پروژه های کتاب علی کاهه

                      خوب به اون سوالم که کسی جواب نداد
                      حالا یه سوال دیگه :
                      برنامه وقتی به دستور getatkbd برسه متوقف میشه منتظر فشار کلید میمونه یا نه یه اسکن میکن بعد از روش رد میشه ؟
                      مردود شدن بهتر از با تقلب قبول شدن است

                      دیدگاه

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