Tamagawaseiki IMU2 Ver1

Dependencies:   mbed

Fork of AQM0802_test by Yoshihiro TSUBOI

Committer:
takeuchi
Date:
Sun Sep 22 03:04:05 2013 +0000
Revision:
1:20b0a21f3b43
Tamagawaseiki IMU2 Ver1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
takeuchi 1:20b0a21f3b43 1 #include "I2cLCD.h"
takeuchi 1:20b0a21f3b43 2 #include "mbed.h"
takeuchi 1:20b0a21f3b43 3
takeuchi 1:20b0a21f3b43 4 #define I2CLCD_ADDR 0x7C
takeuchi 1:20b0a21f3b43 5
takeuchi 1:20b0a21f3b43 6 #define RS_CMD 0x00
takeuchi 1:20b0a21f3b43 7 #define RS_DATA 0x40
takeuchi 1:20b0a21f3b43 8
takeuchi 1:20b0a21f3b43 9 #define FUNC_SET1 0x38
takeuchi 1:20b0a21f3b43 10 #define FUNC_SET2 0x39
takeuchi 1:20b0a21f3b43 11 #define INT_OSC 0x14
takeuchi 1:20b0a21f3b43 12
takeuchi 1:20b0a21f3b43 13 #define CNTR_DEF 0x20
takeuchi 1:20b0a21f3b43 14
takeuchi 1:20b0a21f3b43 15 unsigned char icon_data[]=
takeuchi 1:20b0a21f3b43 16 {
takeuchi 1:20b0a21f3b43 17 0x00, 0x10,
takeuchi 1:20b0a21f3b43 18 0x02, 0x10,
takeuchi 1:20b0a21f3b43 19 0x04, 0x10,
takeuchi 1:20b0a21f3b43 20 0x06, 0x10,
takeuchi 1:20b0a21f3b43 21
takeuchi 1:20b0a21f3b43 22 0x07, 0x10,
takeuchi 1:20b0a21f3b43 23 0x07, 0x08,
takeuchi 1:20b0a21f3b43 24 0x09, 0x10,
takeuchi 1:20b0a21f3b43 25 0x0B, 0x10,
takeuchi 1:20b0a21f3b43 26
takeuchi 1:20b0a21f3b43 27 0x0D, 0x08,
takeuchi 1:20b0a21f3b43 28 0x0D, 0x04,
takeuchi 1:20b0a21f3b43 29 0x0D, 0x02,
takeuchi 1:20b0a21f3b43 30 0x0D, 0x10,
takeuchi 1:20b0a21f3b43 31
takeuchi 1:20b0a21f3b43 32 0x0F, 0x10,
takeuchi 1:20b0a21f3b43 33 };
takeuchi 1:20b0a21f3b43 34
takeuchi 1:20b0a21f3b43 35 I2cLCD::I2cLCD(PinName sda, PinName scl, PinName rp) : _rs( rp ) , _i2c( sda , scl ){
takeuchi 1:20b0a21f3b43 36
takeuchi 1:20b0a21f3b43 37 contrast = CNTR_DEF;
takeuchi 1:20b0a21f3b43 38 icon = 0;
takeuchi 1:20b0a21f3b43 39
takeuchi 1:20b0a21f3b43 40 wait(0.015);
takeuchi 1:20b0a21f3b43 41 // reset LOW->HIGH
takeuchi 1:20b0a21f3b43 42 _rs = 0;
takeuchi 1:20b0a21f3b43 43 wait(0.01);
takeuchi 1:20b0a21f3b43 44 _rs = 1;
takeuchi 1:20b0a21f3b43 45 wait(0.05);
takeuchi 1:20b0a21f3b43 46
takeuchi 1:20b0a21f3b43 47 writeCommand(FUNC_SET1);
takeuchi 1:20b0a21f3b43 48 writeCommand(FUNC_SET2);
takeuchi 1:20b0a21f3b43 49 writeCommand(INT_OSC);
takeuchi 1:20b0a21f3b43 50
takeuchi 1:20b0a21f3b43 51 writeCommand(0x70 | (contrast & 0xF));
takeuchi 1:20b0a21f3b43 52 writeCommand(0x5C | ((contrast >> 4) & 0x3));
takeuchi 1:20b0a21f3b43 53
takeuchi 1:20b0a21f3b43 54 writeCommand(0x6C);
takeuchi 1:20b0a21f3b43 55 wait(0.3);
takeuchi 1:20b0a21f3b43 56
takeuchi 1:20b0a21f3b43 57 writeCommand(0x38); // function set
takeuchi 1:20b0a21f3b43 58 writeCommand(0x0C); // Display On
takeuchi 1:20b0a21f3b43 59
takeuchi 1:20b0a21f3b43 60 cls(); // Clear Display
takeuchi 1:20b0a21f3b43 61
takeuchi 1:20b0a21f3b43 62 }
takeuchi 1:20b0a21f3b43 63
takeuchi 1:20b0a21f3b43 64
takeuchi 1:20b0a21f3b43 65
takeuchi 1:20b0a21f3b43 66 void I2cLCD::character(int column, int row, int c) {
takeuchi 1:20b0a21f3b43 67 int a = address(column, row);
takeuchi 1:20b0a21f3b43 68 writeCommand(a);
takeuchi 1:20b0a21f3b43 69 writeData(c);
takeuchi 1:20b0a21f3b43 70 }
takeuchi 1:20b0a21f3b43 71
takeuchi 1:20b0a21f3b43 72 void I2cLCD::cls() {
takeuchi 1:20b0a21f3b43 73 writeCommand(0x01); // cls, and set cursor to 0
takeuchi 1:20b0a21f3b43 74 wait(0.00164f); // This command takes 1.64 ms
takeuchi 1:20b0a21f3b43 75 locate(0, 0);
takeuchi 1:20b0a21f3b43 76 }
takeuchi 1:20b0a21f3b43 77
takeuchi 1:20b0a21f3b43 78 void I2cLCD::locate(int column, int row) {
takeuchi 1:20b0a21f3b43 79 _column = column;
takeuchi 1:20b0a21f3b43 80 _row = row;
takeuchi 1:20b0a21f3b43 81 }
takeuchi 1:20b0a21f3b43 82
takeuchi 1:20b0a21f3b43 83 int I2cLCD::_putc(int value) {
takeuchi 1:20b0a21f3b43 84 if (value == '\n') {
takeuchi 1:20b0a21f3b43 85 _column = 0;
takeuchi 1:20b0a21f3b43 86 _row++;
takeuchi 1:20b0a21f3b43 87 if (_row >= rows()) {
takeuchi 1:20b0a21f3b43 88 _row = 0;
takeuchi 1:20b0a21f3b43 89 }
takeuchi 1:20b0a21f3b43 90 } else {
takeuchi 1:20b0a21f3b43 91 character(_column, _row, value);
takeuchi 1:20b0a21f3b43 92 _column++;
takeuchi 1:20b0a21f3b43 93 if (_column >= columns()) {
takeuchi 1:20b0a21f3b43 94 _column = 0;
takeuchi 1:20b0a21f3b43 95 _row++;
takeuchi 1:20b0a21f3b43 96 if (_row >= rows()) {
takeuchi 1:20b0a21f3b43 97 _row = 0;
takeuchi 1:20b0a21f3b43 98 }
takeuchi 1:20b0a21f3b43 99 }
takeuchi 1:20b0a21f3b43 100 }
takeuchi 1:20b0a21f3b43 101 return value;
takeuchi 1:20b0a21f3b43 102 }
takeuchi 1:20b0a21f3b43 103
takeuchi 1:20b0a21f3b43 104 int I2cLCD::_getc() {
takeuchi 1:20b0a21f3b43 105 return -1;
takeuchi 1:20b0a21f3b43 106 }
takeuchi 1:20b0a21f3b43 107
takeuchi 1:20b0a21f3b43 108 void I2cLCD::writeCommand( int cmd )
takeuchi 1:20b0a21f3b43 109 {
takeuchi 1:20b0a21f3b43 110 char cmds[2];
takeuchi 1:20b0a21f3b43 111
takeuchi 1:20b0a21f3b43 112 cmds[0] = RS_CMD;
takeuchi 1:20b0a21f3b43 113 cmds[1] = cmd;
takeuchi 1:20b0a21f3b43 114
takeuchi 1:20b0a21f3b43 115 _i2c.write(I2CLCD_ADDR, cmds, 2);
takeuchi 1:20b0a21f3b43 116 }
takeuchi 1:20b0a21f3b43 117
takeuchi 1:20b0a21f3b43 118 void I2cLCD::writeData( int data )
takeuchi 1:20b0a21f3b43 119 {
takeuchi 1:20b0a21f3b43 120 char cmd[2];
takeuchi 1:20b0a21f3b43 121
takeuchi 1:20b0a21f3b43 122 cmd[0] = RS_DATA;
takeuchi 1:20b0a21f3b43 123 cmd[1] = data;
takeuchi 1:20b0a21f3b43 124
takeuchi 1:20b0a21f3b43 125 _i2c.write(I2CLCD_ADDR, cmd, 2);
takeuchi 1:20b0a21f3b43 126 }
takeuchi 1:20b0a21f3b43 127
takeuchi 1:20b0a21f3b43 128 int I2cLCD::address(int column, int row) {
takeuchi 1:20b0a21f3b43 129
takeuchi 1:20b0a21f3b43 130 return 0x80 + (row * 0x40) + column;
takeuchi 1:20b0a21f3b43 131 }
takeuchi 1:20b0a21f3b43 132
takeuchi 1:20b0a21f3b43 133 int I2cLCD::columns() {
takeuchi 1:20b0a21f3b43 134 return 16;
takeuchi 1:20b0a21f3b43 135 }
takeuchi 1:20b0a21f3b43 136
takeuchi 1:20b0a21f3b43 137 int I2cLCD::rows() {
takeuchi 1:20b0a21f3b43 138 return 2;
takeuchi 1:20b0a21f3b43 139 }
takeuchi 1:20b0a21f3b43 140
takeuchi 1:20b0a21f3b43 141 void I2cLCD::seticon(IconType type)
takeuchi 1:20b0a21f3b43 142 {
takeuchi 1:20b0a21f3b43 143 icon |= type;
takeuchi 1:20b0a21f3b43 144 puticon( icon );
takeuchi 1:20b0a21f3b43 145 }
takeuchi 1:20b0a21f3b43 146
takeuchi 1:20b0a21f3b43 147 void I2cLCD::clearicon(IconType type)
takeuchi 1:20b0a21f3b43 148 {
takeuchi 1:20b0a21f3b43 149 icon &= ~type;
takeuchi 1:20b0a21f3b43 150 puticon( icon );
takeuchi 1:20b0a21f3b43 151 }
takeuchi 1:20b0a21f3b43 152
takeuchi 1:20b0a21f3b43 153
takeuchi 1:20b0a21f3b43 154 void I2cLCD::puticon(int flg)
takeuchi 1:20b0a21f3b43 155 {
takeuchi 1:20b0a21f3b43 156 static unsigned char icon_buff[16];
takeuchi 1:20b0a21f3b43 157 unsigned char i;
takeuchi 1:20b0a21f3b43 158
takeuchi 1:20b0a21f3b43 159 for(i=0;i<sizeof(icon_data)/2;i++)
takeuchi 1:20b0a21f3b43 160 {
takeuchi 1:20b0a21f3b43 161 if(flg & (0x1000>>i))
takeuchi 1:20b0a21f3b43 162 {
takeuchi 1:20b0a21f3b43 163 icon_buff[icon_data[i*2]] |= icon_data[i*2+1];
takeuchi 1:20b0a21f3b43 164 }
takeuchi 1:20b0a21f3b43 165 else
takeuchi 1:20b0a21f3b43 166 {
takeuchi 1:20b0a21f3b43 167 icon_buff[icon_data[i*2]] &= ~icon_data[i*2+1];
takeuchi 1:20b0a21f3b43 168 }
takeuchi 1:20b0a21f3b43 169 }
takeuchi 1:20b0a21f3b43 170
takeuchi 1:20b0a21f3b43 171 for(i=0;i<16;i++){
takeuchi 1:20b0a21f3b43 172 writeCommand(0x39);
takeuchi 1:20b0a21f3b43 173 writeCommand(0x40+i);
takeuchi 1:20b0a21f3b43 174 writeData(icon_buff[i]);
takeuchi 1:20b0a21f3b43 175 }
takeuchi 1:20b0a21f3b43 176 }