با سلام خدمت همه دوستان
من یه برنامه چراغ راهنمایی دارم که چراغ سبز و قرمز 30 ثانیه وبه صورت معکوس شمار است.(30 ثانیه سبز 3 ثانیه زرد و 30 ثانیه قرمز)
میخواستم یه حالتی به مدار اضافه کنم که مدت زمان چراغ ها قابل تنظیم با کیپد باشند به طوریکه هنگام شروع عددی را با کیپد وارد کنیم و شمارش از این عدد تا 0 باشه بعد 3 ثانیه زرد و دوباره به همان مقدار وارد شده قرمز.
$regfile = "m32def.dat"
$crystal = 8000000
Ddrb = &HFF
Portb = 0
Ddrc = &H07
Portc = 0
Dim I As Byte
Do
Set Portc.0
For I = 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 I = 25 To 0 Step -1
Portb = Makebcd(i)
Waitms 1000
Next I
Reset Portc.2
Loop
End
برنامه را به صورت زیر تغییر دادم و کار میکنه یعنی وقتی مثلا عدد اول را 1و عدد دوم را 2 وارد میکنم بعد از زدن *شروع به شمردن میکنه از 12 تا 0 ولی مشکلی که دارم اینه که اعداد را درست نشون نمیده و یه چیزای دری وری رو سگمنت میده البته برا مدار از سگمنت مالتی پلکس استفاده میکنم
ممنون میشم اشکال برنامه را بگین و تصحیحش کنید
$regfile = "m16def.dat"
$crystal = 8000000
Config Portb = Output
Config Kbd = Portd , Debounce = 100 , Delay = 1
Dim A As Byte
Dim B1 As Byte
Dim B2 As Byte
Dim Num As Byte
Dim B As Byte
Dim C As Byte
Dim I As Byte
Ddrb = &HFF
Portb = 0
Ddrc = &H07
Portc = 0
Goto Adad1
Adad1:
A = Getkbd()
If A > 15 Then
Goto Adad1
End If
B = Lookup(a , W)
Waitms 300
Goto Adad2
Adad2:
A = Getkbd()
If A > 15 Then
Goto Adad2
End If
B1 = Lookup(a , W)
Waitms 300
'--------------------------
B = B * 10
B1 = B + B1
'--------------------------
Goto Sett
Sett:
A = Getkbd()
If A > 15 Then
Goto Sett
End If
Waitms 100
If A = 12 Then
Num = B1
Goto Prog1
Else
Goto Sett
End If
Prog1:
Do
Set Portc.0
For I = Num 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 I = Num To 0 Step -1
Portb = Makebcd(i)
Waitms 1000
Next I
Reset Portc.2
Loop
End
W:
Data 1 , 2 , 3 , 99 , 4 , 5 , 6 , 99 , 7 , 8 , 9 , 99 , 99 , 0 , 99 , 99
من یه برنامه چراغ راهنمایی دارم که چراغ سبز و قرمز 30 ثانیه وبه صورت معکوس شمار است.(30 ثانیه سبز 3 ثانیه زرد و 30 ثانیه قرمز)
میخواستم یه حالتی به مدار اضافه کنم که مدت زمان چراغ ها قابل تنظیم با کیپد باشند به طوریکه هنگام شروع عددی را با کیپد وارد کنیم و شمارش از این عدد تا 0 باشه بعد 3 ثانیه زرد و دوباره به همان مقدار وارد شده قرمز.
$regfile = "m32def.dat"
$crystal = 8000000
Ddrb = &HFF
Portb = 0
Ddrc = &H07
Portc = 0
Dim I As Byte
Do
Set Portc.0
For I = 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 I = 25 To 0 Step -1
Portb = Makebcd(i)
Waitms 1000
Next I
Reset Portc.2
Loop
End
برنامه را به صورت زیر تغییر دادم و کار میکنه یعنی وقتی مثلا عدد اول را 1و عدد دوم را 2 وارد میکنم بعد از زدن *شروع به شمردن میکنه از 12 تا 0 ولی مشکلی که دارم اینه که اعداد را درست نشون نمیده و یه چیزای دری وری رو سگمنت میده البته برا مدار از سگمنت مالتی پلکس استفاده میکنم
ممنون میشم اشکال برنامه را بگین و تصحیحش کنید
$regfile = "m16def.dat"
$crystal = 8000000
Config Portb = Output
Config Kbd = Portd , Debounce = 100 , Delay = 1
Dim A As Byte
Dim B1 As Byte
Dim B2 As Byte
Dim Num As Byte
Dim B As Byte
Dim C As Byte
Dim I As Byte
Ddrb = &HFF
Portb = 0
Ddrc = &H07
Portc = 0
Goto Adad1
Adad1:
A = Getkbd()
If A > 15 Then
Goto Adad1
End If
B = Lookup(a , W)
Waitms 300
Goto Adad2
Adad2:
A = Getkbd()
If A > 15 Then
Goto Adad2
End If
B1 = Lookup(a , W)
Waitms 300
'--------------------------
B = B * 10
B1 = B + B1
'--------------------------
Goto Sett
Sett:
A = Getkbd()
If A > 15 Then
Goto Sett
End If
Waitms 100
If A = 12 Then
Num = B1
Goto Prog1
Else
Goto Sett
End If
Prog1:
Do
Set Portc.0
For I = Num 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 I = Num To 0 Step -1
Portb = Makebcd(i)
Waitms 1000
Next I
Reset Portc.2
Loop
End
W:
Data 1 , 2 , 3 , 99 , 4 , 5 , 6 , 99 , 7 , 8 , 9 , 99 , 99 , 0 , 99 , 99
دیدگاه