LCD5110
LCD5110.cpp@0:bcd95cee2654, 2017-09-30 (annotated)
- Committer:
- nguyenmanhthao996tn
- Date:
- Sat Sep 30 09:12:29 2017 +0000
- Revision:
- 0:bcd95cee2654
Worked version
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
nguyenmanhthao996tn | 0:bcd95cee2654 | 1 | #include "LCD5110.h" |
nguyenmanhthao996tn | 0:bcd95cee2654 | 2 | |
nguyenmanhthao996tn | 0:bcd95cee2654 | 3 | /*********** Variables ***********/ |
nguyenmanhthao996tn | 0:bcd95cee2654 | 4 | static DigitalOut *_clk, *_din, *_ce, *_rst, *_dc, *_light; |
nguyenmanhthao996tn | 0:bcd95cee2654 | 5 | |
nguyenmanhthao996tn | 0:bcd95cee2654 | 6 | void LCD5110_init(PinName clk, PinName din, PinName ce, PinName rst, PinName dc, PinName light) |
nguyenmanhthao996tn | 0:bcd95cee2654 | 7 | { |
nguyenmanhthao996tn | 0:bcd95cee2654 | 8 | LCD5110_GPIO_Config(clk, din, ce, rst, dc, light); |
nguyenmanhthao996tn | 0:bcd95cee2654 | 9 | |
nguyenmanhthao996tn | 0:bcd95cee2654 | 10 | LCD5110_light_on(); // Light on |
nguyenmanhthao996tn | 0:bcd95cee2654 | 11 | LCD5110_DC(1); // LCD_DC = 1; |
nguyenmanhthao996tn | 0:bcd95cee2654 | 12 | LCD5110_DIN(1); // SPI_MO = 1; |
nguyenmanhthao996tn | 0:bcd95cee2654 | 13 | LCD5110_CLK(1); // SPI_SCK = 1; |
nguyenmanhthao996tn | 0:bcd95cee2654 | 14 | LCD5110_CE(1); // SPI_CS = 1; |
nguyenmanhthao996tn | 0:bcd95cee2654 | 15 | |
nguyenmanhthao996tn | 0:bcd95cee2654 | 16 | LCD5110_RST(0); // LCD_RST = 0; |
nguyenmanhthao996tn | 0:bcd95cee2654 | 17 | LCD5110_LCD_delay_ms(10); |
nguyenmanhthao996tn | 0:bcd95cee2654 | 18 | LCD5110_RST(1); // LCD_RST = 1; |
nguyenmanhthao996tn | 0:bcd95cee2654 | 19 | |
nguyenmanhthao996tn | 0:bcd95cee2654 | 20 | /* LCD Initialize sequence */ |
nguyenmanhthao996tn | 0:bcd95cee2654 | 21 | LCD5110_LCD_write_byte(0x21, 0); |
nguyenmanhthao996tn | 0:bcd95cee2654 | 22 | LCD5110_LCD_write_byte(0xc6, 0); |
nguyenmanhthao996tn | 0:bcd95cee2654 | 23 | LCD5110_LCD_write_byte(0x06, 0); |
nguyenmanhthao996tn | 0:bcd95cee2654 | 24 | LCD5110_LCD_write_byte(0x13, 0); |
nguyenmanhthao996tn | 0:bcd95cee2654 | 25 | LCD5110_LCD_write_byte(0x20, 0); |
nguyenmanhthao996tn | 0:bcd95cee2654 | 26 | LCD5110_clear(); |
nguyenmanhthao996tn | 0:bcd95cee2654 | 27 | LCD5110_LCD_write_byte(0x0c, 0); |
nguyenmanhthao996tn | 0:bcd95cee2654 | 28 | } |
nguyenmanhthao996tn | 0:bcd95cee2654 | 29 | |
nguyenmanhthao996tn | 0:bcd95cee2654 | 30 | void LCD5110_LCD_write_byte(unsigned char dat, unsigned char mode) |
nguyenmanhthao996tn | 0:bcd95cee2654 | 31 | { |
nguyenmanhthao996tn | 0:bcd95cee2654 | 32 | unsigned char i; |
nguyenmanhthao996tn | 0:bcd95cee2654 | 33 | |
nguyenmanhthao996tn | 0:bcd95cee2654 | 34 | /* Simulate SPI Transfer */ |
nguyenmanhthao996tn | 0:bcd95cee2654 | 35 | LCD5110_CE(0); // SPI_CS = 0; |
nguyenmanhthao996tn | 0:bcd95cee2654 | 36 | |
nguyenmanhthao996tn | 0:bcd95cee2654 | 37 | if (0 == mode) |
nguyenmanhthao996tn | 0:bcd95cee2654 | 38 | LCD5110_DC(0); // LCD_DC = 0; |
nguyenmanhthao996tn | 0:bcd95cee2654 | 39 | else |
nguyenmanhthao996tn | 0:bcd95cee2654 | 40 | LCD5110_DC(1); // LCD_DC = 1; |
nguyenmanhthao996tn | 0:bcd95cee2654 | 41 | |
nguyenmanhthao996tn | 0:bcd95cee2654 | 42 | for (i = 0; i < 8; i++) { |
nguyenmanhthao996tn | 0:bcd95cee2654 | 43 | LCD5110_DIN((dat & 0x80) >> 7); // SPI_MO = dat & 0x80; |
nguyenmanhthao996tn | 0:bcd95cee2654 | 44 | dat = dat << 1; |
nguyenmanhthao996tn | 0:bcd95cee2654 | 45 | LCD5110_CLK(0); // SPI_SCK = 0; |
nguyenmanhthao996tn | 0:bcd95cee2654 | 46 | LCD5110_CLK(1); // SPI_SCK = 1; |
nguyenmanhthao996tn | 0:bcd95cee2654 | 47 | } |
nguyenmanhthao996tn | 0:bcd95cee2654 | 48 | |
nguyenmanhthao996tn | 0:bcd95cee2654 | 49 | LCD5110_CE(1); // SPI_CS = 1; |
nguyenmanhthao996tn | 0:bcd95cee2654 | 50 | } |
nguyenmanhthao996tn | 0:bcd95cee2654 | 51 | |
nguyenmanhthao996tn | 0:bcd95cee2654 | 52 | void LCD5110_write_char(unsigned char c) |
nguyenmanhthao996tn | 0:bcd95cee2654 | 53 | { |
nguyenmanhthao996tn | 0:bcd95cee2654 | 54 | unsigned char line; |
nguyenmanhthao996tn | 0:bcd95cee2654 | 55 | unsigned char ch = 0; |
nguyenmanhthao996tn | 0:bcd95cee2654 | 56 | |
nguyenmanhthao996tn | 0:bcd95cee2654 | 57 | c = c - 32; |
nguyenmanhthao996tn | 0:bcd95cee2654 | 58 | |
nguyenmanhthao996tn | 0:bcd95cee2654 | 59 | for (line = 0; line < 6; line++) { |
nguyenmanhthao996tn | 0:bcd95cee2654 | 60 | ch = font6_8[c][line]; |
nguyenmanhthao996tn | 0:bcd95cee2654 | 61 | LCD5110_LCD_write_byte(ch, 1); |
nguyenmanhthao996tn | 0:bcd95cee2654 | 62 | } |
nguyenmanhthao996tn | 0:bcd95cee2654 | 63 | } |
nguyenmanhthao996tn | 0:bcd95cee2654 | 64 | |
nguyenmanhthao996tn | 0:bcd95cee2654 | 65 | void LCD5110_write_char_reg(unsigned char c) |
nguyenmanhthao996tn | 0:bcd95cee2654 | 66 | { |
nguyenmanhthao996tn | 0:bcd95cee2654 | 67 | unsigned char line; |
nguyenmanhthao996tn | 0:bcd95cee2654 | 68 | unsigned char ch = 0; |
nguyenmanhthao996tn | 0:bcd95cee2654 | 69 | |
nguyenmanhthao996tn | 0:bcd95cee2654 | 70 | c = c - 32; |
nguyenmanhthao996tn | 0:bcd95cee2654 | 71 | |
nguyenmanhthao996tn | 0:bcd95cee2654 | 72 | for (line = 0; line < 6; line++) { |
nguyenmanhthao996tn | 0:bcd95cee2654 | 73 | ch = ~font6_8[c][line]; |
nguyenmanhthao996tn | 0:bcd95cee2654 | 74 | LCD5110_LCD_write_byte(ch, 1); |
nguyenmanhthao996tn | 0:bcd95cee2654 | 75 | } |
nguyenmanhthao996tn | 0:bcd95cee2654 | 76 | } |
nguyenmanhthao996tn | 0:bcd95cee2654 | 77 | |
nguyenmanhthao996tn | 0:bcd95cee2654 | 78 | void LCD5110_write_string(char *s) |
nguyenmanhthao996tn | 0:bcd95cee2654 | 79 | { |
nguyenmanhthao996tn | 0:bcd95cee2654 | 80 | unsigned char ch; |
nguyenmanhthao996tn | 0:bcd95cee2654 | 81 | while (*s != '\0') { |
nguyenmanhthao996tn | 0:bcd95cee2654 | 82 | ch = *s; |
nguyenmanhthao996tn | 0:bcd95cee2654 | 83 | LCD5110_write_char(ch); |
nguyenmanhthao996tn | 0:bcd95cee2654 | 84 | s++; |
nguyenmanhthao996tn | 0:bcd95cee2654 | 85 | } |
nguyenmanhthao996tn | 0:bcd95cee2654 | 86 | } |
nguyenmanhthao996tn | 0:bcd95cee2654 | 87 | |
nguyenmanhthao996tn | 0:bcd95cee2654 | 88 | void LCD5110_clear(void) |
nguyenmanhthao996tn | 0:bcd95cee2654 | 89 | { |
nguyenmanhthao996tn | 0:bcd95cee2654 | 90 | unsigned char i, j; |
nguyenmanhthao996tn | 0:bcd95cee2654 | 91 | for (i = 0; i < 6; i++) |
nguyenmanhthao996tn | 0:bcd95cee2654 | 92 | for (j = 0; j < 84; j++) |
nguyenmanhthao996tn | 0:bcd95cee2654 | 93 | LCD5110_LCD_write_byte(0, 1); |
nguyenmanhthao996tn | 0:bcd95cee2654 | 94 | } |
nguyenmanhthao996tn | 0:bcd95cee2654 | 95 | |
nguyenmanhthao996tn | 0:bcd95cee2654 | 96 | void LCD5110_set_XY(unsigned char X, unsigned char Y) |
nguyenmanhthao996tn | 0:bcd95cee2654 | 97 | { |
nguyenmanhthao996tn | 0:bcd95cee2654 | 98 | unsigned char x = 6 * X; |
nguyenmanhthao996tn | 0:bcd95cee2654 | 99 | |
nguyenmanhthao996tn | 0:bcd95cee2654 | 100 | /* Set cursor location */ |
nguyenmanhthao996tn | 0:bcd95cee2654 | 101 | LCD5110_LCD_write_byte(0x40 | Y, 0); |
nguyenmanhthao996tn | 0:bcd95cee2654 | 102 | LCD5110_LCD_write_byte(0x80 | x, 0); |
nguyenmanhthao996tn | 0:bcd95cee2654 | 103 | } |
nguyenmanhthao996tn | 0:bcd95cee2654 | 104 | |
nguyenmanhthao996tn | 0:bcd95cee2654 | 105 | void LCD5110_write_Dec(unsigned int b) |
nguyenmanhthao996tn | 0:bcd95cee2654 | 106 | { |
nguyenmanhthao996tn | 0:bcd95cee2654 | 107 | |
nguyenmanhthao996tn | 0:bcd95cee2654 | 108 | unsigned char datas[4]; |
nguyenmanhthao996tn | 0:bcd95cee2654 | 109 | |
nguyenmanhthao996tn | 0:bcd95cee2654 | 110 | datas[0] = b / 1000; |
nguyenmanhthao996tn | 0:bcd95cee2654 | 111 | b = b - datas[0] * 1000; |
nguyenmanhthao996tn | 0:bcd95cee2654 | 112 | datas[1] = b / 100; |
nguyenmanhthao996tn | 0:bcd95cee2654 | 113 | b = b - datas[1] * 100; |
nguyenmanhthao996tn | 0:bcd95cee2654 | 114 | datas[2] = b / 10; |
nguyenmanhthao996tn | 0:bcd95cee2654 | 115 | b = b - datas[2] * 10; |
nguyenmanhthao996tn | 0:bcd95cee2654 | 116 | datas[3] = b; |
nguyenmanhthao996tn | 0:bcd95cee2654 | 117 | |
nguyenmanhthao996tn | 0:bcd95cee2654 | 118 | datas[0] += 48; |
nguyenmanhthao996tn | 0:bcd95cee2654 | 119 | datas[1] += 48; |
nguyenmanhthao996tn | 0:bcd95cee2654 | 120 | datas[2] += 48; |
nguyenmanhthao996tn | 0:bcd95cee2654 | 121 | datas[3] += 48; |
nguyenmanhthao996tn | 0:bcd95cee2654 | 122 | |
nguyenmanhthao996tn | 0:bcd95cee2654 | 123 | LCD5110_write_char(datas[0]); |
nguyenmanhthao996tn | 0:bcd95cee2654 | 124 | LCD5110_write_char(datas[1]); |
nguyenmanhthao996tn | 0:bcd95cee2654 | 125 | LCD5110_write_char(datas[2]); |
nguyenmanhthao996tn | 0:bcd95cee2654 | 126 | LCD5110_write_char(datas[3]); |
nguyenmanhthao996tn | 0:bcd95cee2654 | 127 | |
nguyenmanhthao996tn | 0:bcd95cee2654 | 128 | //a++; |
nguyenmanhthao996tn | 0:bcd95cee2654 | 129 | } |
nguyenmanhthao996tn | 0:bcd95cee2654 | 130 | |
nguyenmanhthao996tn | 0:bcd95cee2654 | 131 | void LCD5110_light_on(void) |
nguyenmanhthao996tn | 0:bcd95cee2654 | 132 | { |
nguyenmanhthao996tn | 0:bcd95cee2654 | 133 | LCD5110_LIGHT(0); // Light on |
nguyenmanhthao996tn | 0:bcd95cee2654 | 134 | } |
nguyenmanhthao996tn | 0:bcd95cee2654 | 135 | |
nguyenmanhthao996tn | 0:bcd95cee2654 | 136 | void LCD5110_light_off(void) |
nguyenmanhthao996tn | 0:bcd95cee2654 | 137 | { |
nguyenmanhthao996tn | 0:bcd95cee2654 | 138 | LCD5110_LIGHT(1); // Light off |
nguyenmanhthao996tn | 0:bcd95cee2654 | 139 | } |
nguyenmanhthao996tn | 0:bcd95cee2654 | 140 | |
nguyenmanhthao996tn | 0:bcd95cee2654 | 141 | |
nguyenmanhthao996tn | 0:bcd95cee2654 | 142 | void LCD5110_LCD_delay_ms(unsigned int t) |
nguyenmanhthao996tn | 0:bcd95cee2654 | 143 | { |
nguyenmanhthao996tn | 0:bcd95cee2654 | 144 | wait_ms(t); |
nguyenmanhthao996tn | 0:bcd95cee2654 | 145 | } |
nguyenmanhthao996tn | 0:bcd95cee2654 | 146 | |
nguyenmanhthao996tn | 0:bcd95cee2654 | 147 | void LCD5110_GPIO_Config(PinName clk, PinName din, PinName ce, PinName rst, PinName dc, PinName light) |
nguyenmanhthao996tn | 0:bcd95cee2654 | 148 | { |
nguyenmanhthao996tn | 0:bcd95cee2654 | 149 | _clk = new DigitalOut(clk); |
nguyenmanhthao996tn | 0:bcd95cee2654 | 150 | _din = new DigitalOut(din); |
nguyenmanhthao996tn | 0:bcd95cee2654 | 151 | _ce = new DigitalOut(ce); |
nguyenmanhthao996tn | 0:bcd95cee2654 | 152 | _rst = new DigitalOut(rst); |
nguyenmanhthao996tn | 0:bcd95cee2654 | 153 | _dc = new DigitalOut(dc); |
nguyenmanhthao996tn | 0:bcd95cee2654 | 154 | _light = new DigitalOut(light); |
nguyenmanhthao996tn | 0:bcd95cee2654 | 155 | } |
nguyenmanhthao996tn | 0:bcd95cee2654 | 156 | |
nguyenmanhthao996tn | 0:bcd95cee2654 | 157 | void LCD5110_CLK(unsigned char temp) |
nguyenmanhthao996tn | 0:bcd95cee2654 | 158 | { |
nguyenmanhthao996tn | 0:bcd95cee2654 | 159 | *(_clk) = temp; |
nguyenmanhthao996tn | 0:bcd95cee2654 | 160 | } |
nguyenmanhthao996tn | 0:bcd95cee2654 | 161 | |
nguyenmanhthao996tn | 0:bcd95cee2654 | 162 | void LCD5110_DIN(unsigned char temp) |
nguyenmanhthao996tn | 0:bcd95cee2654 | 163 | { |
nguyenmanhthao996tn | 0:bcd95cee2654 | 164 | *(_din) = temp; |
nguyenmanhthao996tn | 0:bcd95cee2654 | 165 | } |
nguyenmanhthao996tn | 0:bcd95cee2654 | 166 | |
nguyenmanhthao996tn | 0:bcd95cee2654 | 167 | void LCD5110_CE(unsigned char temp) |
nguyenmanhthao996tn | 0:bcd95cee2654 | 168 | { |
nguyenmanhthao996tn | 0:bcd95cee2654 | 169 | *(_ce) = temp; |
nguyenmanhthao996tn | 0:bcd95cee2654 | 170 | } |
nguyenmanhthao996tn | 0:bcd95cee2654 | 171 | |
nguyenmanhthao996tn | 0:bcd95cee2654 | 172 | void LCD5110_RST(unsigned char temp) |
nguyenmanhthao996tn | 0:bcd95cee2654 | 173 | { |
nguyenmanhthao996tn | 0:bcd95cee2654 | 174 | *(_rst) = temp; |
nguyenmanhthao996tn | 0:bcd95cee2654 | 175 | } |
nguyenmanhthao996tn | 0:bcd95cee2654 | 176 | |
nguyenmanhthao996tn | 0:bcd95cee2654 | 177 | void LCD5110_DC(unsigned char temp) |
nguyenmanhthao996tn | 0:bcd95cee2654 | 178 | { |
nguyenmanhthao996tn | 0:bcd95cee2654 | 179 | *(_dc) = temp; |
nguyenmanhthao996tn | 0:bcd95cee2654 | 180 | } |
nguyenmanhthao996tn | 0:bcd95cee2654 | 181 | |
nguyenmanhthao996tn | 0:bcd95cee2654 | 182 | void LCD5110_LIGHT(unsigned char temp) |
nguyenmanhthao996tn | 0:bcd95cee2654 | 183 | { |
nguyenmanhthao996tn | 0:bcd95cee2654 | 184 | *(_light) = temp; |
nguyenmanhthao996tn | 0:bcd95cee2654 | 185 | } |