ibrahim edhem
/
landscope
metal detector software
lcd.c@0:88f4eeea871a, 2011-03-19 (annotated)
- Committer:
- xmen
- Date:
- Sat Mar 19 20:35:51 2011 +0000
- Revision:
- 0:88f4eeea871a
Who changed what in which revision?
User | Revision | Line number | New 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 ����SPIʱ�ӷ�Ƶ |
xmen | 0:88f4eeea871a | 44 | (0x01 << 7) | // CPHA ʱ�������λ,��SPIģʽ��Ч |
xmen | 0:88f4eeea871a | 45 | (0x01 << 6) | // CPOL ʱ�������,��SPIģʽ��Ч |
xmen | 0:88f4eeea871a | 46 | (0x00 << 4) | // FRF ֡��ʽ 00=SPI,01=SSI,10=Microwire,11=���� |
xmen | 0:88f4eeea871a | 47 | (0x07 << 0); // DSS ��ݳ���,0000-0010=����,0011=4λ,0111=8λ,1111=16λ |
xmen | 0:88f4eeea871a | 48 | |
xmen | 0:88f4eeea871a | 49 | SSP1CR1 = (0x00 << 3) | // SOD �ӻ�������,1=��ֹ,0=���� |
xmen | 0:88f4eeea871a | 50 | (0x00 << 2) | // MS ���ѡ��,0=���,1=�ӻ� |
xmen | 0:88f4eeea871a | 51 | (0x01 << 1) | // SSE SSPʹ��,1=����SSP�������豸ͨ�� |
xmen | 0:88f4eeea871a | 52 | (0x00 << 0); // LBM ��дģʽ |
xmen | 0:88f4eeea871a | 53 | |
xmen | 0:88f4eeea871a | 54 | //SSPCPSR = 0x02; // PCLK��Ƶֵ |
xmen | 0:88f4eeea871a | 55 | SSP1CPSR = 0x04; // PCLK��Ƶֵ |
xmen | 0:88f4eeea871a | 56 | SSP1IMSC = 0x07; // �ж���μĴ��� |
xmen | 0:88f4eeea871a | 57 | SSP1ICR = 0x03; // �ж����Ĵ��� |
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 | // �ȴ�SPIF��λ�����ȴ���ݷ������ |
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; // ����SPI�ܽ���� |
xmen | 0:88f4eeea871a | 148 | PINSEL1 |= 0x000000A8; // ����SPI�ܽ���� |
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 | \*----------------------------------------------------------*/ |