lcd3.c

C2C-plus code that uses a 16F84 to read a thermocouple via a Maxim's Max6674. (by Ryan Dumouchel).



#include <system.h>
#include "lcd3.h"

void ShiftOut(char serdata)
{
  for ( bitcnt = 0; bitcnt < 8; bitcnt++ )
    {
      if (serdata & 10000000b)
        {
         //delay_us(45);
         set_bit(porta, PinSrData);
        }
       else clear_bit(porta, PinSrData);

     clear_bit(porta, PinSrClk);    //Strobe Serial Clock
     delay_us(2);
     set_bit(porta, PinSrClk);
     serdata <<= 1;
    }

  clear_bit(porta, PinLatch);  //Strobe Parallel Latch
  delay_us(2);
  set_bit(porta, PinLatch);

}

void FuncMode(void)
{
  clear_bit(sdata, RS);
  ShiftOut(sdata);
  delay_us(2);
}

void DatMode(void)
{
 set_bit(sdata, RS);
 ShiftOut(sdata);
 delay_us(2);
}

void LcdSetup(void)
{
  set_bit(STATUS, RP0);    // select the register bank 1
    clear_bit(trisa,PinSrClk);
    clear_bit(trisa,PinSrData);
    clear_bit(trisa,PinLatch);
  clear_bit(STATUS, RP0);

  clear_bit(porta,PinSrClk);
  clear_bit(porta,PinSrData);
  clear_bit(porta,PinLatch);
  sdata = 0;

  FuncMode();
  LCD8Bit( system_set_4_bit ); /* This sequence resets the LCD */
  delay_ms(5);
  LCD8Bit( system_set_4_bit );
  delay_ms(5);
  LCD8Bit( system_set_4_bit );
  delay_ms(5);

  LCD4Bit( system_set_4_bit );
   delay_ms(2);
  LCD4Bit( display_off );
   delay_ms(2);
  LCD4Bit( entry_mode );
   delay_ms(2);
  LCD4Bit( display_on );
   delay_ms(2);
  LCD4Bit( set_dd_ram );
   delay_ms(2);

  LCD4Bit(clear_lcd);
  DatMode();
}


void LCD8Bit(char ebit)
{
  if (ebit & 0x80)
            set_bit(sdata,PinLCD_DATA_7);
     else clear_bit(sdata,PinLCD_DATA_7);
   if (ebit & 0x40)
            set_bit(sdata,PinLCD_DATA_6);
     else clear_bit(sdata,PinLCD_DATA_6);
   if (ebit & 0x20)
            set_bit(sdata,PinLCD_DATA_5);
     else clear_bit(sdata,PinLCD_DATA_5);
   if (ebit & 0x10)
            set_bit(sdata,PinLCD_DATA_4);
     else clear_bit(sdata,PinLCD_DATA_4);

   ShiftOut(sdata);
     delay_us(2);
     set_bit(sdata,EN);
     ShiftOut(sdata);

     delay_us(2);

     clear_bit(sdata,EN);
     ShiftOut(sdata);

     delay_us(2);
}

void LCD4Bit(char fbit)
{
  //for (lc = 0; lc = 2; lc++)
  {
   if (fbit & 0x80)
            set_bit(sdata,PinLCD_DATA_7);
     else clear_bit(sdata,PinLCD_DATA_7);
   if (fbit & 0x40)
            set_bit(sdata,PinLCD_DATA_6);
     else clear_bit(sdata,PinLCD_DATA_6);
   if (fbit & 0x20)
            set_bit(sdata,PinLCD_DATA_5);
     else clear_bit(sdata,PinLCD_DATA_5);
   if (fbit & 0x10)
            set_bit(sdata,PinLCD_DATA_4);
     else clear_bit(sdata,PinLCD_DATA_4);

     ShiftOut(sdata)  ;
//     delay_us(2); 
     set_bit(sdata,EN);
     ShiftOut(sdata);
//     delay_us(2);
     clear_bit(sdata,EN);
     ShiftOut(sdata);
//     delay_us(2);
     fbit <<= 4;
  //}   

    if (fbit & 0x80)
            set_bit(sdata,PinLCD_DATA_7);
     else clear_bit(sdata,PinLCD_DATA_7);
   if (fbit & 0x40)
            set_bit(sdata,PinLCD_DATA_6);
     else clear_bit(sdata,PinLCD_DATA_6);
   if (fbit & 0x20)
            set_bit(sdata,PinLCD_DATA_5);
     else clear_bit(sdata,PinLCD_DATA_5);
   if (fbit & 0x10)
            set_bit(sdata,PinLCD_DATA_4);
     else clear_bit(sdata,PinLCD_DATA_4);

     ShiftOut(sdata)  ;
//     delay_us(2); 
     set_bit(sdata,EN);
     ShiftOut(sdata);

//     delay_us(2);

     clear_bit(sdata,EN);
     ShiftOut(sdata);

//     delay_us(2);  

}

void LcdSetPos(char Pos)
{

   FuncMode();
   LCD4Bit( 0x80 + Pos );
   DatMode();

}

void LcdWrite( const char *lcdptr )
{
  char pi;
  char ch;
  pi = 0;
  while(lcdptr[pi] !=  0)
  {
    ch = lcdptr[pi++];
    LCD4Bit(ch);
  }
}

void LcdInt(int n)
{
if(n>99)
   LCD4Bit(((n/100)%10)+'0');
 if(n>9)
   LCD4Bit(((n/10)%10)+'0');
 LCD4Bit((n%10)+'0');

}



http://www.sourceboost.com/home.html

Copyright © 2002-2006 SourceBoost Technologies