ايران ويج

نسخه‌ی کامل: چراغ راهنمايي قابل تنظيم
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
صفحه‌ها: 1 2 3
با سلام خدمت همه دوستان
من يه برنامه چراغ راهنمايي دارم كه چراغ سبز و قرمز 30 ثانيه وبه صورت معكوس شمار است.(30 ثانيه سبز 3 ثانيه زرد و 30 ثانيه قرمز)
ميخواستم يه حالتي به مدار اضافه كنم كه مدت زمان چراغ ها قابل تنظيم با كيپد باشند به طوريكه هنگام شروع عددي را با كيپد وارد كنيم و شمارش از اين عدد تا 0 باشه بعد 3 ثانيه زرد و دوباره به همان مقدار وارد شده قرمز.

اينم برنامه خودمه بدون كيپد:

کد php:
$regfile "m32def.dat"
$crystal 8000000

Ddrb 
= &HFF
Portb 
0

Ddrc 
= &H07
Portc 
0

Dim I 
As Byte

Do
 
Set Portc.0
 
For 30 To 0 Step -1
 Portb 
Makebcd(i)
 
Waitms 1000
 Next I
 Reset Portc.0

 Set Portc.1
 Portb 
0
 Waitms 2000
 Reset Portc.1


 Set Portc.2
 
For 25 To 0 Step -1
 Portb 
Makebcd(i)
 
Waitms 1000
 Next I
 Reset Portc.2

Loop
End




ممنون ميشم از اساتيد كمكم كنند
سلام.

اول ببينيد با keypad چطوري كار مي كنن ---> تابع getkbd و ...
بعد حاصل عدد گرفته شده رو در يه متغيير نگه مي داري ،‌مثلا num
حالا در برنامه هر جا از مقدار 30 استفاده كردي ، به جاش از num استفاده كن.
ممنون از پاسختون
حالا ميخوام اولا نمايش عدد رو سگمنت و كيپد را راهاندازي كنم
کد php:
$regfile "m16def.dat"
$crystal 8000000
Config Portb 
Output
Config Kbd 
Portd Debounce 50 Delay 1
Dim A 
As Byte
Dim B 
As Byte
Do
Getkbd()
If 
16 Then
Select 
Case A
Case 0:
=&B00000110
Portb 
B
Case1
:
=&B01011011
Case2
:
=&B01001111
Case4
:
=&B01100110
Case5
:
= &B01101101
Case6
:
= &B01111101
Case8
:
= &B00000111
Case9
:
= &B01111111
Case10
:
= &B01101111
Case14
:
= &B00111111
End Select
End 
If
Loop
End 
با اين برنامه فقط عدد 1 درست كار ميكنه يعني وقتي با كيپد عدد 1 را فشار ميديم نشون ميده ولي بقيه عددا كار نميكنند ضمنا دكمه هاي 2 و3 را هم 1 را نشون ميدهند ولي بقيه اصلا چيزي نميدن

















عملي امتحان كرديد يا فقط شبيه سازي در پروتوس ؟
پروتوس رو بيخيال شيد ، keypad اش مشكل دارهه ...
عملي ببنديد.

البته اينجا پروتوس احتمالا مي تونه جواب بده ،‌بخاطر سبك كد زدنتون.
ببينيد Portb = B رو بايد بعد از End select بذاريد ، در غير اينصورت فقط دكمه ي 1 كار مي كنه ...

--> براي Keypad از lookup استفاده كني بهترهه تا از دستورات select case استفاده كني ... ( توي help بسكام ،‌ lookup رو سرچ كن )
--> وقتي كد هاتون رو مي ذاريد از tag كد يا php استفاده كنيد بهترهه ...
portb=b را بردم به آخر الان از هر سطر فقط اعداد اول كار ميكنند مثلا 1 يا 2 يا 3 را ميزنم هر سه 1 را ميدن يا هر سه 4و5و6، 4را رو سگمنت ميدن
اشكال برنامه از كجاست؟

تو انجمن گشتم تو يه مورد اشاره كردين كه اگه مقاومت 220 اهمي بذارم درست نشون ميده اين كار را كردم جواب داد.
حالا مي خوام بعد وارد كردن عدد و زدن يه دكمه مثلا set (همون*)شروع به شمارش معكوس تا 0 كنه از كدوم دستورات استفاده كنم
اگه اين قسمت را هم كمكم كنيد ديگه فكر كنم چراغ راهنمايي قابل تنظيم 80 درصدش ساخته شده


بازم ممنونم از كمكتون
 
