Sang Vu Van
/
New
mesh phone
graphic.h@0:c674504a6536, 2012-07-02 (annotated)
- Committer:
- SangSTBK
- Date:
- Mon Jul 02 03:41:36 2012 +0000
- Revision:
- 0:c674504a6536
mesh
Who changed what in which revision?
User | Revision | Line number | New 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 | } |