FRMD KL25Z <=i2c=> NXP PCF8563 (RTC) FRMD KL25Z SPI=> MCP23S17 => (GLCD) T6963C FRMD KL25Z Tsi => 3 button : <--> <enter> <++> FRMD KL25Z => Bip()

Dependencies:   TSI mbed

Fork of RTC8564NB_Clock by masa miya

Committer:
szjenter
Date:
Wed May 14 04:46:52 2014 +0000
Revision:
2:c271f83a69e4
FRMD KL25Z  <=i2c=>  NXP PCF8563  (RTC); FRMD KL25Z    SPI=> MCP23S17 => (GLCD  T6963C); FRMD KL25Z   Tsi => 3 button :           <-->     <enter>    <++>; FRMD KL25Z => Bip()

Who changed what in which revision?

UserRevisionLine numberNew contents of line
szjenter 2:c271f83a69e4 1 #ifndef GLCDSPI_H
szjenter 2:c271f83a69e4 2 #define GLCDSPI_H
szjenter 2:c271f83a69e4 3
szjenter 2:c271f83a69e4 4 /*** GLCD_spi.h***
szjenter 2:c271f83a69e4 5 * Új változat char* int_string(int)
szjenter 2:c271f83a69e4 6 * MCP23S17 - Microchip MCP23S17 16-bit Port Extender using SPI
szjenter 2:c271f83a69e4 7 * Copyright (c) 2010 Gert van der Knokke
szjenter 2:c271f83a69e4 8 */
szjenter 2:c271f83a69e4 9 #include "mbed.h"
szjenter 2:c271f83a69e4 10
szjenter 2:c271f83a69e4 11 // for 21 characters on a row (6x8 font)
szjenter 2:c271f83a69e4 12 #define LCDFONTSEL 0xFF
szjenter 2:c271f83a69e4 13 // for 16 characters on a row (8x8 font)
szjenter 2:c271f83a69e4 14 // #define LCDFONTSEL 0xDF
szjenter 2:c271f83a69e4 15
szjenter 2:c271f83a69e4 16 #define IODIRA 0x00
szjenter 2:c271f83a69e4 17 #define IODIRB 0x01
szjenter 2:c271f83a69e4 18 #define IPOLA 0x02
szjenter 2:c271f83a69e4 19 #define IPOLB 0x03
szjenter 2:c271f83a69e4 20 #define GPINTENA 0x04
szjenter 2:c271f83a69e4 21 #define GPINTENB 0x05
szjenter 2:c271f83a69e4 22 #define DEFVALA 0x06
szjenter 2:c271f83a69e4 23 #define DEFVALB 0x07
szjenter 2:c271f83a69e4 24 #define INTCONA 0x08
szjenter 2:c271f83a69e4 25 #define INTCONB 0x09
szjenter 2:c271f83a69e4 26 #define IOCONA 0x0A
szjenter 2:c271f83a69e4 27 #define IOCONB 0x0B
szjenter 2:c271f83a69e4 28 #define GPPUA 0x0C
szjenter 2:c271f83a69e4 29 #define GPPUB 0x0D
szjenter 2:c271f83a69e4 30 #define INTFA 0x0E
szjenter 2:c271f83a69e4 31 #define INTFB 0x0F
szjenter 2:c271f83a69e4 32 #define INTCAPA 0x10
szjenter 2:c271f83a69e4 33 #define INTCAPB 0x11
szjenter 2:c271f83a69e4 34 #define GPIOA 0x12
szjenter 2:c271f83a69e4 35 #define GPIOB 0x13
szjenter 2:c271f83a69e4 36 #define OLATA 0x14
szjenter 2:c271f83a69e4 37 #define OLATB 0x15
szjenter 2:c271f83a69e4 38
szjenter 2:c271f83a69e4 39 // LCD pin connections/bit numbers
szjenter 2:c271f83a69e4 40 #define LCD_HALT 0x80
szjenter 2:c271f83a69e4 41 #define LCD_FS 0x20
szjenter 2:c271f83a69e4 42 #define LCD_RST 0x10
szjenter 2:c271f83a69e4 43 #define LCD_CD 0x08
szjenter 2:c271f83a69e4 44 #define LCD_CE 0x04
szjenter 2:c271f83a69e4 45 #define LCD_RD 0x02
szjenter 2:c271f83a69e4 46 #define LCD_WR 0x01
szjenter 2:c271f83a69e4 47
szjenter 2:c271f83a69e4 48 // T6963C OPCODES
szjenter 2:c271f83a69e4 49 #define TXHOME 0x40 // SET TXT HOME ADDRESS
szjenter 2:c271f83a69e4 50 #define TXAREA 0x41 // SET TXT AREA
szjenter 2:c271f83a69e4 51 #define GRHOME 0x42 // SET GRAPHIC HOME ADDRESS
szjenter 2:c271f83a69e4 52 #define GRAREA 0x43 // SET GRAPHIC AREA
szjenter 2:c271f83a69e4 53 #define OFFSET 0x22 // SET OFFSET ADDRESS
szjenter 2:c271f83a69e4 54 #define ADPSET 0x24 // SET ADDRESS POINTER
szjenter 2:c271f83a69e4 55 #define AWRON 0xB0 // SET AUTO WRITE MODE
szjenter 2:c271f83a69e4 56 #define AWROFF 0xB2 // RESET AUTO WRITE MODE
szjenter 2:c271f83a69e4 57
szjenter 2:c271f83a69e4 58
szjenter 2:c271f83a69e4 59 /* This file contains definitions for all of the commands in a t6963. */
szjenter 2:c271f83a69e4 60 /********************************************************************/
szjenter 2:c271f83a69e4 61 /* Register set */
szjenter 2:c271f83a69e4 62 #define CPS 0x21 //Cursor pointer set
szjenter 2:c271f83a69e4 63 #define ORS 0x22 //Offset register set
szjenter 2:c271f83a69e4 64 #define APS 0x24 //Address pointer set
szjenter 2:c271f83a69e4 65 #define THAS 0x40 //Text home address set
szjenter 2:c271f83a69e4 66 #define TAS 0x41 //Text area set
szjenter 2:c271f83a69e4 67 #define GHAS 0x42 //Graphic home address set
szjenter 2:c271f83a69e4 68 #define GAS 0x43 //Graphic area set
szjenter 2:c271f83a69e4 69 #define OM 0x80 //OR mode
szjenter 2:c271f83a69e4 70 #define EM 0x81 //EXOR mode
szjenter 2:c271f83a69e4 71 #define AM 0x83 //AND mode
szjenter 2:c271f83a69e4 72 #define TAM 0x84 //TEXT ATTRIBUTE mode
szjenter 2:c271f83a69e4 73 #define DOF 0x90 //Display OFF
szjenter 2:c271f83a69e4 74 #define CONBOF 0x92 //Cursor ON, Blink OFF
szjenter 2:c271f83a69e4 75 #define CONBON 0x93 //Cursor ON, Blink ON
szjenter 2:c271f83a69e4 76 #define TONGOF 0x94 //Text ON, Graphic OFF
szjenter 2:c271f83a69e4 77 #define TOFGON 0x98 //Text OFF, Graphic ON
szjenter 2:c271f83a69e4 78 #define TONGON 0x9C //Text ON, Graphic ON
szjenter 2:c271f83a69e4 79 #define LC1 0xA0 //1 Line cursor
szjenter 2:c271f83a69e4 80 #define LC2 0xA1 //2 Line cursor
szjenter 2:c271f83a69e4 81 #define LC3 0xA2 //3 Line cursor
szjenter 2:c271f83a69e4 82 #define LC4 0xA3 //4 Line cursor
szjenter 2:c271f83a69e4 83 #define LC5 0xA4 //5 Line cursor
szjenter 2:c271f83a69e4 84 #define LC6 0xA5 //6 Line cursor
szjenter 2:c271f83a69e4 85 #define LC7 0xA6 //7 Line cursor
szjenter 2:c271f83a69e4 86 #define LC8 0xA7 //8 Line cursor
szjenter 2:c271f83a69e4 87 #define DAWS 0xB0 //Data auto write set
szjenter 2:c271f83a69e4 88 #define DARS 0xB1 //Data auto read set
szjenter 2:c271f83a69e4 89 #define AR 0xB2 //Auto reset
szjenter 2:c271f83a69e4 90 #define DWAAI 0xC0 //Data write and ADP increment
szjenter 2:c271f83a69e4 91 #define DRAAI 0xC1 //Data read and ADP increment
szjenter 2:c271f83a69e4 92 #define DWAAD 0xC2 //Data write and ADP decrement
szjenter 2:c271f83a69e4 93 #define DRAAD 0xC3 //Data read and ADP decrement
szjenter 2:c271f83a69e4 94 #define DWAAN 0xC4 //Data write and ADP nonvariable
szjenter 2:c271f83a69e4 95 #define DRAAN 0xC5 //Data read and ADP nonvariable
szjenter 2:c271f83a69e4 96 #define SP 0xE0 //Screen PEEK
szjenter 2:c271f83a69e4 97 #define SC 0xE8 //Screen COPY
szjenter 2:c271f83a69e4 98 #define BR 0xF0 //Bit RESET
szjenter 2:c271f83a69e4 99 #define BS 0xF8 //Bit SET
szjenter 2:c271f83a69e4 100 //add 3 bit data to these
szjenter 2:c271f83a69e4 101 //commands to select bit
szjenter 2:c271f83a69e4 102
szjenter 2:c271f83a69e4 103 // for 21 characters on a row (6x8 font)
szjenter 2:c271f83a69e4 104 #define LCDFONTSEL 0xFF
szjenter 2:c271f83a69e4 105 // for 16 characters on a row (8x8 font)
szjenter 2:c271f83a69e4 106 // #define LCDFONTSEL 0xDF
szjenter 2:c271f83a69e4 107
szjenter 2:c271f83a69e4 108 // lcd dimensions in pixels
szjenter 2:c271f83a69e4 109 #define LCD_XWIDTH 128
szjenter 2:c271f83a69e4 110 #define LCD_YHEIGHT 64
szjenter 2:c271f83a69e4 111
szjenter 2:c271f83a69e4 112 #if LCDFONTSEL == 0xFF
szjenter 2:c271f83a69e4 113 // lcd dimensions in characters
szjenter 2:c271f83a69e4 114 #define LCD_WIDTH 22
szjenter 2:c271f83a69e4 115 #define LCD_HEIGHT 16
szjenter 2:c271f83a69e4 116 #define PIXELWIDTH 6
szjenter 2:c271f83a69e4 117 #else
szjenter 2:c271f83a69e4 118 #define LCD_WIDTH 16
szjenter 2:c271f83a69e4 119 #define LCD_HEIGHT 16
szjenter 2:c271f83a69e4 120 #define PIXELWIDTH 8
szjenter 2:c271f83a69e4 121 #endif
szjenter 2:c271f83a69e4 122
szjenter 2:c271f83a69e4 123 #define TEXT_STARTADDRESS 0x0000
szjenter 2:c271f83a69e4 124 #define GRAPHIC_STARTADDRESS 0x1000
szjenter 2:c271f83a69e4 125
szjenter 2:c271f83a69e4 126
szjenter 2:c271f83a69e4 127 #define CENTERX 50
szjenter 2:c271f83a69e4 128 #define CENTERY 32
szjenter 2:c271f83a69e4 129 #define INNER_RADIUS 20
szjenter 2:c271f83a69e4 130 #define OUTER_RADIUS 25
szjenter 2:c271f83a69e4 131 #define CENTER_CIRCLE 5
szjenter 2:c271f83a69e4 132
szjenter 2:c271f83a69e4 133 extern char d[14]={0}; // inttochar() visszaadott érték string-je
szjenter 2:c271f83a69e4 134
szjenter 2:c271f83a69e4 135 //DigitalOut K_LED(LED1), P_LED(LED3), Z_LED(LED2);
szjenter 2:c271f83a69e4 136 SPI spi(PTC6, PTC7, PTC5); // mosi, miso, sclk
szjenter 2:c271f83a69e4 137 DigitalOut cs2(PTC10); //CS1=PTC11; CS2=PTC10; CS3=PTC4 Hardware CS a panelon
szjenter 2:c271f83a69e4 138 //----------------------------------------------------
szjenter 2:c271f83a69e4 139 void SPI_init()
szjenter 2:c271f83a69e4 140 {
szjenter 2:c271f83a69e4 141 // set SPI to full speed (10 MHz mode)
szjenter 2:c271f83a69e4 142 spi.format(8,0);
szjenter 2:c271f83a69e4 143 spi.frequency(10000000);
szjenter 2:c271f83a69e4 144 //spi.frequency(10000);
szjenter 2:c271f83a69e4 145 }
szjenter 2:c271f83a69e4 146 //----------------------------------------------------
szjenter 2:c271f83a69e4 147
szjenter 2:c271f83a69e4 148 void lcd_data(unsigned char d) // write 8 bits lcd data
szjenter 2:c271f83a69e4 149 {
szjenter 2:c271f83a69e4 150 cs2=0;
szjenter 2:c271f83a69e4 151 spi.write(0x40);
szjenter 2:c271f83a69e4 152 spi.write(GPIOB); // select GPIOB
szjenter 2:c271f83a69e4 153 spi.write(d); // set data byte
szjenter 2:c271f83a69e4 154 cs2=1;
szjenter 2:c271f83a69e4 155
szjenter 2:c271f83a69e4 156 cs2=0;
szjenter 2:c271f83a69e4 157 spi.write(0x40);
szjenter 2:c271f83a69e4 158 spi.write(GPIOA); // select GPIOA
szjenter 2:c271f83a69e4 159 spi.write(LCDFONTSEL-LCD_CE-LCD_CD);
szjenter 2:c271f83a69e4 160 cs2=1;
szjenter 2:c271f83a69e4 161
szjenter 2:c271f83a69e4 162 cs2=0;
szjenter 2:c271f83a69e4 163 spi.write(0x40);
szjenter 2:c271f83a69e4 164 spi.write(GPIOA); // select GPIOA
szjenter 2:c271f83a69e4 165 spi.write(LCDFONTSEL - LCD_WR - LCD_CE - LCD_CD);
szjenter 2:c271f83a69e4 166 cs2=1;
szjenter 2:c271f83a69e4 167
szjenter 2:c271f83a69e4 168 cs2=0;
szjenter 2:c271f83a69e4 169 spi.write(0x40);
szjenter 2:c271f83a69e4 170 spi.write(GPIOA); // select GPIOA
szjenter 2:c271f83a69e4 171 spi.write(LCDFONTSEL - LCD_CD);
szjenter 2:c271f83a69e4 172 cs2=1;
szjenter 2:c271f83a69e4 173
szjenter 2:c271f83a69e4 174 }
szjenter 2:c271f83a69e4 175 //----------------------------------------------------
szjenter 2:c271f83a69e4 176
szjenter 2:c271f83a69e4 177 void lcd_command(unsigned char c) // write 8 bits lcd command
szjenter 2:c271f83a69e4 178 {
szjenter 2:c271f83a69e4 179 cs2=0;
szjenter 2:c271f83a69e4 180 spi.write(0x40);
szjenter 2:c271f83a69e4 181 spi.write(GPIOB); // select GPIOB
szjenter 2:c271f83a69e4 182 spi.write(c); // set data byte
szjenter 2:c271f83a69e4 183 cs2=1;
szjenter 2:c271f83a69e4 184
szjenter 2:c271f83a69e4 185 cs2=0;
szjenter 2:c271f83a69e4 186 spi.write(0x40);
szjenter 2:c271f83a69e4 187 spi.write(GPIOA); // select GPIOA
szjenter 2:c271f83a69e4 188 spi.write(LCDFONTSEL-LCD_CE);
szjenter 2:c271f83a69e4 189 cs2=1;
szjenter 2:c271f83a69e4 190
szjenter 2:c271f83a69e4 191 cs2=0;
szjenter 2:c271f83a69e4 192 spi.write(0x40);
szjenter 2:c271f83a69e4 193 spi.write(GPIOA); // select GPIOA
szjenter 2:c271f83a69e4 194 spi.write(LCDFONTSEL - LCD_WR - LCD_CE);
szjenter 2:c271f83a69e4 195 cs2=1;
szjenter 2:c271f83a69e4 196
szjenter 2:c271f83a69e4 197 cs2=0;
szjenter 2:c271f83a69e4 198 spi.write(0x40);
szjenter 2:c271f83a69e4 199 spi.write(GPIOA); // select GPIOA
szjenter 2:c271f83a69e4 200 spi.write(LCDFONTSEL);
szjenter 2:c271f83a69e4 201 cs2=1;
szjenter 2:c271f83a69e4 202 }
szjenter 2:c271f83a69e4 203 //----------------------------------------------------
szjenter 2:c271f83a69e4 204 void lcd_init() //Grafikus LCD initializálása
szjenter 2:c271f83a69e4 205 {
szjenter 2:c271f83a69e4 206 cs2=0;
szjenter 2:c271f83a69e4 207 spi.write(0x40);
szjenter 2:c271f83a69e4 208 spi.write(IODIRA); // select IODIRA at start
szjenter 2:c271f83a69e4 209 spi.write(0x00); // IODIRA all outputs
szjenter 2:c271f83a69e4 210 spi.write(0x00); // IODIRB all outputs
szjenter 2:c271f83a69e4 211 cs2=1;
szjenter 2:c271f83a69e4 212 wait(0.1);
szjenter 2:c271f83a69e4 213
szjenter 2:c271f83a69e4 214 cs2=0;
szjenter 2:c271f83a69e4 215 spi.write(0x40);
szjenter 2:c271f83a69e4 216 spi.write(GPIOA); // select GPIOA at start
szjenter 2:c271f83a69e4 217 spi.write(LCDFONTSEL-LCD_RST); // activate reset
szjenter 2:c271f83a69e4 218 spi.write(0x00); // all B outputs 0
szjenter 2:c271f83a69e4 219 cs2=1;
szjenter 2:c271f83a69e4 220 wait(0.1);
szjenter 2:c271f83a69e4 221
szjenter 2:c271f83a69e4 222 cs2=0;
szjenter 2:c271f83a69e4 223 spi.write(0x40);
szjenter 2:c271f83a69e4 224 spi.write(GPIOA); // select GPIOA at start
szjenter 2:c271f83a69e4 225 spi.write(LCDFONTSEL); // deactivate reset
szjenter 2:c271f83a69e4 226 cs2=1;
szjenter 2:c271f83a69e4 227 wait(0.1);
szjenter 2:c271f83a69e4 228
szjenter 2:c271f83a69e4 229 // set text home address at 0x0000
szjenter 2:c271f83a69e4 230 lcd_data(TEXT_STARTADDRESS%0x100);
szjenter 2:c271f83a69e4 231 lcd_data(TEXT_STARTADDRESS/0x100);
szjenter 2:c271f83a69e4 232 lcd_command(TXHOME);
szjenter 2:c271f83a69e4 233
szjenter 2:c271f83a69e4 234 // set graphic home address at 0x1000
szjenter 2:c271f83a69e4 235 lcd_data(GRAPHIC_STARTADDRESS%0x100);
szjenter 2:c271f83a69e4 236 lcd_data(GRAPHIC_STARTADDRESS/0x100);
szjenter 2:c271f83a69e4 237 lcd_command(GRHOME);
szjenter 2:c271f83a69e4 238
szjenter 2:c271f83a69e4 239 // set text area
szjenter 2:c271f83a69e4 240 lcd_data(LCD_WIDTH);
szjenter 2:c271f83a69e4 241 lcd_data(0x00);
szjenter 2:c271f83a69e4 242 lcd_command(TXAREA);
szjenter 2:c271f83a69e4 243
szjenter 2:c271f83a69e4 244 // set graphic area
szjenter 2:c271f83a69e4 245 lcd_data(LCD_WIDTH);
szjenter 2:c271f83a69e4 246 lcd_data(0x00);
szjenter 2:c271f83a69e4 247 lcd_command(GRAREA);
szjenter 2:c271f83a69e4 248
szjenter 2:c271f83a69e4 249 // mode set (internal character generation mode)
szjenter 2:c271f83a69e4 250 lcd_command(0x80);
szjenter 2:c271f83a69e4 251
szjenter 2:c271f83a69e4 252 // set offset register
szjenter 2:c271f83a69e4 253 lcd_data(0x02);
szjenter 2:c271f83a69e4 254 lcd_data(0x00);
szjenter 2:c271f83a69e4 255 lcd_command(OFFSET);
szjenter 2:c271f83a69e4 256
szjenter 2:c271f83a69e4 257 // display mode (text on graphics on cursor off)
szjenter 2:c271f83a69e4 258 lcd_command(0x90+0x08+0x04);
szjenter 2:c271f83a69e4 259
szjenter 2:c271f83a69e4 260 }
szjenter 2:c271f83a69e4 261 //-------------------------------------------------
szjenter 2:c271f83a69e4 262
szjenter 2:c271f83a69e4 263 //------------------------------------------------------
szjenter 2:c271f83a69e4 264 char* int_string(double da){ // elő nullák nélküli kiíratás
szjenter 2:c271f83a69e4 265
szjenter 2:c271f83a69e4 266 int b,c,dx,i; //b=adott helyiértéken a számjegy, c=0 akkor elő nulla; dx= az elő nullák nélküli helyiérték száma
szjenter 2:c271f83a69e4 267 char* f; // egy karakter tipusú változó pointere
szjenter 2:c271f83a69e4 268 c=0;
szjenter 2:c271f83a69e4 269 dx=0;
szjenter 2:c271f83a69e4 270 for(i=0;i<15;i++){d[i]=char(0x00);}
szjenter 2:c271f83a69e4 271 //teszt adat:
szjenter 2:c271f83a69e4 272 //da=123456;
szjenter 2:c271f83a69e4 273 b=int(da/100000000); // 9. helyiérték
szjenter 2:c271f83a69e4 274 if(b>0){c=1;d[dx]=0x30 | char(b);dx++;}
szjenter 2:c271f83a69e4 275 da = da - b*100000000; // 8. helyiérték
szjenter 2:c271f83a69e4 276 b=int(da/10000000);
szjenter 2:c271f83a69e4 277 if(b>0 | c>0){c=1;d[dx]=0x30 | char(b);dx++;}
szjenter 2:c271f83a69e4 278 da = da - b*10000000; // 7. helyiérték
szjenter 2:c271f83a69e4 279 b=int(da/1000000);
szjenter 2:c271f83a69e4 280 if(b>0 | c>0){c=1;d[dx]=0x30 | char(b);dx++;}
szjenter 2:c271f83a69e4 281 da = da - b*1000000; // 6. helyiérték
szjenter 2:c271f83a69e4 282 b=int(da/100000);
szjenter 2:c271f83a69e4 283 if(b>0 | c>0){c=1;d[dx]=0x30 | char(b);dx++;}
szjenter 2:c271f83a69e4 284 da = da - b*100000; // 5. helyiérték
szjenter 2:c271f83a69e4 285 b=int(da/10000);
szjenter 2:c271f83a69e4 286 if(b>0 | c>0){c=1;d[dx]=0x30 | char(b);dx++;}
szjenter 2:c271f83a69e4 287 da = da - b*10000; // 4. helyiérték
szjenter 2:c271f83a69e4 288 b=int(da/1000);
szjenter 2:c271f83a69e4 289 if(b>0 | c>0){c=1;d[dx]=0x30 | char(b);dx++;}
szjenter 2:c271f83a69e4 290 da = da - b*1000; // 3. helyiérték
szjenter 2:c271f83a69e4 291 b=int(da/100);
szjenter 2:c271f83a69e4 292 if(b>0 | c>0){c=1;d[dx]=0x30 | char(b);dx++;}
szjenter 2:c271f83a69e4 293 da = da - b*100; // 2. helyiérték
szjenter 2:c271f83a69e4 294 b=int(da/10);
szjenter 2:c271f83a69e4 295 if(b>0 | c>0){c=1;d[dx]=0x30 | char(b);dx++;}
szjenter 2:c271f83a69e4 296 da = da - b*10; // 1. helyiérték
szjenter 2:c271f83a69e4 297 b=int(da);
szjenter 2:c271f83a69e4 298 if(b>0 | c>0){c=1;d[dx]=0x30 | char(b);dx++;}
szjenter 2:c271f83a69e4 299 // visszatérési érték: d[] string
szjenter 2:c271f83a69e4 300 f = d; // f tartalmazza a d char tömb pointerét
szjenter 2:c271f83a69e4 301 return f;
szjenter 2:c271f83a69e4 302 }
szjenter 2:c271f83a69e4 303
szjenter 2:c271f83a69e4 304
szjenter 2:c271f83a69e4 305
szjenter 2:c271f83a69e4 306 //------------------------------------------------------
szjenter 2:c271f83a69e4 307 void lcd_string(char y,char x,char *s) // put a text string at position x,y (character row,column)
szjenter 2:c271f83a69e4 308 {
szjenter 2:c271f83a69e4 309 int adr;
szjenter 2:c271f83a69e4 310 adr=TEXT_STARTADDRESS+x+y*LCD_WIDTH; // 0x0000 + x + y + 22
szjenter 2:c271f83a69e4 311 lcd_data(adr%0x100); // % maradék képzés jele
szjenter 2:c271f83a69e4 312 lcd_data(adr/0x100);
szjenter 2:c271f83a69e4 313 lcd_command(ADPSET);
szjenter 2:c271f83a69e4 314 lcd_command(AWRON);
szjenter 2:c271f83a69e4 315 while (s[0]){
szjenter 2:c271f83a69e4 316 // convert from ascii to t6963
szjenter 2:c271f83a69e4 317 lcd_data(s[0]-32);
szjenter 2:c271f83a69e4 318 s++;
szjenter 2:c271f83a69e4 319 }
szjenter 2:c271f83a69e4 320 lcd_command(AWROFF);
szjenter 2:c271f83a69e4 321 }
szjenter 2:c271f83a69e4 322 //----------------------------------------------------
szjenter 2:c271f83a69e4 323 void lcd_cls() // clear lcd display memory (8k)
szjenter 2:c271f83a69e4 324 {
szjenter 2:c271f83a69e4 325 int a;
szjenter 2:c271f83a69e4 326 lcd_data(0x00);
szjenter 2:c271f83a69e4 327 lcd_data(0x00);
szjenter 2:c271f83a69e4 328 lcd_command(ADPSET);
szjenter 2:c271f83a69e4 329 lcd_command(AWRON);
szjenter 2:c271f83a69e4 330 for (a=0; a<8192; a++) lcd_data(0);
szjenter 2:c271f83a69e4 331 lcd_command(AWROFF);
szjenter 2:c271f83a69e4 332 }
szjenter 2:c271f83a69e4 333 //----------------------------------------------------
szjenter 2:c271f83a69e4 334 void lcd_plot(char x,char y,char color) // set or reset a pixel on the display on position x,y with color 0 or 1
szjenter 2:c271f83a69e4 335 {
szjenter 2:c271f83a69e4 336 int adr;
szjenter 2:c271f83a69e4 337 adr = GRAPHIC_STARTADDRESS + ((LCD_WIDTH) * y) + (x/PIXELWIDTH); // calculate offset
szjenter 2:c271f83a69e4 338 lcd_data(adr%0x100); // set low byte
szjenter 2:c271f83a69e4 339 lcd_data(adr/0x100); // set high byte
szjenter 2:c271f83a69e4 340 lcd_command(ADPSET); // set address pointer
szjenter 2:c271f83a69e4 341 if (color) lcd_command(BS + ((PIXELWIDTH-1)-(x%PIXELWIDTH))); // use bit set mode
szjenter 2:c271f83a69e4 342 else lcd_command(BR + ((PIXELWIDTH-1)-(x%PIXELWIDTH))); // use bit reset mode
szjenter 2:c271f83a69e4 343 }
szjenter 2:c271f83a69e4 344 //----------------------------------------------------
szjenter 2:c271f83a69e4 345
szjenter 2:c271f83a69e4 346 void lcd_line(int x0, int y0, int x1, int y1,char color) // Bresenham line routine 0-128 x 0-64 color= char(1)
szjenter 2:c271f83a69e4 347 { // color 1, 0
szjenter 2:c271f83a69e4 348 char steep=1;
szjenter 2:c271f83a69e4 349 int i,dx,dy,e;
szjenter 2:c271f83a69e4 350 signed char sx,sy;
szjenter 2:c271f83a69e4 351
szjenter 2:c271f83a69e4 352 dx = abs(x1-x0);
szjenter 2:c271f83a69e4 353 sx = ((x1 - x0) >0) ? 1 : -1;
szjenter 2:c271f83a69e4 354 dy=abs(y1-y0);
szjenter 2:c271f83a69e4 355 sy = ((y1 - y0) >0) ? 1 : -1;
szjenter 2:c271f83a69e4 356
szjenter 2:c271f83a69e4 357 if (dy > dx)
szjenter 2:c271f83a69e4 358 {
szjenter 2:c271f83a69e4 359 steep=0;
szjenter 2:c271f83a69e4 360 // swap X0 and Y0
szjenter 2:c271f83a69e4 361 x0=x0 ^ y0;
szjenter 2:c271f83a69e4 362 y0=x0 ^ y0;
szjenter 2:c271f83a69e4 363 x0=x0 ^ y0;
szjenter 2:c271f83a69e4 364
szjenter 2:c271f83a69e4 365 // swap DX and DY
szjenter 2:c271f83a69e4 366 dx=dx ^ dy;
szjenter 2:c271f83a69e4 367 dy=dx ^ dy;
szjenter 2:c271f83a69e4 368 dx=dx ^ dy;
szjenter 2:c271f83a69e4 369
szjenter 2:c271f83a69e4 370 // swap SX and SY
szjenter 2:c271f83a69e4 371 sx=sx ^ sy;
szjenter 2:c271f83a69e4 372 sy=sx ^ sy;
szjenter 2:c271f83a69e4 373 sx=sx ^ sy;
szjenter 2:c271f83a69e4 374 }
szjenter 2:c271f83a69e4 375
szjenter 2:c271f83a69e4 376 e = (dy << 1) - dx;
szjenter 2:c271f83a69e4 377
szjenter 2:c271f83a69e4 378 for (i=0; i<=dx; i++)
szjenter 2:c271f83a69e4 379 {
szjenter 2:c271f83a69e4 380 if (steep)
szjenter 2:c271f83a69e4 381 {
szjenter 2:c271f83a69e4 382 lcd_plot(x0,y0,color);
szjenter 2:c271f83a69e4 383 }
szjenter 2:c271f83a69e4 384 else
szjenter 2:c271f83a69e4 385 {
szjenter 2:c271f83a69e4 386 lcd_plot(y0,x0,color);
szjenter 2:c271f83a69e4 387 }
szjenter 2:c271f83a69e4 388 while (e >= 0)
szjenter 2:c271f83a69e4 389 {
szjenter 2:c271f83a69e4 390 y0 += sy;
szjenter 2:c271f83a69e4 391 e -= (dx << 1);
szjenter 2:c271f83a69e4 392 }
szjenter 2:c271f83a69e4 393 x0 += sx;
szjenter 2:c271f83a69e4 394 e += (dy << 1);
szjenter 2:c271f83a69e4 395 }
szjenter 2:c271f83a69e4 396 }
szjenter 2:c271f83a69e4 397 //----------------------------------------------------
szjenter 2:c271f83a69e4 398
szjenter 2:c271f83a69e4 399 // kör kirajzolása
szjenter 2:c271f83a69e4 400 void lcd_circle(int x0,int y0, int radius, char color) // Bresenham circle routine
szjenter 2:c271f83a69e4 401 {
szjenter 2:c271f83a69e4 402 int i;
szjenter 2:c271f83a69e4 403 float cx =1.3; // kör rajzolás LCD torzítás kompenzálása
szjenter 2:c271f83a69e4 404 i=0;
szjenter 2:c271f83a69e4 405 //char sa[3];
szjenter 2:c271f83a69e4 406 int f = 1 - radius;
szjenter 2:c271f83a69e4 407 int dx = 1;
szjenter 2:c271f83a69e4 408 int dy = -2 * radius;
szjenter 2:c271f83a69e4 409 int x = 0;
szjenter 2:c271f83a69e4 410 int y = radius;
szjenter 2:c271f83a69e4 411 //float cx =1.3;
szjenter 2:c271f83a69e4 412 lcd_plot(x0 * cx, y0 + radius,color);
szjenter 2:c271f83a69e4 413 lcd_plot(x0 * cx, y0 - radius,color);
szjenter 2:c271f83a69e4 414 lcd_plot((x0 + radius) * cx, y0,color);
szjenter 2:c271f83a69e4 415 lcd_plot((x0 - radius) * cx, y0,color);
szjenter 2:c271f83a69e4 416
szjenter 2:c271f83a69e4 417 while(x < y){
szjenter 2:c271f83a69e4 418 i++;
szjenter 2:c271f83a69e4 419 if(f >= 0)
szjenter 2:c271f83a69e4 420 {
szjenter 2:c271f83a69e4 421 y--;
szjenter 2:c271f83a69e4 422 dy += 2;
szjenter 2:c271f83a69e4 423 f += dy;
szjenter 2:c271f83a69e4 424 }
szjenter 2:c271f83a69e4 425 x++;
szjenter 2:c271f83a69e4 426 dx += 2;
szjenter 2:c271f83a69e4 427 f += dx;
szjenter 2:c271f83a69e4 428 lcd_plot((x0 + x) * cx, y0 + y,color);
szjenter 2:c271f83a69e4 429 //a=(x0+x)*cx;
szjenter 2:c271f83a69e4 430 //glcd_inttochar(a);
szjenter 2:c271f83a69e4 431 //lcd_string(0,0,d);
szjenter 2:c271f83a69e4 432 //a= y0 + y;
szjenter 2:c271f83a69e4 433 //glcd_inttochar(a);
szjenter 2:c271f83a69e4 434 //lcd_string(12,0,d);
szjenter 2:c271f83a69e4 435 lcd_plot((x0 - x) * cx, y0 + y,color);
szjenter 2:c271f83a69e4 436 lcd_plot((x0 + x) * cx, y0 - y,color);
szjenter 2:c271f83a69e4 437 lcd_plot((x0 - x) * cx, y0 - y,color);
szjenter 2:c271f83a69e4 438 lcd_plot((x0 + y) * cx, y0 + x,color);
szjenter 2:c271f83a69e4 439 lcd_plot((x0 - y) * cx, y0 + x,color);
szjenter 2:c271f83a69e4 440 lcd_plot((x0 + y) * cx, y0 - x,color);
szjenter 2:c271f83a69e4 441 lcd_plot((x0 - y) * cx, y0 - x,color);
szjenter 2:c271f83a69e4 442 //wait(.2);
szjenter 2:c271f83a69e4 443 }
szjenter 2:c271f83a69e4 444 }
szjenter 2:c271f83a69e4 445
szjenter 2:c271f83a69e4 446 #endif