firmware/T6963.c
author root@rika
Thu, 23 Apr 2009 19:10:12 +0200
changeset 30 7fd00015f62f
parent 2 2f55e5dd591d
permissions -rw-r--r--
several changes..
slime@2
     1
/*
slime@2
     2
 * Project Frontplatte
slime@2
     3
 *
slime@2
     4
 * t6963.c  -  Controll a t6963c display
slime@2
     5
 *
slime@2
     6
 * This file is released under the GNU General Public License. Refer
slime@2
     7
 * to the COPYING file distributed with this package.
slime@2
     8
 *
slime@2
     9
 * (c) 2007 Carsten Presser cpresser AT fsing.uni-sb.de
slime@2
    10
 *  heavily inspired by Holger Klabunde
slime@2
    11
 */
slime@2
    12
slime@2
    13
slime@2
    14
/** I N C L U D E S **********************************************************/
slime@2
    15
#include <p18cxxx.h>
slime@2
    16
#include "t6963.h"
slime@2
    17
#include "io_cfg.h"
slime@2
    18
slime@2
    19
/** P R I V A T E  P R O T O T Y P E S ***************************************/
slime@2
    20
unsigned char	lcd_checkBusy(void);
slime@2
    21
slime@2
    22
/** V A R I A B L E S ********************************************************/
slime@2
    23
unsigned char	lcd_auto_mode = MODE_NOAUTO;
slime@2
    24
slime@2
    25
slime@2
    26
/** H I G H L E V E L ********************************************************/
slime@2
    27
void lcd_ClearScreen(void)
slime@2
    28
{
slime@2
    29
 	unsigned int i;
slime@2
    30
slime@2
    31
	// Address Pointer Set
slime@2
    32
	lcd_WriteData(0x00);		// byte1
slime@2
    33
	lcd_WriteData(0x00);		// byte2
slime@2
    34
	lcd_WriteCommand(0x24);	//set!
slime@2
    35
	
slime@2
    36
slime@2
    37
	// bis 0x08F0 löschen...
slime@2
    38
	lcd_SetAutomode(MODE_AUTO);
slime@2
    39
	for(i=0; i <= 0x11E; i++)
slime@2
    40
  	{
slime@2
    41
   		lcd_WriteData(0x00); lcd_WriteData(0x00);
slime@2
    42
   		lcd_WriteData(0x00); lcd_WriteData(0x00);
slime@2
    43
   		lcd_WriteData(0x00); lcd_WriteData(0x00);
slime@2
    44
   		lcd_WriteData(0x00); lcd_WriteData(0x00);
slime@2
    45
  	}
slime@2
    46
	lcd_SetAutomode(MODE_NOAUTO); 
slime@2
    47
slime@2
    48
	lcd_WriteData(0x00);		// byte1
slime@2
    49
	lcd_WriteData(0x00);		// byte2
slime@2
    50
	lcd_WriteCommand(0x24);	//set!
slime@2
    51
slime@2
    52
}
slime@2
    53
slime@2
    54
void lcd_InitDisplay(void)
slime@2
    55
{
slime@2
    56
	mLcdDataDirOut();
slime@2
    57
	mLcdWriteData(0x00);
slime@2
    58
	mLcdInitCtrl();
slime@2
    59
slime@2
    60
slime@2
    61
	// MODE_SET
slime@2
    62
	lcd_WriteCommand(0x80);	// OR-Mode; CG-ROM Mode
slime@2
    63
slime@2
    64
	// DISPLAY_MODE
slime@2
    65
	lcd_WriteCommand(0x9C);	// GFX-Mode=1, Text-Mode=1, Cursor=0, Blink=0 -> C
slime@2
    66
 
slime@2
    67
slime@2
    68
	// CONTROL_WORD set Text-Area-Home
slime@2
    69
	lcd_WriteData(0x00);		// byte1
slime@2
    70
	lcd_WriteData(0x08);		// byte2
slime@2
    71
	lcd_WriteCommand(0x40);	//set!
slime@2
    72
slime@2
    73
	// CONTROL_WORD SET Text-Area
slime@2
    74
	lcd_WriteData(0x1E);		// TA-Value (Address of Second Line)
slime@2
    75
	lcd_WriteData(0x00);		// always Zero
slime@2
    76
	lcd_WriteCommand(0x41);	// set!
slime@2
    77
slime@2
    78
	// CONTROL_WORD set GFX-Area-Home
slime@2
    79
	lcd_WriteData(0x00);		// byte1
slime@2
    80
	lcd_WriteData(0x00);		// byte2
slime@2
    81
	lcd_WriteCommand(0x42);	//set!
slime@2
    82
slime@2
    83
	// CONTROL_WORD SET GFX-Area
slime@2
    84
	lcd_WriteData(0x1E);		// Start-Address of Second Line
slime@2
    85
	lcd_WriteData(0x00);		// always Zero
slime@2
    86
	lcd_WriteCommand(0x43);	// set!
slime@2
    87
slime@2
    88
slime@2
    89
slime@2
    90
	lcd_ClearScreen();
slime@2
    91
}
slime@2
    92
slime@2
    93
/** I N T E R F A C E ********************************************************/
slime@2
    94
unsigned char lcd_CheckBusy(void)
slime@2
    95
{
slime@2
    96
	unsigned char by;
slime@2
    97
slime@2
    98
	D_CD	= MODE_COMMAND;
slime@2
    99
	mLcdDataDirIn();
slime@2
   100
slime@2
   101
	if (lcd_auto_mode == MODE_AUTO)
slime@2
   102
	{
slime@2
   103
		// in auto_mode only status3 is valid
slime@2
   104
 		do	{
slime@2
   105
    		D_RD	= 0;
slime@2
   106
    		by		= mLcdReadData();
slime@2
   107
    		by		&= 0x08;
slime@2
   108
    		D_RD	= 1;
slime@2
   109
			} 
slime@2
   110
		while (by!=0x08);
slime@2
   111
	} 
slime@2
   112
	else
slime@2
   113
	{
slime@2
   114
		// check status1 & status 2
slime@2
   115
 		do	{
slime@2
   116
    		D_RD	= 0;
slime@2
   117
    		by		= mLcdReadData();
slime@2
   118
    		by		&= 0x03;
slime@2
   119
    		D_RD	= 1;
slime@2
   120
			} 
slime@2
   121
		while (by!=0x03);
slime@2
   122
	}
slime@2
   123
slime@2
   124
	mLcdDataDirOut();
slime@2
   125
	return by;
slime@2
   126
}
slime@2
   127
slime@2
   128
void lcd_SetAutomode(unsigned char mode)
slime@2
   129
{
slime@2
   130
	unsigned char by;
slime@2
   131
slime@2
   132
	if (mode == MODE_AUTO) 
slime@2
   133
	{
slime@2
   134
		lcd_WriteCommand(0xB0);	// Data Auto Write Set 
slime@2
   135
		lcd_CheckBusy();
slime@2
   136
	} 
slime@2
   137
	else
slime@2
   138
	{
slime@2
   139
		lcd_WriteCommand(0xB2);	// Auto Mode Reset
slime@2
   140
	}
slime@2
   141
slime@2
   142
	lcd_auto_mode = mode;
slime@2
   143
	return;
slime@2
   144
}
slime@2
   145
slime@2
   146
slime@2
   147
void lcd_WriteData(unsigned char dat)
slime@2
   148
{
slime@2
   149
 lcd_CheckBusy();
slime@2
   150
 
slime@2
   151
 D_CD	= MODE_DATA;
slime@2
   152
 mLcdWriteData(dat); //Daten schreiben
slime@2
   153
 D_WR	= 0;
slime@2
   154
 D_WR	= 1;
slime@2
   155
}
slime@2
   156
slime@2
   157
void lcd_WriteCommand(unsigned char comand)
slime@2
   158
{
slime@2
   159
 lcd_CheckBusy();
slime@2
   160
slime@2
   161
 D_CD	= MODE_COMMAND;
slime@2
   162
 mLcdWriteData(comand); //Kommando schreiben
slime@2
   163
 D_WR	= 0;
slime@2
   164
 D_WR	= 1;
slime@2
   165
}
slime@2
   166
slime@2
   167
void lcd_WriteByte(unsigned char dat)
slime@2
   168
{
slime@2
   169
 lcd_WriteData(dat); //Daten schreiben
slime@2
   170
 lcd_WriteCommand(0xC0); //Kommando schreiben
slime@2
   171
}
slime@2
   172