OSDN Git Service

[LCD][4bit] Using bit-manipulation to communicate LCD.
authorK.Ohta <whatisthis.sowhat@gmail.com>
Tue, 18 Jun 2013 05:14:11 +0000 (14:14 +0900)
committerK.Ohta <whatisthis.sowhat@gmail.com>
Tue, 18 Jun 2013 05:14:11 +0000 (14:14 +0900)
[LCD] Discard acm1602_printf(), using a lot of program-memory X(

idle.c
iodef.h
lcd_acm1602.c
lcd_acm1602.h
main.c
nbproject/Makefile-default.mk
nbproject/Makefile-genesis.properties
nbproject/configurations.xml
nbproject/private/configurations.xml
ui.c

diff --git a/idle.c b/idle.c
index fba5df1..7f8c24c 100644 (file)
--- a/idle.c
+++ b/idle.c
@@ -54,17 +54,17 @@ void idle(unsigned int initial)
 
    /* Enable IDLE */
    osccon = OSCCON;
-//   osccon = osccon | _IDLEN |  _SCS1 | _SCS0;
-   osccon = osccon | _IDLEN & 0b11111100;
+ //  osccon = osccon | _IDLEN |  _SCS1 | _SCS0;
+  osccon = osccon | _IDLEN;
    OSCCON = osccon;
    INTCON |= _TMR0IE; // Enable tmr0 as interrupt and clear interrupt flags.
    
    /* Set TMR0 for interrupt*/
    /* Pre-scaler: 1/16, PSA=0(ON), TOSE=0, T0CS=0(INTERNAL), T08BIT=0(16bit), TMR0ON=1(START) */
    contword = _T0PS0 | _T0PS1 |  _TMR0ON; // _T0PS2
-//   TMR0H = initial >> 8;
    TMR0H = initial >> 8;
    TMR0L = initial & 0xff;
+//   TMR0H = initial >> 8;
    T0CON = contword;
    
    Sleep();
diff --git a/iodef.h b/iodef.h
index 4f4c485..b418c98 100644 (file)
--- a/iodef.h
+++ b/iodef.h
@@ -188,6 +188,20 @@ enum {
 /*
  * LCD Control: Default register values, You should re-define in iodef.h if you need.
  */
+typedef union {
+        unsigned char byte;
+        struct {
+            unsigned b0:1;
+            unsigned b1:1;
+            unsigned b2:1;
+            unsigned b3:1;
+            unsigned b4:1;
+            unsigned b5:1;
+            unsigned b6:1;
+            unsigned b7:1;
+        };
+    } Bitdefs_t;
+
 #ifdef _LCD_IF_4BIT
 /*
  * 4bit Interface, Used Below:
@@ -202,15 +216,19 @@ enum {
 #define _LCDPORT_LATCH_DATA LATD
 #define _LCDPORT_BUSYMASK 0b10000000
 #define _LCDPORT_READMASK TRIS_D_RVAL
+#define _LCDPORT_DATA_SHIFT 4
  #endif
 
  #ifndef _LCDPORT_CONT
 #define _LCDPORT_CONT PORTD
 #define _LCDPORT_TRIS_CONT TRISD
+#define _LCDPORT_CONT_LATCH LATD
+#define _LCDPORT_CONT_RSbit b0
+#define _LCDPORT_CONT_RWbit b1
+#define _LCDPORT_CONT_ENbit b2
 #define _LCDPORT_CONT_RS _PORTD_RD0
 #define _LCDPORT_CONT_RW _PORTD_RD1
 #define _LCDPORT_CONT_EN _PORTD_RD2
-#define _LCDPORT_CONT_LATCH LATD
  #endif
 
 #else
@@ -233,6 +251,9 @@ enum {
  #ifndef _LCDPORT_CONT
 #define _LCDPORT_CONT PORTE
 #define _LCDPORT_TRIS_CONT TRISE
+#define _LCDPORT_CONT_RSbit 0
+#define _LCDPORT_CONT_RWbit 1
+#define _LCDPORT_CONT_ENbit 2
 #define _LCDPORT_CONT_RS _PORTE_RE0
 #define _LCDPORT_CONT_RW _PORTE_RE1
 #define _LCDPORT_CONT_EN _PORTE_RE2
index ad74c94..8932bf5 100644 (file)
@@ -107,44 +107,58 @@ unsigned char acm1602_getchar(unsigned char addr)
     return d;
 }
 #else // Parallel
-static unsigned char lcd_busychk(unsigned char addr)
-{
-    unsigned char b, d;
 
+static unsigned char lcd_readaddress(unsigned char addr)
+{
+    unsigned char h,l;
+    Bitdefs_t b;
     // Set mask for Tristate.
-    b = _LCDPORT_TRIS_DATA;
-    b |= _LCDPORT_READMASK;// Set mask for Tristate, direction = read.
-    _LCDPORT_TRIS_DATA = b;
+    b.byte = _LCDPORT_TRIS_DATA;
+    b.byte |= _LCDPORT_READMASK;// Set mask for Tristate, direction = read.
+    _LCDPORT_TRIS_DATA = b.byte;
 
-    b = _LCDPORT_CONT_LATCH;
-    b &= ~_LCDPORT_CONT_RS;
-    b |= _LCDPORT_CONT_RW;
-    _LCDPORT_CONT_LATCH = b;
+    b.byte = _LCDPORT_DATA & ~_LCDPORT_READMASK;
+    b._LCDPORT_CONT_RWbit = 1;  // RW='1', Read.
+    _LCDPORT_LATCH_DATA = b.byte;
     _ACM1602_TC_WAIT(); // Wait 2.5?us
 
-    b |= _LCDPORT_CONT_EN; // Send CMD
-    _LCDPORT_CONT_LATCH = b;
+    b._LCDPORT_CONT_ENbit = 1; // UPRISE Enable
+    _LCDPORT_LATCH_DATA = b.byte;
     _ACM1602_TC_WAIT(); // Wait 2.5?us
 
-    d = _LCDPORT_DATA;
+    h = _LCDPORT_DATA & _LCDPORT_READMASK; // read upper nibble
     _ACM1602_TC_WAIT(); // Wait 2.5?us
 
-    b &= ~_LCDPORT_CONT_EN; // Disable EN
-    _LCDPORT_CONT_LATCH = b;
+    b._LCDPORT_CONT_ENbit = 0; // Disable EN
+    _LCDPORT_LATCH_DATA = b.byte;
     _ACM1602_TC_WAIT(); // Wait 2.5?us
 
-    b |= _LCDPORT_CONT_EN; // Disable EN
-    _LCDPORT_CONT_LATCH = b;
+    b._LCDPORT_CONT_ENbit = 1; // Re-enable
+    _LCDPORT_LATCH_DATA = b.byte;
     _ACM1602_TC_WAIT(); // Wait 2.5?us
-    b &= ~_LCDPORT_CONT_EN; // Disable EN
-    _LCDPORT_CONT_LATCH = b;
+
+    l = (_LCDPORT_DATA & _LCDPORT_READMASK) >> _LCDPORT_DATA_SHIFT;
+
+    b._LCDPORT_CONT_ENbit = 0; // Disable EN
+    _LCDPORT_LATCH_DATA = b.byte;
     _ACM1602_TC_WAIT(); // Wait 2.5?us
 
-    b = _LCDPORT_TRIS_DATA;
-    b &= ~_LCDPORT_READMASK; // Clear mask for Tristate, direction = write.
-    _LCDPORT_TRIS_DATA = b;
+    b.byte &= ~(_LCDPORT_CONT_RS | _LCDPORT_CONT_RW); // Disable RS & RW
+    _LCDPORT_LATCH_DATA = b.byte;
     _ACM1602_TC_WAIT(); // Wait 2.5?us
 
+    b.byte = _LCDPORT_TRIS_DATA;
+    b.byte &= ~_LCDPORT_READMASK; // Clear mask for Tristate, direction = write.
+    _LCDPORT_TRIS_DATA = b.byte;
+    _ACM1602_TC_WAIT(); // Wait 2.5?us
+    return h | l;
+}
+
+static unsigned char lcd_busychk(unsigned char addr)
+{
+    unsigned char  d;
+
+    d = lcd_readaddress(addr);
     if((d & _LCDPORT_BUSYMASK) != 0){
         d = 0xff; // BUSY
     } else {
@@ -167,46 +181,45 @@ void lcd_waitbusy(unsigned char addr, unsigned char flag)
 static void sendcmd(unsigned char addr, unsigned char cmd,unsigned char busyflag)
 {
 #ifdef _LCD_IF_4BIT
-    unsigned char b, d;
+    unsigned char d;
     unsigned char h,l;
+    Bitdefs_t b;
 
-    h = cmd & 0xf0; // Higher bit is used.
-    l = (cmd & 0x0f) << 4; // Higher bit is used.
+    h = cmd & _LCDPORT_READMASK; // Higher bit is used.
+    l = (cmd & (_LCDPORT_READMASK >> _LCDPORT_DATA_SHIFT)) << _LCDPORT_DATA_SHIFT; // Higher bit is used.
     // Higher NIBBLE
     if(busyflag != 0) lcd_waitbusy(addr, 0);
     d = _LCDPORT_TRIS_CONT;
     d &= ~_LCDPORT_READMASK; // Clear mask for Tristate, direction = write.
     _LCDPORT_TRIS_CONT = d;
+    _ACM1602_TC_WAIT(); // Wait 2.5?us
 
 
-    b = _LCDPORT_CONT_LATCH;
-    b &= ~(_LCDPORT_CONT_RW | 0xf0 | _LCDPORT_CONT_EN | _LCDPORT_CONT_RS); // DATA=blank,RW='0',RS='0"
-    b |= h;
-    _LCDPORT_CONT_LATCH = b;
-    _ACM1602_TC_WAIT(); // Wait 2.5?us
-    b |= _LCDPORT_CONT_EN;
-    _LCDPORT_CONT_LATCH = b;
+    b.byte = _LCDPORT_DATA;
+    b.byte &= ~(_LCDPORT_CONT_RW | _LCDPORT_READMASK | _LCDPORT_CONT_EN | _LCDPORT_CONT_RS); // DATA=blank,RW='0',RS='0"
+    b.byte |= h;
+    _LCDPORT_LATCH_DATA = b.byte;
+    //_ACM1602_TC_WAIT(); // Wait 2.5?us
+
+    b._LCDPORT_CONT_ENbit = 1; // Enable
+    _LCDPORT_LATCH_DATA = b.byte;
     _ACM1602_TC_WAIT(); // Wait 2.5?us
-    b &= ~_LCDPORT_CONT_EN; // Disable EN
-    _LCDPORT_CONT_LATCH = b;
+
+    b._LCDPORT_CONT_ENbit = 0; // Disable EN
+    _LCDPORT_LATCH_DATA = b.byte;
     _ACM1602_TC_WAIT();
 
     // Lower NIBBLE
-//    if(busyflag != 0) lcd_waitbusy(addr, 0);
-    d = _LCDPORT_TRIS_CONT;
-    d &= ~_LCDPORT_READMASK; // Clear mask for Tristate, direction = write.
-    _LCDPORT_TRIS_CONT = d;
-    b = _LCDPORT_CONT_LATCH;
-    b &= ~(_LCDPORT_CONT_RW | 0xf0 | _LCDPORT_CONT_EN | _LCDPORT_CONT_RS); // DATA=blank,RW='0',RS='0"
-    b |= l;
-    _LCDPORT_CONT_LATCH = b;
+    b.byte &= ~_LCDPORT_READMASK; // Clear Data area.
+    b.byte |= l;
+    b._LCDPORT_CONT_ENbit = 1; // Enable
+    _LCDPORT_LATCH_DATA = b.byte;
     _ACM1602_TC_WAIT(); // Wait 2.5?us
-    b |= _LCDPORT_CONT_EN;
-    _LCDPORT_CONT_LATCH = b;
 
-    _ACM1602_TC_WAIT(); // Wait 2.5?us
-    b &= ~_LCDPORT_CONT_EN; // Disable EN
-    _LCDPORT_CONT_LATCH = b;
+    b._LCDPORT_CONT_ENbit = 0; // Disable EN
+    _LCDPORT_LATCH_DATA = b.byte;
+    _ACM1602_TC_WAIT();
+
 
     d = _LCDPORT_TRIS_CONT;
     d &= ~_LCDPORT_READMASK; // Clear mask for Tristate, direction = write.
@@ -245,27 +258,28 @@ static void sendcmd(unsigned char addr, unsigned char cmd,unsigned char busyflag
 static void sendonce(unsigned char addr, unsigned char cmd)
 {
 #ifdef _LCD_IF_4BIT
-    unsigned char b, d;
+    unsigned char d;
     unsigned char h;
+    Bitdefs_t b;
 
-    h = cmd & 0xf0; // Higher bit is used.
+    h = cmd & _LCDPORT_READMASK; // Higher bit is used.
     // Higher NIBBLE
     d = _LCDPORT_TRIS_CONT;
     d &= ~_LCDPORT_READMASK; // Clear mask for Tristate, direction = write.
     _LCDPORT_TRIS_CONT = d;
 
-    b = _LCDPORT_CONT_LATCH;
-    b &= ~(_LCDPORT_CONT_RS | _LCDPORT_CONT_RW | _LCDPORT_CONT_EN); // RS='0',RW='0'
-    b |= h;
-    _LCDPORT_CONT_LATCH = b;
+    b.byte = _LCDPORT_DATA;
+    b.byte &= ~(_LCDPORT_CONT_RS | _LCDPORT_CONT_RW | _LCDPORT_CONT_EN); // RS='0',RW='0'
+    b.byte |= h;
+    _LCDPORT_CONT_LATCH = b.byte;
     _ACM1602_TC_WAIT(); // Wait 2.5?us
 
-    b |= _LCDPORT_CONT_EN; // Send CMD
-    _LCDPORT_CONT_LATCH = b;
+    b._LCDPORT_CONT_ENbit = 1; // Send CMD
+    _LCDPORT_CONT_LATCH = b.byte;
     _ACM1602_TC_WAIT(); // Wait 2.5?us
 
-    b &= ~_LCDPORT_CONT_EN; // Disable EN
-    _LCDPORT_CONT_LATCH = b;
+    b._LCDPORT_CONT_ENbit = 0; // Disable EN
+    _LCDPORT_CONT_LATCH = b.byte;
     _ACM1602_TC_WAIT();
 
     d = _LCDPORT_TRIS_CONT;
@@ -304,21 +318,21 @@ static void acm1602_ioinit(unsigned char addr)
     _ACM1602_LONG_LONG_WAIT();
 #ifdef _LCD_IF_4BIT
     b = _LCDPORT_TRIS_CONT;
-    b &= ~(_LCDPORT_CONT_RS | _LCDPORT_CONT_RW | _LCDPORT_CONT_EN | 0xf0);
+    b &= ~(_LCDPORT_CONT_RS | _LCDPORT_CONT_RW | _LCDPORT_CONT_EN | _LCDPORT_READMASK);
     _LCDPORT_TRIS_CONT = b; // Clear Tristate bits, output.
 
-    b = _LCDPORT_CONT_LATCH;
-    b &= ~(_LCDPORT_CONT_RS | _LCDPORT_CONT_RW | _LCDPORT_CONT_EN | 0xf0);
-    _LCDPORT_CONT_LATCH = b;
-  //  _LCDPORT_TRIS_DATA = 0x00; // OUT
-  //  _LCDPORT_LATCH_DATA = 0x00;
+    b = _LCDPORT_DATA;
+    b &= ~(_LCDPORT_CONT_RS | _LCDPORT_CONT_RW | _LCDPORT_CONT_EN | _LCDPORT_READMASK);
+    _LCDPORT_LATCH_DATA = b;
 #else
     b = _LCDPORT_TRIS_CONT;
     b &= ~(_LCDPORT_CONT_RS | _LCDPORT_CONT_RW | _LCDPORT_CONT_EN);
     _LCDPORT_TRIS_CONT = b; // Clear Tristate bits, output.
+
     b = _LCDPORT_CONT_LATCH;
     b &= ~(_LCDPORT_CONT_RS | _LCDPORT_CONT_RW | _LCDPORT_CONT_EN);
     _LCDPORT_CONT_LATCH = b;
+
     _LCDPORT_TRIS_DATA = 0x00; // OUT
     _LCDPORT_LATCH_DATA = 0x00;
 #endif
@@ -327,50 +341,52 @@ static void acm1602_ioinit(unsigned char addr)
 
 void acm1602_putchar(unsigned char addr, unsigned char c)
 {
-    unsigned char b, d;
 #ifdef _LCD_IF_4BIT
+    unsigned char d;
+    Bitdefs_t b;
     unsigned char h, l;
-    h = c & 0xf0;
-    l = (c & 0x0f)<<4;
+    h = c & _LCDPORT_READMASK; // Higher bit is used.
+    l = (c & (_LCDPORT_READMASK >> _LCDPORT_DATA_SHIFT)) << _LCDPORT_DATA_SHIFT; // Higher bit is used.
 
     lcd_waitbusy(addr, 0);
     d = _LCDPORT_TRIS_CONT;
     d &= ~(_LCDPORT_READMASK | _LCDPORT_CONT_RW | _LCDPORT_CONT_EN | _LCDPORT_CONT_RS); // Clear mask for Tristate, direction = write.
-//    d = 0;
     _LCDPORT_TRIS_CONT = d;
     _ACM1602_TC_WAIT(); // Wait 2.5?us
 
     // Send high nibble
-    b = _LCDPORT_CONT_LATCH;
-    b &= ~(_LCDPORT_CONT_RW | 0xf0 | _LCDPORT_CONT_EN); // DATA=blank,RW='0'
-    b |= _LCDPORT_CONT_RS; // RS='1"
-    b |= h;
-    _LCDPORT_CONT_LATCH = b;
+    b.byte = _LCDPORT_DATA;
+    b.byte &= ~(_LCDPORT_CONT_RW | _LCDPORT_READMASK | _LCDPORT_CONT_EN); // DATA=blank,RW='0'
+    b._LCDPORT_CONT_RSbit = 1; // RS='1"
+    b.byte |= h;
+    _LCDPORT_LATCH_DATA = b.byte;
     _ACM1602_TC_WAIT(); // Wait 2.5?us
 
-    b |= _LCDPORT_CONT_EN; // Do high write.
-    _LCDPORT_CONT_LATCH = b;
+    b._LCDPORT_CONT_ENbit = 1; // Do high write.
+    _LCDPORT_LATCH_DATA = b.byte;
     _ACM1602_TC_WAIT(); // Wait 2.5?us
 
-    b &= ~_LCDPORT_CONT_EN; // Disable EN
-    _LCDPORT_CONT_LATCH = b;
+    b._LCDPORT_CONT_ENbit = 0; // Disable EN
+    _LCDPORT_LATCH_DATA = b.byte;
     _ACM1602_SHORT_WAIT();
 
-//    lcd_waitbusy(addr, 0);
-    b &= ~(_LCDPORT_CONT_RW | 0xf0 | _LCDPORT_CONT_EN); // DATA=blank,RW='0'
-    b |= _LCDPORT_CONT_RS; // RS='1"
-    b |= l;
-//    _LCDPORT_CONT_LATCH = b;
-//    _ACM1602_TC_WAIT(); // Wait 2.5?us
-
-    b |= _LCDPORT_CONT_EN;
-    _LCDPORT_CONT_LATCH = b; // Do low write.
+    b.byte &= ~_LCDPORT_READMASK; // DATA=blank,RW='0'
+    b.byte |= l;
+    _LCDPORT_LATCH_DATA = b.byte;
     _ACM1602_TC_WAIT(); // Wait 2.5?us
 
-    b &= ~_LCDPORT_CONT_EN; // Disable EN
-    _LCDPORT_CONT_LATCH = b;
+    b._LCDPORT_CONT_ENbit = 1;
+    _LCDPORT_LATCH_DATA = b.byte; // Do low write.
     _ACM1602_TC_WAIT(); // Wait 2.5?us
 
+    b._LCDPORT_CONT_ENbit = 0; // Disable EN
+    _LCDPORT_LATCH_DATA = b.byte;
+    _ACM1602_TC_WAIT();
+
+    d = _LCDPORT_TRIS_CONT;
+    d &= ~_LCDPORT_READMASK; // Clear mask for Tristate, direction = read.
+    _LCDPORT_TRIS_CONT = d;
+    _ACM1602_SHORT_WAIT(); // Wait 2.5?us
 
 #else
     lcd_waitbusy(addr, 0);
@@ -408,7 +424,7 @@ unsigned char acm1602_getchar(unsigned char addr)
 
     // Recv high nibble
     b = _LCDPORT_CONT_LATCH;
-    b &= ~(0xf0 | _LCDPORT_CONT_EN); // DATA=blank
+    b &= ~(_LCDPORT_READMASK | _LCDPORT_CONT_EN); // DATA=blank
     b |= (_LCDPORT_CONT_RS | _LCDPORT_CONT_RW); // RS='1", RW='1'
     _LCDPORT_CONT_LATCH = b;
     _ACM1602_TC_WAIT(); // Wait 2.5?us
@@ -417,30 +433,19 @@ unsigned char acm1602_getchar(unsigned char addr)
     _LCDPORT_CONT_LATCH = b;
     _ACM1602_TC_WAIT(); // Wait 2.5?us
 
-    h = _LCDPORT_DATA & 0xf0;
+    h = _LCDPORT_DATA & _LCDPORT_READMASK;
     _ACM1602_TC_WAIT(); // Wait 2.5?us
 
     b &= ~_LCDPORT_CONT_EN; // Disable EN
     _LCDPORT_CONT_LATCH = b;
     _ACM1602_TC_WAIT();
 
-    lcd_waitbusy(addr, 0);
-    // Recv Low nibble.
-    d = _LCDPORT_TRIS_CONT;
-    d |= _LCDPORT_READMASK; // Set mask for Tristate, direction = read.
-    _LCDPORT_TRIS_CONT = d;
-
-    b = _LCDPORT_CONT_LATCH;
-    b &= ~(0xf0 | _LCDPORT_CONT_EN); // DATA=blank
-    b |= (_LCDPORT_CONT_RS | _LCDPORT_CONT_RW); // RS='1", RW='1'
-    _LCDPORT_CONT_LATCH = b;
-    _ACM1602_TC_WAIT(); // Wait 2.5?us
 
     b |= _LCDPORT_CONT_EN;
     _LCDPORT_CONT_LATCH = b;
     _ACM1602_TC_WAIT(); // Wait 2.5?us
 
-    l = _LCDPORT_DATA & 0xf0;
+    l = _LCDPORT_DATA & _LCDPORT_READMASK;
     _ACM1602_TC_WAIT(); // Wait 2.5?us
 
     b &= ~_LCDPORT_CONT_EN; // Disable EN
@@ -453,7 +458,7 @@ unsigned char acm1602_getchar(unsigned char addr)
 
     _ACM1602_SHORT_WAIT();
 
-    d = h | (l >> 4);
+    d = h | (l >> _LCDPORT_DATA_SHIFT);
     return d;
 #else
     unsigned char e;
@@ -528,6 +533,8 @@ void acm1602_home(unsigned char addr)
     _ACM1602_LONG_LONG_WAIT(); // Wait 5ms
 }
 
+// sprintf() using a lot of program-meory, discard.
+#if 0
 void acm1602_printf(unsigned char addr, const char *fmt, ...)
 {
     char strbuf[32]; // Max 32 bytes.
@@ -544,6 +551,7 @@ void acm1602_printf(unsigned char addr, const char *fmt, ...)
         acm1602_putchar(addr, strbuf[i]);
     }
 }
+#endif
 
 void acm1602_cursordir(unsigned char addr, unsigned char right)
 {
@@ -583,13 +591,10 @@ void acm1602_init(unsigned char addr, unsigned char cls)
     _ACM1602_SHORT_WAIT();
     sendonce(addr, 0x20); // 2lines, 8x10dot fonts.
     _ACM1602_SHORT_WAIT();
-    // Send twice on 4Bit Mode.
-//    sendonce(addr, 0x30); // 2lines, 8x10dot fonts.
     sendcmd(addr, 0x28, 0x00); // 2lines, 8x10dot fonts.
-//    sendcmd(addr, 0x28, 0x00); // 2lines, 8x10dot fonts.
   #endif
 #endif
-//    sendcmd(addr, 0x08, 0xff); // Display OFF.
+    sendcmd(addr, 0x08, 0xff); // Display OFF.
     sendcmd(addr, 0x0c, 0xff); // Display ON.
     sendcmd(addr, 0x06, 0xff); // Cursor increment,not shift.
    if(cls == 0){
@@ -597,8 +602,8 @@ void acm1602_init(unsigned char addr, unsigned char cls)
     } else {
         acm1602_cls(addr);
     }
-    _ACM1602_LONG_WAIT();
-    //sendcmd(addr, 0x06, 0xff);
+    _ACM1602_LONG_LONG_WAIT();
+//    sendcmd(addr, 0x06, 0xff);
 }
 /*
  * st7032 extensions.
index fa9b22c..124a452 100644 (file)
@@ -43,11 +43,11 @@ extern "C" {
 
 // Notes: Master clock = 8MHz(0.125uS)
 // Wait 5us
-#define _ACM1602_TC_WAIT()     delay10tcy(40)
+#define _ACM1602_TC_WAIT()     delay10tcy(4)
 // Wait 50us
-#define _ACM1602_SHORT_WAIT()     delay100tcy(40)
+#define _ACM1602_SHORT_WAIT()     delay10tcy(40)
 // Wait 5ms
-#define _ACM1602_LONG_WAIT()     delay10ktcy(40)
+#define _ACM1602_LONG_WAIT()     delay1ktcy(40)
 // Wait 50ms
 #define _ACM1602_LONG_LONG_WAIT()     delay10ktcy(40)
 // Wait 5.5ms
@@ -60,7 +60,9 @@ extern void acm1602_putchar(unsigned char addr, unsigned char c);
 extern void acm1602_locate_16x2(unsigned char addr, char x, char y);
 extern void acm1602_locate_8x2(unsigned char addr, char x, char y);
 extern void acm1602_home(unsigned char addr);
+#if 0
 extern void acm1602_printf(unsigned char addr, const char *fmt, ...);
+#endif
 extern void acm1602_cursordir(unsigned char addr, unsigned char right);
 extern void acm1602_init(unsigned char addr, unsigned char cls);
 extern unsigned char acm1602_getchar(unsigned char addr);
diff --git a/main.c b/main.c
index 3bc72b3..acd0e3e 100644 (file)
--- a/main.c
+++ b/main.c
@@ -59,7 +59,7 @@
 // For 4xK20 or 2xK20 Series
 #if defined(pic18f43k20) || defined(pic18f44k20) || defined(pic18f45k20) || defined(pic18f46k20) || \
     defined(pic18f23k20) || defined(pic18f24k20) || defined(pic18f25k20) || defined(pic18f26k20)
-//#pragma stack 0x200
+#pragma stack 0x200 256
 #pragma config FOSC=HS,FCMEN=ON,PWRT=ON,BOREN=ON,BORV=22
 #pragma config WDTEN=ON,WDTPS=32768,PBADEN=OFF,HFOFST=ON,LPT1OSC=OFF,MCLRE=ON
 #pragma config STVREN=ON,DEBUG=ON
@@ -878,7 +878,7 @@ int main(void)
 #ifdef _LCD_DEBUG
     unsigned char power_flag;
 #endif
-    OSCCON =  _IDLEN & 0b11111100;
+//    OSCCON =  _IDLEN & 0b11111100;
 
     keyin_init();
     keyin_ioinit();
@@ -886,7 +886,7 @@ int main(void)
 
     //i2c1_init();
 
-    _AKC6955_WAIT_125_0MS(); // Wait 125ms
+//    _AKC6955_WAIT_125_0MS(); // Wait 125ms
 #ifdef _LCD_DEBUG
     power_flag = 0xff;
 #endif
@@ -896,19 +896,22 @@ int main(void)
     ui_idlecount = 0xf800;
 
     acm1602_init(0xa0, 1); //Init LCD
-    _AKC6955_WAIT_125_0MS(); // Wait 125ms
+//    _AKC6955_WAIT_125_0MS(); // Wait 125ms
     _LOCATE(0,0);
     printstr("Hello;-)");
+//    TRISD = 0x00;
     PORTDbits.RD3 = 1;
-    LATDbits.LATD3 = 1;
+//    LATDbits.LATD3 = 1;
     
 #if 1
     i = 10001;
     do {
-        idle(0xf800);
+        idle(0xff00);
         ClrWdt();
-        _LOCATE(0,1);
-        print_numeric_nosupress(i, 5);
+        _LOCATE(8,1);
+//        print_numeric_nosupress(i, 5);
+        print_numeric(i, 1);
+//        PORTDbits.RD3 = i & 1;
         i = i + 1;
     }while(1);
 #else
index 772b806..26993e0 100644 (file)
@@ -74,73 +74,73 @@ ifeq ($(TYPE_IMAGE), DEBUG_RUN)
 ${OBJECTDIR}/ui.o: ui.c  nbproject/Makefile-${CND_CONF}.mk
        ${MKDIR} ${OBJECTDIR} 
        ${RM} ${OBJECTDIR}/ui.o 
-       ${MP_CC} --debug-ralloc --use-non-free -V --pstack-model=small libc18f.lib libio18f25k22.lib -c -mpic16 -p18f45k20 ui.c  -o${OBJECTDIR}/ui.o
+       ${MP_CC} --debug-ralloc --use-non-free -V --pstack-model=small libio18f25k22.lib libc18f.lib -c -mpic16 -p18f45k20 ui.c  -o${OBJECTDIR}/ui.o
        
 ${OBJECTDIR}/i2c_io.o: i2c_io.c  nbproject/Makefile-${CND_CONF}.mk
        ${MKDIR} ${OBJECTDIR} 
        ${RM} ${OBJECTDIR}/i2c_io.o 
-       ${MP_CC} --debug-ralloc --use-non-free -V --pstack-model=small libc18f.lib libio18f25k22.lib -c -mpic16 -p18f45k20 i2c_io.c  -o${OBJECTDIR}/i2c_io.o
+       ${MP_CC} --debug-ralloc --use-non-free -V --pstack-model=small libio18f25k22.lib libc18f.lib -c -mpic16 -p18f45k20 i2c_io.c  -o${OBJECTDIR}/i2c_io.o
        
 ${OBJECTDIR}/main.o: main.c  nbproject/Makefile-${CND_CONF}.mk
        ${MKDIR} ${OBJECTDIR} 
        ${RM} ${OBJECTDIR}/main.o 
-       ${MP_CC} --debug-ralloc --use-non-free -V --pstack-model=small libc18f.lib libio18f25k22.lib -c -mpic16 -p18f45k20 main.c  -o${OBJECTDIR}/main.o
+       ${MP_CC} --debug-ralloc --use-non-free -V --pstack-model=small libio18f25k22.lib libc18f.lib -c -mpic16 -p18f45k20 main.c  -o${OBJECTDIR}/main.o
        
 ${OBJECTDIR}/idle.o: idle.c  nbproject/Makefile-${CND_CONF}.mk
        ${MKDIR} ${OBJECTDIR} 
        ${RM} ${OBJECTDIR}/idle.o 
-       ${MP_CC} --debug-ralloc --use-non-free -V --pstack-model=small libc18f.lib libio18f25k22.lib -c -mpic16 -p18f45k20 idle.c  -o${OBJECTDIR}/idle.o
+       ${MP_CC} --debug-ralloc --use-non-free -V --pstack-model=small libio18f25k22.lib libc18f.lib -c -mpic16 -p18f45k20 idle.c  -o${OBJECTDIR}/idle.o
        
 ${OBJECTDIR}/lcd_acm1602.o: lcd_acm1602.c  nbproject/Makefile-${CND_CONF}.mk
        ${MKDIR} ${OBJECTDIR} 
        ${RM} ${OBJECTDIR}/lcd_acm1602.o 
-       ${MP_CC} --debug-ralloc --use-non-free -V --pstack-model=small libc18f.lib libio18f25k22.lib -c -mpic16 -p18f45k20 lcd_acm1602.c  -o${OBJECTDIR}/lcd_acm1602.o
+       ${MP_CC} --debug-ralloc --use-non-free -V --pstack-model=small libio18f25k22.lib libc18f.lib -c -mpic16 -p18f45k20 lcd_acm1602.c  -o${OBJECTDIR}/lcd_acm1602.o
        
 ${OBJECTDIR}/akc6955.o: akc6955.c  nbproject/Makefile-${CND_CONF}.mk
        ${MKDIR} ${OBJECTDIR} 
        ${RM} ${OBJECTDIR}/akc6955.o 
-       ${MP_CC} --debug-ralloc --use-non-free -V --pstack-model=small libc18f.lib libio18f25k22.lib -c -mpic16 -p18f45k20 akc6955.c  -o${OBJECTDIR}/akc6955.o
+       ${MP_CC} --debug-ralloc --use-non-free -V --pstack-model=small libio18f25k22.lib libc18f.lib -c -mpic16 -p18f45k20 akc6955.c  -o${OBJECTDIR}/akc6955.o
        
 ${OBJECTDIR}/eeprom.o: eeprom.c  nbproject/Makefile-${CND_CONF}.mk
        ${MKDIR} ${OBJECTDIR} 
        ${RM} ${OBJECTDIR}/eeprom.o 
-       ${MP_CC} --debug-ralloc --use-non-free -V --pstack-model=small libc18f.lib libio18f25k22.lib -c -mpic16 -p18f45k20 eeprom.c  -o${OBJECTDIR}/eeprom.o
+       ${MP_CC} --debug-ralloc --use-non-free -V --pstack-model=small libio18f25k22.lib libc18f.lib -c -mpic16 -p18f45k20 eeprom.c  -o${OBJECTDIR}/eeprom.o
        
 else
 ${OBJECTDIR}/ui.o: ui.c  nbproject/Makefile-${CND_CONF}.mk
        ${MKDIR} ${OBJECTDIR} 
        ${RM} ${OBJECTDIR}/ui.o 
-       ${MP_CC} --debug-ralloc --use-non-free -V --pstack-model=small libc18f.lib libio18f25k22.lib -c -mpic16 -p18f45k20 ui.c  -o${OBJECTDIR}/ui.o
+       ${MP_CC} --debug-ralloc --use-non-free -V --pstack-model=small libio18f25k22.lib libc18f.lib -c -mpic16 -p18f45k20 ui.c  -o${OBJECTDIR}/ui.o
        
 ${OBJECTDIR}/i2c_io.o: i2c_io.c  nbproject/Makefile-${CND_CONF}.mk
        ${MKDIR} ${OBJECTDIR} 
        ${RM} ${OBJECTDIR}/i2c_io.o 
-       ${MP_CC} --debug-ralloc --use-non-free -V --pstack-model=small libc18f.lib libio18f25k22.lib -c -mpic16 -p18f45k20 i2c_io.c  -o${OBJECTDIR}/i2c_io.o
+       ${MP_CC} --debug-ralloc --use-non-free -V --pstack-model=small libio18f25k22.lib libc18f.lib -c -mpic16 -p18f45k20 i2c_io.c  -o${OBJECTDIR}/i2c_io.o
        
 ${OBJECTDIR}/main.o: main.c  nbproject/Makefile-${CND_CONF}.mk
        ${MKDIR} ${OBJECTDIR} 
        ${RM} ${OBJECTDIR}/main.o 
-       ${MP_CC} --debug-ralloc --use-non-free -V --pstack-model=small libc18f.lib libio18f25k22.lib -c -mpic16 -p18f45k20 main.c  -o${OBJECTDIR}/main.o
+       ${MP_CC} --debug-ralloc --use-non-free -V --pstack-model=small libio18f25k22.lib libc18f.lib -c -mpic16 -p18f45k20 main.c  -o${OBJECTDIR}/main.o
        
 ${OBJECTDIR}/idle.o: idle.c  nbproject/Makefile-${CND_CONF}.mk
        ${MKDIR} ${OBJECTDIR} 
        ${RM} ${OBJECTDIR}/idle.o 
-       ${MP_CC} --debug-ralloc --use-non-free -V --pstack-model=small libc18f.lib libio18f25k22.lib -c -mpic16 -p18f45k20 idle.c  -o${OBJECTDIR}/idle.o
+       ${MP_CC} --debug-ralloc --use-non-free -V --pstack-model=small libio18f25k22.lib libc18f.lib -c -mpic16 -p18f45k20 idle.c  -o${OBJECTDIR}/idle.o
        
 ${OBJECTDIR}/lcd_acm1602.o: lcd_acm1602.c  nbproject/Makefile-${CND_CONF}.mk
        ${MKDIR} ${OBJECTDIR} 
        ${RM} ${OBJECTDIR}/lcd_acm1602.o 
-       ${MP_CC} --debug-ralloc --use-non-free -V --pstack-model=small libc18f.lib libio18f25k22.lib -c -mpic16 -p18f45k20 lcd_acm1602.c  -o${OBJECTDIR}/lcd_acm1602.o
+       ${MP_CC} --debug-ralloc --use-non-free -V --pstack-model=small libio18f25k22.lib libc18f.lib -c -mpic16 -p18f45k20 lcd_acm1602.c  -o${OBJECTDIR}/lcd_acm1602.o
        
 ${OBJECTDIR}/akc6955.o: akc6955.c  nbproject/Makefile-${CND_CONF}.mk
        ${MKDIR} ${OBJECTDIR} 
        ${RM} ${OBJECTDIR}/akc6955.o 
-       ${MP_CC} --debug-ralloc --use-non-free -V --pstack-model=small libc18f.lib libio18f25k22.lib -c -mpic16 -p18f45k20 akc6955.c  -o${OBJECTDIR}/akc6955.o
+       ${MP_CC} --debug-ralloc --use-non-free -V --pstack-model=small libio18f25k22.lib libc18f.lib -c -mpic16 -p18f45k20 akc6955.c  -o${OBJECTDIR}/akc6955.o
        
 ${OBJECTDIR}/eeprom.o: eeprom.c  nbproject/Makefile-${CND_CONF}.mk
        ${MKDIR} ${OBJECTDIR} 
        ${RM} ${OBJECTDIR}/eeprom.o 
-       ${MP_CC} --debug-ralloc --use-non-free -V --pstack-model=small libc18f.lib libio18f25k22.lib -c -mpic16 -p18f45k20 eeprom.c  -o${OBJECTDIR}/eeprom.o
+       ${MP_CC} --debug-ralloc --use-non-free -V --pstack-model=small libio18f25k22.lib libc18f.lib -c -mpic16 -p18f45k20 eeprom.c  -o${OBJECTDIR}/eeprom.o
        
 endif
 
@@ -149,11 +149,11 @@ endif
 ifeq ($(TYPE_IMAGE), DEBUG_RUN)
 dist/${CND_CONF}/${IMAGE_TYPE}/OPENI2CRADIO_6955.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX}: ${OBJECTFILES}  nbproject/Makefile-${CND_CONF}.mk  /usr/local/share/sdcc/lib/pic16/libc18f.lib  
        ${MKDIR} dist/${CND_CONF}/${IMAGE_TYPE} 
-       ${MP_CC}  --debug-ralloc -Wl-c -Wl-m --use-non-free -V --pstack-model=small libc18f.lib libio18f25k22.lib -mpic16 -p18f45k20 ${OBJECTFILES}  -odist/${CND_CONF}/${IMAGE_TYPE}/OPENI2CRADIO_6955.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX} 
+       ${MP_CC}  --debug-ralloc -Wl-c -Wl-m --use-non-free -V --pstack-model=small libio18f25k22.lib libc18f.lib -mpic16 -p18f45k20 ${OBJECTFILES}  -odist/${CND_CONF}/${IMAGE_TYPE}/OPENI2CRADIO_6955.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX} 
 else
 dist/${CND_CONF}/${IMAGE_TYPE}/OPENI2CRADIO_6955.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX}: ${OBJECTFILES}  nbproject/Makefile-${CND_CONF}.mk  /usr/local/share/sdcc/lib/pic16/libc18f.lib 
        ${MKDIR} dist/${CND_CONF}/${IMAGE_TYPE} 
-       ${MP_CC}  --debug-ralloc -Wl-c -Wl-m --use-non-free -V --pstack-model=small libc18f.lib libio18f25k22.lib -mpic16 -p18f45k20 ${OBJECTFILES}  -odist/${CND_CONF}/${IMAGE_TYPE}/OPENI2CRADIO_6955.X.${IMAGE_TYPE}.${DEBUGGABLE_SUFFIX} 
+       ${MP_CC}  --debug-ralloc -Wl-c -Wl-m --use-non-free -V --pstack-model=small libio18f25k22.lib libc18f.lib -mpic16 -p18f45k20 ${OBJECTFILES}  -odist/${CND_CONF}/${IMAGE_TYPE}/OPENI2CRADIO_6955.X.${IMAGE_TYPE}.${DEBUGGABLE_SUFFIX} 
 endif
 
 
index 3323fdc..2c5b453 100644 (file)
@@ -1,5 +1,5 @@
 #
-#Sun Jun 16 12:31:30 JST 2013
+#Tue Jun 18 14:09:42 JST 2013
 default.languagetoolchain.dir=/usr/local/bin
 default.br-unifei-rmaalmeida-toolchainSDCC-SDCCtoolchain.md5=b67cce1ad75b450308d7806e430931b3
 com-microchip-mplab-nbide-embedded-makeproject-MakeProject.md5=8fe1589514540343a5279c082104bce0
index cbc683c..8969beb 100644 (file)
         <property key="pstack-model" value="small"/>
         <property key="use-non-free" value="true"/>
         <property key="verbose" value="false"/>
-        <appendMe value="libc18f.lib libio18f25k22.lib"/>
+        <appendMe value="libio18f25k22.lib libc18f.lib"/>
       </sdcc>
     </conf>
   </confs>
index dc1db5a..1b84c05 100644 (file)
@@ -4,7 +4,7 @@
   <defaultConf>0</defaultConf>
   <confs>
     <conf name="default" type="2">
-      <platformToolSN>:=MPLABCommUSB:=04D8:=900A:=0002:=Microchip Technology Inc.:=PICkit 3:=DEFAULT_PK3 :=x:=en</platformToolSN>
+      <platformToolSN></platformToolSN>
       <languageToolchainDir>/usr/local/bin</languageToolchainDir>
       <mdbdebugger version="1">
         <placeholder1>place holder 1</placeholder1>
diff --git a/ui.c b/ui.c
index 6dc0e0f..6042993 100644 (file)
--- a/ui.c
+++ b/ui.c
@@ -108,7 +108,7 @@ void keyin_ioinit(void)
     /* Initialize IOPORTS*/
     PORTA = 0x00;
     LATA = 0x00;
-    ANSEL = 0x01; // Use RA0 AS ADC, Another is not used.
+    ANSEL = 0x00; // Use RA0 AS ADC, Another is not used.
     ANSELH = 0x00; //
     TRISA = TRIS_A_VAL;
 
@@ -185,9 +185,7 @@ void print_numeric(int i, unsigned char supressf)
     if((i == 0) && (supressf != 0)){
         unsigned char c;
         c = '0';
-        _CURSOR_LEFT();
         _PUTCHAR(c);
-        _CURSOR_RIGHT();
     } else {
         int l;
         unsigned char supress = 0;