|
|
- /* --COPYRIGHT--,BSD
- * Copyright (c) 2013, Texas Instruments Incorporated
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * * Neither the name of Texas Instruments Incorporated nor the names of
- * its contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
- * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- * --/COPYRIGHT--*/
-
- #include "msp430g2553.h"
- #include "grlib.h"
- #include "Sharp96x96.h"
- #include "HAL_MSP-EXP430G2_Sharp96x96.h"
-
-
- // Function Prototypes
- void clockInit(void);
- void boardInit(void);
- void timerInit(void);
- void flashInit(void);
- void timerInit(void);
- void Delay_long(void);
- void Delay_short(void);
-
-
- // Global variables
- tContext g_sContext;
- tRectangle g_sRect;
- const tRectangle myRectangle1 = { 5, 15, 65, 45};
- const tRectangle myRectangle2 = { 10, 40, 90, 90};
- const tRectangle myRectangleOption1 = { 5, 15, 11, 21};
- const tRectangle myRectangleOption2 = { 5, 25, 11, 31};
- const tRectangle myRectangleOption3 = { 5, 35, 11, 41};
- const tRectangle myRectangleOption4 = { 5, 45, 11, 51};
- const tRectangle myRectangleOption5 = { 5, 55, 11, 61};
- const tRectangle myRectangleFrame = { 10, 40, 90, 60};
- tRectangle myRectangleProgress = { 10, 40, 30, 60};
-
-
- void main(void)
- {
- // Stop WDT
- WDTCTL = WDTPW + WDTHOLD;
-
- // Initialize the boards
- boardInit();
- clockInit();
- timerInit();
- flashInit();
-
- __bis_SR_register(GIE);
-
- // Set up the LCD
- LCDInit();
- GrContextInit(&g_sContext, &g_sharp96x96LCD);
- GrContextForegroundSet(&g_sContext, ClrBlack);
- GrContextBackgroundSet(&g_sContext, ClrWhite);
- GrContextFontSet(&g_sContext, &g_sFontFixed6x8);
- GrClearDisplay(&g_sContext);
- GrFlush(&g_sContext);
-
- // Intro Screen
- GrStringDrawCentered(&g_sContext,
- "How to use",
- AUTO_STRING_LENGTH,
- 48,
- 15,
- TRANSPARENT_TEXT);
- GrStringDrawCentered(&g_sContext,
- "the MSP430",
- AUTO_STRING_LENGTH,
- 48,
- 35,
- TRANSPARENT_TEXT);
- GrStringDraw(&g_sContext,
- "Graphics Library",
- AUTO_STRING_LENGTH,
- 1,
- 51,
- TRANSPARENT_TEXT);
- GrStringDrawCentered(&g_sContext,
- "Primitives",
- AUTO_STRING_LENGTH,
- 48,
- 75,
- TRANSPARENT_TEXT);
- GrFlush(&g_sContext);
- Delay_long();
- GrClearDisplay(&g_sContext);
-
- // Draw pixels and lines on the display
- GrStringDrawCentered(&g_sContext,
- "Draw Pixels",
- AUTO_STRING_LENGTH,
- 48,
- 5,
- TRANSPARENT_TEXT);
- GrStringDrawCentered(&g_sContext,
- "& Lines",
- AUTO_STRING_LENGTH,
- 48,
- 15,
- TRANSPARENT_TEXT);
- GrPixelDraw(&g_sContext, 30, 30);
- GrPixelDraw(&g_sContext, 30, 32);
- GrPixelDraw(&g_sContext, 32, 32);
- GrPixelDraw(&g_sContext, 32, 30);
- GrLineDraw(&g_sContext, 35, 35, 90, 90);
- GrLineDraw(&g_sContext, 5, 80, 80, 20);
- GrLineDraw(&g_sContext,
- 0,
- GrContextDpyHeightGet(&g_sContext) - 1,
- GrContextDpyWidthGet(&g_sContext) - 1,
- GrContextDpyHeightGet(&g_sContext) - 1);
- GrFlush(&g_sContext);
- Delay_long();
- GrClearDisplay(&g_sContext);
-
- // Draw circles on the display
- GrStringDraw(&g_sContext,
- "Draw Circles",
- AUTO_STRING_LENGTH,
- 10,
- 5,
- TRANSPARENT_TEXT);
- GrCircleDraw(&g_sContext, 30, 70, 20);
- GrCircleFill(&g_sContext, 60, 50, 30);
- GrFlush(&g_sContext);
- Delay_long();
- GrClearDisplay(&g_sContext);
-
- // Draw rectangles on the display
- GrStringDrawCentered(&g_sContext,
- "Draw Rectangles",
- AUTO_STRING_LENGTH,
- 48,
- 5,
- TRANSPARENT_TEXT);
- GrRectDraw(&g_sContext, &myRectangle1);
- GrRectFill(&g_sContext, &myRectangle2);
- GrFlush(&g_sContext);
- Delay_long();
- GrClearDisplay(&g_sContext);
-
- // Combining Primitive screen
- GrStringDrawCentered(&g_sContext,
- "Combining",
- AUTO_STRING_LENGTH,
- 48,
- 15,
- TRANSPARENT_TEXT);
- GrStringDrawCentered(&g_sContext,
- "Primitives to",
- AUTO_STRING_LENGTH,
- 48,
- 35,
- TRANSPARENT_TEXT);
- GrStringDrawCentered(&g_sContext,
- "create menus",
- AUTO_STRING_LENGTH,
- 48,
- 51,
- TRANSPARENT_TEXT);
- GrStringDrawCentered(&g_sContext,
- "and animations",
- AUTO_STRING_LENGTH,
- 48,
- 75,
- TRANSPARENT_TEXT);
- GrFlush(&g_sContext);
- Delay_long();
- GrClearDisplay(&g_sContext);
-
- // Draw a Menu screen
- GrStringDrawCentered(&g_sContext,
- "Create a Menu",
- AUTO_STRING_LENGTH,
- 48,
- 5,
- TRANSPARENT_TEXT);
- GrRectDraw(&g_sContext, &myRectangleOption1);
- GrStringDraw(&g_sContext,"Option #1", 10,15,15,TRANSPARENT_TEXT);
- GrRectFill(&g_sContext, &myRectangleOption2);
- GrStringDraw(&g_sContext,"Option #2", 10,15,25,TRANSPARENT_TEXT);
- GrRectDraw(&g_sContext, &myRectangleOption3);
- GrStringDraw(&g_sContext,"Option #3", 10,15,35,TRANSPARENT_TEXT);
- GrRectDraw(&g_sContext, &myRectangleOption4);
- GrStringDraw(&g_sContext,"Option #4", 10,15,45,TRANSPARENT_TEXT);
- GrRectDraw(&g_sContext, &myRectangleOption5);
- GrStringDraw(&g_sContext,"Option #5", 10,15,55,TRANSPARENT_TEXT);
- GrFlush(&g_sContext);
- Delay_long();
- GrClearDisplay(&g_sContext);
-
- // Show progress bar screen
- // The following animation consist on displaying a progress bar and
- // updating the progress bar in increments of 25%.
- GrStringDrawCentered(&g_sContext,
- "Show progress",
- AUTO_STRING_LENGTH,
- 48,
- 5,
- TRANSPARENT_TEXT);
- GrRectDraw(&g_sContext, &myRectangleFrame);
- GrStringDrawCentered(&g_sContext,
- "Processing...",
- AUTO_STRING_LENGTH,
- 48,
- 75,
- TRANSPARENT_TEXT);
- GrFlush(&g_sContext);
- Delay_short();
-
- // Update display with 25 %. Initial value of "myRectangleProgress" are set
- // to update bar with a 25 % increment.
- GrRectFill(&g_sContext, &myRectangleProgress);
- GrFlush(&g_sContext);
- Delay_short();
-
- // Set myRectangleProgress values to update progress bar with 50 %
- myRectangleProgress.sXMin = 30;
- myRectangleProgress.sYMin = 40;
- myRectangleProgress.sXMax = 50;
- myRectangleProgress.sYMax = 60;
-
- GrRectFill(&g_sContext, &myRectangleProgress);
- GrFlush(&g_sContext);
- Delay_short();
-
- // Set myRectangleProgress values to update progress bar with 75 %
- myRectangleProgress.sXMin = 50;
- myRectangleProgress.sYMin = 40;
- myRectangleProgress.sXMax = 70;
- myRectangleProgress.sYMax = 60;
-
- GrRectFill(&g_sContext, &myRectangleProgress);
- GrFlush(&g_sContext);
- Delay_short();
-
- // Set myRectangleProgress values to update progress bar with 100 %
- myRectangleProgress.sXMin = 70;
- myRectangleProgress.sYMin = 40;
- myRectangleProgress.sXMax = 90;
- myRectangleProgress.sYMax = 60;
- GrRectFill(&g_sContext, &myRectangleProgress);
-
- GrStringDrawCentered(&g_sContext,
- "DONE!",
- AUTO_STRING_LENGTH,
- 48,
- 85,
- TRANSPARENT_TEXT);
- GrFlush(&g_sContext);
- Delay_long();
-
-
-
- while(1);
-
- }
-
- void clockInit(void)
- {
- // Set DCO frequency at 8MHz
- // ACLK = VLO/1
- // SMCLK= DCO/1
- // MCLK = DCO/1
- // If calibration constant erased
- if (CALBC1_8MHZ==0xFF)
- {
- // do not load, trap CPU!!
- while(1);
- }
- DCOCTL = 0;
- BCSCTL1 = CALBC1_8MHZ;
- DCOCTL = CALDCO_8MHZ;
- BCSCTL3 |= LFXT1S_2;
- }
-
- void boardInit()
- {
- // Set all port as outputs and drive pins low
- P1OUT = 0;
- P2OUT = 0;
- P1DIR = 0xFF;
- P2DIR = 0xFF;
- }
-
- void flashInit()
- {
- // Configure flash memory timing
- // MCLK/18 for Flash Timing Generator
- // 8MHz/(16+1+1) = 444.44 KHz
- FCTL2 = FWKEY + FSSEL0 + FN4 + FN0;
-
- }
-
- void timerInit()
- {
- TA0CTL = TASSEL_2 +ID_3+ MC_1+ TAIE +TACLR;
- TA0CCTL0 |= CCIE;
- TA0CCR0 = 32000-1;
- }
-
-
- void Delay_long()
- {
- __delay_cycles(SYSTEM_CLOCK_SPEED * 4);
- }
-
-
- void Delay_short()
- {
- __delay_cycles(SYSTEM_CLOCK_SPEED * 0.25);
- }
-
-
-
- #pragma vector=TIMER0_A0_VECTOR
- __interrupt void TIMER0_A0_ISR(void)
- {
- Sharp96x96_SendToggleVCOMCommand();
- TA0CCR0 += 32000-1;
- TA0CTL &= ~TAIFG;
-
- }
|