'****************************************************************
' Test example for 10 digitos con 16 segmentos y chip TM1622
' Pic18F46k22, OshonSoft Pic18 Basic Compiler v6.10
' Using the SPI por software and FrameBuffer.
' By COS, doglfu66@yahoo.es
' v2026/07/17
'****************************************************************
' ***************************************************************
' ***************************************************************
' PCB HL-K18 Jumper Configuration:
' General Jumpers on HL-K18: VCC, GND, PGC, PGD, OSC2, OSC1, VPP
' RS232 Interface: TX (Transmit), RX (Receive), BZ (Buzzer)
' Specific Jumpers for this setup: NONE
' Switches S2 and S4 should both be set to OFF.
' PICKIT2 Jumpers on HL-K18: Not used, external programmer.
' ************************************************************************
' Configuration of microcontroller fuses
' Setting up internal oscillator with 4x PLL to achieve 64MHz system clock
' MCLR enabled for external reset <---------------------------------------
#define CONFIG1L = 0x00  ' Low Power Timer and memory settings
#define CONFIG1H = 0xF8  ' External oscillator with PLL enabled
#define CONFIG2L = 0x1E  ' Brown-out Reset, Power-Up Timer
#define CONFIG2H = 0x3C  ' Watchdog Timer setup
#define CONFIG3L = 0x00  ' Low-voltage programming disabled
#define CONFIG3H = 0xBD  ' Port configuration options
#define CONFIG4L = 0x80  ' Stack overflow and underflow reset enabled
#define CONFIG4H = 0x00  ' Additional configuration bits
#define CONFIG5L = 0x0F  ' Code protection
#define CONFIG5H = 0xC0  ' Data EEPROM code protection
#define CONFIG6L = 0x0F  ' Write protection settings
#define CONFIG6H = 0xE0  ' Configuration protection bits
#define CONFIG7L = 0x0F  ' Boot block protection settings
#define CONFIG7H = 0x40  ' Configuration for block protection
' General configuration
#define CLOCK_FREQUENCY = 64		' System clock frequency in MHz
#define SINGLE_DECIMAL_PLACES = 1	' Number of decimal places for floating-point operations
#define STRING_MAX_LENGTH = 40		' Maximum length for String variables
'#define SIMULATION_WAITMS_VALUE = 0 'Activate only in simulation.
'***************************************************************
'***************************************************************
Include "_Pic18F46K22Lib.bas"
Include "TM1622_SPI_Soft.bas"
'***************************************************************
Main:
	' Clock internal 64Mhz.
	Call _Setup_Oscillator(_OSC_16MHz_HF)
	Call _SET_PLL4(_PLL_ON)
	Call _Interrupts_Mode(_DISABLE_PRIORITY)
	Call _SlewRate(_Disable) 'Enabled by default.
	'************************************************************
	AllDigital
	UART1_Init 115200
	'UART2_Init 4800
	WaitMs 1
	'************************************************************
	' Backlight configuration
	' CCP5 -> Timer2 -> LATE.2: PWM control for backlight (LED+).
	Call _Setup_TMR2(TMRx_ON | TMRx_PRS_16, 255)
	Call _Setup_CCP5(_ECCP_PWM) ' PWM mode.
	Call _Setup_CCP_4_5_Timers(_CCP5_TIMER1_TIMER2)
	Call _set_pwm5_duty(100) ' Sets illumination level using PWM.
	TRISE.2 = 0 ' PWM output pin
	' ***********************************************************
	UART1_Write 0x0C
	WaitMs 100
	UART1_Write "Ready", CrLf
	WaitMs 100

	TM1622_Init()
	'TM1622_DPMode(false) ' Enabled by default.
	TM1622_Test_All()
	WaitMs 1000

	Dim i As Byte
	Dim m As Byte
	Dim index As Byte
	Dim char As Byte
	char = "0"
	Dim cont As Short
	cont = -100
	Dim float As Single
	float = -5.3
	Dim str[40] As String

	TM1622_Clear()
	CFor (i = 0; i < TM1622_Digits; ++i)
		TM1622_Cursor(i)
		TM1622_PutC(#i)
		TM1622_Update()
		WaitMs 500
	CNext
	WaitMs 2000


	TM1622_Clear()
	'TM1622_DPMode(True)
	TM1622_Cursor(3)
	TM1622_Print(#float + "C")
	TM1622_Update()
	WaitMs 2000


	'TM1622_Clear()
	TM1622_Cursor(0)
	TM1622_PutC("*")
	TM1622_Cursor(TM1622_Digits - 1)
	TM1622_PutC("*")
	TM1622_Update
	WaitMs 2000


	TM1622_Clear()
	'TM1622_DPMode(True)
	float = -100
	While float <= 100
		TM1622_Cursor(0)
		TM1622_PadLeft(" ", str = "Temp. " + #float + "º")
		TM1622_Print(str)
		TM1622_Update()
		++float
		WaitMs 50
	Wend
	WaitMs 2000

	float = -25
	str = " TEMPERATURA "
	'TM1622_DPMode(True)
	TM1622_ScrollReset()
	While True
		TM1622_ScrollLeft(str + #float + "ºC")
		float = float + 0.1
		WaitMs 500
	Wend

End