نقل قول: تو انجمن گشتم تو يه مورد اشاره كردين كه اگه مقاومت 220 اهمي بذارم درست نشون ميده اين كار را كردم جواب داد.
حالا مي خوام بعد وارد كردن عدد و زدن يه دكمه مثلا set (همون*)شروع به شمارش معكوس تا 0 كنه از كدوم دستورات استفاده كنم
اگه اين قسمت را هم كمكم كنيد ديگه فكر كنم چراغ راهنمايي قابل تنظيم 80 درصدش ساخته شده

پس مشكل قبلي حل شد ديگه ...
خوب براي گرفتن عدد 2 رقمي ، به همين صورت مقادير رو مي گيري و رقم اول رو مي ندازي تو a و رقم دوم رو مي ندازي تو b ، دقت كن كه بين گرفتن عدد ها از waitms استفاده كني ...
حالا رقم يكان رو كه a هست ، ضرب در 10 مي كني و با b جمع مي كني .
کد:
a=a*10
b=b+a
بعد از اين كدها ، b همون عدد دو رقمي هست كه مي خواستي .
با توجه به طرز اتصال سيم هاي كيبورد به پايه ها ، هر عدد روي كيبرد يه مقداري مي گيره كه بايد با يه جدول lookup اصلاح بشه ...
به هر حال ، فرض كنيد بعد از اصلاح كليد " * " مقدارش 12 هست.
خوب يه دستور شرطي مي ذاريد كه اگر 12 زده شد ، مقدار b ( كه عدد 2 رقمي وارد شده هست ) به صورتي كه مي خواهيد تغيير كنه ...

چيز خاصي ندارهه ... به همين راحتي.
خودتون هم بيشتر روش فكر كنيد 100% مشكلي نخواهيد داشت.
برنامه را به صورت شكل زير تغيير دادم ولي وقتي عدد را وارد ميكنم بدون اينكه set را بزنم شروع به تغيير ميكنه و درست نشون نميده
کد php:
$regfile "m16def.dat"
$crystal 8000000
Config Portb 
Output
Config Kbd 
Portd Debounce 50 Delay 1
Dim A 
As Byte
Dim B 
As Byte
Dim I 
As Byte
Do
Getkbd()
If 
16 Then
Select 
Case A
Case 0:
= &B00000110
Case 1:
= &B01011011
Case 2:
= &B01001111
Case :
= &B01100110
Case 5:
= &B01101101
Case 6:
= &B01111101
Case 8:
= &B00000111
Case 9:
= &B01111111
Case 10:
= &B01101111
Case 13:
= &B00111111
Case 12:
For 
B To 0 Step -1
Portb 
Makebcd(i)
Wait 1
Next I
End Select
Portb 
B
End 
If
Loop
End 



آقا حل شد مثل اينكه مشكل از پروتئوس هست

الان فقط وقتي عدد را وارد ميكنم بدون اينكه من دكمه set را بزنم تا 0 ميشماره من ميخوام تا وقتي با set دستور شمارش ندادم نشماره
بازم ممكنه از خود پروتئوس باشه و در عمل جواب بده؟

من ميخوام سه بار از كيپد عدد بگيرم مثلا بار اول 3 و بار دوم 4 را ميزنم تو سون سگمنت دو تايي 34 را بايد نشون بده سپس با زدن set شروع به شمارش معكوس تا 0 كنه

ممنون ميشم برنامه اش را واسم بنويسي

بازم ممنونم از كمكتون
 
نقل قول: الان فقط وقتي عدد را وارد ميكنم بدون اينكه من دكمه set را بزنم تا 0 ميشماره من ميخوام تا وقتي با set دستور شمارش ندادم نشماره

در خطوط برنامه اي كه گذاشتي نديدم شرطي براي زده شدن set بذاري ...
كدهات هم عجيبه ... ، البته خلاقيت خيلي خوبه ...
برنامه اش رو هم خودت مي نويسي ، عجله نكن ...

اگر توضيحات پست هاي قبليم رو بخوني و عمل كني ، بهتر نتيجه مي گيري ...
اگر كد نمونه هم ببيني بد نيست. ايده هاي لازم براي كارت رو پيدا مي كني.
عملي كدهات رو چك كني كه باز خيلي بهترهه ...
اگر از 7seg مالتي پلكس شده قرارهه استفاده كني ، بايد از روش رفرش استفاده كني ...
يه سرچي تو فروم بزني بد نيست ، توضيحاتش رو هم تازگي دادم ...
باشه برم يكم كار كنم ببينم ميتونم چيزي پيدا كنم

