FRMD KL25Z <=i2c=> NXP PCF8563 (RTC) FRMD KL25Z SPI=> MCP23S17 => (GLCD) T6963C FRMD KL25Z Tsi => 3 button : <--> <enter> <++> FRMD KL25Z => Bip()
Fork of RTC8564NB_Clock by
GLCD_spi.h@2:c271f83a69e4, 2014-05-14 (annotated)
- 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?
User | Revision | Line number | New 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 |