metal detector software

Dependencies:   mbed

Committer:
xmen
Date:
Sat Mar 19 20:35:51 2011 +0000
Revision:
0:88f4eeea871a

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
xmen 0:88f4eeea871a 1 #include "cbn1768.h"
xmen 0:88f4eeea871a 2 #include "lcd.h"
xmen 0:88f4eeea871a 3
xmen 0:88f4eeea871a 4 /*----------------------------------------------------------*\
xmen 0:88f4eeea871a 5 | Exported |
xmen 0:88f4eeea871a 6 \*----------------------------------------------------------*/
xmen 0:88f4eeea871a 7 volatile unsigned char Font=0;
xmen 0:88f4eeea871a 8
xmen 0:88f4eeea871a 9 #define LCD_RESET_PIN (1<<10)
xmen 0:88f4eeea871a 10 #define LCD_CS_PIN (1<<6)
xmen 0:88f4eeea871a 11 /* SSPSR - bit definitions. */
xmen 0:88f4eeea871a 12 #define TFE 0x01
xmen 0:88f4eeea871a 13 #define TNF 0x02
xmen 0:88f4eeea871a 14 #define RNE 0x04
xmen 0:88f4eeea871a 15 #define RFF 0x08
xmen 0:88f4eeea871a 16 #define BSY 0x10
xmen 0:88f4eeea871a 17
xmen 0:88f4eeea871a 18 /*----------------------------------------------------------*\
xmen 0:88f4eeea871a 19 | Delay |
xmen 0:88f4eeea871a 20 \*----------------------------------------------------------*/
xmen 0:88f4eeea871a 21 void Delay(unsigned int dly) {
xmen 0:88f4eeea871a 22 unsigned int i;
xmen 0:88f4eeea871a 23
xmen 0:88f4eeea871a 24 for (; dly>0; dly--)
xmen 0:88f4eeea871a 25 for (i=0; i<5000; i++);
xmen 0:88f4eeea871a 26 }
xmen 0:88f4eeea871a 27 /*----------------------------------------------------------*\
xmen 0:88f4eeea871a 28 | ILI9325 SSP Initialize |
xmen 0:88f4eeea871a 29 \*----------------------------------------------------------*/
xmen 0:88f4eeea871a 30 void SSP_Init(void) {
xmen 0:88f4eeea871a 31
xmen 0:88f4eeea871a 32
xmen 0:88f4eeea871a 33 PCONP |= 1<<10;
xmen 0:88f4eeea871a 34
xmen 0:88f4eeea871a 35 // PINSEL0 |= (1<<13); //ssel1-p0.6
xmen 0:88f4eeea871a 36 PINSEL0 |= (1<<15); //sck1-p0.7
xmen 0:88f4eeea871a 37 PINSEL0 |= (1<<17); //mosi1-p0.8
xmen 0:88f4eeea871a 38 PINSEL0 |= (1<<19); //sck1-p0.9
xmen 0:88f4eeea871a 39
xmen 0:88f4eeea871a 40
xmen 0:88f4eeea871a 41
xmen 0:88f4eeea871a 42
xmen 0:88f4eeea871a 43 SSP1CR0 = (0x01 << 8) | // SCR &#65533;&#65533;&#65533;&#65533;SPI&#689;&#65533;&#1271;&#65533;&#437;
xmen 0:88f4eeea871a 44 (0x01 << 7) | // CPHA &#689;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#955;,&#65533;&#65533;SPI&#291;&#701;&#65533;&#65533;&#1063;
xmen 0:88f4eeea871a 45 (0x01 << 6) | // CPOL &#689;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;,&#65533;&#65533;SPI&#291;&#701;&#65533;&#65533;&#1063;
xmen 0:88f4eeea871a 46 (0x00 << 4) | // FRF &#1441;&#65533;&#65533;&#701; 00=SPI,01=SSI,10=Microwire,11=&#65533;&#65533;&#65533;&#65533;
xmen 0:88f4eeea871a 47 (0x07 << 0); // DSS &#65533;&#65533;&#1907;&#65533;&#65533;&#65533;,0000-0010=&#65533;&#65533;&#65533;&#65533;,0011=4&#955;,0111=8&#955;,1111=16&#955;
xmen 0:88f4eeea871a 48
xmen 0:88f4eeea871a 49 SSP1CR1 = (0x00 << 3) | // SOD &#65533;&#1275;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;,1=&#65533;&#65533;&#1465;,0=&#65533;&#65533;&#65533;&#65533;
xmen 0:88f4eeea871a 50 (0x00 << 2) | // MS &#65533;&#65533;&#65533;&#1121;&#65533;&#65533;,0=&#65533;&#65533;&#65533;,1=&#65533;&#1275;&#65533;
xmen 0:88f4eeea871a 51 (0x01 << 1) | // SSE SSP&#697;&#65533;&#65533;,1=&#65533;&#65533;&#65533;&#65533;SSP&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#35960;&#872;&#65533;&#65533;
xmen 0:88f4eeea871a 52 (0x00 << 0); // LBM &#65533;&#65533;&#1076;&#291;&#701;
xmen 0:88f4eeea871a 53
xmen 0:88f4eeea871a 54 //SSPCPSR = 0x02; // PCLK&#65533;&#65533;&#437;&#1461;
xmen 0:88f4eeea871a 55 SSP1CPSR = 0x04; // PCLK&#65533;&#65533;&#437;&#1461;
xmen 0:88f4eeea871a 56 SSP1IMSC = 0x07; // &#65533;&#1078;&#65533;&#65533;&#65533;&#956;&#308;&#65533;&#65533;&#65533;
xmen 0:88f4eeea871a 57 SSP1ICR = 0x03; // &#65533;&#1078;&#65533;&#65533;&#65533;&#65533;&#308;&#65533;&#65533;&#65533;
xmen 0:88f4eeea871a 58 }
xmen 0:88f4eeea871a 59 /*----------------------------------------------------------*\
xmen 0:88f4eeea871a 60 | ILI9325 Write Byte |
xmen 0:88f4eeea871a 61 \*----------------------------------------------------------*/
xmen 0:88f4eeea871a 62 unsigned char LCD_Access(unsigned char byte) {
xmen 0:88f4eeea871a 63 // &#65533;&#564;&#65533;SPIF&#65533;&#65533;&#955;&#65533;&#65533;&#65533;&#65533;&#65533;&#564;&#65533;&#65533;&#65533;&#1911;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;
xmen 0:88f4eeea871a 64 /* Wait if TNF cleared, Tx FIFO is full. */
xmen 0:88f4eeea871a 65 while ((SSP1SR & TNF) == 0);
xmen 0:88f4eeea871a 66 SSP1DR = byte;
xmen 0:88f4eeea871a 67 /* Wait if RNE cleared, Rx FIFO is empty. */
xmen 0:88f4eeea871a 68 while ((SSP1SR & RNE) == 0);
xmen 0:88f4eeea871a 69 return SSP1DR;
xmen 0:88f4eeea871a 70 }
xmen 0:88f4eeea871a 71
xmen 0:88f4eeea871a 72 /*-----------------------------------------------------------------------------*\
xmen 0:88f4eeea871a 73 | LCD_WriteReg : Writes to the selected LCD register. |
xmen 0:88f4eeea871a 74 | Input : - LCD_Reg: address of the selected register. |
xmen 0:88f4eeea871a 75 | - LCD_RegValue: value to write to the selected register. |
xmen 0:88f4eeea871a 76 | Output : None |
xmen 0:88f4eeea871a 77 | Return : None |
xmen 0:88f4eeea871a 78 \*-----------------------------------------------------------------------------*/
xmen 0:88f4eeea871a 79 void LCD_WriteReg(unsigned short LCD_Reg, unsigned short LCD_RegValue) {
xmen 0:88f4eeea871a 80 FIO0CLR = LCD_CS_PIN;
xmen 0:88f4eeea871a 81 // write register index
xmen 0:88f4eeea871a 82 LCD_Access( 0x70 ); // RS=0:register; RW=0:write. -- write Index
xmen 0:88f4eeea871a 83 LCD_Access( 0x00 );
xmen 0:88f4eeea871a 84 LCD_Access( LCD_Reg & 0xFF );
xmen 0:88f4eeea871a 85 FIO0SET = LCD_CS_PIN;
xmen 0:88f4eeea871a 86 // write register data
xmen 0:88f4eeea871a 87 //Delay(1);
xmen 0:88f4eeea871a 88 FIO0CLR = LCD_CS_PIN;
xmen 0:88f4eeea871a 89 LCD_Access( 0x72 ); // RS=1:data; RW=0:write. -- write Index
xmen 0:88f4eeea871a 90 LCD_Access( LCD_RegValue>>8 );
xmen 0:88f4eeea871a 91 LCD_Access( LCD_RegValue & 0xFF );
xmen 0:88f4eeea871a 92 FIO0SET = LCD_CS_PIN;
xmen 0:88f4eeea871a 93 }
xmen 0:88f4eeea871a 94 void LCD_Reg(unsigned short LCD_Reg) {
xmen 0:88f4eeea871a 95 FIO0CLR = LCD_CS_PIN;
xmen 0:88f4eeea871a 96 // write register index
xmen 0:88f4eeea871a 97 LCD_Access( 0x70 ); // RS=0:register; RW=0:write. -- write Index
xmen 0:88f4eeea871a 98 LCD_Access( 0x00 );
xmen 0:88f4eeea871a 99 LCD_Access( LCD_Reg & 0xFF );
xmen 0:88f4eeea871a 100 FIO0SET = LCD_CS_PIN;
xmen 0:88f4eeea871a 101 }
xmen 0:88f4eeea871a 102 /*-----------------------------------------------------------------------------*\
xmen 0:88f4eeea871a 103 | LCD_ReadReg : Reads the selected LCD Register. |
xmen 0:88f4eeea871a 104 | Input : None |
xmen 0:88f4eeea871a 105 | Output : None |
xmen 0:88f4eeea871a 106 | Return : LCD Register Value. |
xmen 0:88f4eeea871a 107 \*-----------------------------------------------------------------------------*/
xmen 0:88f4eeea871a 108 unsigned short LCD_ReadReg(unsigned char LCD_Reg) {
xmen 0:88f4eeea871a 109 unsigned short Val;
xmen 0:88f4eeea871a 110
xmen 0:88f4eeea871a 111 FIO0CLR = LCD_CS_PIN;
xmen 0:88f4eeea871a 112 // write register index
xmen 0:88f4eeea871a 113 LCD_Access( 0x70 ); // RS=0:register; RW=0:write. -- write Index
xmen 0:88f4eeea871a 114 LCD_Access( 0x00 );
xmen 0:88f4eeea871a 115 LCD_Access( LCD_Reg & 0xFF );
xmen 0:88f4eeea871a 116 FIO0SET = LCD_CS_PIN;
xmen 0:88f4eeea871a 117 // read register data
xmen 0:88f4eeea871a 118 //Delay(1);
xmen 0:88f4eeea871a 119 FIO0CLR = LCD_CS_PIN;
xmen 0:88f4eeea871a 120 LCD_Access( 0x73 ); // RS=1:data; RW=1:read. -- read Index
xmen 0:88f4eeea871a 121 LCD_Access( 0x00 ); // dummy read one byte
xmen 0:88f4eeea871a 122 Val = LCD_Access( 0 ) << 8;
xmen 0:88f4eeea871a 123 Val |= LCD_Access( 0 );
xmen 0:88f4eeea871a 124 FIO0SET = LCD_CS_PIN;
xmen 0:88f4eeea871a 125
xmen 0:88f4eeea871a 126 return Val;
xmen 0:88f4eeea871a 127 }
xmen 0:88f4eeea871a 128 /*-----------------------------------------------------------------------------*\
xmen 0:88f4eeea871a 129 | LCD_WriteRAM : Writes to the LCD RAM. |
xmen 0:88f4eeea871a 130 | Input : - RGB_Code: the pixel color in RGB mode (5-6-5). |
xmen 0:88f4eeea871a 131 | Output : None |
xmen 0:88f4eeea871a 132 | Return : None |
xmen 0:88f4eeea871a 133 \*-----------------------------------------------------------------------------*/
xmen 0:88f4eeea871a 134 void LCD_WriteRAM(unsigned short RGB_Code) {
xmen 0:88f4eeea871a 135 FIO0CLR = LCD_CS_PIN;
xmen 0:88f4eeea871a 136 LCD_Access( 0x72 ); // RS=1:data; RW=0:write. -- write data
xmen 0:88f4eeea871a 137 LCD_Access( RGB_Code>>8 );
xmen 0:88f4eeea871a 138 LCD_Access( RGB_Code & 0xFF );
xmen 0:88f4eeea871a 139 FIO0SET = LCD_CS_PIN;
xmen 0:88f4eeea871a 140 }
xmen 0:88f4eeea871a 141 /*----------------------------------------------------------*\
xmen 0:88f4eeea871a 142 | ILI9325 Initialize |
xmen 0:88f4eeea871a 143 \*----------------------------------------------------------*/
xmen 0:88f4eeea871a 144 void LCD_Init(void) {
xmen 0:88f4eeea871a 145 unsigned short ID;
xmen 0:88f4eeea871a 146
xmen 0:88f4eeea871a 147 PINSEL1 &= ~0x000000FC; // &#65533;&#65533;&#65533;&#65533;SPI&#65533;&#1853;&#65533;&#65533;&#65533;&#65533;
xmen 0:88f4eeea871a 148 PINSEL1 |= 0x000000A8; // &#65533;&#65533;&#65533;&#65533;SPI&#65533;&#1853;&#65533;&#65533;&#65533;&#65533;
xmen 0:88f4eeea871a 149
xmen 0:88f4eeea871a 150 FIO0DIR |= LCD_CS_PIN | LCD_RESET_PIN; // CS/DC/RST
xmen 0:88f4eeea871a 151 FIO0CLR = (1<<18);
xmen 0:88f4eeea871a 152
xmen 0:88f4eeea871a 153 FIO0SET = LCD_CS_PIN;
xmen 0:88f4eeea871a 154 FIO0CLR = LCD_RESET_PIN;
xmen 0:88f4eeea871a 155
xmen 0:88f4eeea871a 156 SSP_Init();
xmen 0:88f4eeea871a 157
xmen 0:88f4eeea871a 158 Delay(50); /* delay 50 ms */
xmen 0:88f4eeea871a 159 FIO0SET=LCD_RESET_PIN;
xmen 0:88f4eeea871a 160
xmen 0:88f4eeea871a 161 Delay(50); /* delay 50 ms */
xmen 0:88f4eeea871a 162 ID = LCD_ReadReg( 0x0000 ); // Read driver IC ID
xmen 0:88f4eeea871a 163 if ( (ID != 0x9325) && (ID != 0x9328) ) return; // the ID must be 0x9325 or 0x9328
xmen 0:88f4eeea871a 164 Delay(50); /* delay 50 ms */
xmen 0:88f4eeea871a 165 //************* Start Initial Sequence **********//
xmen 0:88f4eeea871a 166 LCD_WriteReg(0x00E7, 0x0010); // Set internal timing
xmen 0:88f4eeea871a 167 LCD_WriteReg(0x0000, 0x0001); // Start Oscillation
xmen 0:88f4eeea871a 168 //LCD_WriteReg(0x0001, 0x0100); // set SS and SM bit
xmen 0:88f4eeea871a 169 LCD_WriteReg(0x0001, 0x0000); // set SS and SM bit
xmen 0:88f4eeea871a 170 LCD_WriteReg(0x0002, 0x0700); // set 1 line inversion
xmen 0:88f4eeea871a 171 LCD_WriteReg(0x0003, (1<<12)|(1<<5)|(1<<4)|(1<<3) ); // 65K
xmen 0:88f4eeea871a 172 LCD_WriteReg(0x0004, 0x0000); // Resize register
xmen 0:88f4eeea871a 173 LCD_WriteReg(0x0008, 0x0207); // set the back porch and front porch
xmen 0:88f4eeea871a 174 LCD_WriteReg(0x0009, 0x0000); // set non-display area refresh cycle ISC[3:0]
xmen 0:88f4eeea871a 175 LCD_WriteReg(0x000A, 0x0000); // FMARK function
xmen 0:88f4eeea871a 176 LCD_WriteReg(0x000C, 0x0001); // RGB interface setting: 16 bit
xmen 0:88f4eeea871a 177 LCD_WriteReg(0x000D, 0x0000); // Frame marker Position
xmen 0:88f4eeea871a 178 LCD_WriteReg(0x000F, 0x0000); // RGB interface polarity
xmen 0:88f4eeea871a 179 //*************Power On sequence ****************//
xmen 0:88f4eeea871a 180 LCD_WriteReg(0x0010, 0x0000); // SAP, BT[3:0], AP, DSTB, SLP, STB
xmen 0:88f4eeea871a 181 LCD_WriteReg(0x0011, 0x0007); // DC1[2:0], DC0[2:0], VC[2:0]
xmen 0:88f4eeea871a 182 LCD_WriteReg(0x0012, 0x0000); // VREG1OUT voltage
xmen 0:88f4eeea871a 183 Delay(50); // Delay 50ms
xmen 0:88f4eeea871a 184 LCD_WriteReg(0x0013, 0x0000); // VDV[4:0] for VCOM amplitude
xmen 0:88f4eeea871a 185 Delay(200); // Delay 50ms
xmen 0:88f4eeea871a 186 LCD_WriteReg(0x0010, 0x1590); // SAP, BT[3:0], AP, DSTB, SLP, STB
xmen 0:88f4eeea871a 187 LCD_WriteReg(0x0011, 0x0227); // R11h=0x0221 at VCI=3.3V, DC1[2:0], DC0[2:0], VC[2:0]
xmen 0:88f4eeea871a 188 Delay(50); // Delay 50ms
xmen 0:88f4eeea871a 189 LCD_WriteReg(0x0012, 0x009C); // External reference voltage= Vci;
xmen 0:88f4eeea871a 190 Delay(50); // Delay 50ms
xmen 0:88f4eeea871a 191 LCD_WriteReg(0x0013, 0x1900); // VDV[4:0] for VCOM amplitude
xmen 0:88f4eeea871a 192 LCD_WriteReg(0x0029, 0x0023); // VCM[5:0] for VCOMH
xmen 0:88f4eeea871a 193 LCD_WriteReg(0x002B, 0x000E); // Frame Rate = 40Hz
xmen 0:88f4eeea871a 194 Delay(50); // Delay 50ms
xmen 0:88f4eeea871a 195 LCD_WriteReg(0x0020, 0x0000); // GRAM horizontal Address
xmen 0:88f4eeea871a 196 LCD_WriteReg(0x0021, 0x0000); // GRAM Vertical Address
xmen 0:88f4eeea871a 197 Delay(50); // Delay 50ms
xmen 0:88f4eeea871a 198 // ----------- Adjust the Gamma Curve ----------//
xmen 0:88f4eeea871a 199 LCD_WriteReg(0x0030, 0x0007);
xmen 0:88f4eeea871a 200 LCD_WriteReg(0x0031, 0x0707);
xmen 0:88f4eeea871a 201 LCD_WriteReg(0x0032, 0x0006);
xmen 0:88f4eeea871a 202 LCD_WriteReg(0x0035, 0x0704);
xmen 0:88f4eeea871a 203 LCD_WriteReg(0x0036, 0x1F04);
xmen 0:88f4eeea871a 204 LCD_WriteReg(0x0037, 0x0004);
xmen 0:88f4eeea871a 205 LCD_WriteReg(0x0038, 0x0000);
xmen 0:88f4eeea871a 206 LCD_WriteReg(0x0039, 0x0706);
xmen 0:88f4eeea871a 207 LCD_WriteReg(0x003C, 0x0701);
xmen 0:88f4eeea871a 208 LCD_WriteReg(0x003D, 0x000F);
xmen 0:88f4eeea871a 209 Delay(50); // Delay 50ms
xmen 0:88f4eeea871a 210 //------------------ Set GRAM area ---------------//
xmen 0:88f4eeea871a 211 LCD_WriteReg(0x0050, 0x0000); // Horizontal GRAM Start Address
xmen 0:88f4eeea871a 212 LCD_WriteReg(0x0051, 0x00EF); // Horizontal GRAM End Address
xmen 0:88f4eeea871a 213 LCD_WriteReg(0x0052, 0x0000); // Vertical GRAM Start Address
xmen 0:88f4eeea871a 214 LCD_WriteReg(0x0053, 0x013F); // Vertical GRAM Start Address
xmen 0:88f4eeea871a 215 LCD_WriteReg(0x0060, 0xA700); // Gate Scan Line
xmen 0:88f4eeea871a 216 //LCD_WriteReg(0x0060, 0x2700); // Gate Scan Line
xmen 0:88f4eeea871a 217 LCD_WriteReg(0x0061, 0x0001); // NDL,VLE, REV
xmen 0:88f4eeea871a 218 LCD_WriteReg(0x006A, 0x0000); // set scrolling line
xmen 0:88f4eeea871a 219 //-------------- Partial Display Control ---------//
xmen 0:88f4eeea871a 220 LCD_WriteReg(0x0080, 0x0000);
xmen 0:88f4eeea871a 221 LCD_WriteReg(0x0081, 0x0000);
xmen 0:88f4eeea871a 222 LCD_WriteReg(0x0082, 0x0000);
xmen 0:88f4eeea871a 223 LCD_WriteReg(0x0083, 0x0000);
xmen 0:88f4eeea871a 224 LCD_WriteReg(0x0084, 0x0000);
xmen 0:88f4eeea871a 225 LCD_WriteReg(0x0085, 0x0000);
xmen 0:88f4eeea871a 226 //-------------- Panel Control -------------------//
xmen 0:88f4eeea871a 227 LCD_WriteReg(0x0090, 0x0010);
xmen 0:88f4eeea871a 228 LCD_WriteReg(0x0092, 0x0000);
xmen 0:88f4eeea871a 229 LCD_WriteReg(0x0093, 0x0003);
xmen 0:88f4eeea871a 230 LCD_WriteReg(0x0095, 0x0110);
xmen 0:88f4eeea871a 231 LCD_WriteReg(0x0097, 0x0000);
xmen 0:88f4eeea871a 232 LCD_WriteReg(0x0098, 0x0000);
xmen 0:88f4eeea871a 233 //----------------- display ON -------------------//
xmen 0:88f4eeea871a 234 LCD_WriteReg(0x0007, 0x0133); // 262K color and display ON
xmen 0:88f4eeea871a 235 LCD_WriteReg(0x0020, 0x0000);
xmen 0:88f4eeea871a 236 LCD_WriteReg(0x0021, 0x0000);
xmen 0:88f4eeea871a 237 }
xmen 0:88f4eeea871a 238 /*-----------------------------------------------------------------------------*\
xmen 0:88f4eeea871a 239 | LCD_SetCursor : Sets the cursor position. |
xmen 0:88f4eeea871a 240 | Input : - Xpos: specifies the X position. |
xmen 0:88f4eeea871a 241 | - Ypos: specifies the Y position. |
xmen 0:88f4eeea871a 242 \*-----------------------------------------------------------------------------*/
xmen 0:88f4eeea871a 243 void LCD_SetCursor(unsigned short Xpos, unsigned short Ypos) {
xmen 0:88f4eeea871a 244 LCD_WriteReg(R33, Xpos);
xmen 0:88f4eeea871a 245 LCD_WriteReg(R32, Ypos);
xmen 0:88f4eeea871a 246 }
xmen 0:88f4eeea871a 247 /*-----------------------------------------------------------------------------*\
xmen 0:88f4eeea871a 248 | LCD_SetArea : Sets a display window |
xmen 0:88f4eeea871a 249 \*-----------------------------------------------------------------------------*/
xmen 0:88f4eeea871a 250 void LCD_SetArea( unsigned short x0, unsigned short y0, unsigned short x1, unsigned short y1 ) {
xmen 0:88f4eeea871a 251 LCD_SetCursor(x0, y0);
xmen 0:88f4eeea871a 252 /* Horizontal GRAM Start Address */
xmen 0:88f4eeea871a 253 LCD_WriteReg(R80, y0);
xmen 0:88f4eeea871a 254 /* Horizontal GRAM End Address */
xmen 0:88f4eeea871a 255 LCD_WriteReg(R81, y1);
xmen 0:88f4eeea871a 256 /* Vertical GRAM Start Address */
xmen 0:88f4eeea871a 257 LCD_WriteReg(R82, x0);
xmen 0:88f4eeea871a 258 /* Vertical GRAM End Address */
xmen 0:88f4eeea871a 259 LCD_WriteReg(R83, x1);
xmen 0:88f4eeea871a 260 }
xmen 0:88f4eeea871a 261 /*-----------------------------------------------------------------------------*\
xmen 0:88f4eeea871a 262 | LCD_RectangleFill : Displays a rectangle filled |
xmen 0:88f4eeea871a 263 \*-----------------------------------------------------------------------------*/
xmen 0:88f4eeea871a 264 void LCD_Rectangle( unsigned short x0, unsigned short y0, unsigned short x1, unsigned short y1, unsigned short Color ) {
xmen 0:88f4eeea871a 265 int x,y;
xmen 0:88f4eeea871a 266
xmen 0:88f4eeea871a 267 LCD_SetArea(x0,y0,x1,y1);
xmen 0:88f4eeea871a 268
xmen 0:88f4eeea871a 269 LCD_Reg( R34 ); /* Prepare to write GRAM */
xmen 0:88f4eeea871a 270 for (x=0;x<=x1-x0;x++)
xmen 0:88f4eeea871a 271 for (y=0;y<=y1-y0;y++)
xmen 0:88f4eeea871a 272 LCD_WriteRAM( Color );
xmen 0:88f4eeea871a 273 }
xmen 0:88f4eeea871a 274 /*-----------------------------------------------------------------------------*\
xmen 0:88f4eeea871a 275 | LCD_Clear : Clears the hole LCD. |
xmen 0:88f4eeea871a 276 \*-----------------------------------------------------------------------------*/
xmen 0:88f4eeea871a 277 void LCD_Clear_Screen( unsigned short Color ) {
xmen 0:88f4eeea871a 278 LCD_Rectangle( 0,0, 319,239, Color );
xmen 0:88f4eeea871a 279 }
xmen 0:88f4eeea871a 280 /*-----------------------------------------------------------------------------*\
xmen 0:88f4eeea871a 281 | LCD_SetPixel : Displays a pixel. |
xmen 0:88f4eeea871a 282 \*-----------------------------------------------------------------------------*/
xmen 0:88f4eeea871a 283 void LCD_SetPixel( unsigned short x, unsigned short y, unsigned short Color ) {
xmen 0:88f4eeea871a 284 LCD_SetArea(x,y,x,y);
xmen 0:88f4eeea871a 285 LCD_Reg( R34 ); /* Prepare to write GRAM */
xmen 0:88f4eeea871a 286 LCD_WriteRAM( Color );
xmen 0:88f4eeea871a 287 }
xmen 0:88f4eeea871a 288 /*-----------------------------------------------------------------------------*\
xmen 0:88f4eeea871a 289 | LCD_PutChar8x16 : Displays a 8x16 pixel charactor |
xmen 0:88f4eeea871a 290 \*-----------------------------------------------------------------------------*/
xmen 0:88f4eeea871a 291 #include "8x16.h"
xmen 0:88f4eeea871a 292 void LCD_PutChar8x16(unsigned short x, unsigned short y, char c, unsigned int f, unsigned int b) {
xmen 0:88f4eeea871a 293 register unsigned int i,j;
xmen 0:88f4eeea871a 294
xmen 0:88f4eeea871a 295 LCD_SetArea(x,y,x+8-1,y+16-1);
xmen 0:88f4eeea871a 296 LCD_Reg( R34 ); /* Prepare to write GRAM */
xmen 0:88f4eeea871a 297
xmen 0:88f4eeea871a 298 for (i=0; i<16;i++) {
xmen 0:88f4eeea871a 299 unsigned char m=Font8x16[c*16+i];
xmen 0:88f4eeea871a 300 for (j=0;j<8;j++) {
xmen 0:88f4eeea871a 301 if ((m&0x80))
xmen 0:88f4eeea871a 302 LCD_WriteRAM( f );
xmen 0:88f4eeea871a 303 else
xmen 0:88f4eeea871a 304 LCD_WriteRAM( b );
xmen 0:88f4eeea871a 305 m<<=1;
xmen 0:88f4eeea871a 306 }
xmen 0:88f4eeea871a 307 }
xmen 0:88f4eeea871a 308 }
xmen 0:88f4eeea871a 309 /*-----------------------------------------------------------------------------*\
xmen 0:88f4eeea871a 310 | LCD_PutChar8x8 : Displays a 8x8 pixel charactor |
xmen 0:88f4eeea871a 311 \*-----------------------------------------------------------------------------*/
xmen 0:88f4eeea871a 312 #include "8x8h.h"
xmen 0:88f4eeea871a 313 void LCD_PutChar8x8(unsigned short x, unsigned short y, char c, unsigned int f, unsigned int b) {
xmen 0:88f4eeea871a 314 register unsigned int i,j;
xmen 0:88f4eeea871a 315
xmen 0:88f4eeea871a 316 LCD_SetArea(x,y,x+8-1,y+8-1);
xmen 0:88f4eeea871a 317 LCD_Reg( R34 ); /* Prepare to write GRAM */
xmen 0:88f4eeea871a 318
xmen 0:88f4eeea871a 319 for (i=0; i<8;i++) {
xmen 0:88f4eeea871a 320 unsigned char m=Font8x8[c][i];
xmen 0:88f4eeea871a 321 for (j=0;j<8;j++) {
xmen 0:88f4eeea871a 322 if ((m&0x80))
xmen 0:88f4eeea871a 323 LCD_WriteRAM( f );
xmen 0:88f4eeea871a 324 else
xmen 0:88f4eeea871a 325 LCD_WriteRAM( b );
xmen 0:88f4eeea871a 326 m<<=1;
xmen 0:88f4eeea871a 327 }
xmen 0:88f4eeea871a 328 }
xmen 0:88f4eeea871a 329 }
xmen 0:88f4eeea871a 330 /*-----------------------------------------------------------------------------*\
xmen 0:88f4eeea871a 331 | LCD_PutGB1616 : Displays a Chinese charactor use small libary |
xmen 0:88f4eeea871a 332 \*-----------------------------------------------------------------------------*/
xmen 0:88f4eeea871a 333
xmen 0:88f4eeea871a 334 /*-----------------------------------------------------------------------------*\
xmen 0:88f4eeea871a 335 | LCD_PutChar : Displays a charactor on Font |
xmen 0:88f4eeea871a 336 \*-----------------------------------------------------------------------------*/
xmen 0:88f4eeea871a 337 void LCD_PutChar(unsigned short x, unsigned short y, char c, unsigned int f, unsigned int b) {
xmen 0:88f4eeea871a 338 if ( Font )
xmen 0:88f4eeea871a 339 LCD_PutChar8x8( x, y, c, f, b );
xmen 0:88f4eeea871a 340 else
xmen 0:88f4eeea871a 341 LCD_PutChar8x16( x, y, c, f, b );
xmen 0:88f4eeea871a 342 }
xmen 0:88f4eeea871a 343 /*-----------------------------------------------------------------------------*\
xmen 0:88f4eeea871a 344 | LCD_PutString : Displays a string |
xmen 0:88f4eeea871a 345 \*-----------------------------------------------------------------------------*/
xmen 0:88f4eeea871a 346 void LCD_PutString(unsigned short x, unsigned short y, char *s, unsigned int f, unsigned int b) {
xmen 0:88f4eeea871a 347 register unsigned char l=0;
xmen 0:88f4eeea871a 348 while (*s) {
xmen 0:88f4eeea871a 349 if ( *s < 0x80 ) {
xmen 0:88f4eeea871a 350 LCD_PutChar(x+l*8,y,*s,f,b);
xmen 0:88f4eeea871a 351 s++;
xmen 0:88f4eeea871a 352 l++;
xmen 0:88f4eeea871a 353 } else {
xmen 0:88f4eeea871a 354 // LCD_PutGB1616(x+l*8,y,(unsigned char *)s,f,b);
xmen 0:88f4eeea871a 355 s+=2;
xmen 0:88f4eeea871a 356 l+=2;
xmen 0:88f4eeea871a 357 }
xmen 0:88f4eeea871a 358 }
xmen 0:88f4eeea871a 359 }
xmen 0:88f4eeea871a 360
xmen 0:88f4eeea871a 361
xmen 0:88f4eeea871a 362 void LCD_RESIM_YATAY(int x0,int y0,int g,int y,int rg,int ry, const unsigned char bmp[]) {
xmen 0:88f4eeea871a 363
xmen 0:88f4eeea871a 364 int i,j;
xmen 0:88f4eeea871a 365 int p=0;
xmen 0:88f4eeea871a 366 int c;
xmen 0:88f4eeea871a 367
xmen 0:88f4eeea871a 368 LCD_SetArea(x0,y0,x0+g-1,y0+y-1);
xmen 0:88f4eeea871a 369 LCD_Reg( R34 ); /* Prepare to write GRAM */
xmen 0:88f4eeea871a 370
xmen 0:88f4eeea871a 371 for (j= 0;j<y;j++) {
xmen 0:88f4eeea871a 372 p=0;
xmen 0:88f4eeea871a 373 for ( i = x0; i<x0+g; i++ ) {
xmen 0:88f4eeea871a 374 c = bmp[p+1+j*rg*2] | (bmp[p +j*rg*2]<<8) ;
xmen 0:88f4eeea871a 375 LCD_WriteRAM(c);
xmen 0:88f4eeea871a 376 p = p + 2;
xmen 0:88f4eeea871a 377
xmen 0:88f4eeea871a 378 }
xmen 0:88f4eeea871a 379
xmen 0:88f4eeea871a 380 }
xmen 0:88f4eeea871a 381
xmen 0:88f4eeea871a 382
xmen 0:88f4eeea871a 383 }
xmen 0:88f4eeea871a 384
xmen 0:88f4eeea871a 385
xmen 0:88f4eeea871a 386 /*----------------------------------------------------------*\
xmen 0:88f4eeea871a 387 | END OF FILE |
xmen 0:88f4eeea871a 388 \*----------------------------------------------------------*/