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.
Diff: I2CLCD.cpp
- Revision:
- 0:4bb93e550e8c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/I2CLCD.cpp Mon Oct 12 10:39:30 2020 +0000
@@ -0,0 +1,214 @@
+#include "I2CLCD.h"
+/*
+I2C低電圧キャラクタ液晶モジュール
+*/
+
+I2CLCD::I2CLCD():I2C(p9,p10)
+{
+ MaxChNum = 32;
+ init();
+}
+
+I2CLCD::I2CLCD(int n):I2C(p9,p10)
+{
+ MaxChNum = n;
+ init();
+}
+
+I2CLCD::I2CLCD(PinName sda, PinName scl):I2C(sda,scl)
+{
+ MaxChNum = 32;
+ init();
+}
+
+I2CLCD::I2CLCD(PinName sda, PinName scl, int n):I2C(sda,scl)
+{
+ MaxChNum = n;
+ init();
+}
+
+void I2CLCD::init()
+{
+ int Wait = 30;
+ chCount = 0;
+ wait_ms(40);
+ LCD_WRITE= 0x7c;
+ write(0x0, 0x38); //data8bit, numberOfLine=2
+ wait_us(Wait);
+ write(0x0, 0x39); //data8bit, numberOfLine=2
+ wait_us(Wait);
+ write(0x0, 0x14); //internal OSC frequency
+ wait_us(Wait);
+ if(MaxChNum==32) write(0x0, 0x7f); // contrast 下4bit
+ else write(0x0, 0x78); // contrast mini
+ wait_us(Wait);
+ write(0x0, 0x5F); // power/icon/contrast control
+ wait_us(Wait);
+ write(0x0, 0x6a); // follower control
+ wait_ms(200); // 200ms
+ write(0x0, 0x0c); // Display ON
+ wait_us(Wait);
+ write(0x0, 0x01); // clear disply
+ wait_us(2000); // 2ms
+ write(0x00, 0x06); // entry mode set
+ wait_us(Wait);
+}
+void I2CLCD::home()
+{
+ write(0x00,0x02); // return to home
+ chCount=0;
+ wait_ms(2);
+}
+
+void I2CLCD::clear()
+{
+ write(0x00,0x01); // clear display
+ chCount=0;
+ wait_ms(2);
+}
+void I2CLCD::write(unsigned char ch)
+{
+ int x;
+ int n = MaxChNum/2;
+ if(ch==0x0a){
+ x= chCount %MaxChNum;
+ if(x<n) {
+ write(0x00,0xc0);
+ chCount=n;
+ }
+ else {
+ write(0x00,0x01); // clear display
+ chCount=0;
+ wait_ms(2);
+ }
+ }
+ else
+ {
+ write(0x40,ch);
+ x= ++chCount % MaxChNum;
+ if( x ==n) write(0x00,0xc0);
+ }
+}
+
+void I2CLCD::write(char* ch)
+{
+ while(*ch){
+ write(*ch++);
+ }
+}
+
+void I2CLCD::write(unsigned char control, unsigned char dt)
+{
+ start();
+ ((I2C*)this)->write(LCD_WRITE);
+ ((I2C*)this)->write(control);
+ ((I2C*)this)->write(dt);
+ stop();
+}
+void I2CLCD::write(int x, int column, char zeroPad)
+{
+ char Buffer[10];
+ char num[5];
+ int i,j, n=0, signFlag=0;
+ if(x<0) { // マイナスの値の場合
+ signFlag=1;
+ x *= -1;
+ }
+ do {
+ num[n++] = x%10;
+ x /= 10;
+ } while(x != 0);
+ i = column-n;
+ if(i>0) {
+ for(i=0; i<10; i++) Buffer[i]=' ';
+ if(zeroPad) for(i=0; i<column-n; i++) Buffer[i]='0';
+ Buffer[9]=0;
+ for(i=column-n, j=n-1; i<column; i++, j--) Buffer[i]=num[j]|'0';
+ Buffer[i]=0;
+ if(signFlag) Buffer[column-n-1]='-';
+ }
+ else {
+ j=0;
+ if(signFlag) Buffer[j++]='-';
+ for(i=--n; i>=0; i--) Buffer[j++]=num[i]|'0';
+ Buffer[j]=0;
+ }
+ write(Buffer);
+}
+
+void I2CLCD::writeInt(int x)
+{
+ char num[5];
+ int n=0;
+ if(x<0) { // マイナスの値の場合
+ write('-');
+ x *= -1;
+ }
+ do {
+ num[n++] = x%10 +'0';
+ x /= 10;
+ } while(x != 0);
+ while(--n >=0) write(num[n]);
+}
+
+void I2CLCD::setIcon(int x)
+{
+ write(0x00, 0x39); // Function set
+ write(0x00, 0x40 | 0x0f); // flower icon
+ if(x & 1) write(0x40, 0x10);
+ else write(0x40, 0x00);
+
+ write(0x00, 0x40 | 0x0d); // Battery icon
+ write(0x40, 0);
+ if(x & 0x0e) {
+ write(0x00, 0x40 | 0x0d); // Battery icon
+ write(0x40, ((x & 0x0e)<<1) | 2);
+ }
+
+ write(0x00, 0x40 | 0x0b); // no sound icon
+ if(x & 0x10) write(0x40, 0x10);
+ else write(0x40, 0);
+
+ write(0x00, 0x40 | 0x09); // Key icon
+ if(x & 0x20) write(0x40, 0x10);
+ else write(0x40, 0);
+
+ write(0x00, 0x40 | 0x07); // 矢印 icon
+ write(0x40, 0);
+ if(x & 0xC0) {
+ write(0x00, 0x40 | 0x07); // 矢印 icon
+ write(0x40, (x & 0xC0)>>3);
+ }
+
+ write(0x00, 0x40 | 0x06); // enter icon
+ if(x & 0x100) write(0x40, 0x10);
+ else write(0x40, 0);
+ write(0x00, 0x40 | 0x04); // ring icon
+ if(x & 0x200) write(0x40, 0x10);
+ else write(0x40, 0);
+ write(0x00, 0x40 | 0x02); // 電話 icon
+ if(x & 0x400) write(0x40, 0x10);
+ else write(0x40, 0);
+ write(0x00, 0x40); // antena icon
+ if(x & 0x800) write(0x40, 0x10);
+ else write(0x40, 0);
+ write(0x00, 0x38); // Function set
+}
+
+void I2CLCD::setCG(char mode, char* cgData)
+{
+ unsigned char i, j;
+ write(0x00,0x38); // Function set IS= 0
+ write(0x00,0x40); // CGRAM set address= 0
+ if(mode == 0) { // StringModeで呼ばれた時はデフォールトにセット
+ for(i=0; i<8; i++) {
+ for(j=0; j<8; j++) {
+ if(j < (7-i)) write(0x40,0x00);
+ else write(0x40,0x1f); // 横棒をセット
+ }
+ }
+ }
+ else {
+ for(i=0; i<64; i++ ) write(0x40, cgData[i]);
+ }
+}