Zo'n schema is wat ik in gedachten hebt. (zie attach)
De transistor staan anders dan op schema staat.
En ik gebruik 4MHz krystal.
Ik gebruik 1 extra transistor omdat ik 12V source voor display nodig hebt.
Het is Common Anode 8V 20mA.
Ik gebruik 2N3904 NPN (T1)en 2N3906 PNP (T2). (zie attach)
Maar nu weet ik het subroutine niet om 6 digit aan te sturen, multiplexen, en knopjes die het moet weten waar die ervoor dient.
Deze code heb ik van sample gehaald en is voor LCD en 12 uren mode.
Zou iemand mij iets kunnen helpen of zo hoe dat eigelijk werkt met dit code.
Code: Selecteer alles
Device 16F877A
CONFIG XT_OSC , WDT_OFF , PWRTE_OFF , BODEN_OFF , LVP_OFF , WRTE_ON , CP_OFF , DEBUG_OFF
ALL_DIGITAL = true
****************************************************************************************
Symbol Cu = PORTA.0
Symbol noPower = PORTA.4
Symbol digit1 = PORTC.0 ' eerste digit (seconden)
Symbol digit2 = PORTC.1 ' tweede digit (10 seconden)
Symbol digit3 = PORTC.2 ' derde digit (minuten)
Symbol digit4 = PORTC.3 ' vierde digit (10 minuten)
Symbol digit5 = PORTC.4 ' vijfde digit (uren)
Symbol digit6 = PORTC.5 ' zesde digit (10 uren)
Symbol digita = PORTB.0 ' segment a
Symbol digitb = PORTB.1 ' segment b
Symbol digitc = PORTB.2 ' segment c
Symbol digitd = PORTB.3 ' segment d
Symbol digite = PORTB.4 ' segment e
Symbol digitf = PORTB.5 ' segment f
Symbol digitg = PORTB.6 ' segment g
Symbol display = PORTB
****************************************************************************************
TRISA = %00111111
TRISB = %00000000
****************************************************************************************
Dim hour as byte ' Define hour variable
Dim dhour as byte ' Define display hour variable
Dim minute as byte ' Define minute variable
Dim second as byte ' Define second variable
Dim ticks as byte ' Define pieces of seconds variable
Dim update as byte ' Define variable to indicate update of Digit
Dim i as byte ' Debounce loop variable
****************************************************************************************
hour = 0 ' zet tijd naar 00:00:00
minute = 0
second = 0
ticks = 0
update = 1 ' forceer de eerste display
****************************************************************************************
mainloop:
PORTA = 0 ' PORTA knoppen
TRISB = $F0 ' alle knoppen aan
' Check any button pressed to set time
If PORTA.0 = 0 Then incmin ' stel minuten op
If PORTA.1 = 0 Then incmin ' stel uren op
' controleer voor tijd om te update
Chkup: If update = 1 Then
Cls ' Clear screen
' Display tijd als hh:mm:ss
dhour = hour ' verander uren 0 naar 23
If (hour // 23) = 0 Then
dhour = dhour + 23
update = 0 ' Screen updated
Endif
Goto mainloop
' Increment minuten
Incmin: minute = minute + 1
If minute >= 60 Then
minute = 0
Endif
Goto debounce
' Increment hours
Inchr: hour = hour + 1
If hour >= 24 Then
hour = 0
Endif
Goto debounce
' Decrement minutes
Decmin: minute = minute - 1
If minute >= 60 Then
minute = 59
Endif
Goto debounce
' Decrement hours
Dechr: hour = hour - 1
If hour >= 24 Then
hour = 23
Endif
' Debounce and delay for 250ms
Debounce:
For i = 1 to 25
Delayms 10 ' 10ms at a time so no interrupts are lost
Next
Update = 1 ' Set to update screen
Goto Chkup
********************************************************************************************************