;****************************************************************************
; Test of use of LED as Light Sensor within a Complementary LED display
;****************************************************************************
Device = 12F629
Optimiser_Level = 3 ' Set for maximum optimiser level
Xtal = 4
Config CP_OFF ,CPD_OFF ,BODEN_OFF ,MCLRE_OFF ,WDT_OFF ,PWRTE_ON ,INTRC_OSC_NOCLKOUT
Declare Serial_Baud = 9600
Declare Rsout_Pin = GPIO.0
Declare Rsin_Pin = GPIO.1
Declare Rsout_Mode = TRUE
Declare Rsout_Pace = 10000
;****************************************************************************
;Comments
;****************************************************************************
'Bit column ;543210 ; TRIS configuration
;LED0TRIS= %001111
;LED1TRIS= %001111
;LED2TRIS= %101011
;LED3TRIS= %101011
;LED4TRIS= %011011
;LED5TRIS= %011011
;LED6TRIS= %111001
;LED7TRIS= %111001
;LED8TRIS= %011101
;LED9TRIS= %011101
'LED10TRIS= %101101
'LED11TRIS= %101101
'Bit column ;543210
'LED0ON= %010000 ; Port GPIO configuration
'LED1ON= %100000
'LED2ON= %010000
'LED3ON= %000100
'LED4ON= %100000
'LED5ON= %000100
'LED6ON= %000100
'LED7ON= %000010
'LED8ON= %100000
'LED9ON= %000010
'LED10ON= %010000
'LED11ON= %000010
'-------[MAIN PROGRAM LOOP STARTS HERE]----------------------------------
Dim INDEX As Byte
Dim PULSE_LENGTH As Word ' TOF (Time Of Flight) value
Dim SWAP_OCCURED As Bit
Dim SWAPTMP As Word
Dim MEDIAN As Word
Dim CALIBRATION_TIMER As Byte
Dim CALIBRATION_CHECK As Byte
Dim ServoPos1 As Byte
OPTION_REG.7 =0 ;enable pull-up setting
CMCON = 7 ' PORTA to digital
TRISIO = %111101
ServoPos1 = 0
INDEX = 250
;****************************************************************************
'[MAIN PROGRAM LOOP STARTS HERE]
;****************************************************************************
While 1 = 1 ' Create an infinite loop
x xx
ServoPos1 = PulseIn GPIO.1,0
RSOut " SERVO PWM = " , Dec ServoPos1,13 ;Print results of input to the serial monitor
;GoSub SCAN_COLUMNS
If ServoPos1 > 110 And ServoPos1 < 135 Then ;Mid Swtich Position
GoSub Led4
GPIO.5 = 0 ; turn off Buzzer
DelayMS 500
GPIO.5 = 1 ; turn on Buzzer
DelayMS 1000
GPIO.5 = 0 ; turn off Buzzer
DelayMS 500
EndIf
If ServoPos1 >135 Then ;Top Switch Position
GoSub Led4
TRISIO =%000001
GPIO.5 = 0 ; turn off Buzzer
Else
GoSub Led2
DelayMS 100
GPIO.5 = 1 ; turn on Buzzer
EndIf
ServoPos1 = 0
Wend
;****************************************************************************
ROW1_SHOW:
;****************************************************************************
For INDEX=10 To 5 Step -1
GoSub Led3
DelayMS INDEX ' Delay between samples
GoSub Led7
DelayMS INDEX
GoSub Led11
DelayMS INDEX
GoSub Led10
DelayMS INDEX
GoSub Led6
DelayMS INDEX
GoSub Led2
DelayMS INDEX
GoSub Led11
Next INDEX
Return
;****************************************************************************
;LED0 - D0
;****************************************************************************
Led0:
TRISIO =%001111
GPIO = %010000
Return
;****************************************************************************
;LED1 - D1
;****************************************************************************
Led1:
TRISIO =%001111
GPIO = %100000
Return
;****************************************************************************
;LED2 - D2
;****************************************************************************
Led2:
TRISIO = %101011
GPIO = %010000
Return
;****************************************************************************
;LED3 - D3
;****************************************************************************
Led3:
TRISIO = %101011
GPIO = %000100
Return
;****************************************************************************
;LED4 - D4
;****************************************************************************
Led4:
TRISIO = %011011
GPIO = %100000
Return
;****************************************************************************
;LED5 - D5
;****************************************************************************
Led5:
TRISIO = %011011
GPIO = %000100
Return
;****************************************************************************
;LED6 - D6
;****************************************************************************
Led6:
TRISIO = %111001
GPIO = %000100
Return
;****************************************************************************
;LED7 - D7
;****************************************************************************
Led7:
TRISIO = %111001
GPIO = %000010
Return
;****************************************************************************
;LED8 - D8
;****************************************************************************
Led8:
TRISIO = %011101
GPIO = %100000
Return
;****************************************************************************
;LED9 - D9
;****************************************************************************
Led9:
TRISIO = %011101
GPIO = %000010
Return
;****************************************************************************
;LED10 - D10
;****************************************************************************
Led10:
TRISIO = %101101
GPIO = %010000
Return
;****************************************************************************
;LED11 - D11
;****************************************************************************
Led11:
TRISIO = %101101
GPIO = %000010
Return
;****************************************************************************
;sub routine to scan LEDs
;****************************************************************************
;****************************************************************************
SCAN_COLUMNS:
;****************************************************************************
For INDEX=10 To 5 Step -1
GoSub Led0
DelayMS INDEX
GoSub Led1
DelayMS INDEX
GoSub Led2
DelayMS INDEX
GoSub Led3
DelayMS INDEX
GoSub Led4
DelayMS INDEX
GoSub Led5
DelayMS INDEX
GoSub Led6
DelayMS INDEX
GoSub Led7
DelayMS INDEX
GoSub Led8
DelayMS INDEX ' Delay between samples
GoSub Led9
DelayMS INDEX
GoSub Led10
DelayMS INDEX
GoSub Led11
DelayMS INDEX
Next INDEX
Return
;****************************************************************************
SCAN_ROWS:
;****************************************************************************
For INDEX=10 To 5 Step -1
GoSub Led0
DelayMS INDEX
GoSub Led4
DelayMS INDEX
GoSub Led8
DelayMS INDEX
GoSub Led1
DelayMS INDEX
GoSub Led5
DelayMS INDEX
GoSub Led9
DelayMS INDEX
GoSub Led2
DelayMS INDEX
GoSub Led6
DelayMS INDEX
GoSub Led10
DelayMS INDEX ' Delay between samples
GoSub Led3
DelayMS INDEX
GoSub Led7
DelayMS INDEX
GoSub Led11
DelayMS INDEX
Next INDEX
Return