peterzatko
New Member
I need help with multiplexing 3 digit - 7segment display.I use pic 18F252.This code must count from 0 to 999 - every second and number display on 3 digit 7 segment display.
I have a problem with my code in delay because when i using in my board them numbers blinking very fast (non every second).Whats wrong in my code.I use externall HS 8MHz oscillator.THx
program xxxx
dim shifter, portb_index as byte ' Variables shifter and portd_index are of byte type
Dim decim as byte
Dim num as byte
Dim dat as byte
Dim fir as byte
Dim sec as byte
Dim q as byte '
Dim b as byte
Dim g as byte
Dim h as integer
Dim i as byte
Dim j as byte
Dim suma as byte
Dim k as byte
Dim l as integer
main:
PORTA = %00000000
TRISA = %00010000 '
PORTB = %00000000
TRISB = %10000000
PORTC = %00000000
TRISC = %11111111
ADCON1 = 7
PORTB = portb_index
Startstop:
OUT1 = 1 'Out for led
OUT2 = 0 Out for led
PORTA.0 =1 'Out for transistor NPN (ON first 7 segment)
PORTB = $3F 'display 0 on first displaz
If SWT2 = 0 then 'Switch buttton
delay_ms(185)
h = 0
j = 0
i = 0
k = 0
goto Counter
End If
goto Startstop
Counter:
IF h = 999 then h = 0
end if
inc(h)
i = h/100
If h<100 then
j = h/10
else
j = (h/10) mod 10
end if
k = (h/10) mod 1
IF k = 0 then PORTB = $3F
else If k = 1 then k = $06
else If k = 2 then k = $5B
else If k = 3 then k = $4F
else If k = 4 then k = $66
else If k = 5 then k = $6D
else If k = 6 then k = $7D
else If k = 7 then k = $07
else If k = 8 then k = $7F
else If k = 9 then k = $6F
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
IF j = 0 then j = $3F
else If j = 1 then j = $06
else If j = 2 then j = $5B
else If j = 3 then j = $4F
else If j = 4 then j = $66
else If j = 5 then j = $6D
else If j = 6 then j = $7D
else If j = 7 then j = $07
else If j = 8 then j = $7F
else If j = 9 then j = $6F
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
IF i = 0 then i = $3F
else If i = 1 then i = $06
else If i = 2 then i = $5B
else If i = 3 then i = $4F
else If i = 4 then i= $66
else If i = 5 then i = $6D
else If i = 6 then i = $7D
else If i = 7 then i = $07
else If i = 8 then i = $7F
else If i = 9 then i = $6F
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
display:
PORTB = k
PORTA.0 = 1
PORTA.1 = 0
PORTA.2 = 0
delay_ms(7)
PORTB = j
PORTA.1 = 1
PORTA.0 = 0
PORTA.2 = 0
delay_ms(7)
PORTB = i
PORTA.2 = 1
PORTA.0 = 0
PORTA.1 = 0
delay_ms(7)
goto Counter
I have a problem with my code in delay because when i using in my board them numbers blinking very fast (non every second).Whats wrong in my code.I use externall HS 8MHz oscillator.THx
program xxxx
dim shifter, portb_index as byte ' Variables shifter and portd_index are of byte type
Dim decim as byte
Dim num as byte
Dim dat as byte
Dim fir as byte
Dim sec as byte
Dim q as byte '
Dim b as byte
Dim g as byte
Dim h as integer
Dim i as byte
Dim j as byte
Dim suma as byte
Dim k as byte
Dim l as integer
main:
PORTA = %00000000
TRISA = %00010000 '
PORTB = %00000000
TRISB = %10000000
PORTC = %00000000
TRISC = %11111111
ADCON1 = 7
PORTB = portb_index
Startstop:
OUT1 = 1 'Out for led
OUT2 = 0 Out for led
PORTA.0 =1 'Out for transistor NPN (ON first 7 segment)
PORTB = $3F 'display 0 on first displaz
If SWT2 = 0 then 'Switch buttton
delay_ms(185)
h = 0
j = 0
i = 0
k = 0
goto Counter
End If
goto Startstop
Counter:
IF h = 999 then h = 0
end if
inc(h)
i = h/100
If h<100 then
j = h/10
else
j = (h/10) mod 10
end if
k = (h/10) mod 1
IF k = 0 then PORTB = $3F
else If k = 1 then k = $06
else If k = 2 then k = $5B
else If k = 3 then k = $4F
else If k = 4 then k = $66
else If k = 5 then k = $6D
else If k = 6 then k = $7D
else If k = 7 then k = $07
else If k = 8 then k = $7F
else If k = 9 then k = $6F
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
IF j = 0 then j = $3F
else If j = 1 then j = $06
else If j = 2 then j = $5B
else If j = 3 then j = $4F
else If j = 4 then j = $66
else If j = 5 then j = $6D
else If j = 6 then j = $7D
else If j = 7 then j = $07
else If j = 8 then j = $7F
else If j = 9 then j = $6F
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
IF i = 0 then i = $3F
else If i = 1 then i = $06
else If i = 2 then i = $5B
else If i = 3 then i = $4F
else If i = 4 then i= $66
else If i = 5 then i = $6D
else If i = 6 then i = $7D
else If i = 7 then i = $07
else If i = 8 then i = $7F
else If i = 9 then i = $6F
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
display:
PORTB = k
PORTA.0 = 1
PORTA.1 = 0
PORTA.2 = 0
delay_ms(7)
PORTB = j
PORTA.1 = 1
PORTA.0 = 0
PORTA.2 = 0
delay_ms(7)
PORTB = i
PORTA.2 = 1
PORTA.0 = 0
PORTA.1 = 0
delay_ms(7)
goto Counter
Last edited: