prefect
Home Engineering Publications
DACS: Graphics LCD Driver Code, gfxlcd.c
 
  next up previous contents
Next: Alphanumeric and Graphics LCD Up: Control Board Previous: Graphics LCD Driver Header,   Contents

Graphics LCD Driver Code, gfxlcd.c

/*****************************************************************************
 * DACS : Distributed Audio Control System
 *============================================================================
 *         File: gfxlcd.c
 *       Author: Stephen S. Richardson
 * Date Created: 04.14.97
 *  Environment: ICC11 v3.6, 68HC11 target
 *        Build: library, not standalone
 *============================================================================
 * The code, executables, documentation, firmware images, and all related
 * material of DACS are  
 * Copyright (C) 1997 Stephen S. Richardson - ALL RIGHTS RESERVED
 *****************************************************************************/

#include <hc11.h>
#include "gfxlcd.h"
#include "lcddefn.h"

/*****************************************************************************
 * gfxlcd_writecmd
 *
 * write a command byte to a graphics lcd
 *****************************************************************************/
void gfxlcd_writecmd (unsigned char d)
{
  while (!(GFXLCD_CMD & GFXLCD_RDY));
  GFXLCD_CMD=d;
}

/*****************************************************************************
 * gfxlcd_writedata
 *
 * write a data byte to a graphics lcd
 *****************************************************************************/
void gfxlcd_writedata (unsigned char d)
{
  while (!(GFXLCD_CMD & GFXLCD_RDY));
  GFXLCD_DATA=d;
}


/*****************************************************************************
 * gfxlcd_cleartext
 *
 * clears the text area of a graphics lcd
 *****************************************************************************/
void gfxlcd_cleartext (void)
{
  int i;

  gfxlcd_writedata (0x00);
  gfxlcd_writedata (0x10);
  gfxlcd_writecmd (0x24);     /* text home address cmd */
  
  for (i=0;i<320;i++) {
    gfxlcd_writedata (0);
    gfxlcd_writecmd (0xC0);
  }
}


/*****************************************************************************
 * gfxlcd_textxy
 *
 * positions the cursor in the text area of a graphics lcd
 *****************************************************************************/
void gfxlcd_textxy (unsigned char x, unsigned char y)
{
  unsigned int i;
  unsigned char hi, lo;

  i=(y*40)+x;

  hi=((i&0xFF00)>>8);
  lo=(i&0x00FF);

  gfxlcd_writedata (lo);
  gfxlcd_writedata (0x10+hi);
  gfxlcd_writecmd (0x24);     /* text home address cmd */
}


/*****************************************************************************
 * gfxlcd_textout
 *
 * output a string of text to the text area of a graphics lcd
 *****************************************************************************/
void gfxlcd_textout (char *s)
{
  while (*s) {
    gfxlcd_writedata ((unsigned char) *s - 32);
    gfxlcd_writecmd (0xC0);
    s++;
  }
}

/*****************************************************************************
 * gfxlcd_btmbar
 *
 * make a graphics-mode bar graph at the bottom of the display
 * (looks like a fader knob)
 *****************************************************************************/
void gfxlcd_btmbar (unsigned char pos, unsigned char height)
{
  unsigned char ystop,hi,lo;
  unsigned int y;
  unsigned int a;

  gfxlcd_writecmd (0x9C);
  ystop=53-height;


  for (y=53;y>0;y--) {
      a=(y*40)+pos;

      hi=((a&0xFF00)>>8);
      lo=(a&0x00FF);

  
      gfxlcd_writedata (lo);
      gfxlcd_writedata (hi);
      gfxlcd_writecmd (0x24);
      
      if ((y==ystop)||(y==ystop-1)) {
	gfxlcd_writedata (0x1F);
      } else {
	gfxlcd_writedata (0x04);
      }
      gfxlcd_writecmd (0xC0);
  }

}

/*****************************************************************************
 * gfxlcd_init
 *
 * initialize the Toshiba TLX-711A graphics LCD
 *****************************************************************************/
void gfxlcd_init (void)
{
  int i;

  gfxlcd_writecmd (0x80);  /* OR mode */
  
  gfxlcd_writedata (0x00);
  gfxlcd_writedata (0x00);
  gfxlcd_writecmd (0x42);
  
  gfxlcd_writedata (0x28);
  gfxlcd_writedata (0x00);
  gfxlcd_writecmd (0x43);
  
  gfxlcd_writedata (0x00);
  gfxlcd_writedata (0x10);  /* text home address set */
  gfxlcd_writecmd (0x40);
  
  gfxlcd_writedata (0x28);
  gfxlcd_writedata (0x00);  /* number of text areas set */
  gfxlcd_writecmd (0x41);
  
  gfxlcd_writecmd (0x9C);
  
  gfxlcd_writedata (0x00);
  gfxlcd_writedata (0x00);  /* graphic home address set */
  gfxlcd_writecmd (0x42);
  
  gfxlcd_writedata (0x00);
  gfxlcd_writedata (0x00);  /* address pointer set */
  gfxlcd_writecmd (0x24);
  
  for (i=0;i<2560;i++) {
    gfxlcd_writedata (0x00);
    gfxlcd_writecmd (0xC0);  /* write data */
  }

  
  gfxlcd_cleartext();

  gfxlcd_textxy (25,0);
  gfxlcd_textout ("DACS model 112");
  gfxlcd_textxy (0,7);
  gfxlcd_textout ("0123456789ABCDEF");
  gfxlcd_writecmd (0x9C);
}


Steve Richardson 2000-07-06
Table of Contents

[PDF] [Whole document in PDF 1.9MB]

[more photos and information]

 
Page last modified:
Copyright © 1993-2000 prefect - All Rights Reserved.