mesh phone

Dependencies:   RF22 mbed

Committer:
SangSTBK
Date:
Mon Jul 02 03:41:36 2012 +0000
Revision:
0:c674504a6536
mesh

Who changed what in which revision?

UserRevisionLine numberNew contents of line
SangSTBK 0:c674504a6536 1 /***********************************************************************************/
SangSTBK 0:c674504a6536 2 /***** Newhaven NHD-5.7-640480WF-CTXL# Display Driver **********/
SangSTBK 0:c674504a6536 3 /***** for mbed (www.mbed,org) NXP LPC1768 32 bit ARM MCU ******/
SangSTBK 0:c674504a6536 4 /********* Adapted by Andrew C. Russell, March 2011 ***********/
SangSTBK 0:c674504a6536 5
SangSTBK 0:c674504a6536 6 /************I hereby acknowledge and thank the following ******/
SangSTBK 0:c674504a6536 7 /***software authors whose code I have adapted and/or adopted***/
SangSTBK 0:c674504a6536 8 /*******************to create these drivers:- ******************/
SangSTBK 0:c674504a6536 9
SangSTBK 0:c674504a6536 10 //Curt Lagerstam - Newhaven Display International, LLC for the dispay initialization.
SangSTBK 0:c674504a6536 11 //James P Lynch - code adapted from his Nokia LCD display tutorial at
SangSTBK 0:c674504a6536 12 //http://www.sparkfun.com/tutorial/Nokia%206100%20LCD%20Display%20Driver.pdf
SangSTBK 0:c674504a6536 13 //Akifumi 'Tedd' Okano for assistance and adapting the .bmp display driver and writing
SangSTBK 0:c674504a6536 14 //the driver for the font display
SangSTBK 0:c674504a6536 15 /***********************************************************************************/
SangSTBK 0:c674504a6536 16
SangSTBK 0:c674504a6536 17 //#include "mbed.h"
SangSTBK 0:c674504a6536 18 //#include "font_1.h"
SangSTBK 0:c674504a6536 19 //#include "stdlib.h"
SangSTBK 0:c674504a6536 20 //#include "string.h"
SangSTBK 0:c674504a6536 21 //#include "math.h"
SangSTBK 0:c674504a6536 22 #include "font_new.h"
SangSTBK 0:c674504a6536 23 //#include "system_defines.h"
SangSTBK 0:c674504a6536 24
SangSTBK 0:c674504a6536 25 /***********************************************************************************/
SangSTBK 0:c674504a6536 26 /********************************** Colors *****************************************/
SangSTBK 0:c674504a6536 27 /********* taken directly from http://web.njit.edu/~kevin/rgb.txt.html**************/
SangSTBK 0:c674504a6536 28 #define BLACK 0x000000
SangSTBK 0:c674504a6536 29 #define WHITE 0xFFFFFF
SangSTBK 0:c674504a6536 30 #define BLACK 0x000000
SangSTBK 0:c674504a6536 31 #define RED 0xFF0000
SangSTBK 0:c674504a6536 32 #define GREEN 0x00FF00
SangSTBK 0:c674504a6536 33 #define LGREEN 0xCCFF00 //light green
SangSTBK 0:c674504a6536 34 #define BLUE 0x0000FF
SangSTBK 0:c674504a6536 35 #define GREY 0xBEBEBE
SangSTBK 0:c674504a6536 36 #define DEEPINK 0xFF1493
SangSTBK 0:c674504a6536 37 #define YELLOW 0xFFFF00
SangSTBK 0:c674504a6536 38 #define LORANGE 0xFFFF00 //light orange
SangSTBK 0:c674504a6536 39 #define DORANGE 0xFF9900 //dark orange
SangSTBK 0:c674504a6536 40 #define OLIVE 0x999900
SangSTBK 0:c674504a6536 41
SangSTBK 0:c674504a6536 42 #define PASET 0x2B
SangSTBK 0:c674504a6536 43 #define CASET 0x2A
SangSTBK 0:c674504a6536 44 #define DISON 0x29
SangSTBK 0:c674504a6536 45 #define DISOFF 0x28
SangSTBK 0:c674504a6536 46 #define DEEPSLEEP 0xE5
SangSTBK 0:c674504a6536 47 #define RAMWR 0x2C
SangSTBK 0:c674504a6536 48 #define RAMCT 0x3C
SangSTBK 0:c674504a6536 49 #define RESET 0x01
SangSTBK 0:c674504a6536 50 #define DISINV 0x21
SangSTBK 0:c674504a6536 51 #define DISNOR 0x20
SangSTBK 0:c674504a6536 52 #define NOP 0x00
SangSTBK 0:c674504a6536 53 #define XMAX 320 // x axis max pixels
SangSTBK 0:c674504a6536 54 #define YMAX 240 // y axis max pixels
SangSTBK 0:c674504a6536 55 #define TRUE 1
SangSTBK 0:c674504a6536 56 #define SPAN 460 //this is for the slider bar
SangSTBK 0:c674504a6536 57 #define ZERO 100
SangSTBK 0:c674504a6536 58 #define PI 3.14159265
SangSTBK 0:c674504a6536 59
SangSTBK 0:c674504a6536 60 // Font sizes
SangSTBK 0:c674504a6536 61 #define SMALL 0
SangSTBK 0:c674504a6536 62 #define MEDIUM 1
SangSTBK 0:c674504a6536 63 #define LARGE 2
SangSTBK 0:c674504a6536 64 #define LARGE1 3
SangSTBK 0:c674504a6536 65 /********************************************************************/
SangSTBK 0:c674504a6536 66 #ifdef TEST
SangSTBK 0:c674504a6536 67 extern unsigned char screen[ SC_WIDTH * SC_HEIGHT ] = { '.' };
SangSTBK 0:c674504a6536 68 #endif
SangSTBK 0:c674504a6536 69 /********************************************************************/
SangSTBK 0:c674504a6536 70 //unsigned char FONT6x8[97][8];
SangSTBK 0:c674504a6536 71 //unsigned char FONT8x8[97][8];
SangSTBK 0:c674504a6536 72 //unsigned char FONT8x16[97][8];
SangSTBK 0:c674504a6536 73 /************ here the XY reference locations for the buttons ************/
SangSTBK 0:c674504a6536 74 int righttbutinc=80;
SangSTBK 0:c674504a6536 75 int xref2=590; //right hand side button x reference
SangSTBK 0:c674504a6536 76 int xref1=16; //left hand side button x reference
SangSTBK 0:c674504a6536 77 int leftbutinc=76; //y axis increment for the left hand side buttons
SangSTBK 0:c674504a6536 78 int yref1=70;
SangSTBK 0:c674504a6536 79 int xbutsize1=60; // x size of button
SangSTBK 0:c674504a6536 80 int ybutsize1=50; // y size of button
SangSTBK 0:c674504a6536 81 /************************************************************************/
SangSTBK 0:c674504a6536 82 unsigned char command;
SangSTBK 0:c674504a6536 83 unsigned char data1;
SangSTBK 0:c674504a6536 84 int DOWN;
SangSTBK 0:c674504a6536 85 int RIGHT;
SangSTBK 0:c674504a6536 86 int color;
SangSTBK 0:c674504a6536 87 unsigned int fill;
SangSTBK 0:c674504a6536 88 unsigned int radius;
SangSTBK 0:c674504a6536 89 int z;
SangSTBK 0:c674504a6536 90 int color1;
SangSTBK 0:c674504a6536 91 int color2;
SangSTBK 0:c674504a6536 92 unsigned int volume;
SangSTBK 0:c674504a6536 93 //float slider;
SangSTBK 0:c674504a6536 94 //float vol;
SangSTBK 0:c674504a6536 95
SangSTBK 0:c674504a6536 96 /**************************** forward references *******************************/
SangSTBK 0:c674504a6536 97 void LCDSetXY(int x, int y);
SangSTBK 0:c674504a6536 98 void LCDClearScreen(void);
SangSTBK 0:c674504a6536 99 void LCDSetPixel(int x, int y, int color);
SangSTBK 0:c674504a6536 100 void LCDSetLine(int x1, int y1, int x2, int y2, int color);
SangSTBK 0:c674504a6536 101 void LCDSetRect(int x0, int y0, int x1, int y1, int fill, int color);
SangSTBK 0:c674504a6536 102 void LCDSetCircle(int x0, int y0, int radius, int color);
SangSTBK 0:c674504a6536 103 void LCDPutChar(char c, int x, int y, int size, int fcolor, int bcolor);
SangSTBK 0:c674504a6536 104 void LCDPutString (char *lcd_string, const char *font_style, unsigned char x, unsigned char y,
SangSTBK 0:c674504a6536 105 unsigned char fcolor, unsigned char bcolor);
SangSTBK 0:c674504a6536 106 void trigcircle (int xtc, int ytc, int radius, int color);
SangSTBK 0:c674504a6536 107 void show_screen( int xs, int width, int ys, int height );
SangSTBK 0:c674504a6536 108 void volume_slider (int volume);
SangSTBK 0:c674504a6536 109 void mute (unsigned int onoff);
SangSTBK 0:c674504a6536 110 //************************************************************************************
SangSTBK 0:c674504a6536 111
SangSTBK 0:c674504a6536 112 void Write_Command(unsigned char command) {
SangSTBK 0:c674504a6536 113
SangSTBK 0:c674504a6536 114 nRD = 1;
SangSTBK 0:c674504a6536 115 DC = 0;
SangSTBK 0:c674504a6536 116 DB.write(command);
SangSTBK 0:c674504a6536 117 CS = 0;
SangSTBK 0:c674504a6536 118 nWR = 0;
SangSTBK 0:c674504a6536 119 CS = 1;
SangSTBK 0:c674504a6536 120 nWR = 1;
SangSTBK 0:c674504a6536 121 }
SangSTBK 0:c674504a6536 122 //;******************************************************************************
SangSTBK 0:c674504a6536 123 //void Write_Data(unsigned char data1) {
SangSTBK 0:c674504a6536 124 //;******************************************************************************
SangSTBK 0:c674504a6536 125 void Write_Data(unsigned char data1) {
SangSTBK 0:c674504a6536 126
SangSTBK 0:c674504a6536 127 nRD = 1;
SangSTBK 0:c674504a6536 128 DC=1;
SangSTBK 0:c674504a6536 129 DB.write(data1);
SangSTBK 0:c674504a6536 130 nWR = 0;
SangSTBK 0:c674504a6536 131 CS = 0;
SangSTBK 0:c674504a6536 132 CS = 1;
SangSTBK 0:c674504a6536 133 nWR = 1;
SangSTBK 0:c674504a6536 134 }
SangSTBK 0:c674504a6536 135 //====================================================
SangSTBK 0:c674504a6536 136 void Command_Write(unsigned char REG,unsigned char VALUE) {
SangSTBK 0:c674504a6536 137 Write_Command(REG);
SangSTBK 0:c674504a6536 138 Write_Data(VALUE);
SangSTBK 0:c674504a6536 139 }
SangSTBK 0:c674504a6536 140 //======================================================
SangSTBK 0:c674504a6536 141 void SendData(unsigned long color) {
SangSTBK 0:c674504a6536 142 Write_Data((color)>>16); //red
SangSTBK 0:c674504a6536 143 Write_Data((color)>>8); //green
SangSTBK 0:c674504a6536 144 Write_Data(color); //blue
SangSTBK 0:c674504a6536 145 }
SangSTBK 0:c674504a6536 146 /********************************************************************************/
SangSTBK 0:c674504a6536 147 // initialize the SSD1963 controller
SangSTBK 0:c674504a6536 148 void Init_SSD1963 (void) {
SangSTBK 0:c674504a6536 149 //RESET = 0;
SangSTBK 0:c674504a6536 150 wait_ms(5);
SangSTBK 0:c674504a6536 151 //RESET = 1;
SangSTBK 0:c674504a6536 152 //myled-!myled;
SangSTBK 0:c674504a6536 153 DOWN = 0;
SangSTBK 0:c674504a6536 154 RIGHT = 1;
SangSTBK 0:c674504a6536 155 wait_ms(10);
SangSTBK 0:c674504a6536 156 Write_Command(0x01); //Software Reset
SangSTBK 0:c674504a6536 157 wait_ms(10);
SangSTBK 0:c674504a6536 158 Write_Command(0x01); //Software Reset
SangSTBK 0:c674504a6536 159 wait_ms(10);
SangSTBK 0:c674504a6536 160 Write_Command(0x01); //Software Reset
SangSTBK 0:c674504a6536 161 wait_ms(10);
SangSTBK 0:c674504a6536 162 Command_Write(0xe0,0x01); //START PLL
SangSTBK 0:c674504a6536 163 wait_us(1);
SangSTBK 0:c674504a6536 164 Command_Write(0xe0,0x03); //LOCK PLL
SangSTBK 0:c674504a6536 165 Write_Command(0xb0); //SET LCD MODE SET TFT 24Bits MODE
SangSTBK 0:c674504a6536 166 Write_Data(0x0c); //SET TFT MODE & hsync+Vsync+DEN MODE
SangSTBK 0:c674504a6536 167 Write_Data(0x80); //SET TFT MODE & hsync+Vsync+DEN MODE
SangSTBK 0:c674504a6536 168 Write_Data(0x01); //SET horizontal size=320-1 HightByte
SangSTBK 0:c674504a6536 169 Write_Data(0x3f); //SET horizontal size=320-1 LowByte
SangSTBK 0:c674504a6536 170 Write_Data(0x00); //SET vertical size=240-1 HightByte
SangSTBK 0:c674504a6536 171 Write_Data(0xEF); //SET vertical size=240-1 LowByte
SangSTBK 0:c674504a6536 172 Write_Data(0x00); //SET even/odd line RGB seq.=RGB
SangSTBK 0:c674504a6536 173 Command_Write(0xf0,0x00); //SET pixel data I/F format=8bit
SangSTBK 0:c674504a6536 174 Command_Write(0x3a,0x60); // SET R G B format = 8 8 8
SangSTBK 0:c674504a6536 175 Write_Command(0xe6); //SET PCLK freq=4.94MHz ; pixel clock frequency
SangSTBK 0:c674504a6536 176 Write_Data(0x0a);
SangSTBK 0:c674504a6536 177 Write_Data(0x3d);
SangSTBK 0:c674504a6536 178 Write_Data(0x70);
SangSTBK 0:c674504a6536 179 Write_Command(0xb4); //SET HBP,
SangSTBK 0:c674504a6536 180 Write_Data(0x01); //SET HSYNC Total=320
SangSTBK 0:c674504a6536 181 Write_Data(0xb8);
SangSTBK 0:c674504a6536 182 Write_Data(0x00); //SET HBP 68
SangSTBK 0:c674504a6536 183 Write_Data(0x46);
SangSTBK 0:c674504a6536 184 Write_Data(0x0f); //SET VBP 16=15+1
SangSTBK 0:c674504a6536 185 Write_Data(0x00); //SET Hsync pulse start position
SangSTBK 0:c674504a6536 186 Write_Data(0x00);
SangSTBK 0:c674504a6536 187 Write_Data(0x00); //SET Hsync pulse subpixel start position
SangSTBK 0:c674504a6536 188 Write_Command(0xb6); //SET VBP,
SangSTBK 0:c674504a6536 189 Write_Data(0x01); //SET Vsync total=240
SangSTBK 0:c674504a6536 190 Write_Data(0x48);
SangSTBK 0:c674504a6536 191 Write_Data(0x00); //SET VBP=19
SangSTBK 0:c674504a6536 192 Write_Data(0x0b);
SangSTBK 0:c674504a6536 193 Write_Data(0x07); //SET Vsync pulse 8=7+1
SangSTBK 0:c674504a6536 194 Write_Data(0x00); //SET Vsync pulse start position
SangSTBK 0:c674504a6536 195 Write_Data(0x00);
SangSTBK 0:c674504a6536 196 Write_Command(0x2a); //SET column address
SangSTBK 0:c674504a6536 197 Write_Data(0x00); //SET start column address=0
SangSTBK 0:c674504a6536 198 Write_Data(0x00);
SangSTBK 0:c674504a6536 199 Write_Data(0x01); //SET end column address=319
SangSTBK 0:c674504a6536 200 Write_Data(0x3f);
SangSTBK 0:c674504a6536 201 Write_Command(0x2b); //SET page address
SangSTBK 0:c674504a6536 202 Write_Data(0x00); //SET start page address=0
SangSTBK 0:c674504a6536 203 Write_Data(0x00);
SangSTBK 0:c674504a6536 204 Write_Data(0x00); //SET end page address=239
SangSTBK 0:c674504a6536 205 Write_Data(0xef);
SangSTBK 0:c674504a6536 206 Write_Command(0x13);
SangSTBK 0:c674504a6536 207 Write_Command(0x29); //SET display on
SangSTBK 0:c674504a6536 208 }
SangSTBK 0:c674504a6536 209
SangSTBK 0:c674504a6536 210
SangSTBK 0:c674504a6536 211 /********************************************************************************/
SangSTBK 0:c674504a6536 212 void WindowSet( int s_x,int e_x,int s_y,int e_y) {
SangSTBK 0:c674504a6536 213 Write_Command(CASET); //SET page address
SangSTBK 0:c674504a6536 214 Write_Data((s_x)>>8); //SET start page address=0
SangSTBK 0:c674504a6536 215 Write_Data(s_x);
SangSTBK 0:c674504a6536 216 Write_Data((e_x)>>8); //SET end page address=639
SangSTBK 0:c674504a6536 217 Write_Data(e_x);
SangSTBK 0:c674504a6536 218 Write_Command(PASET); //SET column address
SangSTBK 0:c674504a6536 219 Write_Data((s_y)>>8); //SET start column address=0
SangSTBK 0:c674504a6536 220 Write_Data(s_y);
SangSTBK 0:c674504a6536 221 Write_Data((e_y)>>8); //SET end column address=479
SangSTBK 0:c674504a6536 222 Write_Data(e_y);
SangSTBK 0:c674504a6536 223 }
SangSTBK 0:c674504a6536 224 /***************************************************************************/
SangSTBK 0:c674504a6536 225 /* this routine locates the screen pointer at position XY in the frame buffer */
SangSTBK 0:c674504a6536 226 void LCDSetXY(int x, int y) {
SangSTBK 0:c674504a6536 227 Write_Command(CASET); //SET page address
SangSTBK 0:c674504a6536 228 Write_Data((x)>>8); //SET start page address=0
SangSTBK 0:c674504a6536 229 Write_Data(x);
SangSTBK 0:c674504a6536 230 Write_Data((XMAX)>>8); //SET end page address=XMAX
SangSTBK 0:c674504a6536 231 Write_Data(XMAX);
SangSTBK 0:c674504a6536 232 Write_Command(PASET); //SET column address
SangSTBK 0:c674504a6536 233 Write_Data((y)>>8); //SET start column address=0
SangSTBK 0:c674504a6536 234 Write_Data(y);
SangSTBK 0:c674504a6536 235 Write_Data((YMAX)>>8); //SET end column address=YMAX
SangSTBK 0:c674504a6536 236 Write_Data(YMAX);
SangSTBK 0:c674504a6536 237 Write_Command(RAMWR); //ready to now start writing the data
SangSTBK 0:c674504a6536 238 //when returnung to the caller
SangSTBK 0:c674504a6536 239 }
SangSTBK 0:c674504a6536 240
SangSTBK 0:c674504a6536 241
SangSTBK 0:c674504a6536 242 /********************************************************************************/
SangSTBK 0:c674504a6536 243 void clear_to_color(int color) {
SangSTBK 0:c674504a6536 244 int m,n;
SangSTBK 0:c674504a6536 245 WindowSet(0,320,0,240); // 0-640 wide by 0-480 high
SangSTBK 0:c674504a6536 246 Write_Command(RAMWR);
SangSTBK 0:c674504a6536 247 for (m=0; m<241; m++) {
SangSTBK 0:c674504a6536 248 for (n=0; n<320; n++) {
SangSTBK 0:c674504a6536 249 SendData(color);
SangSTBK 0:c674504a6536 250 }
SangSTBK 0:c674504a6536 251 }
SangSTBK 0:c674504a6536 252
SangSTBK 0:c674504a6536 253 }
SangSTBK 0:c674504a6536 254 /**********************************************************************************/
SangSTBK 0:c674504a6536 255 /********** this routine lights up a single pixel to a specific colour ***********/
SangSTBK 0:c674504a6536 256 void LCDSetPixel(int x,int y, int color) {
SangSTBK 0:c674504a6536 257 Write_Command(CASET); //SET page address
SangSTBK 0:c674504a6536 258 Write_Data((x)>>8); //SET start page address=0
SangSTBK 0:c674504a6536 259 Write_Data(x);
SangSTBK 0:c674504a6536 260 Write_Data((XMAX)>>8); //SET end page address=XMAX
SangSTBK 0:c674504a6536 261 Write_Data(XMAX);
SangSTBK 0:c674504a6536 262 Write_Command(PASET); //SET column address
SangSTBK 0:c674504a6536 263 Write_Data((y)>>8); //SET start column address=0
SangSTBK 0:c674504a6536 264 Write_Data(y);
SangSTBK 0:c674504a6536 265 Write_Data((YMAX)>>8); //SET end column address=YMAX
SangSTBK 0:c674504a6536 266 Write_Data(YMAX);
SangSTBK 0:c674504a6536 267 Write_Command(RAMWR); //ready to now start writing the data
SangSTBK 0:c674504a6536 268 //when returnung to the caller
SangSTBK 0:c674504a6536 269 SendData(color);
SangSTBK 0:c674504a6536 270 Write_Command(NOP);
SangSTBK 0:c674504a6536 271 }
SangSTBK 0:c674504a6536 272 /*********************************************************************************/
SangSTBK 0:c674504a6536 273 /************ This routine draws a line between 2 points on the screen ***********/
SangSTBK 0:c674504a6536 274 void LCDSetLine(int x0, int y0, int x1,int y1, int color) {
SangSTBK 0:c674504a6536 275 int dy = y1 - y0;
SangSTBK 0:c674504a6536 276 int dx = x1 - x0;
SangSTBK 0:c674504a6536 277 int stepx, stepy;
SangSTBK 0:c674504a6536 278 if (dy < 0) {
SangSTBK 0:c674504a6536 279 dy = -dy;
SangSTBK 0:c674504a6536 280 stepy = -1;
SangSTBK 0:c674504a6536 281 } else {
SangSTBK 0:c674504a6536 282 stepy = 1;
SangSTBK 0:c674504a6536 283 }
SangSTBK 0:c674504a6536 284 if (dx < 0) {
SangSTBK 0:c674504a6536 285 dx = -dx;
SangSTBK 0:c674504a6536 286 stepx = -1;
SangSTBK 0:c674504a6536 287 } else {
SangSTBK 0:c674504a6536 288 stepx = 1;
SangSTBK 0:c674504a6536 289 }
SangSTBK 0:c674504a6536 290 dy <<= 1; // dy is now 2*dy
SangSTBK 0:c674504a6536 291 dx <<= 1; // dx is now 2*dx
SangSTBK 0:c674504a6536 292 LCDSetPixel(x0, y0, color);
SangSTBK 0:c674504a6536 293 if (dx > dy) {
SangSTBK 0:c674504a6536 294 int fraction = dy - (dx >> 1); // same as 2*dy - dx
SangSTBK 0:c674504a6536 295 while (x0 != x1) {
SangSTBK 0:c674504a6536 296 if (fraction >= 0) {
SangSTBK 0:c674504a6536 297 y0 += stepy;
SangSTBK 0:c674504a6536 298 fraction -= dx; // same as fraction -= 2*dx
SangSTBK 0:c674504a6536 299 }
SangSTBK 0:c674504a6536 300 x0 += stepx;
SangSTBK 0:c674504a6536 301 fraction += dy; // same as fraction -= 2*dy
SangSTBK 0:c674504a6536 302 LCDSetPixel(x0, y0, color);
SangSTBK 0:c674504a6536 303 }
SangSTBK 0:c674504a6536 304 } else {
SangSTBK 0:c674504a6536 305 int fraction = dx - (dy >> 1);
SangSTBK 0:c674504a6536 306 while (y0 != y1) {
SangSTBK 0:c674504a6536 307 if (fraction >= 0) {
SangSTBK 0:c674504a6536 308 x0 += stepx;
SangSTBK 0:c674504a6536 309 fraction -= dy;
SangSTBK 0:c674504a6536 310 }
SangSTBK 0:c674504a6536 311 y0 += stepy;
SangSTBK 0:c674504a6536 312 fraction += dx;
SangSTBK 0:c674504a6536 313 LCDSetPixel(x0, y0, color);
SangSTBK 0:c674504a6536 314 }
SangSTBK 0:c674504a6536 315 }
SangSTBK 0:c674504a6536 316 }
SangSTBK 0:c674504a6536 317 /*******************************************************************************/
SangSTBK 0:c674504a6536 318 /************** draw a rectangle, filled or not filled *************************/
SangSTBK 0:c674504a6536 319 void LCDSetRect(int x0, int y0, int x1,int y1, int fill, int color) {
SangSTBK 0:c674504a6536 320 int xmin, xmax, ymin, ymax;
SangSTBK 0:c674504a6536 321 int i;
SangSTBK 0:c674504a6536 322 // check if the rectangle is to be filled
SangSTBK 0:c674504a6536 323 if (fill == TRUE) {
SangSTBK 0:c674504a6536 324 // calculate the min and max for x and y directions
SangSTBK 0:c674504a6536 325 xmin = (x0 <= x1) ? x0 : x1;
SangSTBK 0:c674504a6536 326 xmax = (x0 > x1) ? x0 : x1;
SangSTBK 0:c674504a6536 327 ymin = (y0 <= y1) ? y0 : y1;
SangSTBK 0:c674504a6536 328 ymax = (y0 > y1) ? y0 : y1;
SangSTBK 0:c674504a6536 329 Write_Command(CASET); //SET page address
SangSTBK 0:c674504a6536 330 Write_Data((x0)>>8); //SET start page address=0
SangSTBK 0:c674504a6536 331 Write_Data(x0);
SangSTBK 0:c674504a6536 332 Write_Data((x1)>>8); //SET end page address=XMAX
SangSTBK 0:c674504a6536 333 Write_Data(x1);
SangSTBK 0:c674504a6536 334 Write_Command(PASET); //SET column address
SangSTBK 0:c674504a6536 335 Write_Data((y0)>>8); //SET start column address=0
SangSTBK 0:c674504a6536 336 Write_Data(y0);
SangSTBK 0:c674504a6536 337 Write_Data((y1)>>8); //SET end column address=YMAX
SangSTBK 0:c674504a6536 338 Write_Data(y1);
SangSTBK 0:c674504a6536 339 Write_Command(RAMWR); //ready to now start writing the data
SangSTBK 0:c674504a6536 340 for (i = 0; i < ((((xmax - xmin + 1) * (ymax - ymin + 1))) + 1); i++) {
SangSTBK 0:c674504a6536 341 SendData(color);
SangSTBK 0:c674504a6536 342 }
SangSTBK 0:c674504a6536 343 } else {
SangSTBK 0:c674504a6536 344 LCDSetLine(x0, y0, x1, y0, color);
SangSTBK 0:c674504a6536 345 LCDSetLine(x0, y1, x1, y1, color);
SangSTBK 0:c674504a6536 346 LCDSetLine(x0, y0, x0, y1, color);
SangSTBK 0:c674504a6536 347 LCDSetLine(x1, y0, x1, y1, color);
SangSTBK 0:c674504a6536 348 }
SangSTBK 0:c674504a6536 349 }
SangSTBK 0:c674504a6536 350 /***************************************************************************/
SangSTBK 0:c674504a6536 351 void LCDSetCircle(int x0, int y0, int radius, int color) {
SangSTBK 0:c674504a6536 352 int f = 1 - radius;
SangSTBK 0:c674504a6536 353 int ddF_x = 0;
SangSTBK 0:c674504a6536 354 int ddF_y = -2 * radius;
SangSTBK 0:c674504a6536 355 int x = 0;
SangSTBK 0:c674504a6536 356 int y = radius;
SangSTBK 0:c674504a6536 357 LCDSetPixel(x0, y0 + radius, color);
SangSTBK 0:c674504a6536 358 LCDSetPixel(x0, y0 - radius, color);
SangSTBK 0:c674504a6536 359 LCDSetPixel(x0 + radius, y0, color);
SangSTBK 0:c674504a6536 360 LCDSetPixel(x0 - radius, y0, color);
SangSTBK 0:c674504a6536 361 while (x < y) {
SangSTBK 0:c674504a6536 362 if (f >= 0) {
SangSTBK 0:c674504a6536 363 y--;
SangSTBK 0:c674504a6536 364 ddF_y += 2;
SangSTBK 0:c674504a6536 365 f += ddF_y;
SangSTBK 0:c674504a6536 366 }
SangSTBK 0:c674504a6536 367 x++;
SangSTBK 0:c674504a6536 368 ddF_x += 2;
SangSTBK 0:c674504a6536 369 f += ddF_x + 1;
SangSTBK 0:c674504a6536 370 LCDSetPixel(x0 + x, y0 + y, color);
SangSTBK 0:c674504a6536 371 LCDSetPixel(x0 - x, y0 + y, color);
SangSTBK 0:c674504a6536 372 LCDSetPixel(x0 + x, y0 - y, color);
SangSTBK 0:c674504a6536 373 LCDSetPixel(x0 - x, y0 - y, color);
SangSTBK 0:c674504a6536 374 LCDSetPixel(x0 + y, y0 + x, color);
SangSTBK 0:c674504a6536 375 LCDSetPixel(x0 - y, y0 + x, color);
SangSTBK 0:c674504a6536 376 LCDSetPixel(x0 + y, y0 - x, color);
SangSTBK 0:c674504a6536 377 LCDSetPixel(x0 - y, y0 - x, color);
SangSTBK 0:c674504a6536 378 }
SangSTBK 0:c674504a6536 379 }
SangSTBK 0:c674504a6536 380 Serial pc(USBTX,USBRX);
SangSTBK 0:c674504a6536 381 /***************************************************************************/
SangSTBK 0:c674504a6536 382 /***************** this is the mini-font version ***************************/
SangSTBK 0:c674504a6536 383 void LCDPutChar(char c, int x, int y, int size, int fColor, int bColor) {
SangSTBK 0:c674504a6536 384 extern const unsigned char FONT6x8[97][8];
SangSTBK 0:c674504a6536 385 extern const unsigned char FONT8x8[97][8];
SangSTBK 0:c674504a6536 386 extern const unsigned char FONT8x16[97][16];
SangSTBK 0:c674504a6536 387 extern const unsigned char FONT24x59[1][177];
SangSTBK 0:c674504a6536 388
SangSTBK 0:c674504a6536 389 int i,j;
SangSTBK 0:c674504a6536 390 unsigned int nCols;
SangSTBK 0:c674504a6536 391 unsigned int nRows;
SangSTBK 0:c674504a6536 392 unsigned int nBytes;
SangSTBK 0:c674504a6536 393 unsigned char PixelRow;
SangSTBK 0:c674504a6536 394 unsigned char Mask;
SangSTBK 0:c674504a6536 395 unsigned int Word0;
SangSTBK 0:c674504a6536 396 unsigned char *pFont;
SangSTBK 0:c674504a6536 397 unsigned char *pChar;
SangSTBK 0:c674504a6536 398 unsigned char *FontTable[] = {
SangSTBK 0:c674504a6536 399 (unsigned char *)FONT6x8,
SangSTBK 0:c674504a6536 400 (unsigned char *)FONT8x8,
SangSTBK 0:c674504a6536 401 (unsigned char *)FONT8x16,
SangSTBK 0:c674504a6536 402 (unsigned char *)FONT24x59 // I added this - it is just for the zero
SangSTBK 0:c674504a6536 403 };
SangSTBK 0:c674504a6536 404 // get pointer to the beginning of the selected font table
SangSTBK 0:c674504a6536 405 pFont = (unsigned char *)FontTable[size];
SangSTBK 0:c674504a6536 406 // get the nColumns, nRows and nBytes in the font table
SangSTBK 0:c674504a6536 407 nCols = *pFont;
SangSTBK 0:c674504a6536 408 nRows = *(pFont + 1);
SangSTBK 0:c674504a6536 409 nBytes = *(pFont + 2);
SangSTBK 0:c674504a6536 410 // pc.printf("C = %d",nCols);
SangSTBK 0:c674504a6536 411
SangSTBK 0:c674504a6536 412 // get pointer to the last byte of the desired character - i.e. last byte in the row
SangSTBK 0:c674504a6536 413 pChar = pFont + (nBytes * (c - 0x1F)) + nBytes - 1;
SangSTBK 0:c674504a6536 414
SangSTBK 0:c674504a6536 415 WindowSet( x, (x + nRows - 1), y, (y + nCols - 1) ); // set window (drawing rectangle) to font size
SangSTBK 0:c674504a6536 416 Write_Command(RAMWR);
SangSTBK 0:c674504a6536 417
SangSTBK 0:c674504a6536 418 for ( i = (nRows - 1); i >= 0; i-- ) {
SangSTBK 0:c674504a6536 419 PixelRow = *pChar--;
SangSTBK 0:c674504a6536 420 Mask = 0x80;
SangSTBK 0:c674504a6536 421
SangSTBK 0:c674504a6536 422 for ( j = 0; j < nCols; j++ ) {
SangSTBK 0:c674504a6536 423
SangSTBK 0:c674504a6536 424 Word0 = (PixelRow & Mask) ? fColor : bColor;
SangSTBK 0:c674504a6536 425 Mask = Mask >> 1;
SangSTBK 0:c674504a6536 426
SangSTBK 0:c674504a6536 427 Write_Data( (Word0 >> 16) & 0xFF );
SangSTBK 0:c674504a6536 428 Write_Data( (Word0 >> 8) & 0xFF );
SangSTBK 0:c674504a6536 429 Write_Data( (Word0 ) & 0xFF );
SangSTBK 0:c674504a6536 430 }
SangSTBK 0:c674504a6536 431 }
SangSTBK 0:c674504a6536 432 Write_Command(NOP);// this terminates the Write Memory command
SangSTBK 0:c674504a6536 433 }
SangSTBK 0:c674504a6536 434 /*****************************************************************************/
SangSTBK 0:c674504a6536 435 /***************** this is the mini-font version ***************************/
SangSTBK 0:c674504a6536 436 void LCDPutStr(char *pString, int x, int y, int Size, int fColor, int bColor) {
SangSTBK 0:c674504a6536 437 // loop until null-terminator is seen
SangSTBK 0:c674504a6536 438 while (*pString != 0x00) {
SangSTBK 0:c674504a6536 439 // draw the character
SangSTBK 0:c674504a6536 440 LCDPutChar(*pString++, y, x, Size, fColor, bColor);
SangSTBK 0:c674504a6536 441 // advance the y position
SangSTBK 0:c674504a6536 442 if (Size == 0)// small
SangSTBK 0:c674504a6536 443 y = y + 6;
SangSTBK 0:c674504a6536 444 else if (Size == 1) //medium
SangSTBK 0:c674504a6536 445 y = y + 8;
SangSTBK 0:c674504a6536 446 else if (Size == 2) //large
SangSTBK 0:c674504a6536 447 y = y + 16;
SangSTBK 0:c674504a6536 448 else if (Size == 3)
SangSTBK 0:c674504a6536 449 y = y + 24; //large1
SangSTBK 0:c674504a6536 450 if (y > 640) break; //bail out if it exceeds screen width
SangSTBK 0:c674504a6536 451 }
SangSTBK 0:c674504a6536 452 }
SangSTBK 0:c674504a6536 453 /******************************** square button ***********************/
SangSTBK 0:c674504a6536 454 void sqbutton1(unsigned int x0, unsigned int y0, unsigned int fill, unsigned int color) {
SangSTBK 0:c674504a6536 455 unsigned int xmin, xmax, ymin, ymax;
SangSTBK 0:c674504a6536 456 int i;
SangSTBK 0:c674504a6536 457
SangSTBK 0:c674504a6536 458 // check if the rectangle is to be filled
SangSTBK 0:c674504a6536 459 if (fill == TRUE) {
SangSTBK 0:c674504a6536 460 // best way to create a filled rectangle is to define a drawing box
SangSTBK 0:c674504a6536 461 // and loop two pixels at a time
SangSTBK 0:c674504a6536 462 // calculate the min and max for x and y directions
SangSTBK 0:c674504a6536 463 xmin = (x0 <= (x0 + xbutsize1)) ? x0 : (x0 + xbutsize1);
SangSTBK 0:c674504a6536 464 xmax = (x0 > (x0 + xbutsize1)) ? x0 : (x0 + xbutsize1);
SangSTBK 0:c674504a6536 465 ymin = (y0 <= (y0+ybutsize1)) ? y0 : (y0+ybutsize1);
SangSTBK 0:c674504a6536 466 ymax = (y0 > (y0+ybutsize1)) ? y0 : (y0+ybutsize1);
SangSTBK 0:c674504a6536 467 Write_Command(CASET); //SET page address
SangSTBK 0:c674504a6536 468 Write_Data((x0)>>8); //SET start page address=0
SangSTBK 0:c674504a6536 469 Write_Data(x0);
SangSTBK 0:c674504a6536 470 Write_Data((x0 + xbutsize1)>>8); //SET end page address=XMAX
SangSTBK 0:c674504a6536 471 Write_Data (x0 + xbutsize1);
SangSTBK 0:c674504a6536 472 Write_Command(PASET); //SET column address
SangSTBK 0:c674504a6536 473 Write_Data((y0)>>8); //SET start column address=0
SangSTBK 0:c674504a6536 474 Write_Data(y0);
SangSTBK 0:c674504a6536 475 Write_Data((y0+ybutsize1)>>8); //SET end column address=YMAX
SangSTBK 0:c674504a6536 476 Write_Data (y0+ybutsize1);
SangSTBK 0:c674504a6536 477 Write_Command(RAMWR); //ready to now start writing the data
SangSTBK 0:c674504a6536 478 for (i = 0; i < ((((xmax - xmin + 1) * (ymax - ymin + 1))) + 1); i++) {
SangSTBK 0:c674504a6536 479 SendData(color);
SangSTBK 0:c674504a6536 480 }
SangSTBK 0:c674504a6536 481 } else {
SangSTBK 0:c674504a6536 482
SangSTBK 0:c674504a6536 483 LCDSetLine(x0, y0, (x0 + xbutsize1), y0, color);
SangSTBK 0:c674504a6536 484 LCDSetLine(x0, (y0+ybutsize1), (x0 + xbutsize1), (y0+ybutsize1), color);
SangSTBK 0:c674504a6536 485 LCDSetLine(x0, y0, x0, (y0+ybutsize1), color);
SangSTBK 0:c674504a6536 486 LCDSetLine((x0 + xbutsize1), y0, (x0 + xbutsize1), (y0+ybutsize1), color);
SangSTBK 0:c674504a6536 487 }
SangSTBK 0:c674504a6536 488 }
SangSTBK 0:c674504a6536 489
SangSTBK 0:c674504a6536 490
SangSTBK 0:c674504a6536 491 /**************************************** volume slider ******************************************/
SangSTBK 0:c674504a6536 492 void volume_slider(int volume) { //was float
SangSTBK 0:c674504a6536 493 int slider;
SangSTBK 0:c674504a6536 494 int pos;
SangSTBK 0:c674504a6536 495 pos = (volume*450)/222;
SangSTBK 0:c674504a6536 496 slider = ZERO+pos; //((volume/255)*SPAN);
SangSTBK 0:c674504a6536 497 LCDSetRect((ZERO-10),37,(SPAN+ZERO+10),60,1,BLACK); //erase the previous slider button position
SangSTBK 0:c674504a6536 498 LCDSetRect(slider,40,(slider+10),60,1,WHITE);
SangSTBK 0:c674504a6536 499
SangSTBK 0:c674504a6536 500 }
SangSTBK 0:c674504a6536 501 /*************************************************************************************************/
SangSTBK 0:c674504a6536 502 /***************************** this is the main central button ******************************/
SangSTBK 0:c674504a6536 503 void big_button(void) {
SangSTBK 0:c674504a6536 504 int z;
SangSTBK 0:c674504a6536 505 for (z=30; z<33; z++) {
SangSTBK 0:c674504a6536 506 LCDSetCircle(160,120,z,WHITE);
SangSTBK 0:c674504a6536 507 }
SangSTBK 0:c674504a6536 508 for (z=38; z<40; z++) {
SangSTBK 0:c674504a6536 509 LCDSetCircle(160,120,z,WHITE);
SangSTBK 0:c674504a6536 510 }
SangSTBK 0:c674504a6536 511 }
SangSTBK 0:c674504a6536 512 /*************************************************************************************************/
SangSTBK 0:c674504a6536 513 void volume_display_window(void) {
SangSTBK 0:c674504a6536 514 LCDSetRect(0,0,50,100,1,WHITE);
SangSTBK 0:c674504a6536 515 }
SangSTBK 0:c674504a6536 516 /*************************************************************************************************/
SangSTBK 0:c674504a6536 517 void slider_bar(void) {
SangSTBK 0:c674504a6536 518
SangSTBK 0:c674504a6536 519 LCDSetRect(100, 20,560,30,0,WHITE);//slider scale volume bar
SangSTBK 0:c674504a6536 520 LCDPutStr("0ff -82 -65 -48 -30 -12 -6 0 +7 +16",10,100,MEDIUM, WHITE,BLACK);//slider scale
SangSTBK 0:c674504a6536 521
SangSTBK 0:c674504a6536 522 }
SangSTBK 0:c674504a6536 523 /*************************************************************************************************/
SangSTBK 0:c674504a6536 524 void input_sel_window(void) {
SangSTBK 0:c674504a6536 525 LCDSetRect(180,380,460,460,0,WHITE);// input select window
SangSTBK 0:c674504a6536 526 }
SangSTBK 0:c674504a6536 527 /*************************************************************************************************/
SangSTBK 0:c674504a6536 528 void input_buttons(void) {
SangSTBK 0:c674504a6536 529
SangSTBK 0:c674504a6536 530 LCDSetCircle(xref2,(1*righttbutinc),25,WHITE);
SangSTBK 0:c674504a6536 531 FontDrawString("CD",(xref2-75),(righttbutinc-20),WHITE,BLACK,&Calibri28);
SangSTBK 0:c674504a6536 532
SangSTBK 0:c674504a6536 533 LCDSetCircle(xref2,(2*righttbutinc),25,WHITE);
SangSTBK 0:c674504a6536 534 FontDrawString("Aux2",(xref2-108),((2*righttbutinc)-20),WHITE,BLACK,&Calibri28);
SangSTBK 0:c674504a6536 535
SangSTBK 0:c674504a6536 536 LCDSetCircle(xref2,(3*righttbutinc),25,WHITE);
SangSTBK 0:c674504a6536 537 FontDrawString("Aux1",(xref2-108),((3*righttbutinc)-20),WHITE,BLACK,&Calibri28);
SangSTBK 0:c674504a6536 538
SangSTBK 0:c674504a6536 539 LCDSetCircle(xref2,(4*righttbutinc),25,WHITE);
SangSTBK 0:c674504a6536 540 FontDrawString("Recdr",(xref2-122),((4*righttbutinc)-20),WHITE,BLACK,&Calibri28);
SangSTBK 0:c674504a6536 541
SangSTBK 0:c674504a6536 542 LCDSetCircle(xref2,(5*righttbutinc),25,WHITE);
SangSTBK 0:c674504a6536 543 FontDrawString("Phono",(xref2-132),((5*righttbutinc)-20),WHITE,BLACK,&Calibri28);
SangSTBK 0:c674504a6536 544 }
SangSTBK 0:c674504a6536 545
SangSTBK 0:c674504a6536 546 /*************************************************************************************************/
SangSTBK 0:c674504a6536 547 void phono_d(int onoff) {
SangSTBK 0:c674504a6536 548 int circinc;
SangSTBK 0:c674504a6536 549 if (onoff==0) {
SangSTBK 0:c674504a6536 550 for (circinc=1; circinc<27; circinc++) {
SangSTBK 0:c674504a6536 551 LCDSetCircle(xref2,(5*righttbutinc),circinc,BLACK);
SangSTBK 0:c674504a6536 552 } //first erase the button
SangSTBK 0:c674504a6536 553
SangSTBK 0:c674504a6536 554 LCDSetCircle(xref2,(5*righttbutinc),25,WHITE);
SangSTBK 0:c674504a6536 555 } //now draw it in outline = OFF
SangSTBK 0:c674504a6536 556
SangSTBK 0:c674504a6536 557 else {
SangSTBK 0:c674504a6536 558 for (circinc=1; circinc<26; circinc++) { //so onoff must have been TRUE
SangSTBK 0:c674504a6536 559 LCDSetCircle(xref2,(5*righttbutinc),circinc,GREEN); //it on so draw it in GREEN
SangSTBK 0:c674504a6536 560 }
SangSTBK 0:c674504a6536 561 }
SangSTBK 0:c674504a6536 562 }
SangSTBK 0:c674504a6536 563 /*************************************************************************************************/
SangSTBK 0:c674504a6536 564 void AUX1(int onoff) {
SangSTBK 0:c674504a6536 565 int circinc;
SangSTBK 0:c674504a6536 566 if (onoff==0) {
SangSTBK 0:c674504a6536 567 for (circinc=1; circinc<27; circinc++) {
SangSTBK 0:c674504a6536 568 LCDSetCircle(xref2,(3*righttbutinc),circinc,BLACK);
SangSTBK 0:c674504a6536 569 } //first erase the button
SangSTBK 0:c674504a6536 570
SangSTBK 0:c674504a6536 571 LCDSetCircle(xref2,(3*righttbutinc),25,WHITE);
SangSTBK 0:c674504a6536 572 } //now draw it in outline = OFF
SangSTBK 0:c674504a6536 573
SangSTBK 0:c674504a6536 574 else {
SangSTBK 0:c674504a6536 575 for (circinc=1; circinc<26; circinc++) { //so onoff must have been TRUE
SangSTBK 0:c674504a6536 576 LCDSetCircle(xref2,(3*righttbutinc),circinc,GREEN); //it on so draw it in GREEN
SangSTBK 0:c674504a6536 577 }
SangSTBK 0:c674504a6536 578 }
SangSTBK 0:c674504a6536 579 }
SangSTBK 0:c674504a6536 580 /*************************************************************************************************/
SangSTBK 0:c674504a6536 581 void AUX2(int onoff) {
SangSTBK 0:c674504a6536 582 int circinc;
SangSTBK 0:c674504a6536 583 if (onoff==0) {
SangSTBK 0:c674504a6536 584 for (circinc=1; circinc<27; circinc++) {
SangSTBK 0:c674504a6536 585 LCDSetCircle(xref2,(2*righttbutinc),circinc,BLACK);
SangSTBK 0:c674504a6536 586 } //first erase the button
SangSTBK 0:c674504a6536 587
SangSTBK 0:c674504a6536 588 LCDSetCircle(xref2,(2*righttbutinc),25,WHITE);
SangSTBK 0:c674504a6536 589 } //now draw it in outline = OFF
SangSTBK 0:c674504a6536 590
SangSTBK 0:c674504a6536 591 else {
SangSTBK 0:c674504a6536 592 for (circinc=1; circinc<26; circinc++) { //so onoff must have been TRUE
SangSTBK 0:c674504a6536 593 LCDSetCircle(xref2,(2*righttbutinc),circinc,GREEN); //it on so draw it in GREEN
SangSTBK 0:c674504a6536 594 }
SangSTBK 0:c674504a6536 595 }
SangSTBK 0:c674504a6536 596 }
SangSTBK 0:c674504a6536 597 /*************************************************************************************************/
SangSTBK 0:c674504a6536 598 void CD_d(int onoff) {
SangSTBK 0:c674504a6536 599 int circinc;
SangSTBK 0:c674504a6536 600 if (onoff==0) {
SangSTBK 0:c674504a6536 601 for (circinc=1; circinc<27; circinc++) {
SangSTBK 0:c674504a6536 602 LCDSetCircle(xref2,(1*righttbutinc),circinc,BLACK);
SangSTBK 0:c674504a6536 603 } //first erase the button
SangSTBK 0:c674504a6536 604
SangSTBK 0:c674504a6536 605 LCDSetCircle(xref2,(1*righttbutinc),25,WHITE);
SangSTBK 0:c674504a6536 606 } //now draw it in outline = OFF
SangSTBK 0:c674504a6536 607
SangSTBK 0:c674504a6536 608 else {
SangSTBK 0:c674504a6536 609 for (circinc=1; circinc<26; circinc++) { //so onoff must have been TRUE
SangSTBK 0:c674504a6536 610 LCDSetCircle(xref2,(1*righttbutinc),circinc,GREEN); //it on so draw it in GREEN
SangSTBK 0:c674504a6536 611 }
SangSTBK 0:c674504a6536 612 }
SangSTBK 0:c674504a6536 613 }
SangSTBK 0:c674504a6536 614 /*************************************************************************************************/
SangSTBK 0:c674504a6536 615 void Recorder_d(int onoff) {
SangSTBK 0:c674504a6536 616 int circinc;
SangSTBK 0:c674504a6536 617 if (onoff==0) {
SangSTBK 0:c674504a6536 618 for (circinc=1; circinc<27; circinc++) {
SangSTBK 0:c674504a6536 619 LCDSetCircle(xref2,(4*righttbutinc),circinc,BLACK);
SangSTBK 0:c674504a6536 620 } //first erase the button
SangSTBK 0:c674504a6536 621
SangSTBK 0:c674504a6536 622 LCDSetCircle(xref2,(4*righttbutinc),25,WHITE);
SangSTBK 0:c674504a6536 623 } //now draw it in outline = OFF
SangSTBK 0:c674504a6536 624
SangSTBK 0:c674504a6536 625 else {
SangSTBK 0:c674504a6536 626 for (circinc=1; circinc<26; circinc++) { //so onoff must have been TRUE
SangSTBK 0:c674504a6536 627 LCDSetCircle(xref2,(4*righttbutinc),circinc,GREEN); //it on so draw it in GREEN
SangSTBK 0:c674504a6536 628 }
SangSTBK 0:c674504a6536 629 }
SangSTBK 0:c674504a6536 630 }
SangSTBK 0:c674504a6536 631
SangSTBK 0:c674504a6536 632 /*************************************************************************************************/
SangSTBK 0:c674504a6536 633 void Control_buttons(void) {
SangSTBK 0:c674504a6536 634
SangSTBK 0:c674504a6536 635 sqbutton1(xref1,80,0,WHITE); //mute
SangSTBK 0:c674504a6536 636 FontDrawString("Mute",82,87,WHITE,BLACK,&Calibri28);
SangSTBK 0:c674504a6536 637
SangSTBK 0:c674504a6536 638 sqbutton1(xref1, 196,0,WHITE); //Rec
SangSTBK 0:c674504a6536 639 FontDrawString("Rec",82,197,WHITE,BLACK,&Calibri28); //gap is 66
SangSTBK 0:c674504a6536 640
SangSTBK 0:c674504a6536 641 //sqbutton1(xref1,202,0,WHITE); //stdby
SangSTBK 0:c674504a6536 642 //FontDrawString("Stdby",82,203,WHITE,BLACK,&Calibri28);
SangSTBK 0:c674504a6536 643
SangSTBK 0:c674504a6536 644 sqbutton1(xref1, 312,0,WHITE);//power amp
SangSTBK 0:c674504a6536 645 FontDrawString("Amp",82,313,WHITE,BLACK,&Calibri28);
SangSTBK 0:c674504a6536 646
SangSTBK 0:c674504a6536 647 //sqbutton1(xref1,400,0,RED); //this is the IR indicator
SangSTBK 0:c674504a6536 648 //FontDrawString("IR",82,400,WHITE,BLACK,&Calibri28);
SangSTBK 0:c674504a6536 649
SangSTBK 0:c674504a6536 650 }
SangSTBK 0:c674504a6536 651 /*************************************************************************************************/
SangSTBK 0:c674504a6536 652 void mute(unsigned int onoff) { //this is the bottom button
SangSTBK 0:c674504a6536 653 if (onoff==0) {
SangSTBK 0:c674504a6536 654 sqbutton1(xref1,80,1,BLACK); //first erase the button
SangSTBK 0:c674504a6536 655 sqbutton1(xref1,80,0,WHITE);
SangSTBK 0:c674504a6536 656 } //now redraw it
SangSTBK 0:c674504a6536 657 else {
SangSTBK 0:c674504a6536 658 sqbutton1(16,80,1,WHITE);
SangSTBK 0:c674504a6536 659 }
SangSTBK 0:c674504a6536 660 }
SangSTBK 0:c674504a6536 661 /*************************************************************************************************/
SangSTBK 0:c674504a6536 662 void record(unsigned int onoff) { //this is the second from bottom button
SangSTBK 0:c674504a6536 663 if (onoff==0) {
SangSTBK 0:c674504a6536 664 sqbutton1(xref1,196,1,BLACK); //first erase the button
SangSTBK 0:c674504a6536 665 sqbutton1(16, 196,0,WHITE);
SangSTBK 0:c674504a6536 666 } //now redraw it
SangSTBK 0:c674504a6536 667 else {
SangSTBK 0:c674504a6536 668 sqbutton1(16,196,1,WHITE);
SangSTBK 0:c674504a6536 669 }
SangSTBK 0:c674504a6536 670 }
SangSTBK 0:c674504a6536 671 /*************************************************************************************************/
SangSTBK 0:c674504a6536 672 void stdby(unsigned int onoff) { //this is the 3rd from bottom button
SangSTBK 0:c674504a6536 673 if (onoff==0) {
SangSTBK 0:c674504a6536 674 sqbutton1(xref1,202,1,BLACK); //first erase the button
SangSTBK 0:c674504a6536 675 sqbutton1(xref1, 202,0,WHITE);
SangSTBK 0:c674504a6536 676 } //now redraw it
SangSTBK 0:c674504a6536 677 else {
SangSTBK 0:c674504a6536 678 sqbutton1(xref1,202,1,WHITE);
SangSTBK 0:c674504a6536 679 }
SangSTBK 0:c674504a6536 680 }
SangSTBK 0:c674504a6536 681 /*************************************************************************************************/
SangSTBK 0:c674504a6536 682 void pwramp(unsigned int onoff) { //this is the top lefthand side button
SangSTBK 0:c674504a6536 683 if (onoff==0) {
SangSTBK 0:c674504a6536 684 sqbutton1(xref1, 312,1,BLACK); //first erase the button
SangSTBK 0:c674504a6536 685 sqbutton1(xref1,312,0,WHITE);
SangSTBK 0:c674504a6536 686 } //now redraw it
SangSTBK 0:c674504a6536 687 else {
SangSTBK 0:c674504a6536 688 sqbutton1(xref1, 312,1,WHITE);
SangSTBK 0:c674504a6536 689 }
SangSTBK 0:c674504a6536 690 }
SangSTBK 0:c674504a6536 691 /*************************************************************************************************/
SangSTBK 0:c674504a6536 692 void infra(unsigned int onoff) { //this is the top lefthand side button
SangSTBK 0:c674504a6536 693 if (onoff==0) {
SangSTBK 0:c674504a6536 694 sqbutton1(xref1, 400,1,BLACK); //first erase the button
SangSTBK 0:c674504a6536 695 sqbutton1(xref1,400,0,RED);
SangSTBK 0:c674504a6536 696 } //now redraw it
SangSTBK 0:c674504a6536 697 else {
SangSTBK 0:c674504a6536 698 sqbutton1(xref1, 400,1,RED);
SangSTBK 0:c674504a6536 699 }
SangSTBK 0:c674504a6536 700 }
SangSTBK 0:c674504a6536 701 /*************************************************************************************************/
SangSTBK 0:c674504a6536 702 void trigcircle (int xtc, int ytc, int radius, int color) {
SangSTBK 0:c674504a6536 703
SangSTBK 0:c674504a6536 704 double circ;
SangSTBK 0:c674504a6536 705 double cosnum;
SangSTBK 0:c674504a6536 706 double sinum;
SangSTBK 0:c674504a6536 707 for (circ=0; circ<=volume; circ++) {
SangSTBK 0:c674504a6536 708 sinum=sin(circ)*radius;
SangSTBK 0:c674504a6536 709 cosnum=cos(circ)*radius;
SangSTBK 0:c674504a6536 710 LCDSetLine(xtc,ytc,(sinum+xtc),(cosnum+ytc),color);
SangSTBK 0:c674504a6536 711 }
SangSTBK 0:c674504a6536 712 }
SangSTBK 0:c674504a6536 713
SangSTBK 0:c674504a6536 714 /**************************************************************************************/
SangSTBK 0:c674504a6536 715
SangSTBK 0:c674504a6536 716 void clear_input_select(void) {
SangSTBK 0:c674504a6536 717
SangSTBK 0:c674504a6536 718 int circinc;
SangSTBK 0:c674504a6536 719 for (circinc=1; circinc<24; circinc++) {
SangSTBK 0:c674504a6536 720
SangSTBK 0:c674504a6536 721 LCDSetCircle(xref2,(5*righttbutinc),circinc,BLACK); //phono
SangSTBK 0:c674504a6536 722 LCDSetCircle(xref2,(3*righttbutinc),circinc,BLACK); //aux1
SangSTBK 0:c674504a6536 723 LCDSetCircle(xref2,(2*righttbutinc),circinc,BLACK); //aux2
SangSTBK 0:c674504a6536 724 LCDSetCircle(xref2,(1*righttbutinc),circinc,BLACK); //CD
SangSTBK 0:c674504a6536 725 LCDSetCircle(xref2,(4*righttbutinc),circinc,BLACK); //recorder
SangSTBK 0:c674504a6536 726 }
SangSTBK 0:c674504a6536 727 }