1

Dependents:   FINAL joystick

Committer:
nappy009
Date:
Mon Dec 05 10:57:22 2016 +0000
Revision:
0:e0e398cab8e8
Pr

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nappy009 0:e0e398cab8e8 1 /*
nappy009 0:e0e398cab8e8 2 Modified by COX
nappy009 0:e0e398cab8e8 3 version 0.1
nappy009 0:e0e398cab8e8 4
nappy009 0:e0e398cab8e8 5 Editor : COX
nappy009 0:e0e398cab8e8 6 Date : 06.03.2013
nappy009 0:e0e398cab8e8 7
nappy009 0:e0e398cab8e8 8 *
nappy009 0:e0e398cab8e8 9 * Update DFRobot source to work on FRDM KL25Z
nappy009 0:e0e398cab8e8 10 *
nappy009 0:e0e398cab8e8 11 */
nappy009 0:e0e398cab8e8 12
nappy009 0:e0e398cab8e8 13 #include "LCD4884.h"
nappy009 0:e0e398cab8e8 14 #include "font_6x8.h"
nappy009 0:e0e398cab8e8 15 #include "font_big.h"
nappy009 0:e0e398cab8e8 16
nappy009 0:e0e398cab8e8 17 DigitalOut SpiClk(D2); //2- Serial Clock(Master Output)
nappy009 0:e0e398cab8e8 18 DigitalOut SpiMosi(D3); //3- Master Output,Slave Input
nappy009 0:e0e398cab8e8 19 DigitalOut LcdDC(D4); //4- Data/Command(command active low)
nappy009 0:e0e398cab8e8 20 DigitalOut SpiCS(D5); //5- Chip Select,Slave Transmit Enable(active low,Master Output)
nappy009 0:e0e398cab8e8 21 DigitalOut LcdRst(D6); //6- One Reset button
nappy009 0:e0e398cab8e8 22 PwmOut LcdBl(D7); //7- LCD backlight
nappy009 0:e0e398cab8e8 23
nappy009 0:e0e398cab8e8 24 LCD4884::LCD4884()
nappy009 0:e0e398cab8e8 25 {};
nappy009 0:e0e398cab8e8 26
nappy009 0:e0e398cab8e8 27 /******************************************************************/
nappy009 0:e0e398cab8e8 28 void LCD4884::backlight(float dat)
nappy009 0:e0e398cab8e8 29 {
nappy009 0:e0e398cab8e8 30 LcdBl = dat;
nappy009 0:e0e398cab8e8 31 }
nappy009 0:e0e398cab8e8 32
nappy009 0:e0e398cab8e8 33
nappy009 0:e0e398cab8e8 34 /******************************************************************/
nappy009 0:e0e398cab8e8 35 void LCD4884::LCD_init(void)
nappy009 0:e0e398cab8e8 36 {
nappy009 0:e0e398cab8e8 37 /* pin intializer */
nappy009 0:e0e398cab8e8 38 SpiClk = LOW;
nappy009 0:e0e398cab8e8 39 SpiMosi = LOW;
nappy009 0:e0e398cab8e8 40 SpiCS = LOW;
nappy009 0:e0e398cab8e8 41 LcdDC = LOW;
nappy009 0:e0e398cab8e8 42 LcdBl = LOW;
nappy009 0:e0e398cab8e8 43
nappy009 0:e0e398cab8e8 44 LcdRst = LOW;
nappy009 0:e0e398cab8e8 45 wait(ONE_US);
nappy009 0:e0e398cab8e8 46 LcdRst = HIGH;
nappy009 0:e0e398cab8e8 47
nappy009 0:e0e398cab8e8 48 SpiCS = LOW; //Chip Select, Slave Transmit Enable(active low, Master Output)
nappy009 0:e0e398cab8e8 49 wait(ONE_US);
nappy009 0:e0e398cab8e8 50 SpiCS = HIGH;
nappy009 0:e0e398cab8e8 51 wait(ONE_US);
nappy009 0:e0e398cab8e8 52 LcdBl = LCD_INITIAL_BRIGHTNESS;
nappy009 0:e0e398cab8e8 53
nappy009 0:e0e398cab8e8 54 //data_type=0, all are command bytes
nappy009 0:e0e398cab8e8 55 LCD_write_byte(0x21, 0); //Function Set:0 0 1 0 0 PD V H=0010 0001;PD=0,V=0,H=1;
nappy009 0:e0e398cab8e8 56 LCD_write_byte(0xc0, 0); //Set Vop:1 Vop6 Vop5 Vop4 Vop3 Vop2 Vop1 Vop0=1100 0000
nappy009 0:e0e398cab8e8 57 LCD_write_byte(0x06, 0); //Set Temperature Coefficient:0 0 0 0 0 1 Tc1 Tc0=0000 0110;Tc1=1,Tc0=0(Vlcd temperature coefficient 2)
nappy009 0:e0e398cab8e8 58 LCD_write_byte(0x13, 0); //Set Bias System (BSx):0 0 0 1 0 BS2 BS1 BS0=0001 0011;BS2=0, BS1=1, BS0=1==>N=4,MUX RATE=1:48
nappy009 0:e0e398cab8e8 59
nappy009 0:e0e398cab8e8 60 LCD_write_byte(0x20, 0);//Function Set:0 0 1 0 0 PD V H=0010 0000;PD=0,V=0,H=0;
nappy009 0:e0e398cab8e8 61 LCD_clear();
nappy009 0:e0e398cab8e8 62 LCD_write_byte(0x0c, 0);//Display Control: 0 0 0 0 1 D 0 E=0000 1100 ;D=1,E=0:normal mode
nappy009 0:e0e398cab8e8 63
nappy009 0:e0e398cab8e8 64 SpiCS = LOW;
nappy009 0:e0e398cab8e8 65 }
nappy009 0:e0e398cab8e8 66
nappy009 0:e0e398cab8e8 67 /******************************************************************/
nappy009 0:e0e398cab8e8 68 void LCD4884::LCD_write_byte(unsigned char dat, unsigned char dat_type)
nappy009 0:e0e398cab8e8 69 {
nappy009 0:e0e398cab8e8 70 unsigned int i;
nappy009 0:e0e398cab8e8 71 SpiCS = LOW; //Chip Enable:Active LOW
nappy009 0:e0e398cab8e8 72
nappy009 0:e0e398cab8e8 73 if (dat_type == 0)
nappy009 0:e0e398cab8e8 74 LcdDC = LOW; // D/C=0:the current data byte is interpreted as command byte
nappy009 0:e0e398cab8e8 75 else
nappy009 0:e0e398cab8e8 76 LcdDC = HIGH; // D/C=1:write data to display RAM
nappy009 0:e0e398cab8e8 77
nappy009 0:e0e398cab8e8 78 for(i=0;i<8;i++)
nappy009 0:e0e398cab8e8 79 {
nappy009 0:e0e398cab8e8 80 if(dat&0x80) //1000 0000
nappy009 0:e0e398cab8e8 81 {
nappy009 0:e0e398cab8e8 82 SpiMosi = HIGH;
nappy009 0:e0e398cab8e8 83 }
nappy009 0:e0e398cab8e8 84 else
nappy009 0:e0e398cab8e8 85 {
nappy009 0:e0e398cab8e8 86 SpiMosi = LOW;
nappy009 0:e0e398cab8e8 87 }
nappy009 0:e0e398cab8e8 88 SpiClk = LOW;
nappy009 0:e0e398cab8e8 89 dat = dat << 1;
nappy009 0:e0e398cab8e8 90 SpiClk = HIGH;
nappy009 0:e0e398cab8e8 91 }
nappy009 0:e0e398cab8e8 92 SpiCS = HIGH;
nappy009 0:e0e398cab8e8 93 }
nappy009 0:e0e398cab8e8 94
nappy009 0:e0e398cab8e8 95 /******************************************************************/
nappy009 0:e0e398cab8e8 96 void LCD4884::LCD_draw_bmp_pixel(unsigned char X,unsigned char Y,unsigned char *map,
nappy009 0:e0e398cab8e8 97 unsigned char Pix_x,unsigned char Pix_y)
nappy009 0:e0e398cab8e8 98 {
nappy009 0:e0e398cab8e8 99 unsigned int i,n;
nappy009 0:e0e398cab8e8 100 unsigned char row;
nappy009 0:e0e398cab8e8 101
nappy009 0:e0e398cab8e8 102 if (Pix_y%8==0)
nappy009 0:e0e398cab8e8 103 row=Pix_y/8; //row from 1 to 6;Pix_y from R0 to R47
nappy009 0:e0e398cab8e8 104 else
nappy009 0:e0e398cab8e8 105 row=Pix_y/8+1; //Quotient+1
nappy009 0:e0e398cab8e8 106
nappy009 0:e0e398cab8e8 107 for (n=0;n<row;n++)
nappy009 0:e0e398cab8e8 108 {
nappy009 0:e0e398cab8e8 109 LCD_set_XY(X,Y);
nappy009 0:e0e398cab8e8 110 for(i=0; i<Pix_x; i++)
nappy009 0:e0e398cab8e8 111 {
nappy009 0:e0e398cab8e8 112 LCD_write_byte(map[i+n*Pix_x], 1); // D/C=1:write data to display RAM
nappy009 0:e0e398cab8e8 113 }
nappy009 0:e0e398cab8e8 114 Y++;
nappy009 0:e0e398cab8e8 115 }
nappy009 0:e0e398cab8e8 116 }
nappy009 0:e0e398cab8e8 117
nappy009 0:e0e398cab8e8 118 /**************************************************************************************/
nappy009 0:e0e398cab8e8 119 void LCD4884::LCD_write_string(unsigned char X,unsigned char Y,char *s, char mode)
nappy009 0:e0e398cab8e8 120 {
nappy009 0:e0e398cab8e8 121 LCD_set_XY(X,Y);
nappy009 0:e0e398cab8e8 122 while (*s)
nappy009 0:e0e398cab8e8 123 {
nappy009 0:e0e398cab8e8 124 LCD_write_char(*s, mode);
nappy009 0:e0e398cab8e8 125 s++;
nappy009 0:e0e398cab8e8 126 }
nappy009 0:e0e398cab8e8 127 }
nappy009 0:e0e398cab8e8 128
nappy009 0:e0e398cab8e8 129 /**************************************************************************************/
nappy009 0:e0e398cab8e8 130 void LCD4884::LCD_prop_write_string(unsigned char X,unsigned char Y,char *s, char mode)
nappy009 0:e0e398cab8e8 131 {
nappy009 0:e0e398cab8e8 132 LCD_set_XY(X,Y);
nappy009 0:e0e398cab8e8 133 while (*s)
nappy009 0:e0e398cab8e8 134 {
nappy009 0:e0e398cab8e8 135 LCD_prop_write_char(*s, mode);
nappy009 0:e0e398cab8e8 136 s++;
nappy009 0:e0e398cab8e8 137 }
nappy009 0:e0e398cab8e8 138 }
nappy009 0:e0e398cab8e8 139
nappy009 0:e0e398cab8e8 140 /*************************************************************************************/
nappy009 0:e0e398cab8e8 141 void LCD4884::LCD_write_chinese(unsigned char X, unsigned char Y,unsigned char *c,unsigned char ch_with,unsigned char num,unsigned char line,unsigned char row)
nappy009 0:e0e398cab8e8 142 {
nappy009 0:e0e398cab8e8 143 unsigned char i,n;
nappy009 0:e0e398cab8e8 144 LCD_set_XY(X,Y);
nappy009 0:e0e398cab8e8 145 for (i=0;i<num;)
nappy009 0:e0e398cab8e8 146 {
nappy009 0:e0e398cab8e8 147 for (n=0; n<ch_with*2; n++)
nappy009 0:e0e398cab8e8 148 {
nappy009 0:e0e398cab8e8 149 if (n==ch_with)
nappy009 0:e0e398cab8e8 150 {
nappy009 0:e0e398cab8e8 151 if (i==0)
nappy009 0:e0e398cab8e8 152 LCD_set_XY(X,Y+1);
nappy009 0:e0e398cab8e8 153 else
nappy009 0:e0e398cab8e8 154 LCD_set_XY((X+(ch_with+row)*i),Y+1);
nappy009 0:e0e398cab8e8 155 }
nappy009 0:e0e398cab8e8 156 LCD_write_byte(c[(i*ch_with*2)+n],1);
nappy009 0:e0e398cab8e8 157 }
nappy009 0:e0e398cab8e8 158 i++;
nappy009 0:e0e398cab8e8 159 LCD_set_XY((X+(ch_with+row)*i),Y);
nappy009 0:e0e398cab8e8 160 }
nappy009 0:e0e398cab8e8 161 }
nappy009 0:e0e398cab8e8 162
nappy009 0:e0e398cab8e8 163
nappy009 0:e0e398cab8e8 164 /******************************************************************/
nappy009 0:e0e398cab8e8 165 void LCD4884::LCD_write_string_big ( unsigned char X,unsigned char Y, char *string, char mode )
nappy009 0:e0e398cab8e8 166 {
nappy009 0:e0e398cab8e8 167 while ( *string )
nappy009 0:e0e398cab8e8 168 {
nappy009 0:e0e398cab8e8 169 LCD_write_char_big( X, Y, *string , mode );
nappy009 0:e0e398cab8e8 170
nappy009 0:e0e398cab8e8 171 if(*string++ == '.')
nappy009 0:e0e398cab8e8 172 X += 5;
nappy009 0:e0e398cab8e8 173 else
nappy009 0:e0e398cab8e8 174 X += 12;
nappy009 0:e0e398cab8e8 175 }
nappy009 0:e0e398cab8e8 176 }
nappy009 0:e0e398cab8e8 177
nappy009 0:e0e398cab8e8 178 /******************************************************************/
nappy009 0:e0e398cab8e8 179 /* write char in big font */
nappy009 0:e0e398cab8e8 180 void LCD4884::LCD_write_char_big (unsigned char X,unsigned char Y, unsigned char ch, char mode)
nappy009 0:e0e398cab8e8 181 {
nappy009 0:e0e398cab8e8 182 unsigned char i, j;
nappy009 0:e0e398cab8e8 183 unsigned char *pFont;
nappy009 0:e0e398cab8e8 184 unsigned char ch_dat;
nappy009 0:e0e398cab8e8 185
nappy009 0:e0e398cab8e8 186 pFont = (unsigned char *) big_number;
nappy009 0:e0e398cab8e8 187
nappy009 0:e0e398cab8e8 188 if(ch == '.')
nappy009 0:e0e398cab8e8 189 ch = 10;
nappy009 0:e0e398cab8e8 190 else if (ch == '+')
nappy009 0:e0e398cab8e8 191 ch = 11;
nappy009 0:e0e398cab8e8 192 else if (ch == '-')
nappy009 0:e0e398cab8e8 193 ch = 12;
nappy009 0:e0e398cab8e8 194 else
nappy009 0:e0e398cab8e8 195 ch = ch & 0x0f;
nappy009 0:e0e398cab8e8 196
nappy009 0:e0e398cab8e8 197 for(i=0;i<3;i++)
nappy009 0:e0e398cab8e8 198 {
nappy009 0:e0e398cab8e8 199 LCD_set_XY ( X, Y+i);
nappy009 0:e0e398cab8e8 200
nappy009 0:e0e398cab8e8 201 for(j=0; j<16; j++)
nappy009 0:e0e398cab8e8 202 {
nappy009 0:e0e398cab8e8 203 ch_dat = *(pFont+ch*48 + i*16 +j);
nappy009 0:e0e398cab8e8 204 LCD_write_byte( (mode == MENU_NORMAL)? ch_dat : (ch_dat^0xff), 1);
nappy009 0:e0e398cab8e8 205 }
nappy009 0:e0e398cab8e8 206 }
nappy009 0:e0e398cab8e8 207 }
nappy009 0:e0e398cab8e8 208
nappy009 0:e0e398cab8e8 209 /******************************************************************/
nappy009 0:e0e398cab8e8 210 void LCD4884::LCD_write_char(unsigned char c, char mode)
nappy009 0:e0e398cab8e8 211 {
nappy009 0:e0e398cab8e8 212 unsigned char line;
nappy009 0:e0e398cab8e8 213 unsigned char *pFont;
nappy009 0:e0e398cab8e8 214 unsigned char ch;
nappy009 0:e0e398cab8e8 215
nappy009 0:e0e398cab8e8 216 pFont = (unsigned char *)font6_8; //pointer *pFont points at font6_8[][6]
nappy009 0:e0e398cab8e8 217 c -= 32; // the ASCII of "SP" is 32
nappy009 0:e0e398cab8e8 218
nappy009 0:e0e398cab8e8 219 for (line=0; line<6; line++)
nappy009 0:e0e398cab8e8 220 {
nappy009 0:e0e398cab8e8 221 ch = *(pFont+c*6+line); //read c from the font6_8[][6] (the detail information is in the "font6x8.h")
nappy009 0:e0e398cab8e8 222 LCD_write_byte( (mode==MENU_NORMAL)? ch: (ch^ 0xff) , 1); //MENU_NORMAL=0,True:return ch;False:return ch
nappy009 0:e0e398cab8e8 223 }
nappy009 0:e0e398cab8e8 224 }
nappy009 0:e0e398cab8e8 225
nappy009 0:e0e398cab8e8 226 /*******************************************************************/
nappy009 0:e0e398cab8e8 227 unsigned char LCD4884::LCD_prop_write_char(unsigned char c, char mode)
nappy009 0:e0e398cab8e8 228 {
nappy009 0:e0e398cab8e8 229 int line, line_s=0, line_e=2;
nappy009 0:e0e398cab8e8 230 unsigned char *pFont;
nappy009 0:e0e398cab8e8 231 unsigned char ch;
nappy009 0:e0e398cab8e8 232
nappy009 0:e0e398cab8e8 233 pFont = (unsigned char *)font6_8;
nappy009 0:e0e398cab8e8 234 if (c -= 32)
nappy009 0:e0e398cab8e8 235 {
nappy009 0:e0e398cab8e8 236 for (line_s=0; line_s<6; line_s++)
nappy009 0:e0e398cab8e8 237 {
nappy009 0:e0e398cab8e8 238 if(*(pFont+c*6+line_s))
nappy009 0:e0e398cab8e8 239 break;
nappy009 0:e0e398cab8e8 240 }
nappy009 0:e0e398cab8e8 241 for (line_e=5; line_e<0; line_e--)
nappy009 0:e0e398cab8e8 242 {
nappy009 0:e0e398cab8e8 243 if(*(pFont+c*6+line_e))
nappy009 0:e0e398cab8e8 244 break;
nappy009 0:e0e398cab8e8 245 }
nappy009 0:e0e398cab8e8 246 }
nappy009 0:e0e398cab8e8 247 for (line=line_s; line<line_e+1; line++)
nappy009 0:e0e398cab8e8 248 {
nappy009 0:e0e398cab8e8 249 ch = *(pFont+c*6+line);
nappy009 0:e0e398cab8e8 250 LCD_write_byte( (mode==MENU_NORMAL)? ch: (ch^ 0xff) , 1);
nappy009 0:e0e398cab8e8 251 }
nappy009 0:e0e398cab8e8 252 LCD_write_byte( (mode==MENU_NORMAL)? 0:0xff, 1);
nappy009 0:e0e398cab8e8 253 return ((unsigned char)(line_e+2 - line_s));
nappy009 0:e0e398cab8e8 254 }
nappy009 0:e0e398cab8e8 255
nappy009 0:e0e398cab8e8 256 /******************************************************************/
nappy009 0:e0e398cab8e8 257 void LCD4884::LCD_set_XY(unsigned char X, unsigned char Y)
nappy009 0:e0e398cab8e8 258 {
nappy009 0:e0e398cab8e8 259 LCD_write_byte(0x40 | Y, 0); // column
nappy009 0:e0e398cab8e8 260 LCD_write_byte(0x80 | X, 0); // row
nappy009 0:e0e398cab8e8 261 }
nappy009 0:e0e398cab8e8 262
nappy009 0:e0e398cab8e8 263 /******************************************************************/
nappy009 0:e0e398cab8e8 264 void LCD4884::LCD_clear(void)
nappy009 0:e0e398cab8e8 265 {
nappy009 0:e0e398cab8e8 266 unsigned int i;
nappy009 0:e0e398cab8e8 267
nappy009 0:e0e398cab8e8 268 LCD_write_byte(0x0c, 0);
nappy009 0:e0e398cab8e8 269 LCD_write_byte(0x80, 0);
nappy009 0:e0e398cab8e8 270
nappy009 0:e0e398cab8e8 271 for (i=0; i<504; i++) //6*84
nappy009 0:e0e398cab8e8 272 {
nappy009 0:e0e398cab8e8 273 LCD_write_byte(0, 1);
nappy009 0:e0e398cab8e8 274 }
nappy009 0:e0e398cab8e8 275 }
nappy009 0:e0e398cab8e8 276