بازم از كمكتون ممنونم
سلام
يكي از دوستان جراغ راهنمايي معكوس شمار را تو فروم گذاشته ولي با زبان سي هستش
خواهشا اونو واسم با بيسيك بذارين ديگه خسته شدم من هنوز چيز زيادي بلد نيستم از بيسيك نميتونم طراحيش كنم
نقل قول: من اين پروزه را بايد با بيسيك تا شنبه هفته بعد تحويل بدم منتها مال بايد آپشن هاي ديگه هم داشته باشه بايد تو سه مد كار كنه مثلا ابتدا با زدن 1 بره به حالت چشمك زن يا با 2 به دو زمانه و با 3 به سه زمانه بره سپس تو هريك از اينا با كيپد تنظيم بشه مثل همين پروزه
تو رو خدا اگه بلدين واسم بنويسين به خدا خيلي روش كار كردم تو فروم هم هستش نميتونم خودم طراحيش كنم
نقل قول: سلام
يكي از دوستان جراغ راهنمايي معكوس شمار را تو فروم گذاشته ولي با زبان سي هستش
خواهشا اونو واسم با بيسيك بذارين ديگه خسته شدم من هنوز چيز زيادي بلد نيستم از بيسيك نميتونم طراحيش كنم
دوست من چند روزه روش داري كار مي كني كه الان مي گي نمي تونم و جا زدي ... !!
اين افكار مسمومه به 1001 علت ...
جاي اينكه بگي نمي تونم و نمي تونم و يكي برام اين رو بنويسه ... ، درست فكر كن و عزمت و جزم كن و بكوب بشين پاش و ديوانه وار تحقيق كن و كد بزن ...

اين پروژه ها يه خوبيي كه دارن اينه كه زمان محدودي دارن و آدم مجبور مي شه به خودش بياد و سريع تر برهه جلو ...
فقط كافيه جا نزني و به خودت بيشتر از بقيه اعتماد داشته باشي ( براي حل مشكلت )

مي دوني پروژه ي پايانيم رو اين ترم گرفتم و موضوعش رو خودم پيشنهاد دادم ، موقعي كه گرفتم شانس انجامش رو 1% مي ديدم ! ( ديوونه ام ؟! )
نه اين يه چيزي فراتر از پيشرفت هست ، يه جهش هه بزرگه ...
الان روز به روز شانس انجامش دارهه مي رهه بالا ، چون اهل جا زدن نيستم و سرم درد مي كنه براي گير كردن تو مشكلات ... Biggrin

به خودت اعتماد داشته باش ...
--------------------------------
كتاب 1nafar رو دانلود كردي ؟؟

اين رو ببين :
نحوه ي استفاده از lookupstr ...
كاملا مشابه lookup هست ، اما lookup محدود ترهه ...
مثال رو ببين و help بسكام براي اين lookup ها رو بخون ...

کد php:
$regfile "m32def.dat"
$crystal 8000000
Config Lcd 
16 2
Config Lcdpin 
Pin Db4 Portc.0 Db5 Portc.1 Db6 Portc.2 Db7 Portc.3 Portc.4 Rs Portc.5
Config Kbd 
Porta
Config Portb.1 
Output
Dim A 
As Byte As String 1                             ' , B As String * 1
Cls : Lcd " Enter a number "
Do
   Main:
   Set Portb.1
   Waitms 180 : Reset Portb.1
    A = Getkbd()
    If A > 15 Then
    Goto Main
    End If
    B = Lookupstr(a , W)
    Cls : Locate 1 , 1 : Lcd B : Waitms 200
   Locate 2 , 1 : Lcd A : Waitms 200

Loop
End
W:
Data "/" , "*" , "-" , "+" , "=" , "9" , "6" , "3" , "0" , "8" , "5" , "2" , "." , "7" , "4" , "1" 

-------------------------------------------------
براي گرفتن 3 عدد به همين سبك كار مي كني و 3 بار مراحل گرفتن رو پشت سر هم مي ذاري ...
اين ها رو همينجوري نوشتم ، فقط ايده هاي كارت رو بگير و كد خودت رو بزن ...

کد php:
adad1:
    
Getkbd()
    If 
15 Then
    
Goto adad1
    End 
If
    
Lookup(W)
waitms 300
 adad2
:
    
Getkbd()
    If 
15 Then
    
Goto adad2
    End 
If
    
B1 Lookup(W)
waitms 300
'--------------------------
b=b*10
b1=b+b1
'
--------------------------
 
sett:
    
Getkbd()
    If 
15 Then
    
Goto sett
    End 
If
    
B2 Lookup(W)
waitms 100
if b2=12 then
num
=b1
goto prog1
else
goto 
sett
end 
if
'--------------------------
prog1:
.
.


من ممكنه اين چند روز كمتر بتونم سر بزنم ، باز مشكلي بود مطرح كنيد دوستان هستند ...

موفق باشي ...
صفحه‌ها: 1 2 3