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

موضوع: کمک درنوشتن برنامه

  1. #1
    کاربر علاقه مند
    تاریخ عضویت
    Apr 2009
    نوشته ها
    37
    تشکر
    0
    تشکر شده 0 بار در 0 پست

    Exclamation کمک درنوشتن برنامه

    با عرض سلام به تمام بر و بچه های ir-man

    با استفاده از Atmega16
    یک کی برد تلفنی 4*3 را به ورودی اینتراپت atmega16 متصل است{int0-int1-int2}(که باید بصورت AND شده به ورودی اینتراپت وصله بشه چون که ورودی اینتراپت سه تا است وپایه کی بوردمون 7) هرگاه کاربر کلیدی را زد cpu برنامه اصلی را رها کند وکلید زده شده را روی یک 7segment که روی یک پورت قرار دارد نشان دهد وهم چنین بر نامه اصلی آن یک شمارنده صفر تا 15 بالا شمار است که روی پورت دیگری قرار دارد.ا
    با تشکر

  2. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نوشته ها
    Many
     

  3. #2
    کاربر علاقه مند
    تاریخ عضویت
    Apr 2009
    نوشته ها
    37
    تشکر
    0
    تشکر شده 0 بار در 0 پست

    پیش فرض RE: کمک درنوشتن برنامه

    هیچ کس توی این سایت نیست که بتون به من کمک کنه و جواب سوالم را بده؟

  4. #3
    کاربر فعال
    تاریخ عضویت
    Aug 2008
    نوشته ها
    212
    تشکر
    10
    تشکر شده 48 بار در 38 پست

    پیش فرض RE: کمک درنوشتن برنامه

    سلام
    اگه با اسمبلی برای کیبرد برنامه نوشته باشین میتونین به راحتی برای کیپد 3*4 هم بنویسین
    به این صورت که یه ماتریس در نظر میگیری بعد به ترتیب یکی از سطرها یا ستون ها رو یک میکنی و ستون یا سطر ها میخونی تا بفهی کدوم کلید فشرده شده


    یا تو بیسکام تابعش برای4*4 هست و کاری نداره یه ستون حذف میشه بعدم سیم های کیبرد رو این ور اون ور میکنی به راحتی جواب میده
    میتونی به این صورت هم وصل کنی

    c1=port b.0
    c2= portb.2
    c3= portb.3
    r1=portb.4
    r2=portb.5
    r3=portb.6
    r4=portb.7


    اینم یه برنامه هستش که از اینترنت برداشته بودم به نظر که درسته ولی شما یه تستی بکن

    $regfile = "m32def.dat"
    $crystal = 1000000


    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Pina.4 , Db5 = Pina.5 , Db6 = Pina.6 , Db7 = Pina.7 , Rs = Pina.2 , E = Pina.3
    Config Kbd = Portd , Debounce = 50 , Delay = 30

    Dim K As Byte

    Cls
    Cursor Blink
    L1:
    Do
    Display On
    Cls
    Lcd "Enter The Key"

    Loop Until K < 15

    Main:

    K = Getkbd()
    If K > 15 Then Goto Main
    K = Lookup(k , My_kbd)
    Cls
    Lcd K
    If K = 10 Then Goto L1
    If K = 11 Then Display Off
    jmp main

    End
    My_kbd:
    Data 1 , 2 , 3 , 4 , 4 , 5 , 6 , 7 , 7 , 8 , 9 , 10 , 10 , 0 , 11

  5. #4
    کاربر علاقه مند
    تاریخ عضویت
    Apr 2009
    نوشته ها
    37
    تشکر
    0
    تشکر شده 0 بار در 0 پست

    پیش فرض RE: کمک درنوشتن برنامه

    ببین دوست عزیز
    این برنامه ای که من بالا نوشتم به وسیله اینتراپت avr انجام می شه یعنی این که یک سون سگمنت به پورت (مثلا)
    Aاست ودارد شمارش می کند ویک کی بورد به سه تا اینتراپت های ورودی avr وصله(int0-int1-int2) {که باید بصورت AND شده به ورودی اینتراپت وصله بشه چون که ورودی اینتراپت سه تا است وپایه کی بوردمون 7.}سپس اگر از کی بورد عددی زده شده cpu شمارش را رها کرده وعدد زده شده از کی بورد را روی سون سگمنتی که روی پورت دیگر مثلا Bقرار دارد یا همان پورتA نمایش دهدوپس از نمایش عدد ، دوباره شروع به شمارش کند.

  6. #5
    کاربر ارشد 1nafar آواتار ها
    تاریخ عضویت
    Jul 2007
    نوشته ها
    2,745
    تشکر
    1,266
    تشکر شده 4,874 بار در 1,377 پست

    پیش فرض RE: کمک درنوشتن برنامه

    سلام
    شما باید سه تا سطر رو به پایه های اینرتاپت متصل کنید و 4 تا پایه ستون رو به چهار تا پایه از میکرو .
    توی برنامه و حلقه اصلی بین پایه های ستون مدام یک سطح یک رو بچرخونی ، با گذاشتن چند تا شرط و .... همه چیز درست میشه مثلا :
    config porta = out put
    config portb = output
    dim a as word
    dim b as word
    Config Int0 = Falling
    Enable Int0
    On Int0 qqqq
    do
    portb=b
    porta = &b0001
    porta = &b0010
    porta = &b0100
    porta = &b1000
    incr a
    if a > 1000 then
    incr b :a=0
    end if
    loop
    qqq:
    if porta = &b0001 then b=1
    if porta = &b0010 then b=2
    if porta = &b0100 then b=3
    if porta = &b1000 then b=4
    return
    .
    .
    .
    .
    .
    راستی مگا 16 دوتا پایه وقفه بیشتر نداره ؟؟؟؟

  7. #6
    کاربر علاقه مند
    تاریخ عضویت
    Apr 2009
    نوشته ها
    37
    تشکر
    0
    تشکر شده 0 بار در 0 پست

    پیش فرض RE: کمک درنوشتن برنامه

    اگه میشه بیشتر توضیح بده چون من زبان بیسیک بلد نیستم.
    در ضمن ATMEGA16سه تا وقفه داره پایه های شماره 3-16و17 میکرو
    روی پورتb یکی از وقفه هامون هست که نمی شه خروجی بشه باید ورودی بشه

  8. #7
    کاربر ارشد 1nafar آواتار ها
    تاریخ عضویت
    Jul 2007
    نوشته ها
    2,745
    تشکر
    1,266
    تشکر شده 4,874 بار در 1,377 پست

    پیش فرض RE: کمک درنوشتن برنامه

    در ضمن ATMEGA16سه تا وقفه داره پایه های شماره 3-16و17 میکرو
    روی پورتb یکی از وقفه هامون هست که نمی شه خروجی بشه باید ورودی بشه
    سلام
    درسته تا حالا دقت نکرده بودم ، سعی میکنم تا فردا شب یه برنامه کامل بزارم .

  9. #8
    کاربر علاقه مند
    تاریخ عضویت
    Apr 2009
    نوشته ها
    37
    تشکر
    0
    تشکر شده 0 بار در 0 پست

    پیش فرض RE: کمک درنوشتن برنامه

    هم اکنون نیازمند یاری سبزتان هستیم

  10. #9
    کاربر ارشد 1nafar آواتار ها
    تاریخ عضویت
    Jul 2007
    نوشته ها
    2,745
    تشکر
    1,266
    تشکر شده 4,874 بار در 1,377 پست

    پیش فرض RE: کمک درنوشتن برنامه

    سلام
    این برنامه :
    کد:
    $regfile = "m32def.dat"
    $crystal = 8000000
    Config Porta = Input
    Config Portc = Output
    Dim A As Byte , B As Byte
    Config Int0= RISING
    Config Int1 = Rising
    Config Int2 = Rising
    On Int0 Q
    On Int1 W
    On Int2 E
    On Ovf1 R
    Enable Int0
    Enable Int1
    Enable Int2
    Config Timer1 = Timer , Prescale = 64
    Enable Ovf1
    Enable Interrupts
    Do
    A = 5
    Set Porta.0
    Waitms A
    Reset Porta.0
    
    Set Porta.1
    Waitms A
    Reset Porta.1
    
    Set Porta.2
    Waitms A
    Reset Porta.2
    
    Set Porta.3
    Waitms A
    Reset Porta.3
    Portc = B
    Loop
    Q:
    If Porta.0 = 1 Then : B = 0 : End If
    If Porta.1 = 1 Then : B = 1 : End If
    If Porta.2 = 1 Then : B = 2 : End If
    If Porta.3 = 1 Then : B = 3 : End If
    Return
    W:
    If Porta.0 = 1 Then : B = 4 : End If
    If Porta.1 = 1 Then : B = 5 : End If
    If Porta.2 = 1 Then : B = 6 : End If
    If Porta.3 = 1 Then : B = 7 : End If
    Return
    E:
    If Porta.0 = 1 Then : B = 8 : End If
    If Porta.1 = 1 Then : B = 9 : End If
    If Porta.2 = 1 Then : B = 10 : End If
    If Porta.3 = 1 Then : B = 11 : End If
    Return
    R:
    Incr B
    Return
    برنامه از چند تا قسمت تشکیل شده :
    1- معرفی و راه اندازی امکانات :
    معرفی میکرو و مقدار کریستال :
    $regfile = "m32def.dat"
    $crystal = 8000000
    قرار دادن پروت c به عنوان خروجی برای اتصال به ایسی 7447 و 7 سگمنت ، قرار دادن پروت a به عنوان ورودی برای اتصال سطر های کیبرد و معرفی دو عدد متغییر :
    Config Porta = Input
    Config Portc = Output
    Dim A As Byte , B As Byte
    پیکر بندی پایه های وقفه :
    Config Int0= RISING
    Config Int1 = Rising
    Config Int2 = Rising
    On Int0 Q
    On Int1 W
    On Int2 E

    Enable Int0
    Enable Int1
    Enable Int2
    پایه های وقفه به لبه بالا رونده حساس هشتند و با تحریک cpu به برچسب مشخص شده میرود .
    Config Timer1 = Timer , Prescale = 64
    Enable Ovf1
    On Ovf1 R
    توسط تایمر 1 زمان .5 ثانیه ایجاد شده است تا شمارش ، شمارند نمایان شود (تاخیر در شمردن )
    و حلقه اصلی :
    Do
    A = 5
    Set Porta.0
    Waitms A
    Reset Porta.0

    Set Porta.1
    Waitms A
    Reset Porta.1

    Set Porta.2
    Waitms A
    Reset Porta.2

    Set Porta.3
    Waitms A
    Reset Porta.3
    Portc = B
    Loop
    در این حلقه ، پین 4 پایه اول پورت a که به ستون کیپد متصل میشود ، سطح منطقی 1 مدام میچرخد ، به این صورت 0001 >>> 0010 >>>> 0100 >>>1000>>> >0001>>......
    Waitms A تاخیر در فشرده شدن کلید یا همو دیبانس خودمون هست ، و میتونی مقدار اون رو تغییر بدی .
    برچسب های تحریک پایه های وقفه هست :
    Q:
    If Porta.0 = 1 Then : B = 0 : End If
    If Porta.1 = 1 Then : B = 1 : End If
    If Porta.2 = 1 Then : B = 2 : End If
    If Porta.3 = 1 Then : B = 3 : End If
    Return
    W:
    If Porta.0 = 1 Then : B = 4 : End If
    If Porta.1 = 1 Then : B = 5 : End If
    If Porta.2 = 1 Then : B = 6 : End If
    If Porta.3 = 1 Then : B = 7 : End If
    Return
    E:
    If Porta.0 = 1 Then : B = 8 : End If
    If Porta.1 = 1 Then : B = 9 : End If
    If Porta.2 = 1 Then : B = 10 : End If
    If Porta.3 = 1 Then : B = 11 : End If
    Return
    و در نهایت برچسب سرریزی تایمر :
    R:
    Incr B
    Return

    فرض کن cpu میکرو خط 21 برناه رو میخونه (Set Porta.0 ) در این حالت شما یکی از کلید ها رو که به ستون متصل به این پایه هست رو فشار میدید ، با فشرده شدن کلید این پایه به یکی از پایه های وقفه (مثلا وقفه شماره یک ) متصل میشه ، cpu به برچسب تحریک وقفه ( w ) مراجعه میکنه ، در اونجا ما چند تا شرط داریم ، شرط ها چک میشن ، شرط If Porta.0 = 1 Then : B = 0 : End If درست هست (بقه غلط هستند ، چون پایه های صفر هست ) بنابراین مقدار b برابر 0 میشه با دستور return پردازنده میکرو به حلقه اصلی هدایت میشه و با دستور Portc = B مقدار b به پروت c ارسال میشه و در اونجا به نمایش در می یاد .

  11. #10
    کاربر علاقه مند
    تاریخ عضویت
    Apr 2009
    نوشته ها
    37
    تشکر
    0
    تشکر شده 0 بار در 0 پست

    پیش فرض RE: کمک درنوشتن برنامه

    دستت درد نکنه ممنون از این همه لطفت.
    مدار کار نکرد نمی دونم چرا ؟
    4 تا سطر کی بورد را به 4 تا بیت اول پورتAدادم وسه تا ستونش ام را به وقفه ها دادم.وخروجیشم 7447 وخروجی 7447 هم به یک 7سگمنت وصل کردم شمارش می خوام از صفر تا 15 بصورت ترتیبی باشدولی در برنامه ترتیبی نیست ودر ضمن با زدن کی بورد تاثیری در خروجی نیست یعنی 7سگمنت داره همون شمارش بون ترتیبش را می کند.
    باتشکر فراوان از زحمات تان[hr]
    راستی نمیشه کار کرد که دیگه از 7447 استفاده کرد مثلا به جای این که مقدار باینری بشه مقدار هگز بشه وبا ان انجام داد

  12. #11
    کاربر ارشد 1nafar آواتار ها
    تاریخ عضویت
    Jul 2007
    نوشته ها
    2,745
    تشکر
    1,266
    تشکر شده 4,874 بار در 1,377 پست

    پیش فرض RE: کمک درنوشتن برنامه

    مدار کار نکرد نمی دونم چرا ؟
    دو تا مشکل وجود داره
    1- فرکانس کریستال استفاده شده با فرکانس کریستال نوشته شده یکی نیست ، میکرو باید با فرکانس 8 مگا هرتز کار کنه
    2- اگه از نرم افزار پروتوس استفاده میکنید این مورد رو نمیشه توی پروتوس تست کرد ، بعضی از مواقع ، دو از پایه ها اتصال کوتاه میشن ( به مدت 5 میلی ثانیه ) و پروتوس شبیه سازی رو متوقف میکنه ،
    ش می خوام از صفر تا 15 بصورت ترتیبی باشدولی در برنامه ترتیبی نیس
    منظورت از ترتیب چی هست ؟
    شمارش از صفر شروع میشه و هر .5 میلی ثانیه اضافه میشه
    راستی نمیشه کار کرد که دیگه از 7447 استفاده کرد مثلا به جای این که مقدار باینری بشه مقدار هگز بشه وبا ان انجام داد
    این کار رو هم میشه انجام داد ، برای اینکار باید از جدول استفاده کنید و کد 7 سگمنت ها رو بخونید ، با یه کمی سعی و تلاش میتونی تکمیلش کنی

  13. #12
    کاربر علاقه مند
    تاریخ عضویت
    Apr 2009
    نوشته ها
    37
    تشکر
    0
    تشکر شده 0 بار در 0 پست

    پیش فرض RE: کمک درنوشتن برنامه

    کانتر عملی جواب میده ولی کی بورد کار نمی کنه؟
    هرچه کلید رو می زنه شمارش متوقف نمیشه؟

  14. #13
    کاربر ارشد 1nafar آواتار ها
    تاریخ عضویت
    Jul 2007
    نوشته ها
    2,745
    تشکر
    1,266
    تشکر شده 4,874 بار در 1,377 پست

    پیش فرض RE: کمک درنوشتن برنامه

    کانتر عملی جواب میده ولی کی بورد کار نمی کنه؟
    هرچه کلید رو می زنه شمارش متوقف نمیشه؟
    سلام پایه های وقفه رو با مقاومت 4.7 کیلو به زمین متصل کن ( هر پایه ، یک مقاومت )
    برنامه رو در عمل تست کردید

  15. #14
    کاربر علاقه مند
    تاریخ عضویت
    Apr 2009
    نوشته ها
    37
    تشکر
    0
    تشکر شده 0 بار در 0 پست

    پیش فرض RE: کمک درنوشتن برنامه

    نقل قول نوشته اصلی توسط 1nafar

    برنامه رو در عمل تست کردید
    سلام علیکم
    بله در عمل تستش کردم
    این کاری که گفتید رو انجام می دم ونتیجه اش را می گم.
    یا علی مدد

  16. #15
    کاربر علاقه مند
    تاریخ عضویت
    Apr 2009
    نوشته ها
    37
    تشکر
    0
    تشکر شده 0 بار در 0 پست

    پیش فرض RE: کمک درنوشتن برنامه

    [quote=1nafar]
    سلام پایه های وقفه رو با مقاومت 4.7 کیلو به زمین متصل کن ( هر پایه ، یک مقاومت )
    برنامه رو در عمل تست کردید
    مقاومت ها را وصل کردم بازم جواب نداد.
    دیگه نمیدونم چیکار باید بکنم.

  17. #16
    کاربر ارشد 1nafar آواتار ها
    تاریخ عضویت
    Jul 2007
    نوشته ها
    2,745
    تشکر
    1,266
    تشکر شده 4,874 بار در 1,377 پست

    پیش فرض RE: کمک درنوشتن برنامه

    سلام
    من یه برا دیگه مواردی که باید رعایت بشه رو میگم :
    1- پایه های اینترابت با مقاومت 4.7 کیلو به زمین متصل بشه .
    2- برنامه باید در عمل تست بشه
    3- کریستال متصل شده با میکرو با کریستال موجود در برنامه یکی باشه ( کریستال 8 مگا هرتز )
    برنامه مشکلی نداره و اینکه درست کار نمیکنه به مشکلات سخت افزاری و ... بر میگرده .
    کد:
    $regfile = "m32def.dat"
    $crystal = 8000000
    Config Porta = Input
    Config Portc = Output
    Dim A As Byte , B As Byte
    Config Int0= RISING
    Config Int1 = Rising
    Config Int2 = Rising
    On Int0 Q
    On Int1 W
    On Int2 E
    On Ovf1 R
    Enable Int0
    Enable Int1
    Enable Int2
    Config Timer1 = Timer , Prescale = 64
    Enable Ovf1
    Enable Interrupts
    Do
    A =500
    Set Porta.0
    Waitms A
    Reset Porta.0
    
    Set Porta.1
    Waitms A
    Reset Porta.1
    
    Set Porta.2
    Waitms A
    Reset Porta.2
    
    Set Porta.3
    Waitms A
    Reset Porta.3
    Portc = B
    Loop
    Q:
    If Porta.0 = 1 Then : B = 0 : End If
    If Porta.1 = 1 Then : B = 1 : End If
    If Porta.2 = 1 Then : B = 2 : End If
    If Porta.3 = 1 Then : B = 3 : End If
    Return
    W:
    If Porta.0 = 1 Then : B = 4 : End If
    If Porta.1 = 1 Then : B = 5 : End If
    If Porta.2 = 1 Then : B = 6 : End If
    If Porta.3 = 1 Then : B = 7 : End If
    Return
    E:
    If Porta.0 = 1 Then : B = 8 : End If
    If Porta.1 = 1 Then : B = 9 : End If
    If Porta.2 = 1 Then : B = 10 : End If
    If Porta.3 = 1 Then : B = 11 : End If
    Return
    R:
    Incr B
    Return
    این برنامه رو روی میکرو بریز و کی از کلید ها رو برای 5 ثانیه نگه دار . ببینی چی میشه .

  18. #17
    کاربر علاقه مند
    تاریخ عضویت
    Apr 2009
    نوشته ها
    37
    تشکر
    0
    تشکر شده 0 بار در 0 پست

    پیش فرض RE: کمک درنوشتن برنامه

    فرق نمیکنه به جای atmega32 از 16 استفاده کنم.

  19. #18
    کاربر ارشد 1nafar آواتار ها
    تاریخ عضویت
    Jul 2007
    نوشته ها
    2,745
    تشکر
    1,266
    تشکر شده 4,874 بار در 1,377 پست

    پیش فرض RE: کمک درنوشتن برنامه

    نه هر دوتاشون مثل هم هستند و کافی توی برنامه نام میکرو رو تغییر بدی

  20. #19
    کاربر ارشد 1nafar آواتار ها
    تاریخ عضویت
    Jul 2007
    نوشته ها
    2,745
    تشکر
    1,266
    تشکر شده 4,874 بار در 1,377 پست

    پیش فرض RE: کمک درنوشتن برنامه

    برنامه :

  21. #20
    کاربر علاقه مند
    تاریخ عضویت
    Apr 2009
    نوشته ها
    37
    تشکر
    0
    تشکر شده 0 بار در 0 پست

    پیش فرض RE: کمک درنوشتن برنامه

    :heart::heart:مرسی محمد جان:heart::heart:
    :P:cool : محمد هاشمی دوست داریم ما& دوست دارم ما:P:cool:

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

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