Digital_project 57340500039 57340500070

Dependencies:   mbed

Fork of Digital_project by Teerapong Apiraungpituk

Committer:
57340500039
Date:
Mon Dec 07 16:12:55 2015 +0000
Revision:
1:a4c852d25ead
Parent:
0:4585326daab4
Child:
2:6b2526c99e5c
a

Who changed what in which revision?

UserRevisionLine numberNew contents of line
57340500039 0:4585326daab4 1 /*
57340500039 0:4585326daab4 2 Modified by COX
57340500039 0:4585326daab4 3 version 0.1
57340500039 0:4585326daab4 4
57340500039 0:4585326daab4 5 Editor : COX
57340500039 0:4585326daab4 6 Date : 06.03.2013
57340500039 0:4585326daab4 7
57340500039 0:4585326daab4 8 *
57340500039 0:4585326daab4 9 * Update DFRobot source to work on FRDM KL25Z
57340500039 0:4585326daab4 10 *
57340500039 0:4585326daab4 11 */
57340500039 0:4585326daab4 12
57340500039 0:4585326daab4 13 #include "LCD4884.h"
57340500039 0:4585326daab4 14 #include "font_6x8.h"
57340500039 0:4585326daab4 15 #include "font_big.h"
57340500039 0:4585326daab4 16 #include "mbed.h"
57340500039 0:4585326daab4 17 #include <SPI.h>
57340500039 0:4585326daab4 18
57340500039 0:4585326daab4 19 DigitalOut SpiClk(D2); //2- Serial Clock(Master Output)
57340500039 0:4585326daab4 20 DigitalOut SpiMosi(D3); //3- Master Output,Slave Input
57340500039 0:4585326daab4 21 DigitalOut LcdDC(D4); //4- Data/Command(command active low)
57340500039 0:4585326daab4 22 DigitalOut SpiCS(D5); //5- Chip Select,Slave Transmit Enable(active low,Master Output)
57340500039 0:4585326daab4 23 DigitalOut LcdRst(D6); //6- One Reset button
57340500039 0:4585326daab4 24 PwmOut LcdBl(D7); //7- LCD backlight
57340500039 0:4585326daab4 25
57340500039 0:4585326daab4 26 LCD4884::LCD4884()
57340500039 0:4585326daab4 27 {};
57340500039 0:4585326daab4 28
57340500039 0:4585326daab4 29 /********************************************************************/
57340500039 0:4585326daab4 30 void LCD4884::backlight(float dat)
57340500039 0:4585326daab4 31 {
57340500039 0:4585326daab4 32 LcdBl = dat;
57340500039 0:4585326daab4 33 }
57340500039 0:4585326daab4 34 /********************************************************************/
57340500039 0:4585326daab4 35 void LCD4884::LCD_write_byte(unsigned char dat, unsigned char dat_type)
57340500039 0:4585326daab4 36 {
57340500039 0:4585326daab4 37 unsigned int i;
57340500039 0:4585326daab4 38 SpiCS = 0; //Chip Enable:Active LOW
57340500039 0:4585326daab4 39 unsigned char compare[8] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
57340500039 0:4585326daab4 40
57340500039 0:4585326daab4 41 if (dat_type == 0)
57340500039 0:4585326daab4 42 LcdDC = 0; // D/C=0:the current data byte is interpreted as command byte
57340500039 0:4585326daab4 43 else
57340500039 0:4585326daab4 44 LcdDC = 1; // D/C=1:write data to display RAM
57340500039 0:4585326daab4 45
57340500039 0:4585326daab4 46
57340500039 0:4585326daab4 47 for(i=0;i<8;i++) {
57340500039 0:4585326daab4 48 if(dat&compare[7-i])
57340500039 0:4585326daab4 49 {
57340500039 0:4585326daab4 50 SpiMosi = 1;
57340500039 0:4585326daab4 51 }
57340500039 0:4585326daab4 52 else
57340500039 0:4585326daab4 53 {
57340500039 0:4585326daab4 54 SpiMosi = 0;
57340500039 0:4585326daab4 55 }
57340500039 0:4585326daab4 56 SpiClk = 0;
57340500039 0:4585326daab4 57
57340500039 0:4585326daab4 58 SpiClk = 1;
57340500039 0:4585326daab4 59 }
57340500039 0:4585326daab4 60 SpiCS = 1;
57340500039 0:4585326daab4 61 //printf("a\n");
57340500039 0:4585326daab4 62 }
57340500039 0:4585326daab4 63 /********************************************************************/
57340500039 0:4585326daab4 64 void LCD4884::LCD_write_char(unsigned char c, char mode)
57340500039 0:4585326daab4 65 {
57340500039 0:4585326daab4 66 unsigned char line;
57340500039 0:4585326daab4 67 unsigned char *pFont;
57340500039 0:4585326daab4 68 unsigned char ch;
57340500039 0:4585326daab4 69
57340500039 0:4585326daab4 70 pFont = (unsigned char *)font6_8; //pointer *pFont points at font6_8[][6]
57340500039 0:4585326daab4 71 c -= 32; // the ASCII of "SP" is 32
57340500039 0:4585326daab4 72
57340500039 0:4585326daab4 73 for (line=0; line<6; line++)
57340500039 0:4585326daab4 74 {
57340500039 0:4585326daab4 75 ch = *(pFont+c*6+line); //read c from the font6_8[][6] (the detail information is in the "font6x8.h")
57340500039 0:4585326daab4 76 LCD_write_byte((mode==MENU_NORMAL)? ch:(ch^ 0xff), 1); //MENU_NORMAL=0,True:return ch;False:return ch
57340500039 0:4585326daab4 77 }
57340500039 0:4585326daab4 78 }
57340500039 0:4585326daab4 79 /********************************************************************/
57340500039 0:4585326daab4 80 void LCD4884::LCD_set_XY(unsigned char X, unsigned char Y)
57340500039 0:4585326daab4 81 {
57340500039 0:4585326daab4 82 LCD_write_byte(0x40 | Y, 0); // column
57340500039 0:4585326daab4 83 LCD_write_byte(0x80 | X, 0); // row
57340500039 0:4585326daab4 84 }
57340500039 0:4585326daab4 85 /********************************************************************/
57340500039 0:4585326daab4 86 void LCD4884::LCD_clear(void)
57340500039 0:4585326daab4 87 {
57340500039 0:4585326daab4 88 unsigned int i;
57340500039 0:4585326daab4 89
57340500039 0:4585326daab4 90 LCD_write_byte(0x0c, 0);
57340500039 0:4585326daab4 91 LCD_write_byte(0x80, 0);
57340500039 0:4585326daab4 92
57340500039 0:4585326daab4 93 for (i=0; i<504; i++) //6*84
57340500039 0:4585326daab4 94 {
57340500039 0:4585326daab4 95 LCD_write_byte(0, 1);
57340500039 0:4585326daab4 96 }
57340500039 0:4585326daab4 97 }
57340500039 0:4585326daab4 98 /********************************************************************/
57340500039 0:4585326daab4 99 void LCD4884::LCD_init(void)
57340500039 0:4585326daab4 100 {
57340500039 0:4585326daab4 101 /* pin intializer */
57340500039 0:4585326daab4 102 SpiClk = LOW;
57340500039 0:4585326daab4 103 SpiMosi = LOW;
57340500039 0:4585326daab4 104 SpiCS = LOW;
57340500039 0:4585326daab4 105 LcdDC = LOW;
57340500039 0:4585326daab4 106 LcdBl = LOW;
57340500039 0:4585326daab4 107
57340500039 0:4585326daab4 108 LcdRst = LOW;
57340500039 0:4585326daab4 109 wait(ONE_US);
57340500039 0:4585326daab4 110 LcdRst = HIGH;
57340500039 0:4585326daab4 111
57340500039 0:4585326daab4 112 SpiCS = LOW; //Chip Select, Slave Transmit Enable(active low, Master Output)
57340500039 0:4585326daab4 113 wait(ONE_US);
57340500039 0:4585326daab4 114 SpiCS = HIGH;
57340500039 0:4585326daab4 115 wait(ONE_US);
57340500039 0:4585326daab4 116 LcdBl = LCD_INITIAL_BRIGHTNESS;
57340500039 0:4585326daab4 117
57340500039 0:4585326daab4 118 //data_type=0, all are command bytes
57340500039 0:4585326daab4 119 LCD_write_byte(0x21, 0); //Function Set:0 0 1 0 0 PD V H=0010 0001;PD=0,V=0,H=1;
57340500039 0:4585326daab4 120 LCD_write_byte(0xc0, 0); //Set Vop:1 Vop6 Vop5 Vop4 Vop3 Vop2 Vop1 Vop0=1100 0000
57340500039 0:4585326daab4 121 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)
57340500039 0:4585326daab4 122 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
57340500039 0:4585326daab4 123
57340500039 0:4585326daab4 124 LCD_write_byte(0x20, 0);//Function Set:0 0 1 0 0 PD V H=0010 0000;PD=0,V=0,H=0;
57340500039 0:4585326daab4 125 LCD_clear();
57340500039 0:4585326daab4 126 LCD_write_byte(0x0c, 0);//Display Control: 0 0 0 0 1 D 0 E=0000 1100 ;D=1,E=0:normal mode
57340500039 0:4585326daab4 127
57340500039 0:4585326daab4 128 SpiCS = LOW;
57340500039 0:4585326daab4 129 }
57340500039 0:4585326daab4 130 /********************************************************************/
57340500039 0:4585326daab4 131 void LCD4884::LCD_write_string(unsigned char X,unsigned char Y,char *s, char mode)
57340500039 0:4585326daab4 132 {
57340500039 0:4585326daab4 133 LCD_set_XY(X,Y);
57340500039 0:4585326daab4 134 while (*s)
57340500039 0:4585326daab4 135 {
57340500039 0:4585326daab4 136 LCD_write_char(*s, mode);
57340500039 0:4585326daab4 137 s++;
57340500039 0:4585326daab4 138 }
57340500039 0:4585326daab4 139 }
57340500039 0:4585326daab4 140 /********************************************************************/
57340500039 1:a4c852d25ead 141 void LCD4884::LCD_pixel(unsigned char X, unsigned char Y)
57340500039 0:4585326daab4 142 {
57340500039 0:4585326daab4 143 unsigned char line=0;
57340500039 0:4585326daab4 144 unsigned char offset=0;
57340500039 0:4585326daab4 145 unsigned char Pix=0;
57340500039 0:4585326daab4 146 if(X>83) X = X%83;
57340500039 0:4585326daab4 147 if(Y>47) Y = Y%47;
57340500039 0:4585326daab4 148 line = Y/8;
57340500039 0:4585326daab4 149 offset = Y%8;
57340500039 0:4585326daab4 150
57340500039 0:4585326daab4 151 switch(offset){
57340500039 0:4585326daab4 152 case 0: Pix = 0x01; break;
57340500039 0:4585326daab4 153 case 1: Pix = 0x02; break;
57340500039 0:4585326daab4 154 case 2: Pix = 0x04; break;
57340500039 0:4585326daab4 155 case 3: Pix = 0x08; break;
57340500039 0:4585326daab4 156 case 4: Pix = 0x10; break;
57340500039 0:4585326daab4 157 case 5: Pix = 0x20; break;
57340500039 0:4585326daab4 158 case 6: Pix = 0x40; break;
57340500039 0:4585326daab4 159 case 7: Pix = 0x80; break;
57340500039 0:4585326daab4 160 }
57340500039 0:4585326daab4 161
57340500039 0:4585326daab4 162 LCD_set_XY(X,line);
57340500039 0:4585326daab4 163 LCD_write_byte(Pix,1);
57340500039 0:4585326daab4 164 printf("%d %d %d\n",X,line,Pix);
57340500039 0:4585326daab4 165 wait_ms(10);
57340500039 0:4585326daab4 166 }