firmware of NBCTRLV1 / AYC01

Dependencies:   SDFileSystemEx mbed

Committer:
bkc_mbed
Date:
Mon Apr 18 00:36:37 2016 +0000
Revision:
1:29f0e76a9999
Parent:
0:722cc5360dc3
v1.30

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bkc_mbed 0:722cc5360dc3 1 /*
bkc_mbed 0:722cc5360dc3 2 * lcd.cpp : AQM0802A mini library
bkc_mbed 0:722cc5360dc3 3 *
bkc_mbed 0:722cc5360dc3 4 * Based on LCD module "AQM0802A-RN-GBW" sample program
bkc_mbed 0:722cc5360dc3 5 * Copyright (c) 2013 Yoshihiro TSUBOI
bkc_mbed 0:722cc5360dc3 6 *
bkc_mbed 0:722cc5360dc3 7 * Original Arduino version was developed by
bkc_mbed 0:722cc5360dc3 8 * Copyright (c) 2013 Masahiro WAKAYAMA at SWITCH SCIENCE
bkc_mbed 0:722cc5360dc3 9 *
bkc_mbed 0:722cc5360dc3 10 * Released under the MIT License: http://mbed.org/license/mit
bkc_mbed 0:722cc5360dc3 11 *
bkc_mbed 0:722cc5360dc3 12 */
bkc_mbed 0:722cc5360dc3 13
bkc_mbed 0:722cc5360dc3 14 #include "mbed.h"
bkc_mbed 0:722cc5360dc3 15
bkc_mbed 0:722cc5360dc3 16 #include "lcd.h"
bkc_mbed 0:722cc5360dc3 17 #include "pindef.h"
bkc_mbed 0:722cc5360dc3 18
bkc_mbed 0:722cc5360dc3 19 LCD::LCD()
bkc_mbed 0:722cc5360dc3 20 {
bkc_mbed 0:722cc5360dc3 21 i2c = new I2C(DP_SDA, DP_SCL); // sda, scl
bkc_mbed 0:722cc5360dc3 22 }
bkc_mbed 0:722cc5360dc3 23
bkc_mbed 0:722cc5360dc3 24 #define LCD_ADDR 0x7C
bkc_mbed 0:722cc5360dc3 25
bkc_mbed 0:722cc5360dc3 26 void LCD::cmd(char x)
bkc_mbed 0:722cc5360dc3 27 {
bkc_mbed 0:722cc5360dc3 28 char data[2];
bkc_mbed 0:722cc5360dc3 29 data[0] = 0x00; // CO = 0,RS = 0
bkc_mbed 0:722cc5360dc3 30 data[1] = x;
bkc_mbed 0:722cc5360dc3 31 i2c->write(LCD_ADDR, data, 2);
bkc_mbed 0:722cc5360dc3 32 }
bkc_mbed 0:722cc5360dc3 33
bkc_mbed 0:722cc5360dc3 34 void LCD::contdata(char x)
bkc_mbed 0:722cc5360dc3 35 {
bkc_mbed 0:722cc5360dc3 36 char data[2];
bkc_mbed 0:722cc5360dc3 37 data[0] = 0xC0; //0b11000000 CO = 1, RS = 1
bkc_mbed 0:722cc5360dc3 38 data[1] = x;
bkc_mbed 0:722cc5360dc3 39 i2c->write(LCD_ADDR, data, 2);
bkc_mbed 0:722cc5360dc3 40 }
bkc_mbed 0:722cc5360dc3 41
bkc_mbed 0:722cc5360dc3 42 void LCD::lastdata(char x)
bkc_mbed 0:722cc5360dc3 43 {
bkc_mbed 0:722cc5360dc3 44 char data[2];
bkc_mbed 0:722cc5360dc3 45 data[0] = 0x40; //0b11000000 CO = 0, RS = 1
bkc_mbed 0:722cc5360dc3 46 data[1] = x;
bkc_mbed 0:722cc5360dc3 47 i2c->write(LCD_ADDR, data, 2);
bkc_mbed 0:722cc5360dc3 48 }
bkc_mbed 0:722cc5360dc3 49
bkc_mbed 0:722cc5360dc3 50
bkc_mbed 0:722cc5360dc3 51 void LCD::setContrast(unsigned char c) {
bkc_mbed 0:722cc5360dc3 52 cmd(0x39);
bkc_mbed 0:722cc5360dc3 53 cmd(0x70 | (c & 0x0f)); // contrast Low
bkc_mbed 0:722cc5360dc3 54 cmd(0x5C | ((c >> 4) & 0x03)); // contast High/icon/power
bkc_mbed 0:722cc5360dc3 55 cmd(0x38);
bkc_mbed 0:722cc5360dc3 56 }
bkc_mbed 0:722cc5360dc3 57
bkc_mbed 0:722cc5360dc3 58 void LCD::init() {
bkc_mbed 0:722cc5360dc3 59 int cont = 0;
bkc_mbed 0:722cc5360dc3 60 wait(0.04);
bkc_mbed 0:722cc5360dc3 61 // LCD initialize
bkc_mbed 0:722cc5360dc3 62 cmd(0x38); // function set
bkc_mbed 0:722cc5360dc3 63 cmd(0x39); // function set
bkc_mbed 0:722cc5360dc3 64 cmd(0x04); // EntryModeSet
bkc_mbed 0:722cc5360dc3 65 cmd(0x14); // interval osc
bkc_mbed 0:722cc5360dc3 66 cmd(0x70 | (cont & 0xF)); // contrast Low
bkc_mbed 0:722cc5360dc3 67 cmd(0x5C | ((cont >> 4) & 0x3)); // contast High/icon/power
bkc_mbed 0:722cc5360dc3 68 cmd(0x6C); // follower control
bkc_mbed 0:722cc5360dc3 69 wait(0.2);
bkc_mbed 0:722cc5360dc3 70 cmd(0x38); // function set
bkc_mbed 0:722cc5360dc3 71 cmd(0x0C); // Display On
bkc_mbed 0:722cc5360dc3 72 cmd(0x01); // Clear Display
bkc_mbed 0:722cc5360dc3 73 wait(0.2); // need additional wait to Clear Display
bkc_mbed 0:722cc5360dc3 74
bkc_mbed 0:722cc5360dc3 75 setContrast(36);
bkc_mbed 0:722cc5360dc3 76 }
bkc_mbed 0:722cc5360dc3 77
bkc_mbed 0:722cc5360dc3 78
bkc_mbed 0:722cc5360dc3 79 // 文字と空白で1行を埋める
bkc_mbed 0:722cc5360dc3 80 void LCD::printStrFill(const char *s)
bkc_mbed 0:722cc5360dc3 81 {
bkc_mbed 0:722cc5360dc3 82 int idx = 0;
bkc_mbed 0:722cc5360dc3 83 for(idx = 0; idx < 8; idx++)
bkc_mbed 0:722cc5360dc3 84 {
bkc_mbed 0:722cc5360dc3 85 if(idx < 7) {
bkc_mbed 0:722cc5360dc3 86 contdata(*s);
bkc_mbed 0:722cc5360dc3 87 } else {
bkc_mbed 0:722cc5360dc3 88 lastdata(*s);
bkc_mbed 0:722cc5360dc3 89 }
bkc_mbed 0:722cc5360dc3 90 if (*s) s++;
bkc_mbed 0:722cc5360dc3 91 }
bkc_mbed 0:722cc5360dc3 92 }
bkc_mbed 0:722cc5360dc3 93
bkc_mbed 0:722cc5360dc3 94 void LCD::printStr(const char *s)
bkc_mbed 0:722cc5360dc3 95 {
bkc_mbed 0:722cc5360dc3 96 int idx = 0;
bkc_mbed 0:722cc5360dc3 97 while(*s && idx < 8) {
bkc_mbed 0:722cc5360dc3 98 if(*(s + 1)) {
bkc_mbed 0:722cc5360dc3 99 contdata(*s);
bkc_mbed 0:722cc5360dc3 100 } else {
bkc_mbed 0:722cc5360dc3 101 lastdata(*s);
bkc_mbed 0:722cc5360dc3 102 }
bkc_mbed 0:722cc5360dc3 103 s++;
bkc_mbed 0:722cc5360dc3 104 idx++;
bkc_mbed 0:722cc5360dc3 105 }
bkc_mbed 0:722cc5360dc3 106 }
bkc_mbed 0:722cc5360dc3 107
bkc_mbed 0:722cc5360dc3 108 void LCD::setCursor(unsigned char x,unsigned char y)
bkc_mbed 0:722cc5360dc3 109 {
bkc_mbed 0:722cc5360dc3 110 cmd(0x80 | (y * 0x40 + x));
bkc_mbed 0:722cc5360dc3 111 }
bkc_mbed 0:722cc5360dc3 112
bkc_mbed 0:722cc5360dc3 113 void LCD::printStrY(int y,const char *s)
bkc_mbed 0:722cc5360dc3 114 {
bkc_mbed 0:722cc5360dc3 115 setCursor(0, y);
bkc_mbed 0:722cc5360dc3 116 printStrFill(s);
bkc_mbed 0:722cc5360dc3 117 }
bkc_mbed 0:722cc5360dc3 118
bkc_mbed 0:722cc5360dc3 119 void LCD::printStrYscr(int y,const char *s)
bkc_mbed 0:722cc5360dc3 120 {
bkc_mbed 0:722cc5360dc3 121 int cnt = strlen(s) - 7;
bkc_mbed 0:722cc5360dc3 122 if (cnt <= 0)
bkc_mbed 0:722cc5360dc3 123 cnt = 1;
bkc_mbed 0:722cc5360dc3 124
bkc_mbed 0:722cc5360dc3 125 for(int i = 0; i < cnt; i++)
bkc_mbed 0:722cc5360dc3 126 {
bkc_mbed 0:722cc5360dc3 127 setCursor(0, y);
bkc_mbed 0:722cc5360dc3 128 printStr(s + i);
bkc_mbed 0:722cc5360dc3 129 wait(0.5);
bkc_mbed 0:722cc5360dc3 130 }
bkc_mbed 0:722cc5360dc3 131 }
bkc_mbed 0:722cc5360dc3 132
bkc_mbed 0:722cc5360dc3 133
bkc_mbed 0:722cc5360dc3 134 void LCD::printStr2(const char *s, const char *s2)
bkc_mbed 0:722cc5360dc3 135 {
bkc_mbed 0:722cc5360dc3 136 setCursor(0,0);
bkc_mbed 0:722cc5360dc3 137 printStrFill(s);
bkc_mbed 0:722cc5360dc3 138 setCursor(0,1);
bkc_mbed 0:722cc5360dc3 139 printStrFill(s2);
bkc_mbed 0:722cc5360dc3 140 }
bkc_mbed 0:722cc5360dc3 141
bkc_mbed 0:722cc5360dc3 142 void LCD::cls(void)
bkc_mbed 0:722cc5360dc3 143 {
bkc_mbed 0:722cc5360dc3 144 setCursor(0, 0);
bkc_mbed 0:722cc5360dc3 145 printStrFill("");
bkc_mbed 0:722cc5360dc3 146 setCursor(0, 1);
bkc_mbed 0:722cc5360dc3 147 printStrFill("");
bkc_mbed 0:722cc5360dc3 148 }