編集中のプログラムです。 一時的にパブリッシュしました。 タッチパネル部分は未確認です。 It is a program while editing it. To pass it to the person, it shared.
TCLcd.cpp@1:9869086496f6, 2011-09-29 (annotated)
- Committer:
- jksoft
- Date:
- Thu Sep 29 00:55:26 2011 +0000
- Revision:
- 1:9869086496f6
- Parent:
- 0:f5f8e3417215
Who changed what in which revision?
User | Revision | Line number | New 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 |