۳۰-آبان-۱۳۹۰, ۱۵:۱۹:۲۵
۱۹-آذر-۱۳۹۰, ۱۵:۱۴:۱۶
سلام
چطور میشه از هر چهارتا pwm اتمگا 32 برای چهارتا سروو استفاده کرد
منظورم اینه که بیشتر از دو تا رو نمیتونم معرفی کنم
چطور میشه از هر چهارتا pwm اتمگا 32 برای چهارتا سروو استفاده کرد
منظورم اینه که بیشتر از دو تا رو نمیتونم معرفی کنم
۲۰-آذر-۱۳۹۰, ۱۳:۱۶:۱۴
سلام لطفا به این فایل پیوست توجه کنید.پالس تولیدی 500 هرتز.اما طبق فرمول باید فرکانس دیگه ای تولید کنه.میشه بگید از کدوم فرمول این پالس تولید شده؟اگه بخوام مثلا فرکانس 520 هرتز تولید کنم باید چه کار کنم.ایا نیاز نصب کریستال خارجی روی بر د دارم؟ یه سوال دیگه اینکه چرا من هروقت میخوام با کانتر یک کار کنم برنامه بسکام من خطامیده.و مینویسه unkouwn interrupts source(counter1(به نظر شما مشکل از چیه؟
۰۸-مرداد-۱۳۹۱, ۱۸:۳۷:۳۹
سلام
من یه برنامه ای نوشتم به شکل زیر:
به اینصورت که وقتی چند تا کلید کیپد رو زدم بعدش یه کاری انجام بده و بخوبی هم کار میکنه!!
اما مشکلم اینجاست که وقتی می خوام یه کلید رو دوبار در برنامه بذارم برنامش کار نمیکنه ...
مثل این:
بطور مثال می خوام کلید 5 و 7 هر کدوم وقتی دوبار فشرده شدند یه کاری رو انجام بده ...
نمیدونم باید به جای incr یه چیز دیگه بذارم یا ..........
من یه برنامه ای نوشتم به شکل زیر:
کد:
$regfile = "m8def.dat"
$crystal = 8000000
Config Kbd = Portd , Debounce = 20
Config Lcdpin = Pin , Db4 = Portb.1 , Db5 = Portb.2 , Db6 = Portb.3 , Db7 = Portb.4 , E = Portb.0 , Rs = Portb.5
Config Lcd = 16 * 2 : Cursor Off : Cls
Dim A As Byte
Dim B As Byte
Dim H As Byte
Do
Q:
A = Getkbd()
If A > 15 Then Goto Q
If A = 4 Then
Incr B
Waitms 50
End If
If A = 5 Then
Incr B
Waitms 50
End If
If A = 0 Then
Incr B
Waitms 50
End If
If A = 6 Then
Incr B
Waitms 50
End If
If A = 8 And B = 4 Then
Locate 1 , 1 : Lcd "Iran" : B = 0
End If
If A = 4 Then
Incr H
Waitms 50
End If
If A = 5 Then
Incr H
Waitms 50
End If
If A = 8 Then
Incr H
Waitms 50
End If
If A = 7 Then
Incr H
Waitms 50
End If
If A = 9 And H = 4 Then
Locate 1 , 1 : Lcd "Ahmad" : H = 0
End If
Locate 2 , 1 : Lcd A : Goto Q
Loop
به اینصورت که وقتی چند تا کلید کیپد رو زدم بعدش یه کاری انجام بده و بخوبی هم کار میکنه!!
اما مشکلم اینجاست که وقتی می خوام یه کلید رو دوبار در برنامه بذارم برنامش کار نمیکنه ...
مثل این:
کد:
$regfile = "m8def.dat"
$crystal = 8000000
Config Kbd = Portd , Debounce = 20
Config Lcdpin = Pin , Db4 = Portb.1 , Db5 = Portb.2 , Db6 = Portb.3 , Db7 = Portb.4 , E = Portb.0 , Rs = Portb.5
Config Lcd = 16 * 2 : Cursor Off : Cls
Dim A As Byte
Dim B As Byte
Dim H As Byte
Do
Q:
A = Getkbd()
If A > 15 Then Goto Q
If A = 5 Then
Incr B
Waitms 50
End If
If A = 5 Then
Incr B
Waitms 50
End If
If A = 0 Then
Incr B
Waitms 50
End If
If A = 6 Then
Incr B
Waitms 50
End If
If A = 8 And B = 4 Then
Locate 1 , 1 : Lcd "Iran" : B = 0
End If
If A = 4 Then
Incr H
Waitms 50
End If
If A = 5 Then
Incr H
Waitms 50
End If
If A = 7 Then
Incr H
Waitms 50
End If
If A = 7 Then
Incr H
Waitms 50
End If
If A = 9 And H = 4 Then
Locate 1 , 1 : Lcd "Ahmad" : H = 0
End If
Locate 2 , 1 : Lcd A : Goto Q
Loop
بطور مثال می خوام کلید 5 و 7 هر کدوم وقتی دوبار فشرده شدند یه کاری رو انجام بده ...
نمیدونم باید به جای incr یه چیز دیگه بذارم یا ..........
۰۸-مرداد-۱۳۹۱, ۲۲:۲۲:۱۰
سلام رسول جان ...
آقا اين 2 تا كد كه يكي بودن ! منظورت تيكه ي اول و دوم بود ، درسته؟
اول يه پيشنهاد ، بجاي IF,IF,IF, ... از IF,Else IF,Else IF, ... استفاده كني بهترهه ( از نظر سرعت ، چون در هر لحظه فقط يك دكمه زده مي شه )
مورد بعدي اينكه ، اگر مشكل سر متغيير B و يا H هست ، مقدار اون ها رو روي LCD نشون بده ، كه مطمئن بشي كجاي شرطي كه گذاشتي مشكل دارهه ...
موفق باشي.
آقا اين 2 تا كد كه يكي بودن ! منظورت تيكه ي اول و دوم بود ، درسته؟
اول يه پيشنهاد ، بجاي IF,IF,IF, ... از IF,Else IF,Else IF, ... استفاده كني بهترهه ( از نظر سرعت ، چون در هر لحظه فقط يك دكمه زده مي شه )
مورد بعدي اينكه ، اگر مشكل سر متغيير B و يا H هست ، مقدار اون ها رو روي LCD نشون بده ، كه مطمئن بشي كجاي شرطي كه گذاشتي مشكل دارهه ...
موفق باشي.
۰۹-مرداد-۱۳۹۱, ۰۰:۵۳:۵۴
مرتضی جون سلام
نماز روزتونم قبول باشه ...
اگه دقت کنی یه کوچولو با هم فرق دارند ...
برنامه اول که بخوبی کار میکنه یعنی با فشار کلیدهایی مثل 4و5و0و6و8 و ... که اعدادشون شبیه هم نیستش !!
اما وقتی میخوام از کلیدهای مشابه پشت سرهم استفاده کنم جواب نمیده , مثل 5و5و0و6و8
که اینجا باید دو تا 5 پشت سر هم یعنی دوبار (البته بسته به نیاز ممکنه چند بار تکرار بشه) زده بشه که در اینصورت برنامه کار نمیکنه!!!
در ضمن مقدارشون رو هم در سطر دوم نشون میدم اما دیگه اینجا برنامشو نذاشتم که ساده باشه ...
نماز روزتونم قبول باشه ...
اگه دقت کنی یه کوچولو با هم فرق دارند ...
برنامه اول که بخوبی کار میکنه یعنی با فشار کلیدهایی مثل 4و5و0و6و8 و ... که اعدادشون شبیه هم نیستش !!
اما وقتی میخوام از کلیدهای مشابه پشت سرهم استفاده کنم جواب نمیده , مثل 5و5و0و6و8
که اینجا باید دو تا 5 پشت سر هم یعنی دوبار (البته بسته به نیاز ممکنه چند بار تکرار بشه) زده بشه که در اینصورت برنامه کار نمیکنه!!!
در ضمن مقدارشون رو هم در سطر دوم نشون میدم اما دیگه اینجا برنامشو نذاشتم که ساده باشه ...
۰۹-مرداد-۱۳۹۱, ۰۱:۳۶:۴۹
مرسي ، از شما هم قبول باشه...
الان يه اختلافاتي احساس شد.
اما متاسفانه باز صورت مسئله براي من گنگ هست!
در اين برنامه تو همون اولي مثلا كه درست جواب مي دهه ، چرا يه بار A=4 در ابتدا چك مي شه و يك بار هم در چند خط پايين تر؟
چرا در يكيشون B و در ديگري H زياد مي شه؟
چرا در همون اولي B و H رو با هم زياد نمي كني؟
دكمه ي 8 و 9 چكارهه هستن و چرا در لحظه ي چك شدن اين 2 تا B و H هم بايد 4 شده باشن؟
امكان برقراري 2 شرط در يك لحظه امكان پذير نيست ؟! ( زماني كه B=H=4 باشه )
راستي در اين تيكه END IF اش رو نذاشتي ( شايد هم هنگام كپي / پيست از قلم افتاده )
خلاصه قصدتون رو هنوز متوجه نشدم. اين اعداد بعدا به عنوان يك شماره ي چند رقمي براي رمز مي خواد استفاده بشه ؟
IQ ضعيفه ، خلاصه روشنمون كنيد
الان يه اختلافاتي احساس شد.
اما متاسفانه باز صورت مسئله براي من گنگ هست!
در اين برنامه تو همون اولي مثلا كه درست جواب مي دهه ، چرا يه بار A=4 در ابتدا چك مي شه و يك بار هم در چند خط پايين تر؟
چرا در يكيشون B و در ديگري H زياد مي شه؟
چرا در همون اولي B و H رو با هم زياد نمي كني؟
دكمه ي 8 و 9 چكارهه هستن و چرا در لحظه ي چك شدن اين 2 تا B و H هم بايد 4 شده باشن؟
امكان برقراري 2 شرط در يك لحظه امكان پذير نيست ؟! ( زماني كه B=H=4 باشه )
راستي در اين تيكه END IF اش رو نذاشتي ( شايد هم هنگام كپي / پيست از قلم افتاده )
نقل قول: Q:
A = Getkbd()
If A > 15 Then Goto Q
خلاصه قصدتون رو هنوز متوجه نشدم. اين اعداد بعدا به عنوان يك شماره ي چند رقمي براي رمز مي خواد استفاده بشه ؟
IQ ضعيفه ، خلاصه روشنمون كنيد

۰۹-مرداد-۱۳۹۱, ۰۲:۲۲:۲۱
(۰۹-مرداد-۱۳۹۱, ۰۱:۳۶:۴۹)sharin نوشته است: [ -> ]در اين برنامه تو همون اولي مثلا كه درست جواب مي دهه ، چرا يه بار A=4 در ابتدا چك مي شه و يك بار هم در چند خط پايين تر؟
اون اعداد میتونن هر عددی باشن و همینطوری نوشتم (البته اعداد مربوط به شماره کلید هستن) ...
مثلا اگه 4 رو یه بار اول و یه بار وسط یا آخر برنامه میذارم کار میکنه ....
ولی وقتی مثلا دوتا 4 رو پشت سر هم میخوام بذارم جواب نمیده!!!
نقل قول: چرا در يكيشون B و در ديگري H زياد مي شه؟
چرا در همون اولي B و H رو با هم زياد نمي كني؟
همینطوری ...
البته اگه همشون B هم باشه بازم کار میکنه
H رو همینطوری خواستم مثلا جدا باشن!!
نقل قول: دكمه ي 8 و 9 چكارهه هستن و چرا در لحظه ي چك شدن اين 2 تا B و H هم بايد 4 شده باشن؟
امكان برقراري 2 شرط در يك لحظه امكان پذير نيست ؟! ( زماني كه B=H=4 باشه )
8 و 9 هم کلید هستن مثل قبلیها ...
منظور از B=4 و H=4 هم یعنی اینکه هر کدوم 4 بار استفاده شدن و جمعا 5 کلید زده میشه و ...
نقل قول: راستي در اين تيكه END IF اش رو نذاشتي ( شايد هم هنگام كپي / پيست از قلم افتاده )
نقل قول: Q:
A = Getkbd()
If A > 15 Then Goto Q
اینجا که از GOTO استفاده کردم دیگه END IF لازم نیست!!
نقل قول: خلاصه قصدتون رو هنوز متوجه نشدم. اين اعداد بعدا به عنوان يك شماره ي چند رقمي براي رمز مي خواد استفاده بشه ؟
IQ ضعيفه ، خلاصه روشنمون كنيد
راستش چیز خاصی مد نظرم نیستش ...
همینطوری با کیپد برنامه مینوشتم که به اینجاها رسیدم!!!
میشه گفت که کمی شبیه برنامه قفل رمزی میتونه باشه اما خیلی خیلی ساده تر از اون با این تفاوت که در قفل رمزی فقط یه بار رمز رو وارد می کنیم و تعداد اعدادش ثابته مثلا اکثرا 8 رقمی میشه ...
اما اینجا میتونه ده ها رمز به هر تعداد عددی باشه که هر رمز میتونن کار خاصی رو انجام بدن!!
۰۹-مرداد-۱۳۹۱, ۰۳:۲۳:۰۰
هنوز هم دقيق متوجه نشدم ، اما يه چيزايي مي گم شايد بدرد خورد.
دليل 2 بار چك كردن A=5 چي هست؟ كه مثلا بفهميم دكمه ي 5 ، دو بار زده شده يا نه ؟! ( كيبرد موبايل مي خوايد درست كنيد كه حروف هم بگيرهه ؟ )
اگر آره كه اينطوري نبايستي بنويسيشون.
همونطور كه مي دوني ميكرو اگر سر عملكرد 8MIPS باشه ، 8 ميليون دستور رو در 1 ثانيه اجرا مي كنه ...
اين ها دستورات شرطي هستن كه ميكرو سرشون ايست نمي كنه . پس 2 بار گذاشتنشون پشت سر هم دردي رو دوا نمي كنه!
زمان زده شدن تا رها كردن يك كليد هم حدودا 100ms طول مي كشه (اگر نسبتا سريع اين كار رو انجام بديم)
در برنامه دوم كه 5 رو 2 بار پشت سر هم چك مي كنيد و دستورات اجرا براي هر 2 يكسان هستند ، 3حالت ممكنه اتفاق بيفته : به علت تاخير ممكنه برنامه فقط به IF اول برسه و به دومي نرسه كه در اينصورت B يك واحد اضافه مي شه.
ممكنه به هر 2 IF برسه كه در اين صورت B دوبار افزايش پيدا مي كنه.
ممكنه فقط به IF دومي برسه كه در اينصورت B يك واحد اضافه مي شه.
من هنوز نمي دونم چرا B و يا H به مقدارشون اضافه مي شه ( چه هدفي دنبال مي شه؟ و چه نتيجه اي داره ؟ )
اما بهترين كار و دقيق ترين كار استفاده از وقفه هست.( در صورتي كه بخوايد با زدن دكمه ي 5 به تعداد 1 بار برنامه ي 1 اجرا بشه و بازدن دكمه ي 5 به تعداد 2 بار ،برنامه ي 2 اجرا بشه و بازدن 5 به تعداد 3 بار برنامه ي 3 اجرا بشه. ) البته اگر مي خوايد تايمينگ ها اذيت نكنه.( يه چيزي مثل كيبرد موبايل )
بدون وقفه هم شايد بشه ، اما برنامه باگ هاي زيادي پيدا مي كنه.
و مورد ديگه اگر دنبال عملكردي مثل زير هستيد :
مثلا رمز 1344775 هست ، شما مي خوايد اين مقدار رو با كيپد وارد كنيد و اعداد ثبت بشن؟
و بعد ميكرو ببينه اعداد اين هستن و اجازه ي ورود رو مثلا صادر كنه ؟
اگر اين هست كه يك برنامه ي عادي دارهه و اين هيچ مشكلي ايجاد نمي كنه ...
به هر حال هرچي ذهن من به صورت مسئله نزديك تر بشه بهتر مي تونم كمك كنم.
در مورد اون END IF و نمي دونستم ؟!
چون توي C حتما بايد رعايت كني ، منم توي بيسيك هميشه رعايت مي كنم. دستت درد نكنه ،يه چيز جديد هم ياد گرفتيم ...
دليل 2 بار چك كردن A=5 چي هست؟ كه مثلا بفهميم دكمه ي 5 ، دو بار زده شده يا نه ؟! ( كيبرد موبايل مي خوايد درست كنيد كه حروف هم بگيرهه ؟ )
اگر آره كه اينطوري نبايستي بنويسيشون.
همونطور كه مي دوني ميكرو اگر سر عملكرد 8MIPS باشه ، 8 ميليون دستور رو در 1 ثانيه اجرا مي كنه ...
اين ها دستورات شرطي هستن كه ميكرو سرشون ايست نمي كنه . پس 2 بار گذاشتنشون پشت سر هم دردي رو دوا نمي كنه!
زمان زده شدن تا رها كردن يك كليد هم حدودا 100ms طول مي كشه (اگر نسبتا سريع اين كار رو انجام بديم)
در برنامه دوم كه 5 رو 2 بار پشت سر هم چك مي كنيد و دستورات اجرا براي هر 2 يكسان هستند ، 3حالت ممكنه اتفاق بيفته : به علت تاخير ممكنه برنامه فقط به IF اول برسه و به دومي نرسه كه در اينصورت B يك واحد اضافه مي شه.
ممكنه به هر 2 IF برسه كه در اين صورت B دوبار افزايش پيدا مي كنه.
ممكنه فقط به IF دومي برسه كه در اينصورت B يك واحد اضافه مي شه.
من هنوز نمي دونم چرا B و يا H به مقدارشون اضافه مي شه ( چه هدفي دنبال مي شه؟ و چه نتيجه اي داره ؟ )
اما بهترين كار و دقيق ترين كار استفاده از وقفه هست.( در صورتي كه بخوايد با زدن دكمه ي 5 به تعداد 1 بار برنامه ي 1 اجرا بشه و بازدن دكمه ي 5 به تعداد 2 بار ،برنامه ي 2 اجرا بشه و بازدن 5 به تعداد 3 بار برنامه ي 3 اجرا بشه. ) البته اگر مي خوايد تايمينگ ها اذيت نكنه.( يه چيزي مثل كيبرد موبايل )
بدون وقفه هم شايد بشه ، اما برنامه باگ هاي زيادي پيدا مي كنه.
و مورد ديگه اگر دنبال عملكردي مثل زير هستيد :
مثلا رمز 1344775 هست ، شما مي خوايد اين مقدار رو با كيپد وارد كنيد و اعداد ثبت بشن؟
و بعد ميكرو ببينه اعداد اين هستن و اجازه ي ورود رو مثلا صادر كنه ؟
اگر اين هست كه يك برنامه ي عادي دارهه و اين هيچ مشكلي ايجاد نمي كنه ...
به هر حال هرچي ذهن من به صورت مسئله نزديك تر بشه بهتر مي تونم كمك كنم.
در مورد اون END IF و نمي دونستم ؟!
چون توي C حتما بايد رعايت كني ، منم توي بيسيك هميشه رعايت مي كنم. دستت درد نكنه ،يه چيز جديد هم ياد گرفتيم ...
۰۹-مرداد-۱۳۹۱, ۲۲:۱۳:۵۳
با عرض سلام خدمت اساتید محترم لطفا به سوال ما نیز جواب بدید متشکرم
بنده برنامه زیر رو نوشته ام موقع اجرا خط If Pind.2 = 0 Then Call Meter
بعضی وقتها هنگ میکنه یا با تآخیر کار میکنه لطفا راهنمایی کنید
$regfile = "m8def.dat"
$crystal = 10000000
Deflcdchar 0 , 32 , 32 , 31 , 31 , 31 , 31 , 32 , 32 ' replace ? with number (0-7)'
Deflcdchar 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ' replace ? with number (0-7)
Deflcdchar 2 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 ' replace ? with number (0-7)
Deflcdchar 3 , 16 , 16 , 31 , 31 , 31 , 31 , 16 , 16 ' replace ? with number (0-7)
Deflcdchar 4 , 1 , 1 , 31 , 31 , 31 , 31 , 1 , 1 ' replace ? with number (0-7)
'LCD
Config Lcdpin = Pin , Db4 = Pinb.4 , Db5 = Pinb.5 , Db6 = Pinb.6 , Db7 = _
Pinb.7 , E = Pinb.3 , Rs = Pinb.2
Config Lcd = 16 * 2
'Var
Dim V As Word , R As Single , Show As String * 4
Dim W As Word , P As Word , V1 As Word , Channel As Byte , I As Byte , Cols As Byte
Dim Ps As String * 3
Dim A As Word
Dim M As Word
Declare Sub M
'A2D
Config Adc = Single , Prescaler = Auto , Reference = Internal
Enable Interrupts
Enable Adc
Config Pind.2 = Input
Config Pind.3 = Output
Config Pind.4 = Input
Config Pind.2 = 1
Cursor Off
Cls
Locate 1 , 4 : Lcd "w 2000"
Locate 2 , 2 : Lcd "M D"
Waitms 700
Cls
Locate 1 , 5 : Lcd "power on"
Locate 2 , 3 : Lcd "Pleas wait..."
Waitms 700
Cls
Do
Start Adc
V = Getadc(0)
Stop Adc
R = V \ 10
If R <> 0 Then R = R + 1
Show = Fusing(r , "#.&")
Upperline
Lcd Show ; "V" ; Spc(5)
Waitms 10
Start Adc
W = Getadc(1)
Stop Adc
V1 = W / 20
P = W / 10
Ps = Str(p)
Cols = P / 5
Locate 2 , 1
For I = 1 To Cols
Select Case I
Case 1 : Lcd Chr(3)
Case 4 : Lcd Chr(4)
Case 8 : Lcd Chr(4)
Case 12 : Lcd Chr(4)
Case Else : Lcd Chr(0)
End Select
Next I
Cols = Cols + 1
For I = Cols To 16
Select Case I
Case 1 : Lcd Chr(2)
Case 4 : Lcd Chr(1)
Case 8 : Lcd Chr(1)
Case 12 : Lcd Chr(1)
Case Else : Lcd Chr(32)
End Select
Next I
Waitms 10
If Pind.2 = 0 Then Call M
Loop
End
'************************************************
Sub M
A = 0
Reset Pind.2
Reset Pind.3
Waitms 10
Set Pind.3
Do
Incr A
If A > 65500 Then A = 0
If Pind.4 = 0 Then
Exit Do
End If
Loop
M = A / 10
Locate 1 , 12 : Lcd " "
Locate 1 , 12 : Lcd M ; "cm"
End Sub
'************************************************
End
[align=left]
در ضمن میخواستم به این برنامه دو تا کلید اضافه کنم تا صدا رو با آن کم و زیاد کنیم اگه امکان داره راهنمایی کنید
با تشکر آیدین
بنده برنامه زیر رو نوشته ام موقع اجرا خط If Pind.2 = 0 Then Call Meter
بعضی وقتها هنگ میکنه یا با تآخیر کار میکنه لطفا راهنمایی کنید
$regfile = "m8def.dat"
$crystal = 10000000
Deflcdchar 0 , 32 , 32 , 31 , 31 , 31 , 31 , 32 , 32 ' replace ? with number (0-7)'
Deflcdchar 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ' replace ? with number (0-7)
Deflcdchar 2 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 ' replace ? with number (0-7)
Deflcdchar 3 , 16 , 16 , 31 , 31 , 31 , 31 , 16 , 16 ' replace ? with number (0-7)
Deflcdchar 4 , 1 , 1 , 31 , 31 , 31 , 31 , 1 , 1 ' replace ? with number (0-7)
'LCD
Config Lcdpin = Pin , Db4 = Pinb.4 , Db5 = Pinb.5 , Db6 = Pinb.6 , Db7 = _
Pinb.7 , E = Pinb.3 , Rs = Pinb.2
Config Lcd = 16 * 2
'Var
Dim V As Word , R As Single , Show As String * 4
Dim W As Word , P As Word , V1 As Word , Channel As Byte , I As Byte , Cols As Byte
Dim Ps As String * 3
Dim A As Word
Dim M As Word
Declare Sub M
'A2D
Config Adc = Single , Prescaler = Auto , Reference = Internal
Enable Interrupts
Enable Adc
Config Pind.2 = Input
Config Pind.3 = Output
Config Pind.4 = Input
Config Pind.2 = 1
Cursor Off
Cls
Locate 1 , 4 : Lcd "w 2000"
Locate 2 , 2 : Lcd "M D"
Waitms 700
Cls
Locate 1 , 5 : Lcd "power on"
Locate 2 , 3 : Lcd "Pleas wait..."
Waitms 700
Cls
Do
Start Adc
V = Getadc(0)
Stop Adc
R = V \ 10
If R <> 0 Then R = R + 1
Show = Fusing(r , "#.&")
Upperline
Lcd Show ; "V" ; Spc(5)
Waitms 10
Start Adc
W = Getadc(1)
Stop Adc
V1 = W / 20
P = W / 10
Ps = Str(p)
Cols = P / 5
Locate 2 , 1
For I = 1 To Cols
Select Case I
Case 1 : Lcd Chr(3)
Case 4 : Lcd Chr(4)
Case 8 : Lcd Chr(4)
Case 12 : Lcd Chr(4)
Case Else : Lcd Chr(0)
End Select
Next I
Cols = Cols + 1
For I = Cols To 16
Select Case I
Case 1 : Lcd Chr(2)
Case 4 : Lcd Chr(1)
Case 8 : Lcd Chr(1)
Case 12 : Lcd Chr(1)
Case Else : Lcd Chr(32)
End Select
Next I
Waitms 10
If Pind.2 = 0 Then Call M
Loop
End
'************************************************
Sub M
A = 0
Reset Pind.2
Reset Pind.3
Waitms 10
Set Pind.3
Do
Incr A
If A > 65500 Then A = 0
If Pind.4 = 0 Then
Exit Do
End If
Loop
M = A / 10
Locate 1 , 12 : Lcd " "
Locate 1 , 12 : Lcd M ; "cm"
End Sub
'************************************************
End
[align=left]
در ضمن میخواستم به این برنامه دو تا کلید اضافه کنم تا صدا رو با آن کم و زیاد کنیم اگه امکان داره راهنمایی کنید
با تشکر آیدین
۰۹-مرداد-۱۳۹۱, ۲۲:۴۸:۲۴
اگر به Pind.2 كليد متصل شده ، بهترهه از دستور Debounce استفاده كنيد كه توضيحات و نحوه ي استفاده اش در Help بسكام موجود هست.
براي اضافه كردن كليد هم باز بايد از دستور Debounce استفاده كنيد و در خطوط برنامه مرتب چكشون كنيد.
روش ديگه استفاده از وقفه هست ، اما فعلا Debounce توصيه مي شه ...
موفق باشيد.
براي اضافه كردن كليد هم باز بايد از دستور Debounce استفاده كنيد و در خطوط برنامه مرتب چكشون كنيد.
روش ديگه استفاده از وقفه هست ، اما فعلا Debounce توصيه مي شه ...
موفق باشيد.