سلام به همگی خسته نباشید یه برنامه نوشتم که توی حلقش از wait استفاده شده
حالا میخوام با فشار دادن یک دکمه توی همون لحظه از حلقه خارج شه
باید چی کار کنم؟
سلام به همگی خسته نباشید یه برنامه نوشتم که توی حلقش از wait استفاده شده
حالا میخوام با فشار دادن یک دکمه توی همون لحظه از حلقه خارج شه
باید چی کار کنم؟
اینم یه روش دیگه هست البته تو بسکام
[code=c]
do
waitms 500
if enter=0 then exit do
loop
.
.
.
برنامه که بعد از حلقه قراره اجرا بشه
.
.
.
.
[/code]
یا می تونی از روش بالا هم استفاده کنی که دوستمون گفتند
برنامه کنترلر rgb با چند تا افکت هست
فقط لطفا جواب بدیدا حالا هرچی خواستین بگین (نمیدونم چرا هر وقت برنامرو نشون میدم همه اینطوری میشن ) :mrgreen:
اینم کد:
[code=qbasic]
$regfile = "m8def.dat"
$crystal = 8000000
'________________________________ADC & PWM______________________________________
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 1
Config Timer2 = Pwm , Pwm = On , Compare Pwm = Clear Up , Prescale = 1
'________________________________Variables___ ___________________________________
Dim R As Word
Dim G As Word
Dim B As Word
'____________________________________________ ___________________________________
Config Int0 = Falling
On Int0 _int0
Enable Int0
Enable Interrupts
Dim A As Byte
Do
Waitms 200
A:
Start Adc
R = Getadc(0)
G = Getadc(1)
B = Getadc(2)
R = R / 3.99
G = G / 3.99
B = B / 3.99
Pwm1a = G
Pwm1b = B
Ocr2 = R
Goto A
'=================
B:
Pwm1a = G
Pwm1b = B
Ocr2 = R
G = 0
B = 0
R = 255
Wait 1
Pwm1a = G
Pwm1b = B
Ocr2 = R
G = 60
R = 255
B = 0
Wait 1
Pwm1a = G
Pwm1b = B
Ocr2 = R
G = 255
R = 255
B = 0
Wait 1
Pwm1a = G
Pwm1b = B
Ocr2 = R
G = 255
R = 0
B = 0
Wait 1
Pwm1a = G
Pwm1b = B
Ocr2 = R
G = 255
B = 15
R = 0
Wait 1
Pwm1a = G
Pwm1b = B
Ocr2 = R
R = 255
B = 50
G = 0
Wait 1
Pwm1a = G
Pwm1b = B
Ocr2 = R
R = 100
B = 110
G = 0
Wait 1
Pwm1a = G
Pwm1b = B
Ocr2 = R
B = 255
R = 0
G = 0
Wait 1
Pwm1a = G
Pwm1b = B
Ocr2 = R
R = 255
G = 255
B = 255
Wait 1
Goto B
'=================
C:
R = 100
G = 0
B = 0
Do
Pwm1a = G
Pwm1b = B
Ocr2 = R
Decr R
Incr G
Waitms 15
Loop Until G = 100
R = 0
G = 100
B = 0
Do
Pwm1a = G
Pwm1b = B
Ocr2 = R
Decr G
Incr B
Waitms 15
Loop Until B = 100
R = 0
G = 0
B = 100
Do
Pwm1a = G
Pwm1b = B
Ocr2 = R
Decr B
Incr R
Waitms 15
Loop Until R = 100
Goto C
'=================
Loop
End
_int0:
Incr A
Waitms 25
If A = 3 Then A = 0
If A = 0 Then Goto A
If A = 1 Then Goto B
If A = 2 Then Goto C
Return
[/code]
فقط لطفا جواب بدیدا حالا هرچی خواستین بگین (نمیدونم چرا هر وقت برنامرو نشون میدم همه اینطوری میشن ) :mrgreen:
اینم کد:
[code=qbasic]
$regfile = "m8def.dat"
$crystal = 8000000
'________________________________ADC & PWM______________________________________
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 1
Config Timer2 = Pwm , Pwm = On , Compare Pwm = Clear Up , Prescale = 1
'________________________________Variables___ ___________________________________
Dim R As Word
Dim G As Word
Dim B As Word
'____________________________________________ ___________________________________
Config Int0 = Falling
On Int0 _int0
Enable Int0
Enable Interrupts
Dim A As Byte
Do
Waitms 200
A:
Start Adc
R = Getadc(0)
G = Getadc(1)
B = Getadc(2)
R = R / 3.99
G = G / 3.99
B = B / 3.99
Pwm1a = G
Pwm1b = B
Ocr2 = R
Goto A
'=================
B:
Pwm1a = G
Pwm1b = B
Ocr2 = R
G = 0
B = 0
R = 255
Wait 1
Pwm1a = G
Pwm1b = B
Ocr2 = R
G = 60
R = 255
B = 0
Wait 1
Pwm1a = G
Pwm1b = B
Ocr2 = R
G = 255
R = 255
B = 0
Wait 1
Pwm1a = G
Pwm1b = B
Ocr2 = R
G = 255
R = 0
B = 0
Wait 1
Pwm1a = G
Pwm1b = B
Ocr2 = R
G = 255
B = 15
R = 0
Wait 1
Pwm1a = G
Pwm1b = B
Ocr2 = R
R = 255
B = 50
G = 0
Wait 1
Pwm1a = G
Pwm1b = B
Ocr2 = R
R = 100
B = 110
G = 0
Wait 1
Pwm1a = G
Pwm1b = B
Ocr2 = R
B = 255
R = 0
G = 0
Wait 1
Pwm1a = G
Pwm1b = B
Ocr2 = R
R = 255
G = 255
B = 255
Wait 1
Goto B
'=================
C:
R = 100
G = 0
B = 0
Do
Pwm1a = G
Pwm1b = B
Ocr2 = R
Decr R
Incr G
Waitms 15
Loop Until G = 100
R = 0
G = 100
B = 0
Do
Pwm1a = G
Pwm1b = B
Ocr2 = R
Decr G
Incr B
Waitms 15
Loop Until B = 100
R = 0
G = 0
B = 100
Do
Pwm1a = G
Pwm1b = B
Ocr2 = R
Decr B
Incr R
Waitms 15
Loop Until R = 100
Goto C
'=================
Loop
End
_int0:
Incr A
Waitms 25
If A = 3 Then A = 0
If A = 0 Then Goto A
If A = 1 Then Goto B
If A = 2 Then Goto C
Return
[/code]
خوب می خوای دقیقا از کدوم حلقه در بیاد و به کجا بره ما که به جز چند تا کلید که به اینتراپت وصلند کلیدی ندیدیم
دقیقا بگو تا اگر تونستیم راهنمایی کنیم
خوب می خوای دقیقا از کدوم حلقه در بیاد و به کجا بره ما که به جز چند تا کلید که به اینتراپت وصلند کلیدی ندیدیم
دقیقا بگو تا اگر تونستیم راهنمایی کنیم
ببینید کلا یک کلید بیشتر نداره
حالا میخوام با این کلید افکت اون تغییر کنه
حلقه هام به این صورتن:
do
a:
.
.
.
.
goto a
b:
.
.
.
goto b
c:
.
.
.
.
goto c
loop end
منم میخوام هر بار که کلید رو میزنم از حلقه a به b بره دوباره بزنم بره بخش c دوباره بزنم بره a
مشکلش اینه که تا حلقه b و c تموم نشن از حلقه خارحج نمیشه بخاطر وجود تاخیر
ببینید کلا یک کلید بیشتر نداره
حالا میخوام با این کلید افکت اون تغییر کنه
حلقه هام به این صورتن:
do
a:
.
.
.
.
goto a
b:
.
.
.
goto b
c:
.
.
.
.
goto c
loop end
منم میخوام هر بار که کلید رو میزنم از حلقه a به b بره دوباره بزنم بره بخش c دوباره بزنم بره a
مشکلش اینه که تا حلقه b و c تموم نشن از حلقه خارحج نمیشه بخاطر وجود تاخیر
می تونی شرط بزاری که اگر کلید برای بار اول زده شد a رو اجرا کنه و بقیه رو اجرا نکنه و اگر کلید برای بار دوم زده شد b رو اجرا کنه و بقیه رو اجرا نکنه
اصلا ربطی به wait نداره که برنامه اجرا بشه یا نه چون وقتی از دستور wait استفاده کردی اگر تاخیر کم باشه زودتر اجرا می کنه اگر بیشتر باشه یکم طول میکشه
می تونی شرط بزاری که اگر کلید برای بار اول زده شد a رو اجرا کنه و بقیه رو اجرا نکنه و اگر کلید برای بار دوم زده شد b رو اجرا کنه و بقیه رو اجرا نکنه
اصلا ربطی به wait نداره که برنامه اجرا بشه یا نه چون وقتی از دستور wait استفاده کردی اگر تاخیر کم باشه زودتر اجرا می کنه اگر بیشتر باشه یکم طول میکشه
خوب منم همین کار رو کردم ولی حلقه بی و سی حتما باید خط به خط خونده بشن برسن به goto تا ازش خاج شن ولی من میخوام همون لحظه که کلیدو زدم از حلقه خارج شه نه اینکه تا آخر بخونه حلقه رو بعدش بیاد بیرون از حلقه
سلام دوست عزیز
راهش اینه که از یه حلقه for next بجای wait استفاده کنی یعنییه حلقهfor next مثلا اگر 1000 بار تکرار بشه برابر با wait بشه اونوقت داخل حلقه for next دستور goto رو بنویس
اینطور شما میتونی در اصل بین تاخییر هم پرش کنی
امام مهدی(عج): اگر شیعیان ما ، که خداوند طاعتشان دهد. در عهد ما وفادار و همدل بودند، هرگز دیدار ما (ظهور) به تاخیر نمی افتاد.(کدام عهد ؟)
سلام دوست عزیز
راهش اینه که از یه حلقه for next بجای wait استفاده کنی یعنییه حلقهfor next مثلا اگر 1000 بار تکرار بشه برابر با wait بشه اونوقت داخل حلقه for next دستور goto رو بنویس
اینطور شما میتونی در اصل بین تاخییر هم پرش کنی
خوب منم همین کار رو کردم ولی حلقه بی و سی حتما باید خط به خط خونده بشن برسن به goto تا ازش خاج شن ولی من میخوام همون لحظه که کلیدو زدم از حلقه خارج شه نه اینکه تا آخر بخونه حلقه رو بعدش بیاد بیرون از حلقه
قرار دادن for next فکر خوبیه ولی اینجا کلید به پایه int0 وصله و هر لحظه کلید چک میشه اگر بین wait ها کلید بار دیگه زده بشه چون ایندفعه مقدار متغیر a مثلا میشه 1 باید بره اون متغیر رو چک کنه و منتظر نمی مونه که لیبل تموم بشه بعد بره
من فکر می کنم که مشکل از کلید هست
اینو به صورت عملی تست کردین؟
دیدگاه