Ik kom er dit keer echt niet uit, (ook na het controleren van de schakeling en het programma), er moet een 1 op het scherm verschijnen als een knop is ingedrukt, en een 0 als dat niet zo is.
De waardes op het schermpje wisselen heel snel tussen 0 en 1 ipv gewoon de staat van de knoppen aan te geven. Wat doe ik fout?
Device 16F628 ;Gebruik een 16F628 type
Config WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF, hs_OSC
ALL_DIGITAL TRUE ;Alle ingangen digitaal
XTAL 10 ;Kristal van 20MHz
Dim b1 As Bit;
Dim b2 As Bit;
Dim b3 As Bit;
Declare LCD_TYPE ALPHA
Declare LCD_INTERFACE 4
Declare LCD_LINES 4
b1 = 0
b2 = 0
b3 = 0
DelayMS 500
Cls
While 1 = 1
If PORTB.0 = 1 Then
If b1 = 0 Then
Print At 1,1, "1"
b1 = 1
EndIf
Else
If b1 = 1 Then
Print At 1,1, "0"
b1 = 0
EndIf
EndIf
If PORTB.1 = 1 Then
If b2 = 0 Then
Print At 1,3, "1"
b2 = 1
EndIf
Else
If b2 = 1 Then
Print At 1,3, "0"
b2 = 0
EndIf
EndIf
If PORTA.3 = 1 Then
If b3 = 0 Then
Print At 1,5, "1"
b3 = 1
EndIf
Else
If b3 = 1 Then
Print At 1,5, "0"
b3 = 0
EndIf
EndIf
Toggle PORTA.2
Wend
End ;Einde programma
Pullups! Dus pin hoog is schakelaar open, en laag is dicht.
Waarom zo moeilijk met die variabele. Je kant toch gewoon zeggen:
if portb.0 = 0 then
print at 1,1, "1"
else
print at 1,1, "0"
end if
pientertje, zo had ik het eerst ook staan, maar toen werkte het niet dus heb ik het aangepast. Ik zal het programma aanpassen.
stef, een knop kan toch alleen maar 0 of 1 zijn?
Kan je je gedachtengang van dit programma uitleggen ik volg het niet helemaal.
en zo is het leesbaar:
DEVICE 16F628 ;Gebruik een 16F628 type
CONFIG WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF, hs_OSC
ALL_DIGITAL TRUE ;Alle ingangen digitaal
XTAL 10 ;Kristal van 20MHz
DIM b1 AS BIT;
DIM b2 AS BIT;
DIM b3 AS BIT;
DECLARE LCD_TYPE ALPHA
DECLARE LCD_INTERFACE 4
DECLARE LCD_LINES 4
b1 = 0
b2 = 0
b3 = 0
DELAYMS 500
CLS
WHILE 1 = 1
IF PORTB.0 = 1 THEN
IF b1 = 0 THEN
PRINT AT 1,1, "1"
b1 = 1
ENDIF
ELSE
IF b1 = 1 THEN
PRINT AT 1,1, "0"
b1 = 0
ENDIF
ENDIF
IF PORTB.1 = 1 THEN
IF b2 = 0 THEN
PRINT AT 1,3, "1"
b2 = 1
ENDIF
ELSE
IF b2 = 1 THEN
PRINT AT 1,3, "0"
b2 = 0
ENDIF
ENDIF
IF PORTA.3 = 1 THEN
IF b3 = 0 THEN
PRINT AT 1,5, "1"
b3 = 1
ENDIF
ELSE
IF b3 = 1 THEN
PRINT AT 1,5, "0"
b3 = 0
ENDIF
ENDIF
TOGGLE PORTA.2
WEND
END ;Einde programma
Volgende keer zelf even inspringen en commentaar toevoegen
het werkt nog steeds niet, ik gebruik een computervoeding als stroombron, kan het daar aan liggen?
edit: de variabelen zorgen er voor dat de gegevens op het display pas worden aangepast als de status van de knop niet gelijk is aan zijn vorige status.
[Bericht gewijzigd door Iemand op (44%)]
Even een hele code met interne oscilator. Schakelaar op portb.0 naar de gnd. Display aangesloten zoals op picbsic.nl:
DEVICE 16F628A ;We gebruiken een 16F628A type
CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
ALL_DIGITAL TRUE ;Alle ingangen digitaal
PORTB_PULLUPS ON ;pullups aan
DELAYMS 500 ;display initialisatie
WHILE 1 = 1 ;eeuwige loop
IF PORTB.0 = 0 THEN ;als schakelaar ingedrukt is...
PRINT AT 1,1, "1" ;dan 1 op het beeldschermpje
ELSE ;anders, dus schakelaar is los...
PRINT AT 1,1, "0" ;dan 0 op het beeldschermpje
END IF
WEND
END
Op 1 maart 2009 11:39:08 schreef Iemand:
stef, een knop kan toch alleen maar 0 of 1 zijn?
Aja, vergeten
, dan weten we dat ook weer 