DEMO ANALOG NEEDLE METER
(Download)
|
|
|
Device = 33EP128MC504 Declare Xtal = 150 Declare Auto_Heap_Arrays = On Declare Auto_Heap_Strings = On Declare Auto_Variable_Bank_Cross = On Declare Stack_Expand = On Declare Watchdog = OFF Declare Warnings = Off Declare Access_Upper_64K = On '================ MCU ======================= $define McuType 1 '================ TFT SCREEN ================ $define TFT_IC ILI9486 $define TftScreenWidth 480 $define TftScreenHeight 320 $define TftWidthOffset 0 $define TftHeightOffset 0 $define TftPixelCheck 0 $define TFT_COM PAR_16b $define TFT_RESET PORTC.2 $define TFT_CS PORTC.9 $define TFT_DC PORTC.1 $define TFT_WR PORTC.4 $define TFT_RD PORTA.10 $define TftDataWord PORTB Include "TftLib\TFT_Graphic_Lib.inc" Include "TftLib\Colors\Colors.inc" Include "TftLib\Drivers\Drivers.inc" Include "TftLib\Drivers\ILI9486.inc" Include "TftLib\System\System.inc" Include "TftLib\System\System_PAR_V2.inc" Include "TftLib\Shapes\Shapes.inc" Include "TftLib\Shapes\Shapes_PAR_V1.inc" '================ SD CARD =================== $define SDCardUsed 0 '================ MEMORY ==================== $define MemoryType 0 '================ TFT TOUCH ================= $define TOUCH_IC 0 '================ SPRITES =================== $define SpritesUsed 0 '=============== SND FONT =================== $define FontSNDUsed 1 Include "TftLib\Fonts\SND\F0_SND_8x8_Basic.inc" Include "TftLib\Fonts\SND\F4_SND_16x16_Regular.inc" $define FontSmooth 1 $define FontMaxSpace 8 $define FontMaxPixels 8 Include "TftLib\Fonts\SND.inc" Include "TftLib\Fonts\SND_PAR_V1.inc" '=============== BDF FONT =================== $define FontBDFUsed 1 Include "TftLib\Fonts\BDF\F2_BDF_Margarine-Regular-24.inc" Include "TftLib\Fonts\BDF.inc" Include "TftLib\Fonts\BDF_PAR_V1.inc" Dim bCounter1 As Byte Dim wTemp As Word Dim fVoltage As Float Dim fCurrent As Float Dim fVoltageNeedle As Float Dim wCurrentSlideX As Word Dim fCurrentScale As Float Main: Clear SetCrystal() SetPins() TftSetUp(0,0) SetScreen()
fCurrentScale = 2 / 175 wCurrentSlideX = 260 fVoltageNeedle = 1
'Seed random value Seed $0123
While 1 = 1 fCurrent = (Random / 32768) fVoltage = (Random / 655) PrintCurrent() PrintVoltage() DelayMS 250 Wend End Proc PrintCurrent() TftRectangleTCG(260,57, 304,73, WHITE,GREEN, 0) TftRectangleTCG(305,57, 349,73, GREEN,YELLOW, 0) TftRectangleTCG(350,57, 435,73, YELLOW,RED, 0) TftRectangleSNCP(wCurrentSlideX,54, 4, 4, GLAUCOUS) TftRectangleSNCP(wCurrentSlideX,76, 4, 4, GLAUCOUS)
wCurrentSlideX = 260 + fRound(fCurrent / fCurrentScale) TftRectangleSNCP(wCurrentSlideX,54, 4, 4, BLACK) TftRectangleSNCP(wCurrentSlideX,76, 4, 4, BLACK) TftLineVN(wCurrentSlideX,54,76,BLACK) TftPrintSndDecimal(fCurrent, 1, 2, 2, 284, 16, 0, BLACK, LIBERTY, 0) EndProc Proc PrintVoltage() TftArcRL(60,230, 420,230, 400,0, SKY_BLUE, -33, -100, fVoltageNeedle) fVoltageNeedle = 1 - fVoltage / 100 TftArcRL(60,230, 420,230, 400,0, BLACK, -33, -100, fVoltageNeedle) fVoltage = fVoltage / 23.81 TftPrintSndDecimal(fVoltage, 1, 2, 3, 37, 27, 0, BLACK, SKY_BLUE, 0) EndProc Proc SetScreen() TftResetScreen(BLACK) TftSetSndFont(2,1) TftPrintSndString("Booting ... Please wait!", 1, 55, 130, 0, WHITE, BLACK, 0) DelayMS 2000 'Display off TftDisplayOff()
'Reset screen TftRectangleTCG(0,0, 479,319, CREAM,CITRINE, 1)
'Outside frame TftRectangleETTCI(0,0, 479,319,ONYX, 5) TftRectangleRC(0,0, 479,319, 20, 0,ONYX, 5,-1)
'Scale window TftRectangleRC(30,100, 450,310, 30, 1,SKY_BLUE, 0,0) TftRectangleRC(30,100, 450,310, 30, 0,GLAUCOUS, 5,-1)
'5 zone scale For bCounter1 = 0 To 30 TftArcS(60,230, 420,230, 400,0, RED, 0, 0.2, -bCounter1) Next For bCounter1 = 0 To 30 TftArcS(60,230, 420,230, 400,0, ORANGE, 0.2, 0.4, -bCounter1) Next For bCounter1 = 0 To 30 TftArcS(60,230, 420,230, 400,0, YELLOW, 0.4, 0.6, -bCounter1) Next For bCounter1 = 0 To 30 TftArcS(60,230, 420,230, 400,0, GREEN, 0.6, 0.8, -bCounter1) Next For bCounter1 = 0 To 30 TftArcS(60,230, 420,230, 400,0, WHITE, 0.8, 1, -bCounter1) Next
'Scale frame TftArcRLThickness(1) TftArcS(60,230, 420,230, 400,0, BLACK, 0, 1, 0) TftArcS(60,230, 420,230, 400,0, BLACK, 0, 1, -30) TftArcRL(60,230, 420,230, 400,0, BLACK, 0, -30, 0) TftArcRL(60,230, 420,230, 400,0, BLACK, 0, -30, 1)
'Scale major dividers For bCounter1 = 1 To 4 wTemp = bCounter1 * 2 TftArcRL(60,230, 420,230, 400,0, BLACK, -5, -30, wTemp / 10) Next
'Minor dividers For bCounter1 = 1 To 24 wTemp = bCounter1 * 4 TftArcRL(60,230, 420,230, 400,0, BLACK, -15, -30, wTemp / 100) Next
'Labels TftSetBdfFont(2) TftPrintBdfString("MIN", 48, 250, 480, 0, WARM_BLACK, WHITE, 1) TftPrintBdfString("20%", 110, 270, 480, 0, WARM_BLACK, WHITE, 1) TftPrintBdfString("40%", 186, 280, 480, 0, WARM_BLACK, WHITE, 1) TftPrintBdfString("60%", 264, 280, 480, 0, WARM_BLACK, WHITE, 1) TftPrintBdfString("80%", 340, 270, 480, 0, WARM_BLACK, WHITE, 1) TftPrintBdfString("MAX", 390, 250, 480, 0, WARM_BLACK, WHITE, 1)
'Needle set TftArcRLThickness(3) 'Needle window For bCounter1 = 0 To 30 TftArcS(60,230, 420,230, 400,0, ISABELLINE, 0, 1, -103 - bCounter1) Next TftRectangleTCG(106,106, 374,138, ICEBERG, ISABELLINE, 1) TftRectangleSNTC(160,138, 314,150, ISABELLINE) TftSetSndFont(0,1) TftPrintSndString("Battery Voltage 4.2v", 1, 160, 126, 0, BLACK, WHITE, 1)
'Readings window TftRectangleRC(30,10, 235,94, 10, 1,SKY_BLUE, 0,0) TftRectangleRC(30,10, 235,94, 10, 0,GLAUCOUS, 5,-1)
TftSetSndFont(4,1) TftPrintSndDecimal(fVoltage, 1, 2, 3, 37, 27, 0, BLACK, SKY_BLUE, 0)
'Current readings TftRectangleRC(245,10, 450,94, 10, 1,LIBERTY, 0,0) TftRectangleRC(245,10, 450,94, 10, 0,GLAUCOUS, 5,-1) TftSetSndFont(0,1) TftPrintSndString("Battery Current 2A", 1, 276, 80, 0, BLACK, WHITE, 1) TftRectangleETTCO(260,57, 435,73, GLAUCOUS,5) TftRectangleTCG(260,57, 304,73, WHITE,GREEN, 0) TftRectangleTCG(305,57, 349,73, GREEN,YELLOW, 0) TftRectangleTCG(350,57, 435,73, YELLOW,RED, 0) TftSetSndFont(4,1) TftPrintSndDecimal(fCurrent, 1, 2, 2, 284, 16, 0, BLACK, LIBERTY, 0)
'Display on TftDisplayOn() EndProc 'Set Fosc Proc SetCrystal() Clear 'Crystal = 16 MHz --> PLLDIV = 68 for 140MHz / PLLDIV = 73 For 150MHz CLKDIV = %0000000000000010 'PLLPRE = 2 ; PLLPOST = 0 PLLFBD.Byte0 = 73 '--> 150MHz Fp 'Wait for oscillator PLL lock While OSCCON.5 = 0 : Wend DelayMS 100 EndProc Proc SetPins() 'Set all digital ANSELA = 0 ANSELB = 0 ANSELC = 0 EndProc Config FICD = ICS_PGD1, JTAGEN_OFF Config FPOR = ALTI2C1_OFF, ALTI2C2_OFF, WDTWIN_WIN25 Config FWDT = FWDTEN_OFF, PLLKEN_ON, WDTPOST_PS16384, WDTPRE_PR128, WINDIS_OFF Config FOSC = FCKSM_CSECMD, IOL1WAY_OFF, OSCIOFNC_OFF, POSCMD_HS Config FOSCSEL = FNOSC_PRIPLL, IESO_ON, PWMLOCK_OFF Config FGS = GCP_OFF, GWRP_OFF |
Created with the Personal Edition of HelpNDoc: Make your documentation accessible on any device with HelpNDoc