firmware of NBCTRLV1 / AYC01
Dependencies: SDFileSystemEx mbed
lcd.cpp
- Committer:
- bkc_mbed
- Date:
- 2016-04-18
- Revision:
- 1:29f0e76a9999
- Parent:
- 0:722cc5360dc3
File content as of revision 1:29f0e76a9999:
/* * lcd.cpp : AQM0802A mini library * * Based on LCD module "AQM0802A-RN-GBW" sample program * Copyright (c) 2013 Yoshihiro TSUBOI * * Original Arduino version was developed by * Copyright (c) 2013 Masahiro WAKAYAMA at SWITCH SCIENCE * * Released under the MIT License: http://mbed.org/license/mit * */ #include "mbed.h" #include "lcd.h" #include "pindef.h" LCD::LCD() { i2c = new I2C(DP_SDA, DP_SCL); // sda, scl } #define LCD_ADDR 0x7C void LCD::cmd(char x) { char data[2]; data[0] = 0x00; // CO = 0,RS = 0 data[1] = x; i2c->write(LCD_ADDR, data, 2); } void LCD::contdata(char x) { char data[2]; data[0] = 0xC0; //0b11000000 CO = 1, RS = 1 data[1] = x; i2c->write(LCD_ADDR, data, 2); } void LCD::lastdata(char x) { char data[2]; data[0] = 0x40; //0b11000000 CO = 0, RS = 1 data[1] = x; i2c->write(LCD_ADDR, data, 2); } void LCD::setContrast(unsigned char c) { cmd(0x39); cmd(0x70 | (c & 0x0f)); // contrast Low cmd(0x5C | ((c >> 4) & 0x03)); // contast High/icon/power cmd(0x38); } void LCD::init() { int cont = 0; wait(0.04); // LCD initialize cmd(0x38); // function set cmd(0x39); // function set cmd(0x04); // EntryModeSet cmd(0x14); // interval osc cmd(0x70 | (cont & 0xF)); // contrast Low cmd(0x5C | ((cont >> 4) & 0x3)); // contast High/icon/power cmd(0x6C); // follower control wait(0.2); cmd(0x38); // function set cmd(0x0C); // Display On cmd(0x01); // Clear Display wait(0.2); // need additional wait to Clear Display setContrast(36); } // 文字と空白で1行を埋める void LCD::printStrFill(const char *s) { int idx = 0; for(idx = 0; idx < 8; idx++) { if(idx < 7) { contdata(*s); } else { lastdata(*s); } if (*s) s++; } } void LCD::printStr(const char *s) { int idx = 0; while(*s && idx < 8) { if(*(s + 1)) { contdata(*s); } else { lastdata(*s); } s++; idx++; } } void LCD::setCursor(unsigned char x,unsigned char y) { cmd(0x80 | (y * 0x40 + x)); } void LCD::printStrY(int y,const char *s) { setCursor(0, y); printStrFill(s); } void LCD::printStrYscr(int y,const char *s) { int cnt = strlen(s) - 7; if (cnt <= 0) cnt = 1; for(int i = 0; i < cnt; i++) { setCursor(0, y); printStr(s + i); wait(0.5); } } void LCD::printStr2(const char *s, const char *s2) { setCursor(0,0); printStrFill(s); setCursor(0,1); printStrFill(s2); } void LCD::cls(void) { setCursor(0, 0); printStrFill(""); setCursor(0, 1); printStrFill(""); }