編集中のプログラムです。 一時的にパブリッシュしました。 タッチパネル部分は未確認です。 It is a program while editing it. To pass it to the person, it shared.

Dependencies:   mbed

Committer:
jksoft
Date:
Thu Sep 29 00:55:26 2011 +0000
Revision:
1:9869086496f6
Parent:
0:f5f8e3417215

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jksoft 0:f5f8e3417215 1
jksoft 0:f5f8e3417215 2 #include "mbed.h"
jksoft 0:f5f8e3417215 3 #include "TCLcd.h"
jksoft 0:f5f8e3417215 4 #include "font.h"
jksoft 0:f5f8e3417215 5
jksoft 0:f5f8e3417215 6 Serial pc(USBTX, USBRX); // tx, rx
jksoft 0:f5f8e3417215 7
jksoft 0:f5f8e3417215 8
jksoft 0:f5f8e3417215 9 signed long TCLcd::search_font_area( unsigned short code )
jksoft 0:f5f8e3417215 10 {
jksoft 0:f5f8e3417215 11 unsigned short i;
jksoft 0:f5f8e3417215 12
jksoft 0:f5f8e3417215 13 for(i=0;i<fnt_head.Tnum;i++)
jksoft 0:f5f8e3417215 14 {
jksoft 0:f5f8e3417215 15 if( (fnt_head.Block[i].Start<=code) && (fnt_head.Block[i].End>=code) )
jksoft 0:f5f8e3417215 16 {
jksoft 0:f5f8e3417215 17 return(i);
jksoft 0:f5f8e3417215 18 }
jksoft 0:f5f8e3417215 19 }
jksoft 0:f5f8e3417215 20
jksoft 0:f5f8e3417215 21 return(-1);
jksoft 0:f5f8e3417215 22 }
jksoft 0:f5f8e3417215 23
jksoft 0:f5f8e3417215 24 signed long TCLcd::get_font_pt( unsigned short code ,unsigned char *chr )
jksoft 0:f5f8e3417215 25 {
jksoft 0:f5f8e3417215 26 signed long font_area;
jksoft 0:f5f8e3417215 27 unsigned long offset;
jksoft 0:f5f8e3417215 28 unsigned long addr;
jksoft 0:f5f8e3417215 29
jksoft 0:f5f8e3417215 30 font_area = search_font_area(code);
jksoft 0:f5f8e3417215 31
jksoft 0:f5f8e3417215 32 if(font_area == -1)
jksoft 0:f5f8e3417215 33 {
jksoft 0:f5f8e3417215 34 code = 0x81a0;
jksoft 0:f5f8e3417215 35 font_area = search_font_area(code);
jksoft 0:f5f8e3417215 36 }
jksoft 0:f5f8e3417215 37
jksoft 0:f5f8e3417215 38 offset = (unsigned long)code - (unsigned long)fnt_head.Block[font_area].Start;
jksoft 0:f5f8e3417215 39
jksoft 0:f5f8e3417215 40 addr = ((unsigned long)font_search_tbl[font_area] + offset) * ((fnt_head.XSize >> 3) * fnt_head.YSize);
jksoft 0:f5f8e3417215 41
jksoft 0:f5f8e3417215 42 addr += font_head_size;
jksoft 0:f5f8e3417215 43
jksoft 0:f5f8e3417215 44 memcpy( chr ,&font[addr] ,8 );
jksoft 0:f5f8e3417215 45
jksoft 0:f5f8e3417215 46 return( 0 );
jksoft 0:f5f8e3417215 47 }
jksoft 0:f5f8e3417215 48
jksoft 0:f5f8e3417215 49 int TCLcd::putc(int value)
jksoft 0:f5f8e3417215 50 {
jksoft 0:f5f8e3417215 51 static unsigned char tmp[2] = { 0 , 0 };
jksoft 0:f5f8e3417215 52 static int flag = 0;
jksoft 0:f5f8e3417215 53
jksoft 0:f5f8e3417215 54 if (value == '\n')
jksoft 0:f5f8e3417215 55 {
jksoft 0:f5f8e3417215 56 _column = 0;
jksoft 0:f5f8e3417215 57 _row+=8;
jksoft 0:f5f8e3417215 58 if (_row >= (ENDROW)) {
jksoft 0:f5f8e3417215 59 _row = 0;
jksoft 0:f5f8e3417215 60 }
jksoft 0:f5f8e3417215 61 }
jksoft 0:f5f8e3417215 62 else if(value == '\r')
jksoft 0:f5f8e3417215 63 {
jksoft 0:f5f8e3417215 64
jksoft 0:f5f8e3417215 65 }
jksoft 0:f5f8e3417215 66 else if(flag == 1)
jksoft 0:f5f8e3417215 67 {
jksoft 0:f5f8e3417215 68 flag = 0;
jksoft 0:f5f8e3417215 69 tmp[1] = value;
jksoft 0:f5f8e3417215 70 putch2( _column , _row , &tmp[0] , BLUE , WHITE );
jksoft 0:f5f8e3417215 71 _column+=8;
jksoft 0:f5f8e3417215 72 if (_column >= (ENDCOL)) {
jksoft 0:f5f8e3417215 73 _column = 0;
jksoft 0:f5f8e3417215 74 _row+=8;
jksoft 0:f5f8e3417215 75 if (_row >= (ENDROW)) {
jksoft 0:f5f8e3417215 76 _row = 0;
jksoft 0:f5f8e3417215 77 }
jksoft 0:f5f8e3417215 78 }
jksoft 0:f5f8e3417215 79 }
jksoft 0:f5f8e3417215 80 else if((value >= 0x81) && (value <= 0xea))
jksoft 0:f5f8e3417215 81 {
jksoft 0:f5f8e3417215 82 tmp[0] = value;
jksoft 0:f5f8e3417215 83 flag = 1;
jksoft 0:f5f8e3417215 84 }
jksoft 0:f5f8e3417215 85 else
jksoft 0:f5f8e3417215 86 {
jksoft 0:f5f8e3417215 87 #if 0
jksoft 0:f5f8e3417215 88 _column++;
jksoft 0:f5f8e3417215 89 if (_column >= ENDCOL) {
jksoft 0:f5f8e3417215 90 _column = 0;
jksoft 0:f5f8e3417215 91 _row++;
jksoft 0:f5f8e3417215 92 if (_row >= ENDROW) {
jksoft 0:f5f8e3417215 93 _row = 0;
jksoft 0:f5f8e3417215 94 }
jksoft 0:f5f8e3417215 95 }
jksoft 0:f5f8e3417215 96 #endif
jksoft 0:f5f8e3417215 97 }
jksoft 0:f5f8e3417215 98 return value;
jksoft 0:f5f8e3417215 99 }
jksoft 0:f5f8e3417215 100
jksoft 0:f5f8e3417215 101
jksoft 0:f5f8e3417215 102 unsigned short TCLcd::putch2( short x, short y, unsigned char* c, unsigned short fg, unsigned short bg)
jksoft 0:f5f8e3417215 103 {
jksoft 0:f5f8e3417215 104 unsigned char i,j;
jksoft 0:f5f8e3417215 105 unsigned short select[2] = { bg , fg };
jksoft 0:f5f8e3417215 106 unsigned short tmp;
jksoft 0:f5f8e3417215 107 unsigned char chr[8];
jksoft 0:f5f8e3417215 108
jksoft 0:f5f8e3417215 109 tmp = c[0];
jksoft 0:f5f8e3417215 110
jksoft 0:f5f8e3417215 111 tmp <<= 8;
jksoft 0:f5f8e3417215 112
jksoft 0:f5f8e3417215 113 tmp |= c[1];
jksoft 0:f5f8e3417215 114
jksoft 0:f5f8e3417215 115 pc.printf( " dat = %02x \r",tmp);
jksoft 0:f5f8e3417215 116
jksoft 0:f5f8e3417215 117 get_font_pt(tmp,&chr[0]);
jksoft 0:f5f8e3417215 118
jksoft 0:f5f8e3417215 119 for(i=0;i<8;i+=1)
jksoft 0:f5f8e3417215 120 {
jksoft 0:f5f8e3417215 121 for(j=0;j<8;j++)
jksoft 0:f5f8e3417215 122 {
jksoft 0:f5f8e3417215 123 lcd_Pixel(x+j, y+i, select[((chr[i] >> (7-j)) & 0x01)]);
jksoft 0:f5f8e3417215 124 }
jksoft 0:f5f8e3417215 125 }
jksoft 0:f5f8e3417215 126 x += 8;
jksoft 0:f5f8e3417215 127 return x;
jksoft 0:f5f8e3417215 128 }
jksoft 0:f5f8e3417215 129
jksoft 0:f5f8e3417215 130 TCLcd::TCLcd(PinName db10 ,PinName db11 ,PinName db12 ,PinName db13 ,PinName db14 ,PinName db15 ,PinName db16 ,PinName db17 ,
jksoft 0:f5f8e3417215 131 PinName wr ,PinName rs ,PinName cs ,PinName reset) : _bus( db10,db11,db12,db13,db14,db15,db16,db17 ) , _wr(wr),_rs(rs),_cs(cs),_reset(reset)
jksoft 0:f5f8e3417215 132 {
jksoft 0:f5f8e3417215 133 int i;
jksoft 0:f5f8e3417215 134 wait_ms(20);
jksoft 0:f5f8e3417215 135
jksoft 0:f5f8e3417215 136 _cs = 1;
jksoft 0:f5f8e3417215 137 _wr = 1;
jksoft 0:f5f8e3417215 138 _reset = 0;
jksoft 0:f5f8e3417215 139 wait_ms(1);
jksoft 0:f5f8e3417215 140 _reset = 1;
jksoft 0:f5f8e3417215 141 wait_ms(25);
jksoft 0:f5f8e3417215 142
jksoft 0:f5f8e3417215 143 lcd_out(0x00E3, 0x3008); // Set internal timing
jksoft 0:f5f8e3417215 144 lcd_out(0x00E7, 0x0012); // Set internal timing
jksoft 0:f5f8e3417215 145 lcd_out(0x00EF, 0x1231); // Set internal timing
jksoft 0:f5f8e3417215 146 lcd_out(0x0001, 0x0000); // set SS and SM bit
jksoft 0:f5f8e3417215 147 lcd_out(0x0002, 0x0700); // set line inversion
jksoft 0:f5f8e3417215 148 lcd_out(0x0003, 0x1018); // set GRAM write direction and BGR=1, 16bit color
jksoft 0:f5f8e3417215 149 lcd_out(0x0004, 0x0000); // Resize register
jksoft 0:f5f8e3417215 150 lcd_out(0x0008, 0x0207); // set the back porch and front porch
jksoft 0:f5f8e3417215 151 lcd_out(0x0009, 0x0000); // set non-display area refresh cycle ISC[3:0]
jksoft 0:f5f8e3417215 152 lcd_out(0x000A, 0x0000); // FMARK function
jksoft 0:f5f8e3417215 153 lcd_out(0x000C, 0x0000); // RGB interface setting
jksoft 0:f5f8e3417215 154 lcd_out(0x000D, 0x0000); // Frame marker Position
jksoft 0:f5f8e3417215 155 lcd_out(0x000F, 0x0000); // RGB interface polarity
jksoft 0:f5f8e3417215 156 /********* power on seq **************/
jksoft 0:f5f8e3417215 157 lcd_out(0x0010, 0x0000); // SAP, BT[3:0], AP[2:0], DSTB, SLP, STB
jksoft 0:f5f8e3417215 158 lcd_out(0x0011, 0x0007); // DC1[2:0], DC0[2:0], VC[2:0]
jksoft 0:f5f8e3417215 159 lcd_out(0x0012, 0x0000); // VREG1OUT voltage
jksoft 0:f5f8e3417215 160 lcd_out(0x0013, 0x0000); // VDV[4:0] for VCOM amplitude
jksoft 0:f5f8e3417215 161 wait_ms(200);
jksoft 0:f5f8e3417215 162 lcd_out(0x0010, 0x1490); // SAP, BT[3:0], AP[2:0], DSTB, SLP, STB
jksoft 0:f5f8e3417215 163 lcd_out(0x0011, 0x0227); // R11h=0x0221 at VCI=3.3V ,DC1[2:0], DC0[2:0], VC[2:0]
jksoft 0:f5f8e3417215 164 wait_ms(50);
jksoft 0:f5f8e3417215 165 lcd_out(0x0012, 0x001c); // External reference voltage= Vci;
jksoft 0:f5f8e3417215 166 wait_ms(50);
jksoft 0:f5f8e3417215 167 lcd_out(0x0013, 0x0A00); // R13=0F00 when R12=009E;VDV[4:0] for VCOM amplitude
jksoft 0:f5f8e3417215 168 lcd_out(0x0029, 0x000F); // R29=0019 when R12=009E;VCM[5:0] for VCOMH//0012//
jksoft 0:f5f8e3417215 169 lcd_out(0x002B, 0x000D); // Frame Rate = 91Hz
jksoft 0:f5f8e3417215 170 wait_ms(50);
jksoft 0:f5f8e3417215 171 lcd_out(0x0020, 0x0000); // GRAM horizontal Address
jksoft 0:f5f8e3417215 172 lcd_out(0x0021, 0x0000); // GRAM Vertical Address
jksoft 0:f5f8e3417215 173 /********** gammer **********/
jksoft 0:f5f8e3417215 174 lcd_out(0x0030, 0x0000);
jksoft 0:f5f8e3417215 175 lcd_out(0x0031, 0x0203);
jksoft 0:f5f8e3417215 176 lcd_out(0x0032, 0x0001);
jksoft 0:f5f8e3417215 177 lcd_out(0x0035, 0x0205);
jksoft 0:f5f8e3417215 178 lcd_out(0x0036, 0x030C);
jksoft 0:f5f8e3417215 179 lcd_out(0x0037, 0x0607);
jksoft 0:f5f8e3417215 180 lcd_out(0x0038, 0x0405);
jksoft 0:f5f8e3417215 181 lcd_out(0x0039, 0x0707);
jksoft 0:f5f8e3417215 182 lcd_out(0x003C, 0x0502);
jksoft 0:f5f8e3417215 183 lcd_out(0x003D, 0x1008);
jksoft 0:f5f8e3417215 184 /*********** GRAM *********/
jksoft 0:f5f8e3417215 185 lcd_out(0x0050, 0x0000); // Horizontal GRAM Start Address
jksoft 0:f5f8e3417215 186 lcd_out(0x0051, 0x00EF); // Horizontal GRAM End Address
jksoft 0:f5f8e3417215 187 lcd_out(0x0052, 0x0000); // Vertical GRAM Start Address
jksoft 0:f5f8e3417215 188 lcd_out(0x0053, 0x013F); // Vertical GRAM Start Address
jksoft 0:f5f8e3417215 189 lcd_out(0x0060, 0xA700); // Gate Scan Line wide dsp
jksoft 0:f5f8e3417215 190 lcd_out(0x0061, 0x0001); // NDL,VLE, REV
jksoft 0:f5f8e3417215 191 lcd_out(0x006A, 0x0000); // set scrolling line
jksoft 0:f5f8e3417215 192 /************* bubun ************/
jksoft 0:f5f8e3417215 193 lcd_out(0x0080, 0x0000); // p dsp 1
jksoft 0:f5f8e3417215 194 lcd_out(0x0081, 0x0000); // p dsp 1 start addr
jksoft 0:f5f8e3417215 195 lcd_out(0x0082, 0x0000); // p dsp 1 end addr
jksoft 0:f5f8e3417215 196 lcd_out(0x0083, 0x0000); // p dsp 1
jksoft 0:f5f8e3417215 197 lcd_out(0x0084, 0x0000); // p dsp 1 start addr
jksoft 0:f5f8e3417215 198 lcd_out(0x0085, 0x0000); // p dsp 1 end addr
jksoft 0:f5f8e3417215 199 /************** panel ************/
jksoft 0:f5f8e3417215 200 lcd_out(0x0090, 0x0010); // 1Line Clock Num
jksoft 0:f5f8e3417215 201 lcd_out(0x0092, 0x0600); // Gate Overlap Clock Num
jksoft 0:f5f8e3417215 202 lcd_out(0x0093, 0x0003); // Output Timing
jksoft 0:f5f8e3417215 203 lcd_out(0x0095, 0x0110); // RGB 1Line Clock Num
jksoft 0:f5f8e3417215 204 lcd_out(0x0097, 0x0000); // Output Timing
jksoft 0:f5f8e3417215 205 lcd_out(0x0098, 0x0000); // Output Timing
jksoft 0:f5f8e3417215 206 /***** dsp cont *****/
jksoft 0:f5f8e3417215 207 lcd_out(0x0007, 0x0133); // 262K color and display ON
jksoft 0:f5f8e3417215 208 wait_ms(100);
jksoft 0:f5f8e3417215 209
jksoft 0:f5f8e3417215 210 memcpy( &fnt_head , &font[0] , 18);
jksoft 0:f5f8e3417215 211 font_head_size = 18 + fnt_head.Tnum * 4;
jksoft 0:f5f8e3417215 212 for (i=0;i<fnt_head.Tnum;i++)
jksoft 0:f5f8e3417215 213 {
jksoft 0:f5f8e3417215 214 fnt_head.Block[i].Start = font[19 + i*4];
jksoft 0:f5f8e3417215 215 fnt_head.Block[i].Start <<= 8;
jksoft 0:f5f8e3417215 216 fnt_head.Block[i].Start |= font[18 + i*4];
jksoft 0:f5f8e3417215 217 fnt_head.Block[i].End = font[21 + i*4];
jksoft 0:f5f8e3417215 218 fnt_head.Block[i].End <<= 8;
jksoft 0:f5f8e3417215 219 fnt_head.Block[i].End |= font[20 + i*4];
jksoft 0:f5f8e3417215 220 }
jksoft 0:f5f8e3417215 221 font_search_tbl[0] = 0;
jksoft 0:f5f8e3417215 222
jksoft 0:f5f8e3417215 223 for (i=1;i<fnt_head.Tnum;i++)
jksoft 0:f5f8e3417215 224 {
jksoft 0:f5f8e3417215 225 font_search_tbl[i] = (fnt_head.Block[i-1].End - fnt_head.Block[i-1].Start + 1) + font_search_tbl[i-1];
jksoft 0:f5f8e3417215 226 }
jksoft 0:f5f8e3417215 227 _column = 0;
jksoft 0:f5f8e3417215 228 _row = 8;
jksoft 0:f5f8e3417215 229 }
jksoft 0:f5f8e3417215 230
jksoft 0:f5f8e3417215 231
jksoft 0:f5f8e3417215 232 void TCLcd::lcd_out(unsigned short index, unsigned short data)
jksoft 0:f5f8e3417215 233 {
jksoft 0:f5f8e3417215 234 __disable_fault_irq();
jksoft 0:f5f8e3417215 235 // Index up byte
jksoft 0:f5f8e3417215 236 _cs = 0; // CS Low
jksoft 0:f5f8e3417215 237 _rs = 0; // Command
jksoft 0:f5f8e3417215 238 //_bus = (index & 0xFF00) | (_bus & 0x00FF);
jksoft 0:f5f8e3417215 239 _bus = index >> 8;
jksoft 0:f5f8e3417215 240 _wr = 0; // WR out
jksoft 0:f5f8e3417215 241 __NOP();
jksoft 0:f5f8e3417215 242 _wr = 1;
jksoft 0:f5f8e3417215 243 // Index down byte
jksoft 0:f5f8e3417215 244 //_bus = ((index<<8)&0xFF00) | (_bus & 0x00FF);
jksoft 0:f5f8e3417215 245 _bus = index & 0x00FF;
jksoft 0:f5f8e3417215 246 _wr = 0; // WR out
jksoft 0:f5f8e3417215 247 __NOP();
jksoft 0:f5f8e3417215 248 _wr = 1;
jksoft 0:f5f8e3417215 249 // Data up byte
jksoft 0:f5f8e3417215 250 _rs = 1; // Data
jksoft 0:f5f8e3417215 251 //_bus = (data & 0xFF00) | (_bus & 0x00FF);
jksoft 0:f5f8e3417215 252 _bus = data >> 8;
jksoft 0:f5f8e3417215 253 _wr = 0; // WR out
jksoft 0:f5f8e3417215 254 __NOP();
jksoft 0:f5f8e3417215 255 _wr = 1;
jksoft 0:f5f8e3417215 256 // Index down byte
jksoft 0:f5f8e3417215 257 //_bus = ((data<<8)&0xFF00) | (_bus & 0x00FF);
jksoft 0:f5f8e3417215 258 _bus = data & 0x00FF;
jksoft 0:f5f8e3417215 259 _wr = 0; // WR out
jksoft 0:f5f8e3417215 260 __NOP();
jksoft 0:f5f8e3417215 261 _wr = 1;
jksoft 0:f5f8e3417215 262 _cs = 1; // CS High
jksoft 0:f5f8e3417215 263 __enable_fault_irq();
jksoft 0:f5f8e3417215 264 }
jksoft 0:f5f8e3417215 265
jksoft 0:f5f8e3417215 266
jksoft 0:f5f8e3417215 267 // DSP Clear
jksoft 0:f5f8e3417215 268 void TCLcd::lcd_Clear(unsigned short Color)
jksoft 0:f5f8e3417215 269 {
jksoft 0:f5f8e3417215 270 int i, j;
jksoft 0:f5f8e3417215 271
jksoft 0:f5f8e3417215 272 lcd_out(0x0020, 0); // base set
jksoft 0:f5f8e3417215 273 lcd_out(0x0021, 0);
jksoft 0:f5f8e3417215 274 for( j=0; j<ENDROW; j++){ // Y all
jksoft 0:f5f8e3417215 275 for(i=0; i<ENDCOL; i++){ // X all
jksoft 0:f5f8e3417215 276 lcd_out(0x0022, Color); // own color
jksoft 0:f5f8e3417215 277 }
jksoft 0:f5f8e3417215 278 }
jksoft 0:f5f8e3417215 279 }
jksoft 0:f5f8e3417215 280
jksoft 0:f5f8e3417215 281
jksoft 0:f5f8e3417215 282
jksoft 0:f5f8e3417215 283 /***********************************
jksoft 0:f5f8e3417215 284 * 1pixel
jksoft 0:f5f8e3417215 285 * (0,0)-(161,131)
jksoft 0:f5f8e3417215 286 ***********************************/
jksoft 0:f5f8e3417215 287 void TCLcd::lcd_Pixel(short Xpos, short Ypos, unsigned short Color)
jksoft 0:f5f8e3417215 288 {
jksoft 0:f5f8e3417215 289
jksoft 0:f5f8e3417215 290 if((Xpos<ENDCOL) && (Ypos<ENDROW)){
jksoft 0:f5f8e3417215 291 lcd_out(0x0020, Ypos); // pos
jksoft 0:f5f8e3417215 292 lcd_out(0x0021, Xpos);
jksoft 0:f5f8e3417215 293 lcd_out(0x0022, Color); // dot dsp
jksoft 0:f5f8e3417215 294 }
jksoft 0:f5f8e3417215 295 }
jksoft 0:f5f8e3417215 296
jksoft 0:f5f8e3417215 297 /***************************
jksoft 0:f5f8e3417215 298 * line
jksoft 0:f5f8e3417215 299 ***************************/
jksoft 0:f5f8e3417215 300 #define abs(a) (((a)>0) ? (a) : -(a))
jksoft 0:f5f8e3417215 301 void TCLcd::lcd_Line(short x0, short y0, short x1, short y1, unsigned short Color)
jksoft 0:f5f8e3417215 302 {
jksoft 0:f5f8e3417215 303 short steep, t;
jksoft 0:f5f8e3417215 304 short deltax, deltay, error;
jksoft 0:f5f8e3417215 305 short x, y;
jksoft 0:f5f8e3417215 306 short ystep;
jksoft 0:f5f8e3417215 307
jksoft 0:f5f8e3417215 308 y0=ENDROW-y0 -1; //
jksoft 0:f5f8e3417215 309 y1=ENDROW-y1 -1;
jksoft 0:f5f8e3417215 310
jksoft 0:f5f8e3417215 311 steep = (abs(y1 - y0) > abs(x1 - x0));
jksoft 0:f5f8e3417215 312 if(steep){
jksoft 0:f5f8e3417215 313 t = x0; x0 = y0; y0 = t;
jksoft 0:f5f8e3417215 314 t = x1; x1 = y1; y1 = t;
jksoft 0:f5f8e3417215 315 }
jksoft 0:f5f8e3417215 316 if(x0 > x1) {
jksoft 0:f5f8e3417215 317 t = x0; x0 = x1; x1 = t;
jksoft 0:f5f8e3417215 318 t = y0; y0 = y1; y1 = t;
jksoft 0:f5f8e3417215 319 }
jksoft 0:f5f8e3417215 320 deltax = x1 - x0; //
jksoft 0:f5f8e3417215 321 deltay = abs(y1 - y0);
jksoft 0:f5f8e3417215 322 error = 0;
jksoft 0:f5f8e3417215 323 y = y0;
jksoft 0:f5f8e3417215 324 ///
jksoft 0:f5f8e3417215 325 if(y0 < y1) ystep = 1; else ystep = -1;
jksoft 0:f5f8e3417215 326 ///
jksoft 0:f5f8e3417215 327 for(x=x0; x<=x1; x++) {
jksoft 0:f5f8e3417215 328 if(steep) lcd_Pixel(y,x,Color); else lcd_Pixel(x,y,Color);
jksoft 0:f5f8e3417215 329 error += deltay;
jksoft 0:f5f8e3417215 330 if((error << 1) >= deltax) {
jksoft 0:f5f8e3417215 331 y += ystep;
jksoft 0:f5f8e3417215 332 error -= deltax;
jksoft 0:f5f8e3417215 333 }
jksoft 0:f5f8e3417215 334 }
jksoft 0:f5f8e3417215 335 }
jksoft 0:f5f8e3417215 336
jksoft 0:f5f8e3417215 337 /*************************************
jksoft 0:f5f8e3417215 338 * circle
jksoft 0:f5f8e3417215 339 **************************************/
jksoft 0:f5f8e3417215 340 void TCLcd::lcd_Circle(int x0, int y0, int r, unsigned short color)
jksoft 0:f5f8e3417215 341 {
jksoft 0:f5f8e3417215 342 int x = r;
jksoft 0:f5f8e3417215 343 int y = 0;
jksoft 0:f5f8e3417215 344 int F = -2 * r + 3;
jksoft 0:f5f8e3417215 345
jksoft 0:f5f8e3417215 346 while(x >= y){
jksoft 0:f5f8e3417215 347 lcd_Pixel(x0+x, y0+y, color);
jksoft 0:f5f8e3417215 348 lcd_Pixel(x0-x, y0+y, color);
jksoft 0:f5f8e3417215 349 lcd_Pixel(x0+x, y0-y, color);
jksoft 0:f5f8e3417215 350 lcd_Pixel(x0-x, y0-y, color);
jksoft 0:f5f8e3417215 351 lcd_Pixel(x0+y, y0+x, color);
jksoft 0:f5f8e3417215 352 lcd_Pixel(x0-y, y0+x, color);
jksoft 0:f5f8e3417215 353 lcd_Pixel(x0+y, y0-x, color);
jksoft 0:f5f8e3417215 354 lcd_Pixel(x0-y, y0-x, color);
jksoft 0:f5f8e3417215 355 if(F >= 0){
jksoft 0:f5f8e3417215 356 x--;
jksoft 0:f5f8e3417215 357 F -= 4 * x;
jksoft 0:f5f8e3417215 358 }
jksoft 0:f5f8e3417215 359 y++;
jksoft 0:f5f8e3417215 360 F += 4 * y + 2;
jksoft 0:f5f8e3417215 361 }
jksoft 0:f5f8e3417215 362 }
jksoft 0:f5f8e3417215 363 #if 0
jksoft 0:f5f8e3417215 364 /*****************************************
jksoft 0:f5f8e3417215 365 * char dsp
jksoft 0:f5f8e3417215 366 ******************************************/
jksoft 0:f5f8e3417215 367 void TCLcd::lcd_Char(char colum, char line, unsigned char letter, unsigned short Color1, unsigned short Color2){
jksoft 0:f5f8e3417215 368 unsigned char j, i, Mask;
jksoft 0:f5f8e3417215 369
jksoft 0:f5f8e3417215 370 if((colum < XChar) && (line < YLine)){ //
jksoft 0:f5f8e3417215 371 //
jksoft 0:f5f8e3417215 372 for(j=0; j<6; j++){
jksoft 0:f5f8e3417215 373 //
jksoft 0:f5f8e3417215 374 Mask = 0x80;
jksoft 0:f5f8e3417215 375 for(i=0; i<8; i++){
jksoft 0:f5f8e3417215 376 //
jksoft 0:f5f8e3417215 377 if((ANKFont[letter][j*3] & Mask) != 0)
jksoft 0:f5f8e3417215 378 lcd_Pixel(colum*12+i+4, line*14+j*2+2, Color1);
jksoft 0:f5f8e3417215 379 else
jksoft 0:f5f8e3417215 380 lcd_Pixel(colum*12+i+4, line*14+j*2+2, Color2); //
jksoft 0:f5f8e3417215 381 //
jksoft 0:f5f8e3417215 382 if((ANKFont[letter][j*3+2] & Mask) != 0)
jksoft 0:f5f8e3417215 383 lcd_Pixel(colum*12+i+8, line*14+j*2+3, Color1);
jksoft 0:f5f8e3417215 384 else
jksoft 0:f5f8e3417215 385 lcd_Pixel(colum*12+i+8, line*14+j*2+3, Color2); //
jksoft 0:f5f8e3417215 386 Mask = Mask >> 1;
jksoft 0:f5f8e3417215 387 }
jksoft 0:f5f8e3417215 388 //
jksoft 0:f5f8e3417215 389 Mask = 0x80;
jksoft 0:f5f8e3417215 390 //
jksoft 0:f5f8e3417215 391 for(i=0; i<4; i++){
jksoft 0:f5f8e3417215 392 if((ANKFont[letter][j*3+1] & Mask) != 0)
jksoft 0:f5f8e3417215 393 lcd_Pixel(colum*12+i+12, line*14+j*2+2, Color1);
jksoft 0:f5f8e3417215 394 else
jksoft 0:f5f8e3417215 395 lcd_Pixel(colum*12+i+12, line*14+j*2+2, Color2); //
jksoft 0:f5f8e3417215 396 Mask = Mask >> 1;
jksoft 0:f5f8e3417215 397 }
jksoft 0:f5f8e3417215 398 //
jksoft 0:f5f8e3417215 399 for(i=4; i<8; i++){
jksoft 0:f5f8e3417215 400 if((ANKFont[letter][j*3+1] & Mask) != 0)
jksoft 0:f5f8e3417215 401 lcd_Pixel(colum*12+i, line*14+j*2+3, Color1);
jksoft 0:f5f8e3417215 402 else
jksoft 0:f5f8e3417215 403 lcd_Pixel(colum*12+i, line*14+j*2+3, Color2); //
jksoft 0:f5f8e3417215 404 Mask = Mask >> 1;
jksoft 0:f5f8e3417215 405 }
jksoft 0:f5f8e3417215 406 }
jksoft 0:f5f8e3417215 407 }
jksoft 0:f5f8e3417215 408 }
jksoft 0:f5f8e3417215 409 /******************************
jksoft 0:f5f8e3417215 410 * str dsp
jksoft 0:f5f8e3417215 411 ******************************/
jksoft 0:f5f8e3417215 412 void TCLcd::lcd_Str(char colum, char line, char *s, unsigned short Color1, unsigned short Color2)
jksoft 0:f5f8e3417215 413 {
jksoft 0:f5f8e3417215 414 while (*s){
jksoft 0:f5f8e3417215 415 lcd_Char(colum++, line, *s++, Color1, Color2);
jksoft 0:f5f8e3417215 416 if(colum >= XChar){
jksoft 0:f5f8e3417215 417 line++;
jksoft 0:f5f8e3417215 418 colum = 0;
jksoft 0:f5f8e3417215 419 if(line >= YLine)
jksoft 0:f5f8e3417215 420 line = 0;
jksoft 0:f5f8e3417215 421 }
jksoft 0:f5f8e3417215 422 }
jksoft 0:f5f8e3417215 423 }
jksoft 0:f5f8e3417215 424
jksoft 0:f5f8e3417215 425 #endif