Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of I2cLCD by
I2cLCD.cpp@1:f973d1359998, 2014-02-09 (annotated)
- Committer:
- togayan
- Date:
- Sun Feb 09 09:04:30 2014 +0000
- Revision:
- 1:f973d1359998
- Parent:
- 0:b3cc6ae3dfd8
- Child:
- 2:4e32baaf019b
I2C is given from outside the I2cLCD.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jksoft | 0:b3cc6ae3dfd8 | 1 | #include "I2cLCD.h" |
jksoft | 0:b3cc6ae3dfd8 | 2 | #include "mbed.h" |
jksoft | 0:b3cc6ae3dfd8 | 3 | |
togayan | 1:f973d1359998 | 4 | #define I2CLCD_ADDR 0x7C |
jksoft | 0:b3cc6ae3dfd8 | 5 | |
togayan | 1:f973d1359998 | 6 | #define RS_CMD 0x00 |
togayan | 1:f973d1359998 | 7 | #define RS_DATA 0x40 |
jksoft | 0:b3cc6ae3dfd8 | 8 | |
togayan | 1:f973d1359998 | 9 | #define FUNC_SET1 0x38 |
togayan | 1:f973d1359998 | 10 | #define FUNC_SET2 0x39 |
togayan | 1:f973d1359998 | 11 | #define INT_OSC 0x14 |
jksoft | 0:b3cc6ae3dfd8 | 12 | |
togayan | 1:f973d1359998 | 13 | #define CNTR_DEF 0x25 |
jksoft | 0:b3cc6ae3dfd8 | 14 | |
togayan | 1:f973d1359998 | 15 | unsigned char icon_data[]= { |
jksoft | 0:b3cc6ae3dfd8 | 16 | 0x00, 0x10, |
jksoft | 0:b3cc6ae3dfd8 | 17 | 0x02, 0x10, |
jksoft | 0:b3cc6ae3dfd8 | 18 | 0x04, 0x10, |
jksoft | 0:b3cc6ae3dfd8 | 19 | 0x06, 0x10, |
togayan | 1:f973d1359998 | 20 | |
jksoft | 0:b3cc6ae3dfd8 | 21 | 0x07, 0x10, |
jksoft | 0:b3cc6ae3dfd8 | 22 | 0x07, 0x08, |
jksoft | 0:b3cc6ae3dfd8 | 23 | 0x09, 0x10, |
jksoft | 0:b3cc6ae3dfd8 | 24 | 0x0B, 0x10, |
togayan | 1:f973d1359998 | 25 | |
jksoft | 0:b3cc6ae3dfd8 | 26 | 0x0D, 0x08, |
jksoft | 0:b3cc6ae3dfd8 | 27 | 0x0D, 0x04, |
jksoft | 0:b3cc6ae3dfd8 | 28 | 0x0D, 0x02, |
jksoft | 0:b3cc6ae3dfd8 | 29 | 0x0D, 0x10, |
jksoft | 0:b3cc6ae3dfd8 | 30 | |
jksoft | 0:b3cc6ae3dfd8 | 31 | 0x0F, 0x10, |
jksoft | 0:b3cc6ae3dfd8 | 32 | }; |
jksoft | 0:b3cc6ae3dfd8 | 33 | |
togayan | 1:f973d1359998 | 34 | I2cLCD::I2cLCD(I2C& i2c, PinName rp) : _rs( rp ) , _i2c( i2c ) |
togayan | 1:f973d1359998 | 35 | { |
jksoft | 0:b3cc6ae3dfd8 | 36 | contrast = CNTR_DEF; |
jksoft | 0:b3cc6ae3dfd8 | 37 | icon = 0; |
togayan | 1:f973d1359998 | 38 | |
jksoft | 0:b3cc6ae3dfd8 | 39 | wait(0.015); |
jksoft | 0:b3cc6ae3dfd8 | 40 | // reset LOW->HIGH |
jksoft | 0:b3cc6ae3dfd8 | 41 | _rs = 0; |
jksoft | 0:b3cc6ae3dfd8 | 42 | wait(0.01); |
jksoft | 0:b3cc6ae3dfd8 | 43 | _rs = 1; |
jksoft | 0:b3cc6ae3dfd8 | 44 | wait(0.05); |
togayan | 1:f973d1359998 | 45 | |
jksoft | 0:b3cc6ae3dfd8 | 46 | writeCommand(FUNC_SET1); |
jksoft | 0:b3cc6ae3dfd8 | 47 | writeCommand(FUNC_SET2); |
jksoft | 0:b3cc6ae3dfd8 | 48 | writeCommand(INT_OSC); |
togayan | 1:f973d1359998 | 49 | |
jksoft | 0:b3cc6ae3dfd8 | 50 | writeCommand(0x70 | (contrast & 0xF)); |
jksoft | 0:b3cc6ae3dfd8 | 51 | writeCommand(0x5C | ((contrast >> 4) & 0x3)); |
togayan | 1:f973d1359998 | 52 | |
jksoft | 0:b3cc6ae3dfd8 | 53 | writeCommand(0x6C); |
jksoft | 0:b3cc6ae3dfd8 | 54 | wait(0.3); |
togayan | 1:f973d1359998 | 55 | |
jksoft | 0:b3cc6ae3dfd8 | 56 | writeCommand(0x38); // function set |
jksoft | 0:b3cc6ae3dfd8 | 57 | writeCommand(0x0C); // Display On |
togayan | 1:f973d1359998 | 58 | |
jksoft | 0:b3cc6ae3dfd8 | 59 | cls(); // Clear Display |
jksoft | 0:b3cc6ae3dfd8 | 60 | } |
jksoft | 0:b3cc6ae3dfd8 | 61 | |
togayan | 1:f973d1359998 | 62 | void I2cLCD::character(int column, int row, int c) |
togayan | 1:f973d1359998 | 63 | { |
jksoft | 0:b3cc6ae3dfd8 | 64 | int a = address(column, row); |
jksoft | 0:b3cc6ae3dfd8 | 65 | writeCommand(a); |
jksoft | 0:b3cc6ae3dfd8 | 66 | writeData(c); |
jksoft | 0:b3cc6ae3dfd8 | 67 | } |
jksoft | 0:b3cc6ae3dfd8 | 68 | |
togayan | 1:f973d1359998 | 69 | void I2cLCD::cls() |
togayan | 1:f973d1359998 | 70 | { |
jksoft | 0:b3cc6ae3dfd8 | 71 | writeCommand(0x01); // cls, and set cursor to 0 |
jksoft | 0:b3cc6ae3dfd8 | 72 | wait(0.00164f); // This command takes 1.64 ms |
jksoft | 0:b3cc6ae3dfd8 | 73 | locate(0, 0); |
jksoft | 0:b3cc6ae3dfd8 | 74 | } |
jksoft | 0:b3cc6ae3dfd8 | 75 | |
togayan | 1:f973d1359998 | 76 | void I2cLCD::locate(int column, int row) |
togayan | 1:f973d1359998 | 77 | { |
jksoft | 0:b3cc6ae3dfd8 | 78 | _column = column; |
jksoft | 0:b3cc6ae3dfd8 | 79 | _row = row; |
jksoft | 0:b3cc6ae3dfd8 | 80 | } |
jksoft | 0:b3cc6ae3dfd8 | 81 | |
togayan | 1:f973d1359998 | 82 | int I2cLCD::_putc(int value) |
togayan | 1:f973d1359998 | 83 | { |
jksoft | 0:b3cc6ae3dfd8 | 84 | if (value == '\n') { |
jksoft | 0:b3cc6ae3dfd8 | 85 | _column = 0; |
jksoft | 0:b3cc6ae3dfd8 | 86 | _row++; |
jksoft | 0:b3cc6ae3dfd8 | 87 | if (_row >= rows()) { |
jksoft | 0:b3cc6ae3dfd8 | 88 | _row = 0; |
jksoft | 0:b3cc6ae3dfd8 | 89 | } |
jksoft | 0:b3cc6ae3dfd8 | 90 | } else { |
jksoft | 0:b3cc6ae3dfd8 | 91 | character(_column, _row, value); |
jksoft | 0:b3cc6ae3dfd8 | 92 | _column++; |
jksoft | 0:b3cc6ae3dfd8 | 93 | if (_column >= columns()) { |
jksoft | 0:b3cc6ae3dfd8 | 94 | _column = 0; |
jksoft | 0:b3cc6ae3dfd8 | 95 | _row++; |
jksoft | 0:b3cc6ae3dfd8 | 96 | if (_row >= rows()) { |
jksoft | 0:b3cc6ae3dfd8 | 97 | _row = 0; |
jksoft | 0:b3cc6ae3dfd8 | 98 | } |
jksoft | 0:b3cc6ae3dfd8 | 99 | } |
jksoft | 0:b3cc6ae3dfd8 | 100 | } |
jksoft | 0:b3cc6ae3dfd8 | 101 | return value; |
jksoft | 0:b3cc6ae3dfd8 | 102 | } |
jksoft | 0:b3cc6ae3dfd8 | 103 | |
togayan | 1:f973d1359998 | 104 | int I2cLCD::_getc() |
togayan | 1:f973d1359998 | 105 | { |
jksoft | 0:b3cc6ae3dfd8 | 106 | return -1; |
jksoft | 0:b3cc6ae3dfd8 | 107 | } |
jksoft | 0:b3cc6ae3dfd8 | 108 | |
jksoft | 0:b3cc6ae3dfd8 | 109 | void I2cLCD::writeCommand( int cmd ) |
jksoft | 0:b3cc6ae3dfd8 | 110 | { |
jksoft | 0:b3cc6ae3dfd8 | 111 | char cmds[2]; |
togayan | 1:f973d1359998 | 112 | |
jksoft | 0:b3cc6ae3dfd8 | 113 | cmds[0] = RS_CMD; |
jksoft | 0:b3cc6ae3dfd8 | 114 | cmds[1] = cmd; |
togayan | 1:f973d1359998 | 115 | |
jksoft | 0:b3cc6ae3dfd8 | 116 | _i2c.write(I2CLCD_ADDR, cmds, 2); |
jksoft | 0:b3cc6ae3dfd8 | 117 | } |
jksoft | 0:b3cc6ae3dfd8 | 118 | |
jksoft | 0:b3cc6ae3dfd8 | 119 | void I2cLCD::writeData( int data ) |
jksoft | 0:b3cc6ae3dfd8 | 120 | { |
jksoft | 0:b3cc6ae3dfd8 | 121 | char cmd[2]; |
togayan | 1:f973d1359998 | 122 | |
jksoft | 0:b3cc6ae3dfd8 | 123 | cmd[0] = RS_DATA; |
jksoft | 0:b3cc6ae3dfd8 | 124 | cmd[1] = data; |
togayan | 1:f973d1359998 | 125 | |
jksoft | 0:b3cc6ae3dfd8 | 126 | _i2c.write(I2CLCD_ADDR, cmd, 2); |
jksoft | 0:b3cc6ae3dfd8 | 127 | } |
jksoft | 0:b3cc6ae3dfd8 | 128 | |
togayan | 1:f973d1359998 | 129 | int I2cLCD::address(int column, int row) |
togayan | 1:f973d1359998 | 130 | { |
jksoft | 0:b3cc6ae3dfd8 | 131 | return 0x80 + (row * 0x40) + column; |
jksoft | 0:b3cc6ae3dfd8 | 132 | } |
jksoft | 0:b3cc6ae3dfd8 | 133 | |
togayan | 1:f973d1359998 | 134 | int I2cLCD::columns() |
togayan | 1:f973d1359998 | 135 | { |
jksoft | 0:b3cc6ae3dfd8 | 136 | return 16; |
jksoft | 0:b3cc6ae3dfd8 | 137 | } |
jksoft | 0:b3cc6ae3dfd8 | 138 | |
togayan | 1:f973d1359998 | 139 | int I2cLCD::rows() |
togayan | 1:f973d1359998 | 140 | { |
jksoft | 0:b3cc6ae3dfd8 | 141 | return 2; |
jksoft | 0:b3cc6ae3dfd8 | 142 | } |
jksoft | 0:b3cc6ae3dfd8 | 143 | |
jksoft | 0:b3cc6ae3dfd8 | 144 | void I2cLCD::seticon(IconType type) |
jksoft | 0:b3cc6ae3dfd8 | 145 | { |
jksoft | 0:b3cc6ae3dfd8 | 146 | icon |= type; |
jksoft | 0:b3cc6ae3dfd8 | 147 | puticon( icon ); |
jksoft | 0:b3cc6ae3dfd8 | 148 | } |
jksoft | 0:b3cc6ae3dfd8 | 149 | |
jksoft | 0:b3cc6ae3dfd8 | 150 | void I2cLCD::clearicon(IconType type) |
jksoft | 0:b3cc6ae3dfd8 | 151 | { |
jksoft | 0:b3cc6ae3dfd8 | 152 | icon &= ~type; |
jksoft | 0:b3cc6ae3dfd8 | 153 | puticon( icon ); |
jksoft | 0:b3cc6ae3dfd8 | 154 | } |
jksoft | 0:b3cc6ae3dfd8 | 155 | |
jksoft | 0:b3cc6ae3dfd8 | 156 | void I2cLCD::puticon(int flg) |
jksoft | 0:b3cc6ae3dfd8 | 157 | { |
jksoft | 0:b3cc6ae3dfd8 | 158 | static unsigned char icon_buff[16]; |
jksoft | 0:b3cc6ae3dfd8 | 159 | unsigned char i; |
togayan | 1:f973d1359998 | 160 | |
togayan | 1:f973d1359998 | 161 | for(i=0; i<sizeof(icon_data)/2; i++) { |
togayan | 1:f973d1359998 | 162 | if(flg & (0x1000>>i)) { |
jksoft | 0:b3cc6ae3dfd8 | 163 | icon_buff[icon_data[i*2]] |= icon_data[i*2+1]; |
togayan | 1:f973d1359998 | 164 | } else { |
jksoft | 0:b3cc6ae3dfd8 | 165 | icon_buff[icon_data[i*2]] &= ~icon_data[i*2+1]; |
jksoft | 0:b3cc6ae3dfd8 | 166 | } |
jksoft | 0:b3cc6ae3dfd8 | 167 | } |
jksoft | 0:b3cc6ae3dfd8 | 168 | |
togayan | 1:f973d1359998 | 169 | for(i=0; i<16; i++) { |
jksoft | 0:b3cc6ae3dfd8 | 170 | writeCommand(0x39); |
jksoft | 0:b3cc6ae3dfd8 | 171 | writeCommand(0x40+i); |
jksoft | 0:b3cc6ae3dfd8 | 172 | writeData(icon_buff[i]); |
jksoft | 0:b3cc6ae3dfd8 | 173 | } |
jksoft | 0:b3cc6ae3dfd8 | 174 | } |