MrDEB
Well-Known Member
My code for everything else works but the HLVD section fails to detect LOW BATTERY
BEEN HACKING AT THIS FOR ABOUT A WEEK
HELP!!!
BEEN HACKING AT THIS FOR ABOUT A WEEK
HELP!!!
Code:
{
*****************************************************************************
* Name : UNTITLED.BAS *
* Author : [select VIEW...EDITOR OPTIONS] *
* Notice : Copyright (c) 2025 [select VIEW...EDITOR OPTIONS] *
* : All Rights Reserved *
* Date : 3/31/2025 *
* Version : 1.0 *
* Notes : *
* : *
*****************************************************************************
}
{
*****************************************************************************
* Name : UNTITLED.BAS *
* Author : [select VIEW...EDITOR OPTIONS] *
* Notice : Copyright (c) 2016 [select VIEW...EDITOR OPTIONS] *
* : All Rights Reserved *
* Date : 11/19/2016 *
* Version : 1.0 *
* Notes : portC=matrix cathodes
portD=matrix anodes *
* : portA=player leds
portB = player switches using pullips *
*****************************************************************************
}
//xxxxxxxxxxxxxxxxxxxxxxxxxx
Device = 18F43k22 ' Tell the compiler what chip we are using
Clock = 8 ' Tell the compiler what we will be setting the clock to (Mhz)
//CONFIG MCLRE = OFF
Config FOSC = INTIO67 ' Internal oscillator, IO on pins 6 and 7
#option DIGITAL_INIT = true
Include "SetDigitalIO.bas" // Include this file when we compile so that we can use keywords like 'setalldigital'
Include "utils.bas"
Include "convert.bas"
Include "intosc.bas"
Include "utils.bas"
Include "ISRTimer.bas"
//Include "adc.bas" //xxxxx
Dim y As Byte
Dim x As Byte
Dim counter As Byte
Dim Switch As PORTE.0 //counter
'Dim led1a As PORTD.3
'Dim led1c As PORTB.3
Dim adval As Word
Dim adcout As Word
//PLAYER LEDS
Dim led1 As PORTA.0
Dim led2 As PORTA.1
Dim led3 As PORTA.2
Dim led4 As PORTA.3
Dim led5 As PORTA.4
Dim led6 As PORTA.5
Dim led7 As PORTA.6
Dim led8 As PORTA.7
//PLAYER BUTTONS
Dim swt1 As PORTB.0
Dim swt2 As PORTB.1
Dim swt3 As PORTB.2
Dim swt4 As PORTB.3
Dim swt5 As PORTB.4
Dim swt6 As PORTB.5
Dim swt7 As PORTB.6
Dim swt8 As PORTB.7
//Dim player1 As PORTA.0
Dim KEY_BOUNCE_DELAY As Byte
Dim Battery As PORTE.1 'hlvd
//HLVDCON =%00011011 'see section 22.0 for setup and table 26-4 for voltage setting
'set to 4 volts in this case
//PIR2.bits(2) = 1 'clear HLVD interrupt flag
//PIE2.bits(2) = 1 'enable HLVD interrupt (section 22.2, sentence 5)
//INTCON.bits(7) = 1 'enable HLVD interrupt (section 22.2, sentence 5)
{ 'not needed for polled result
While TRUE
If PIR2.bits(2) = 1 Then 'check HLVD interrupt
led1 = 1 'LED = ON
PIR2.bits(2) = 0 'clear HVLD interrupt
Else
led1 = 0 'LED = OFF
End If
wend 'not needed for polled result
}
// CONST Cathodes_Data(9)AS BYTE = (%00000001,%00000010,%00000100,%00001000,%00010000,%00100000,%01000000,%10000000,%00000000)
Const Cathodes_Data(8)As Byte = (%01111111, ' KEEP THESE AS THEY DON"T CHANGE PER LETTER
%10111111, ' this is for scanning the rows
%11011111, //cathodes
%11101111,
%11110111,
%11111011,
%11111101,
%11111110)
Const Cat_Data(8)As Byte = (%10000000,
%01000000,
%00100000,
%00010000,
%00001000,
%00000100,
%00000010,
%00000001)
Const Zero(8)As Byte = (%00000000,
%00111100,
%01000010,
%10000001,
%01000010,
%00111100,
%00100000,
%00000000)
Const One(8)As Byte = (%00000000,
%00000000,
%00000000,
%00000000,
%00010000,
%00000000,
%00000000,
%00000000)
' number 2
Const Two(8)As Byte = (%10000000,
%00000000,
%00000000,
%00000000,
%00000000,
%00000000,
%00000001,
%00000000)
Const Three(8) As Byte =(%10000000,
%00000000,
%00000000,
%00010000,
%00000000,
%00000000,
%00000001,
%00000000)
Const Four(8) As Byte =(%10000001,
%00000000,
%00000000,
%00000000,
%00000000,
%00000000,
%10000001,
%00000000)
Const Five(8) As Byte = (%10000001,
%00000000,
%00000000,
%00010000,
%00000000,
%00000000,
%10000001,
%00000000)
Const Six(8) As Byte = (%10000001,
%00000000,
%00000000,
%10000001,
%00000000,
%00000000,
%10000001,
%00000000)
Const Seven(8) As Byte =(%10010001,
%00000000,
%00000000,
%10000001,
%00000000,
%00000000,
%10000001,
%00000000)
Const Eight(8) As Byte =(%10010010,
%00000000,
%00000000,
%10010010,
%00000000,
%00000000,
%10000010,
%00000000)
Const Nine(8) As Byte= (%10010010,
%00000000,
%00000000,
%10010010,
%00000000,
%00000000,
%10010010,
%00000000)
Const Ten(8) As Byte= (%10010010,
%00000000,
%10010010,
%00000000,
%10000010,
%00000000,
%10000010,
%00000000)
Const Eleven(8) As Byte=(%10010010,
%00000000,
%10010010,
%00000000,
%10010010,
%00000000,
%10000010,
%00000000)
Const Tweleve(8)As Byte=(%10010010,
%00000000,
%10010010,
%00000000,
%10010010,
%00000000,
%10010010,
%00000000)
// Const KEY_BOUNCE_DELAY(0) = 50 // msec delay for key bounce
Sub Debounce( )
DelayMS(300)
End Sub
// Arrays
//
// Arrays
Sub T_12()
//12
Repeat
For x = 0 To 7
PORTC = Cathodes_Data(x) //rows top to bottom
PORTD = Tweleve(x)// colums 8 (L-R the X is the scan
DelayUS(300)
Next
If (swt1 = 0) Then
Toggle(led1) DelayUS(300)
ElseIf (swt2 = 0) Then
Toggle(led2) DelayUS(300)
ElseIf (swt3 = 0) Then
Toggle(led3) DelayUS(300)
ElseIf (swt4 = 0) Then
Toggle(led4) DelayUS(300)
ElseIf (swt5 = 0) Then
Toggle(led5) DelayUS(300)
ElseIf (swt6 = 0) Then
Toggle(led6) DelayUS(300)
ElseIf (swt7 = 0) Then
Toggle(led7) DelayUS(300)
ElseIf (swt8 = 0) Then
Toggle(led8) DelayUS(300)
End If
Until
Switch = 0
DelayUS(300)
End Sub
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Sub E_11()
//11
Repeat
For x = 0 To 7
PORTC = Cathodes_Data(x) //rows top to bottom
PORTD = Eleven(x)// colums 8 (L-R the X is the scan
DelayUS(300)
Next
If (swt1 = 0) Then
Toggle(led1) DelayUS(500)
ElseIf (swt2 = 0) Then
Toggle(led2) DelayUS(500)
ElseIf (swt3 = 0) Then
Toggle(led3) DelayUS(500)
ElseIf (swt4 = 0) Then
Toggle(led4) DelayUS(500)
ElseIf (swt5 = 0) Then
Toggle(led5) DelayUS(500)
ElseIf (swt6 = 0) Then
Toggle(led6) DelayUS(500)
ElseIf (swt7 = 0) Then
Toggle(led7) DelayUS(500)
ElseIf (swt8 = 0) Then
Toggle(led8) DelayUS(500)
End If
Until
Switch = 0
DelayUS(300)
End Sub
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Sub T_10()
//10
Repeat
For x = 0 To 7
PORTC = Cathodes_Data(x) //rows top to bottom B
PORTD = Ten(x)// colums 8 (L-R the X is the scan D
DelayUS(300)
Next
If (swt1 = 0) Then
Toggle(led1) DelayUS(300)
ElseIf (swt2 = 0) Then
Toggle(led2) DelayUS(300)
ElseIf (swt3 = 0) Then
Toggle(led3) DelayUS(300)
ElseIf (swt4 = 0) Then
Toggle(led4) DelayUS(300)
ElseIf (swt5 = 0) Then
Toggle(led5) DelayUS(300)
ElseIf (swt6 = 0) Then
Toggle(led6) DelayUS(300)
ElseIf (swt7 = 0) Then
Toggle(led7) DelayUS(300)
ElseIf (swt8 = 0) Then
Toggle(led8) DelayUS(300)
End If
Until
Switch = 0
DelayUS(300)
End Sub
Sub N_9() //NINE
Repeat
For x = 0 To 7
PORTC = Cathodes_Data(x) //rows top to bottom
PORTD = Nine(x)// colums 8 (L-R the X is the scan
DelayUS(300)
Next
If (swt1 = 0) Then
Toggle(led1) DelayUS(300)
ElseIf (swt2 = 0) Then
Toggle(led2) DelayUS(300)
ElseIf (swt3 = 0) Then
Toggle(led3) DelayUS(300)
ElseIf (swt4 = 0) Then
Toggle(led4) DelayUS(300)
ElseIf (swt5 = 0) Then
Toggle(led5) DelayUS(300)
ElseIf (swt6 = 0) Then
Toggle(led6) DelayUS(300)
ElseIf (swt7 = 0) Then
Toggle(led7) DelayUS(300)
ElseIf (swt8 = 0) Then
Toggle(led8) DelayUS(300)
End If
Until
Switch = 0
DelayUS(300)
End Sub
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Sub E_8() //8
Repeat
For x = 0 To 7
PORTC = Cathodes_Data(x) //rows top to bottom
PORTD = Eight(x)// colums 8 (L-R the X is the scan
DelayUS(300)
Next
If (swt1 = 0) Then
Toggle(led1) DelayUS(300)
ElseIf (swt2 = 0) Then
Toggle(led2) DelayUS(300)
ElseIf (swt3 = 0) Then
Toggle(led3) DelayUS(300)
ElseIf (swt4 = 0) Then
Toggle(led4) DelayUS(300)
ElseIf (swt5 = 0) Then
Toggle(led5) DelayUS(300)
ElseIf (swt6 = 0) Then
Toggle(led6) DelayUS(300)
ElseIf (swt7 = 0) Then
Toggle(led7) DelayUS(300)
ElseIf (swt8 = 0) Then
Toggle(led8) DelayUS(300)
End If
// wait for a key press
Until
Switch = 0
DelayUS(300)
End Sub
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Sub S_7() //7
Repeat
For x = 0 To 7
PORTC = Cathodes_Data(x) //rows top to bottom
PORTD = Seven(x)// colums 8 (L-R the X is the scan
DelayUS(300)
Next
If (swt1 = 0) Then
Toggle(led1) DelayUS(300)
ElseIf (swt2 = 0) Then
Toggle(led2) DelayUS(300)
ElseIf (swt3 = 0) Then
Toggle(led3) DelayUS(300)
ElseIf (swt4 = 0) Then
Toggle(led4) DelayUS(300)
ElseIf (swt5 = 0) Then
Toggle(led5) DelayUS(300)
ElseIf (swt6 = 0) Then
Toggle(led6) DelayUS(300)
ElseIf (swt7 = 0) Then
Toggle(led7) DelayUS(300)
ElseIf (swt8 = 0) Then
Toggle(led8) DelayUS(300)
End If
Until
Switch = 0
DelayUS(300)
End Sub
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Sub S_6() //SIX
Repeat
For x = 0 To 7
PORTC = Cathodes_Data(x) //rows top to bottom
PORTD = Six(x)// colums 8 (L-R the X is the scan
DelayUS(300)
Next
If (swt1 = 0) Then
Toggle(led1) DelayUS(300)
ElseIf (swt2 = 0) Then
Toggle(led2) DelayUS(300)
ElseIf (swt3 = 0) Then
Toggle(led3) DelayUS(300)
ElseIf (swt4 = 0) Then
Toggle(led4) DelayUS(300)
ElseIf (swt5 = 0) Then
Toggle(led5) DelayUS(300)
ElseIf (swt6 = 0) Then
Toggle(led6) DelayUS(300)
ElseIf (swt7 = 0) Then
Toggle(led7) DelayUS(300)
ElseIf (swt8 = 0) Then
Toggle(led8) DelayUS(300)
End If
// wait for a key press
Until
Switch = 0
DelayUS(300)
End Sub
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Sub F_5() //5
Repeat
For x = 0 To 7
PORTC = Cathodes_Data(x) //rows top to bottom
PORTD = Five(x)// colums 8 (L-R the X is the scan
DelayUS(300)
Next
If (swt1 = 0) Then
Toggle(led1) DelayUS(300)
ElseIf (swt2 = 0) Then
Toggle(led2) DelayUS(300)
ElseIf (swt3 = 0) Then
Toggle(led3) DelayUS(300)
ElseIf (swt4 = 0) Then
Toggle(led4) DelayUS(300)
ElseIf (swt5 = 0) Then
Toggle(led5) DelayUS(300)
ElseIf (swt6 = 0) Then
Toggle(led6) DelayUS(300)
ElseIf (swt7 = 0) Then
Toggle(led7) DelayUS(300)
ElseIf (swt8 = 0) Then
Toggle(led8) DelayUS(300)
End If
// wait for a key press
Until
Switch = 0
DelayUS(300)
End Sub
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Sub F_4() //FOUR
Repeat
For x = 0 To 7
PORTC = Cathodes_Data(x) //rows top to bottom
PORTD = Four(x)// colums 8 (L-R the X is the scan
DelayUS(300)
Next
If (swt1 = 0) Then
Toggle(led1) DelayUS(300)
ElseIf (swt2 = 0) Then
Toggle(led2) DelayUS(300)
ElseIf (swt3 = 0) Then
Toggle(led3) DelayUS(300)
ElseIf (swt4 = 0) Then
Toggle(led4) DelayUS(300)
ElseIf (swt5 = 0) Then
Toggle(led5) DelayUS(300)
ElseIf (swt6 = 0) Then
Toggle(led6) DelayUS(300)
ElseIf (swt7 = 0) Then
Toggle(led7) DelayUS(300)
ElseIf (swt8 = 0) Then
Toggle(led8) DelayUS(300)
End If
// wait for a key press
Until
Switch = 0
DelayUS(300)
End Sub
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Sub T_3() //3
Repeat
For x = 0 To 7
PORTC = Cathodes_Data(x) //rows top to bottom
PORTD = Three(x)// colums 8 (L-R the X is the scan
DelayUS(300)
Next
If (swt1 = 0) Then
Toggle(led1) DelayUS(300)
ElseIf (swt2 = 0) Then
Toggle(led2) DelayUS(300)
ElseIf (swt3 = 0) Then
Toggle(led3) DelayUS(300)
ElseIf (swt4 = 0) Then
Toggle(led4) DelayUS(300)
ElseIf (swt5 = 0) Then
Toggle(led5) DelayUS(300)
ElseIf (swt6 = 0) Then
Toggle(led6) DelayUS(300)
ElseIf (swt7 = 0) Then
Toggle(led7) DelayUS(300)
ElseIf (swt8 = 0) Then
Toggle(led8) DelayUS(300)
End If
// wait for a key press
Until
Switch = 0
DelayUS(300)
End Sub
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Sub T_2()//2
Repeat
For x = 0 To 7
PORTC = Cathodes_Data(x) //rows top to bottom
PORTD = Two(x)// colums 8 (L-R the X is the scan
DelayUS(300)
Next
If (swt1 = 0) Then
Toggle(led1) DelayUS(300)
ElseIf (swt2 = 0) Then
Toggle(led2) DelayUS(300)
ElseIf (swt3 = 0) Then
Toggle(led3) DelayUS(300)
ElseIf (swt4 = 0) Then
Toggle(led4) DelayUS(300)
ElseIf (swt5 = 0) Then
Toggle(led5) DelayUS(300)
ElseIf (swt6 = 0) Then
Toggle(led6) DelayUS(300)
ElseIf (swt7 = 0) Then
Toggle(led7) DelayUS(300)
ElseIf (swt8 = 0) Then
Toggle(led8) DelayUS(300)
End If
Until
Switch = 0
DelayUS(300)
// wait for a key press
End Sub
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Sub O_1() //1
Repeat
For x = 0 To 7
PORTC = Cathodes_Data(x) //rows top to bottom D
PORTD = One(x)// colums 8 (L-R the X is the scanB
DelayUS(300)
Next
If (swt1 = 0) Then
Toggle(led1) DelayUS(300)
ElseIf (swt2 = 0) Then
Toggle(led2) DelayUS(300)
ElseIf (swt3 = 0) Then
Toggle(led3) DelayUS(300)
ElseIf (swt4 = 0) Then
Toggle(led4) DelayUS(300)
ElseIf (swt5 = 0) Then
Toggle(led5) DelayUS(300)
ElseIf (swt6 = 0) Then
Toggle(led6) DelayUS(300)
ElseIf (swt7 = 0) Then
Toggle(led7) DelayUS(300)
ElseIf (swt8 = 0) Then
Toggle(led8) DelayUS(300)
End If
Until
Switch = 0
DelayUS(300)
End Sub
//zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
Sub Z_ero() //1
Repeat
For x = 0 To 7
PORTC = Cathodes_Data(x) //rows top to bottom D
PORTD = Zero(x)// colums 8 (L-R the X is the scanB
DelayUS(300)
Next
If (swt1 = 0) Then
Toggle(led1) DelayUS(300)
ElseIf (swt2 = 0) Then
Toggle(led2) DelayUS(300)
ElseIf (swt3 = 0) Then
Toggle(led3) DelayUS(300)
ElseIf (swt4 = 0) Then
Toggle(led4) DelayUS(300)
ElseIf (swt5 = 0) Then
Toggle(led5) DelayUS(300)
ElseIf (swt6 = 0) Then
Toggle(led6) DelayUS(300)
ElseIf (swt7 = 0) Then
Toggle(led7) DelayUS(300)
ElseIf (swt8 = 0) Then
Toggle(led8) DelayUS(300)
EndIf
Until
Switch = 0
DelayUS(300)
End Sub
Sub Matrix_sel() //select number to display
If counter = 12 Then
Repeat
T_12()
Until
Switch = 0
Debounce()
End If
counter = 11
If counter = 11 Then
Repeat
E_11()
Until
Switch = 0
Debounce()
End If
counter = 10
If counter = 10 Then
Repeat
T_10()
Until
Switch = 0
Debounce()
End If
counter = 9
If counter = 9 Then
Repeat
N_9()
Until
Switch = 0
Debounce()
End If
counter = 8
If counter = 8 Then
Repeat
E_8()
Until
Switch = 0
Debounce()
End If
counter = 7
If counter = 7 Then
Repeat
S_7()
Until
Switch = 0
Debounce()//debounce
End If
counter = 6
If counter = 6 Then
Repeat
S_6()
Until
Switch = 0
Debounce() //debounce
End If
counter = 5
If counter = 5 Then
Repeat
F_5()
Until
Switch = 0
Debounce() //debounce
counter = 4
End If
If counter = 4 Then
Repeat
F_4()
Until
Switch = 0
Debounce() //debounce
End If
counter = 3
If counter = 3 Then
Repeat
T_3()
Until
Switch = 0
Debounce()//debounce
End If
counter = 2
If counter = 2 Then
Repeat
T_2()
Until
Switch = 0
Debounce() //debounce
End If
counter = 1
If counter = 1 Then
Repeat
O_1()
Until
Switch = 0
Debounce() //debounce
End If
counter = 0
If counter = 0 Then
Repeat
Z_ero()
Until
Switch = 0
Debounce() //debounce
End If
counter = 2
End Sub
// Start Of Program
TRISB = $FF // SWt port - all inputs
WPUB = $FF // PORTB pullup mask - all PORTB pullups
INTCON2.bits(7) = 0 // RBPU bit - turn on pullups
//TRISB = %00000000 // Make PORTB all outputs // Make PORTD all outputs
TRISC = %00000000 // Make PORTC all outputs cathodes
TRISA = %00000000 //player leds
TRISD = %00000000 //anodes
TRISE = $0000
x = 0
y = 0
HLVDCON =%00011011 'see section 22.0 for setup and table 26-4 for voltage setting
'set to 4 volts in this case
//Output (player1) //player leds ON PORT C
Output (led1)
Output (led2)
Output (led3)
Output (led4)
Output (led5)
Output (led6)
Output (led7)
Output (led8)
Output (Battery)
//Output (Power)
Input (PORTE.0) //counter press
//Input (Switch) //porta.3
//ALL ON PORT B
Input(swt1)
Input(swt2)
Input(swt3)
Input(swt4)
Input(swt5)
Input(swt6)
Input(swt7)
Input(swt8)
led1=0
led2=0
led3=0
led4=0
led5=0
led6=0
led7=0
led8=0
SetAllDigital()
counter = 12
///HLVD SECTION
//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
HLVDCON =%00011011 'see section 22.0 for setup and table 26-4 for voltage setting
'set to 4 volts in this case
PIR2.bits(2) = 1 'clear HLVD interrupt flag
PIE2.bits(2) = 1 'enable HLVD interrupt (section 22.2, sentence 5)
INTCON.bits(7) = 1 'enable HLVD interrupt (section 22.2, sentence 5)
While TRUE
If PIR2.bits(2) = 1 Then 'check HLVD interrupt
Battery = 1 'LED = ON
PIR2.bits(2) = 0 'clear HVLD interrupt
Else
Battery = 0 'LED = OFF
End If
'not needed for polled result
//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
Matrix_sel() //start out with 12
Wend