NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 4400 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
صفحه 1 از 2 12 آخرینآخرین
نمایش نتایج: از 1 به 20 از 26

موضوع: خواندن کاراکتر های یک صفحه کلید کامپیوتر

  1. #1
    ناظم انجمن Ma3ood آواتار ها
    تاریخ عضویت
    Aug 2011
    نام
    مسعود
    نوشته ها
    2,248
    تشکر
    1,912
    تشکر شده 3,087 بار در 1,509 پست

    پیش فرض خواندن کاراکتر های یک صفحه کلید کامپیوتر

    درود بر دوستان گل
    دوستان میخوام به وسیله ارتباط سریال از کامپیوتر کارکتر های یک صفحه کلید رو بگیرم و روی یه ال سی دی کاراکتری چاپ کنم دستوری که استفاده میکنم در کد زیر معلومه فقط اعداد 1 تا 9 میشه ولی کد های دیگه نمیشه لطفا راهنمایی کنید!
    [PHP]
    n=getchar();
    delay_ms(10);
    itoa(n,buffer);
    lcd_puts(buffer);

    [/PHP]

  2. تشکرها از این نوشته :


  3. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نام
    Advertising world
    نوشته ها
    Many
     

  4. #2
    مدير بخش STM32 sadmonew آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    صادق محمدي
    نوشته ها
    2,002
    تشکر
    6,283
    تشکر شده 3,115 بار در 1,408 پست

    پیش فرض

    سلام مهندس
    منظورتون اينه كه فقط اعداد 0 تا 9 روي ال.سي.دي نشون داده ميشه و حروف نشون داده نميشه؟ يا اينكه اشتباه نشون ميده؟
    به جاي حروف ال.سي.دي چيو نشون ميده؟
    _____________________________________
    _____________________________________

  5. کاربران : 2 تشکر کرده اند از شما sadmonew برای ارسال این پست سودمند:


  6. #3
    ناظم انجمن Ma3ood آواتار ها
    تاریخ عضویت
    Aug 2011
    نام
    مسعود
    نوشته ها
    2,248
    تشکر
    1,912
    تشکر شده 3,087 بار در 1,509 پست

    پیش فرض

    ممنون بابت توجهتون
    فقط اعداد چاپ میشه روی ال سی دی و زمانی که مثلا حرف a را روی صفحه کلید میزنم هیچ اثری نداره و هیچی چاپ نمی شه! دوست عزیز کدی که قرار دادم درسته یا نه چون به اون شک دارم اگه لازمه برنامه + فایل شبیه سازی رو هم اینجا قرار بدم!

  7. تشکرها از این نوشته :


  8. #4
    مدیرکل انجمنها agape آواتار ها
    تاریخ عضویت
    Feb 2009
    نام
    Zeus
    نوشته ها
    1,235
    تشکر
    139
    تشکر شده 2,209 بار در 846 پست

    پیش فرض

    دوست من کدت رو به این صورت تغییر بده :

    کد:
     n=getchar();
         delay_ms(10);
         sprintf(buffer,"%c",n);
        lcd_puts(buffer); 

  9. کاربران : 3 تشکر کرده اند از شما agape برای ارسال این پست سودمند:


  10. #5
    مدیرکل انجمنها agape آواتار ها
    تاریخ عضویت
    Feb 2009
    نام
    Zeus
    نوشته ها
    1,235
    تشکر
    139
    تشکر شده 2,209 بار در 846 پست

    پیش فرض

    در ضمن دوست کن نکته خیلی مهم !
    کدی رو که صفحه کلید ارسال میکنه اسکن کد هست که باید به کد کارکتر تبدیلش کنی!
    در غیر این صورت اون تصحیحی هم که من انجام دادم کار نخواهد کرد.

  11. کاربران : 2 تشکر کرده اند از شما agape برای ارسال این پست سودمند:


  12. #6
    ناظم انجمن Ma3ood آواتار ها
    تاریخ عضویت
    Aug 2011
    نام
    مسعود
    نوشته ها
    2,248
    تشکر
    1,912
    تشکر شده 3,087 بار در 1,509 پست

    پیش فرض

    نقل قول نوشته اصلی توسط agape نمایش پست ها
    دوست من کدت رو به این صورت تغییر بده :

    کد:
     n=getchar();
         delay_ms(10);
         sprintf(buffer,"%c",n);
        lcd_puts(buffer); 
    دوست عزیز درست شد ممنون
    ولی اینو نمی دونم چرا خودم که از دستور sprintf استفاده میکردم به این صورت خطا میگرفت
    ولی من به جای c% از u % استفاده میکردم میشه برای همین باشه
    خیلی ممنون

    در ضمن دوست کن نکته خیلی مهم !
    کدی رو که صفحه کلید ارسال میکنه اسکن کد هست که باید به کد کارکتر تبدیلش کنی!
    در غیر این صورت اون تصحیحی هم که من انجام دادم کار نخواهد کرد.
    در این مورد لطفا بیشتر توضیح بدهید!
    ویرایش توسط Ma3ood : 07-03-2012 در ساعت 17:03

  13. تشکرها از این نوشته :


  14. #7
    ناظم انجمن Ma3ood آواتار ها
    تاریخ عضویت
    Aug 2011
    نام
    مسعود
    نوشته ها
    2,248
    تشکر
    1,912
    تشکر شده 3,087 بار در 1,509 پست

    پیش فرض

    اینهم برنامه کامل+فایل شبیه سازی
    شاید به درد یکی خورد!
    فايل هاي پيوست شده فايل هاي پيوست شده

  15. کاربران : 3 تشکر کرده اند از شما Ma3ood برای ارسال این پست سودمند:


  16. #8
    ناظم انجمن Ma3ood آواتار ها
    تاریخ عضویت
    Aug 2011
    نام
    مسعود
    نوشته ها
    2,248
    تشکر
    1,912
    تشکر شده 3,087 بار در 1,509 پست

    پیش فرض

    عملی هم تست شد!
    جواب داد

  17. تشکرها از این نوشته :


  18. #9
    ناظم انجمن Ma3ood آواتار ها
    تاریخ عضویت
    Aug 2011
    نام
    مسعود
    نوشته ها
    2,248
    تشکر
    1,912
    تشکر شده 3,087 بار در 1,509 پست

    پیش فرض

    دوستان یه سوال دیگه
    مثلا من میخوام با زدن کلید esc کلا صفحه نمایشم پاک بشه و مکان نما بیاد اول سطر و با این دستور میخوام اینکار رو بکنم ولی هیچ تاثیری نداره و فقط فاصله ایجاد میشه
    [PHP]
    if(n==0x0F)
    lcd_clear();
    [/PHP]
    ویرایش توسط Ma3ood : 07-03-2012 در ساعت 19:20

  19. تشکرها از این نوشته :


  20. #10
    مدير بخش STM32 sadmonew آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    صادق محمدي
    نوشته ها
    2,002
    تشکر
    6,283
    تشکر شده 3,115 بار در 1,408 پست

    پیش فرض

    سلام داداشي
    كد هگز كليد backspace عدد 0x08 هستش و كد هگز كليد esacpe مقدار 0x1B هستش.
    با مقداري كه شما تو سرط قرار دادين بايدم درست كار نكنه.
    طبق اين عكس كه گذاشتم دارم اينارو ميگم:
    تصاوير کوچک فايل پيوست تصاوير کوچک فايل پيوست برای دیدن سایز بزرگ روی عکس کلیک کنید

