Hey, ben pas bezig met de PIC16 , nl de PIC16F628A (speciaal genomen voor de voorbeeldjes van http://www.picbasic.nl/)
heb ondertussen al enige voorbeeldjes uitgeprobeerd, duurde wel even vooraleer ik de eerste werkende kreeg. Tja, na enig zoekwerk die dan toch werkend gekregen.
Nu was ik wat met de select-functie aan het experimenteren. Maar hetgeen ik wil proberen krijg ik niet werkend. Ik snap niet wat ik juist verkeerd doe. Ik heb al enige tijd gezocht hier naar een oplossing maar vind het niet. Misschien dat er iemand is die mij kan helpen.
*het idee
een BCD-code (laatste 3 bits hiervan) gebruiken om een 7segment aan te sturen. Dus 3 ingangen van poort B gebruiken om poort A aan te sturen.
*de code
Device = 16F628A
Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
ALL_DIGITAL = True ' Set ports to digital mode
OPTIMISER_LEVEL = 6 ' Set for maximum optimiser level
XTAL = 4 ' Freq. osc 4MHz
'instellingen poorten
PORTA = %00000000 ' Alle niveaus van PORTA eerst laag maken
PORTB = %00000000 ' Alle niveaus van PORTB eerst laag maken
TRISB = %11111111 ' Set PORTB to all input
TRISA = %00000000 ' Set PORTA to all output
PORTB_PULLUPS On ' PORTB pull-ups geactiveerd voor de toets
'Logische constanten
Symbol AAN = 0
'Poortnamen
Symbol Z_SEG = PORTA ' PORTA heeft nu de naam Z_SEG
Symbol Knop = PORTB ' PORTB heeft nu de naam Knop
Symbol K1 = PORTB.0 ' Poort B.0 heeft nu de naam Sa (A-segment)
Symbol K2 = PORTB.1 ' Poort B.1 heeft nu de naam Sb (B-segment)
Symbol K3 = PORTB.2 ' Poort B.2 heeft nu de naam Sc (C-segment)
Clear ' Wis alle RAM geheugen
DelayMS 500 ' Wait for PICmicro to stabilise
If K1 = AAN Or K2 = AAN Or K3 = AAN Then ' BCD-code aanwezig is, dan...
Select Knop ' poort B opvragen naar de knopkeuze
'76543210
'xGFEDCBA -> 7 segmentaansluitingen
Case 1 'BCDwaarde 1
PORTA = %00000110 ' segmenten B,C hoog, rest laag
Case 2 'BCDwaarde 2
PORTA = %01011011 ' segmenten A,B,D,E,G hoog, rest laag
Case 3 'BCDwaarde 3
PORTA = %01001111 ' segmenten A,B,C,D,G hoog, rest laag
Case 4 'BCDwaarde 4
PORTA = %01100110 ' segmenten B,C,F,G hoog, rest laag
Case 5 'BCDwaarde 5
PORTA = %01101101 ' segmenten A,C,D,F,G hoog, rest laag
Case 6 'BCDwaarde 6
PORTA = %01111101 ' segmenten A,C,D,E,F,G hoog, rest laag
Case 7 'BCDwaarde 7
PORTA = %01000000 ' segmenten G hoog, rest laag
Case Else
EndSelect
EndIf
De ongebruikte ingangen zijn door de pullup hoog gemaakt, dus je zal nooit aan de voorwaarde voldoen.
Roel.