نام: asciifull.gif
مشاهده: 36
حجم: 27.3 کیلو بایت  
    _____________________________________
    _____________________________________

  21. کاربران : 2 تشکر کرده اند از شما sadmonew برای ارسال این پست سودمند:


  22. #11
    ناظم انجمن Ma3ood آواتار ها
    تاریخ عضویت
    Aug 2011
    نام
    مسعود
    نوشته ها
    2,248
    تشکر
    1,912
    تشکر شده 3,087 بار در 1,509 پست

    پیش فرض

    درود بر داداش گلم
    این عکس خیلی به کارم اومد اخه روشی که به ذهنم اومد این بود که برم PORTD=getchar(); بزنم و یکی یکی کد ها شو به دست بیارم خیلی لطف کردی!

  23. تشکرها از این نوشته :


  24. #12
    ناظم انجمن Ma3ood آواتار ها
    تاریخ عضویت
    Aug 2011
    نام
    مسعود
    نوشته ها
    2,248
    تشکر
    1,912
    تشکر شده 3,087 بار در 1,509 پست

    پیش فرض

    اخرین سوال!
    چه جوری میتونم از کلید back space به گونه ای استفاده کنم که با زدن اون یکی از کاراکتر های چاپ شده پاک بشه! یا در از کجا میتونم و با چه دستوری بفهممم که الان کدوم کاراکتر ال سی دی خالی و کدوم پره؟؟؟
    ویرایش توسط Ma3ood : 08-03-2012 در ساعت 11:36

  25. تشکرها از این نوشته :


  26. #13
    مدیرکل انجمنها agape آواتار ها
    تاریخ عضویت
    Feb 2009
    نام
    Zeus
    نوشته ها
    1,235
    تشکر
    139
    تشکر شده 2,209 بار در 846 پست

    پیش فرض

    دوست من اینا دیگه همه قلق برنامه نویسی هست و باید روش فکر کنی تا به جواب برسی !
    مثلا برای بک اسپیس میآی موقعیت جاری نمایشگر رو در میآری از x یکی کم میکنی و تو موقعیت جدید هرچی هست رو پاک میکنی!

  27. کاربران : 2 تشکر کرده اند از شما agape برای ارسال این پست سودمند:


  28. #14
    ناظم انجمن Ma3ood آواتار ها
    تاریخ عضویت
    Aug 2011
    نام
    مسعود
    نوشته ها
    2,248
    تشکر
    1,912
    تشکر شده 3,087 بار در 1,509 پست

    پیش فرض

    نقل قول نوشته اصلی توسط agape نمایش پست ها
    دوست من اینا دیگه همه قلق برنامه نویسی هست و باید روش فکر کنی تا به جواب برسی !
    مثلا برای بک اسپیس میآی موقعیت جاری نمایشگر رو در میآری از x یکی کم میکنی و تو موقعیت جدید هرچی هست رو پاک میکنی!
    درود بر شما حرف شما درسته اما شما یه راهنمایی در مورد موقعیت کاراکتر بفرمایید من با چه دستوری بیام اخرین خونه ای که پر شده رو بفهمم و یکی به سمت چپ هدایتش کنم و با یه کارکتر مثلا خالی " " انو پر کنم لطفا بیشتر توضیح بدهید!

  29. تشکرها از این نوشته :


  30. #15
    کاربر فعال
    تاریخ عضویت
    Dec 2011
    نام
    علی حاجی آبادی
    نوشته ها
    240
    تشکر
    46
    تشکر شده 237 بار در 155 پست

    پیش فرض

    سلام
    اگر یه متغیر x تعریف کنی و هربار با نوشتن یک کاراکتر یکی به x اضافه کنید اونوقت x همیشه محل نوشتن کارکتر جدید رو توی خودش داره
    بنابر این x-1 مختصات آخرین کاراکتر تایپ شدست. با دستور locate (در بسکام) یا gotoxy (در کد ویژن) نشانگر lcd رو به اون مختصات ببرید و " " را روی lcd بنویسید. یادت باشه از x هم یه دونه کم کنی

  31. کاربران : 2 تشکر کرده اند از شما ali_h برای ارسال این پست سودمند:


  32. #16
    ناظم انجمن Ma3ood آواتار ها
    تاریخ عضویت
    Aug 2011
    نام
    مسعود
    نوشته ها
    2,248
    تشکر
    1,912
    تشکر شده 3,087 بار در 1,509 پست

    پیش فرض

    نقل قول نوشته اصلی توسط ali_h نمایش پست ها
    سلام
    اگر یه متغیر x تعریف کنی و هربار با نوشتن یک کاراکتر یکی به x اضافه کنید اونوقت x همیشه محل نوشتن کارکتر جدید رو توی خودش داره
    بنابر این x-1 مختصات آخرین کاراکتر تایپ شدست. با دستور locate (در بسکام) یا gotoxy (در کد ویژن) نشانگر lcd رو به اون مختصات ببرید و " " را روی lcd بنویسید. یادت باشه از x هم یه دونه کم کنی
    ممنون
    قبول اینهم یه راه حل هست ولی مثلا میخوای یه متغییر بزاری که زمانی متغییری مثل n (متغییر n برای دریافت کاراکتر از ارتباط سریال) را دریافت میکنیم حالا چه شرطی بزاریم که 110 تا کد رو اگه باشه یکی به این متغییر اضافه کنه و یا با نوشتن یه کاراکتر به متغییر اضافه کنه
    خودم از دستورات lcd_read_byte(); با دستورات خاصی این کارو کردم
    ولی یه وقت میبینی یکی پاک میکنه بعد میبینی یکیشو جا میزاره بعدی شو پاک میکنه و.....

  33. تشکرها از این نوشته :


  34. #17
    کاربر فعال
    تاریخ عضویت
    Dec 2011
    نام
    علی حاجی آبادی
    نوشته ها
    240
    تشکر
    46
    تشکر شده 237 بار در 155 پست

    پیش فرض

    یه روش دیگه هم هست
    می تونی یه متغیر از نوع رشته کاراکتری تعریف کنی و همه تغییرات رو مثل اضافه کردن کاراکتر ها یا حذف کردنشون با backspace و یا خالی کردن کامل با escape و ... رو روی اون رشته کاراکتری انجام بدی که خیلی راحت تره. برنامتون رو هم یه جوری بنویسید که به محض تغییر این رشته اون رو روی LCD چاپ کنه

    البته دقت کن که هربار lcd رو پاک نکنی چون اونوقت صفحه دائم چشمک می زنه. فقط رشته کاراکتری جدید رو روی نوشته های قبلی lcd دوباره بنویس.

  35. کاربران : 2 تشکر کرده اند از شما ali_h برای ارسال این پست سودمند:


  36. #18
    ناظم انجمن Ma3ood آواتار ها
    تاریخ عضویت
    Aug 2011
    نام
    مسعود
    نوشته ها
    2,248
    تشکر
    1,912
    تشکر شده 3,087 بار در 1,509 پست

    پیش فرض

    دوست عزیز نوشته ات رو میتونی در غالب یه کد بیان کنی !

  37. تشکرها از این نوشته :


  38. #19
    کاربر فعال
    تاریخ عضویت
    Mar 2010
    نوشته ها
    236
    تشکر
    101
    تشکر شده 246 بار در 163 پست

    پیش فرض

    من یه کد ویرایشگر برای گرافیک ال سی دی 128*64 نوشتم که با کیبرد کار میکنه
    باید یکم مرتبش کنم بعد اپلودش میکنم(اصلش ارسال و دریافت اس ام اس با ای وی ار و کیبرد هست)
    این قسمت backspace هست
    [PHP] case backspace:
    {
    if (x==0 && y==1)
    break;
    clrpointer();
    j=MakePos()-1;//current pointer position
    if(x)x--;//return back to previous line if its first char in current line
    else {x=maxwidth;y--;}
    i=0;
    do
    {
    buffer[j+i]=buffer[j+i+1];//move every char to pos-1 in buffer
    glcd_putcharxy(x*6,y*8,buffer[j+i]);
    x++;
    if(x>maxwidth)
    {
    x=0;y++;//goto next line
    }
    i++;
    } while (buffer[j+i]);
    glcd_putcharxy((--x)*6,y*8,' ');
    *counter--;
    MakePointer();
    break;
    }[/PHP]

  39. کاربران : 3 تشکر کرده اند از شما mrm برای ارسال این پست سودمند:


  40. #20
    کاربر فعال
    تاریخ عضویت
    Dec 2011
    نام
    علی حاجی آبادی
    نوشته ها
    240
    تشکر
    46
    تشکر شده 237 بار در 155 پست

    پیش فرض

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

    من این برنامه رو قبلا برای اتصال کیبرد کامپیوتر به AVR نوشته بودم :
    کد:
    Do
       B = 0
       cls
       Do
          B = Getatkbd()
       Loop Until B <> 0
    
       If B = 13 Then                                           'ENTER
          Cls
          X = 1
          Inputstr = ""
       End If
    
       If B = 8 Then                                            'BACKSPACE
          X = X - 1
          If X < 1 Then X = 1
          Mid(inputstr , X , 1) = ""
          Locate 1 , X
          Lcd " "
          Locate 1 , X
       End If
    
       If B <> 8 And B <> 13 Then
          Char = Chr(b)
          Inputstr = Inputstr + Char
          Lcd Char
          X = X + 1
       End If
    
    Loop

  41. کاربران : 2 تشکر کرده اند از شما ali_h برای ارسال این پست سودمند:


صفحه 1 از 2 12 آخرینآخرین

موضوعات مشابه

  1. شبکه های کامپیوتری
    توسط mehdi_nxp در انجمن مقالات،آموزش هاوپایان نامه ها
    پاسخ: 0
    آخرين نوشته: 03-06-2012, 23:00
  2. کامپیوتر بر علیه کامپیوتر!!
    توسط alamdar در انجمن برنامه نویسی کامپیوتر/کنترل با کامپیوتر
    پاسخ: 1
    آخرين نوشته: 30-04-2012, 11:20
  3. پروگرمر با lcd گرافیکی و بدون نیاز به کامپیوتر
    توسط pooriya در انجمن پروگرامرهای AVR.PIC.8051.XMEGA.ARM
    پاسخ: 1
    آخرين نوشته: 12-06-2011, 11:42
  4. اخبار کامپیوتر و it
    توسط arsalan681 در انجمن ترفندهای کامپیوتری/معرفی نرم افزار های مفید
    پاسخ: 34
    آخرين نوشته: 03-06-2010, 14:16
  5. اخبار کامپیوتر و it
    توسط arsalan681 در انجمن اخبار کامپیوتر و IT و مسابقات رباتیک
    پاسخ: 1
    آخرين نوشته: 03-06-2010, 11:23

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •