T6963c
SwordfishUser.T6963c History
Show minor edits - Show changes to output
Changed lines 67-68 from:
Include "SimSunFont.bas"
to:
'Include "SimSunFont.bas" '<*** Unicode Chinese font bloc
Changed lines 15-16 from:
to:
http://www.pocketmt.com/tutors/t6963c_sf.png
Changed line 492 from:
Sorry for code. each time I want to post it I got an error from the Wiki server. You can download the module code directly from this link http://www.pocketmt.com/tutors/glcd.zip
to:
Sorry for code. each time I want to post it I got an error from the Wiki server. You can download the module code directly from this link http://www.pocketmt.com/tutors/glcd.zip
Changed line 491 from:
Sorry for code. each time I want to post it I got an error from the Wiki server. You can download the module code directly from this link glcd.bas .
to:
Sorry for code. each time I want to post it I got an error from the Wiki server. You can download the module code directly from this link http://www.pocketmt.com/tutors/glcd.zip
Deleted line 484:
Added lines 486-491:
!!!Modified GLCD.BAS Module Code
This modified module is to be copied in the \UserLibrary\ sub folder to avoid any modification on original Swordfish module.
Sorry for code. each time I want to post it I got an error from the Wiki server. You can download the module code directly from this link glcd.bas .
Added lines 96-486:
!!!Module Code
!!Important Note:
The T6963c module contains a sub named xDelay().
=code [=
Sub xDelay()
'DelayUS(1)
ASM
Nop
Nop
Nop
End ASM
End Sub
=]
This sub introduces needed delays for the T6963c hardware driver. For my own hardware driver (display bought from MikroE shop), I needed for 1 NOP only at 20MHz clock. Feel free to add additional NOP if needed. For very slow displays, and high PIC clock frequencies, you can completely remove the NOP and replace it with DelayUS(nn) with needed nn delay value.
=code [=
{
*************************************************************************
* Name : T6963c.BAS *
* Author : Ahmed Lazreg ([email protected]) *
* http://www.pocketmt.com *
* Notice : Copyright (c) 2006 Pocket MicroTechnics *
* : All Rights Reserved *
* Date : 01/03/2008 *
* Version : 1.0 *
* Modified: *
* Notes : This module handles Toshiba T6963c GLCD drivera *
* *
*************************************************************************
}
Module T6963c
#define GLCD_PIXEL_08
#define GLCD_COLOR_01
#define GLCD_XY_16
Include "Graphics.bas"
Include "system.bas"
Include "utils.bas"
#option GLCD_DATA = PORTD // data port
#option GLCD_CE = PORTC.3 // chip Enable
#option GLCD_RD = PORTC.5 // RD pin
#option GLCD_RW = PORTC.4 // RW pin
#option GLCD_CD = PORTC.6 // Command/Data High=Cmd , Low=Data
#option GLCD_RST = PORTC.7 // reset pin
#option GLCD_ASPECT_RATIO = 100 // aspect ratio, smaller number will squeeze y for GLCD circles and box
#option GLCD_INIT_DELAY = 100 // initialisation delay (ms)
// validate data port...
#if IsOption(GLCD_DATA)
#if Not IsValidPort(GLCD_DATA)
#error GLCD_DATA, "Invalid option. DATA must be a valid port name."
#endif
#ifdef GLCD_DATA@ Then
#error GLCD_DATA@, "Invalid option. DATA port cannot be a single bit value."
#endif
#endif
// validate EN pin...
#if IsOption(GLCD_EN) And Not IsValidPortPin(GLCD_EN)
#error GLCD_EN, "Invalid option. EN must be a valid port pin."
#endif
// validate RD pin...
#if IsOption(GLCD_RD) And Not IsValidPortPin(GLCD_RD)
#error GLCD_RD, "Invalid option. RD must be a valid port pin."
#endif
// validate RW pin...
#if IsOption(GLCD_RW) And Not IsValidPortPin(GLCD_RW)
#error GLCD_RW, "Invalid option. RW must be a valid port pin."
#endif
// validate CD pin...
#if IsOption(GLCD_CD) And Not IsValidPortPin(GLCD_CD)
#error GLCD_CD, "Invalid option. CD must be a valid port pin."
#endif
// validate RST pin...
#if IsOption(GLCD_RST) And Not IsValidPortPin(GLCD_RST)
#error GLCD_RST, "Invalid option. RST must be a valid port pin."
#endif
// validate initialisation delay...
#if IsOption(GLCD_INIT_DELAY)
#if Not (GLCD_INIT_DELAY in (0 to 1000))
#error GLCD_INIT_DELAY, "Invalid option. GLCD initialize delay must be between 0 and 1000 (ms)."
#endif
#endif
// now create Data TRIS...
#option _GLCD_DATA_TRIS = GetTRIS(GLCD_DATA)
Public Const
GLCDWidth = 240,
GLCDHeight = 128
Const GLCD_NUMBER_OF_LINES = GLCDHeight
Const GLCD_PIXELS_PER_LINE= GLCDWidth
Const GLCD_FONT_WIDTH = 8
Const GLCD_GRAPHIC_AREA As Word=(GLCD_PIXELS_PER_LINE / GLCD_FONT_WIDTH)
Const GLCD_TEXT_AREA As Word = (GLCD_PIXELS_PER_LINE / GLCD_FONT_WIDTH)
Const GLCD_GRAPHIC_SIZE As Word = (GLCD_GRAPHIC_AREA * GLCD_NUMBER_OF_LINES)
Const GLCD_TEXT_SIZE As Word = (GLCD_TEXT_AREA * (GLCD_NUMBER_OF_LINES/8))
Const GLCD_TEXT_HOME As Word = 0
Const GLCD_GRAPHIC_HOME As Word = (GLCD_TEXT_HOME + GLCD_TEXT_SIZE)
Const GLCD_OFFSET_REGISTER = 2
Const GLCD_EXTERNAL_CG_HOME =(GLCD_OFFSET_REGISTER << 11)
Const GLCD_EXTERNAL_CG_SIZE = $FF
Const T6963_SET_CURSOR_POINTER = $21
Const T6963_SET_OFFSET_REGISTER = $22
Const T6963_SET_ADDRESS_POINTER = $24
Const T6963_SET_TEXT_HOME_ADDRESS = $40
Const T6963_SET_TEXT_AREA = $41
Const T6963_SET_GRAPHIC_HOME_ADDRESS =$42
Const T6963_SET_GRAPHIC_AREA = $43
Const T6963_MODE_SET = $80
Const T6963_DISPLAY_MODE = $90
Const T6963_CURSOR_BLINK_ON = $01
Const T6963_CURSOR_DISPLAY_ON = $02
Const T6963_TEXT_DISPLAY_ON = $04
Const T6963_GRAPHIC_DISPLAY_ON = $08
Const T6963_CURSOR_PATTERN_SELECT = $A0
Const T6963_CURSOR_1_LINE = $00
Const T6963_CURSOR_2_LINE = $01
Const T6963_CURSOR_3_LINE = $02
Const T6963_CURSOR_4_LINE = $03
Const T6963_CURSOR_5_LINE = $04
Const T6963_CURSOR_6_LINE = $05
Const T6963_CURSOR_7_LINE = $06
Const T6963_CURSOR_8_LINE = $07
Const T6963_SET_DATA_AUTO_WRITE = $B0
Const T6963_SET_DATA_AUTO_READ = $B1
Const T6963_AUTO_RESET = $B2
Const T6963_DATA_WRITE_AND_INCREMENT = $C0
Const T6963_DATA_READ_AND_INCREMENT = $C1
Const T6963_DATA_WRITE_AND_DECREMENT = $C2
Const T6963_DATA_READ_AND_DECREMENT = $C3
Const T6963_DATA_WRITE_AND_NONVARIALBE = $C4
Const T6963_DATA_READ_AND_NONVARIABLE = $C5
Const T6963_SCREEN_PEEK = $E0
Const T6963_SCREEN_COPY = $E8
Const T6963_CD_COMMAND = 1,
T6963_CD_Data = 0
// x, y position structure...
Public Structure TPositionT6963
x As TXY
y As Byte
End Structure
// x, y position...
Public Dim
Pos As TPositionT6963
Structure T6963Status_Struct
STATUS As Byte
blink As STATUS.7
error As STATUS.6
clr As STATUS.5
dummyFiller As STATUS.4
dawrdy As STATUS.3
darrdy As STATUS.2
busy2 As STATUS.1
busy1 As STATUS.0
End Structure
Dim
Data As GLCD_DATA, // data in (PORT)
TRISData As _GLCD_DATA_TRIS, // data TRIS
CE As GLCD_CE.GLCD_CE@, // EN pin - enable (serves as a strobe) - 6800 mode
RD As GLCD_RD.GLCD_RD@, // RD pin - read when L - 8080 mode
RW As GLCD_RW.GLCD_RW@, // RW pin - read or write (0 = write, 1 = read) - 6800 mode
CD As GLCD_CD.GLCD_CD@, // CD pin - write when L - 8080 mode
RST As GLCD_RST.GLCD_RST@ // RES pin - normally RES = 1 but pull to 0 for initialization
{Sub xDelay()
Dim i As Byte
For i = 1 To 4
ASM nop End ASM
Next}
inline Sub xDelay()
'DelayUS(1)
ASM
Nop
Nop
Nop
End ASM
End Sub
Sub WaitForIdle()
Dim Timeout As Byte
Dim tmp As Byte
Timeout = $FF
TRISData = $FF // set data bus to input
CD = 1
Repeat
ClrWDT
RD = 0
CE = 0
xDelay()
ClrWDT
tmp = Data
xDelay()
CE = 1
RD = 1
Dec(Timeout)
Until ((tmp And $03)= $03) Or (Timeout = 0)
End Sub
Sub WriteByte(pDataByte As Byte, pCD As Byte)
WaitForIdle()
TRISData = $00
CD = pCD
RD = 1
Data = pDataByte
xDelay()
RW = 0
CE = 0
xDelay()
CE = 1
RW = 1
End Sub
Sub SetData(pData As Byte)
WriteByte(pData, T6963_CD_Data)
End Sub
Function ReadData() As Byte
Dim tmp As Byte
WaitForIdle()
TRISData = $FF
CD = 0
RD = 0
CE = 0
xDelay()
result = Data
xDelay()
CE = 1
RD = 1
CD = 1
End Function
Sub Command(pCmd As Byte)
WriteByte(pCmd, T6963_CD_COMMAND)
End Sub
Sub CommandBParam(pCmd As Byte, pParam As Byte)
SetData(pParam)
Command(pCmd)
End Sub
Sub CommandWParam(pCmd As Byte, pParam As Word)
SetData(pParam.Byte0)
SetData(pParam.Byte1)
Command(pCmd)
End Sub
Sub FillMemRegion(pBaseAddr As Word, pSize As Word, pData As Byte = $00)
Dim i As Word
CommandWParam(T6963_SET_ADDRESS_POINTER, pBaseAddr)
For i = 0 To pSize-1
CommandBParam(T6963_DATA_WRITE_AND_INCREMENT, pData)
Next
End Sub
Public Sub ClearGraphic(pBytePattern As Byte = $00)
FillMemRegion(GLCD_GRAPHIC_HOME, GLCD_GRAPHIC_SIZE, pBytePattern)
End Sub
Public Sub ClearText(pChar As Byte = $00)
FillMemRegion(GLCD_TEXT_HOME, GLCD_TEXT_SIZE, pChar)
End Sub
Sub ClearCG(pChar As Byte = $00)
FillMemRegion(GLCD_EXTERNAL_CG_HOME, GLCD_EXTERNAL_CG_SIZE, pChar)
End Sub
Public Sub T6963WriteChar(pChar As Byte)
CommandBParam(T6963_DATA_WRITE_AND_INCREMENT, pChar-32)
End Sub
Public Sub T6963WriteStr(pStr As String)
FSR0 = @pStr
While INDF0 <> 0
T6963WriteChar(POSTINC0)
Wend
End Sub
Public Sub GoToXY(pX As Byte, pY As Byte)
Dim addr As Word
addr = GLCD_TEXT_HOME + pX + (GLCD_TEXT_AREA * pY)
CommandWParam(T6963_SET_ADDRESS_POINTER, addr)
End Sub
Public Sub Cls()
ClearGraphic()
ClearText()
End Sub
Public Sub SetPixel(pX, pY As TXY)
Dim tmp As Byte
Dim addr As Word
addr = GLCD_GRAPHIC_HOME + (pX / GLCD_FONT_WIDTH) + (GLCD_GRAPHIC_AREA * pY)
CommandWParam(T6963_SET_ADDRESS_POINTER, addr)
Command(T6963_DATA_READ_AND_NONVARIABLE)
tmp = ReadData()
If Pen.Color = 0 Then
tmp = tmp And (Not (1 << (GLCD_FONT_WIDTH - 1 - (pX Mod GLCD_FONT_WIDTH))))
Else
tmp = tmp Or (1 << (GLCD_FONT_WIDTH - 1 - (pX Mod GLCD_FONT_WIDTH)))
EndIf
CommandBParam(T6963_DATA_WRITE_AND_INCREMENT, tmp)
End Sub
Public Sub Initialize()
Dim i As Word
Output(RD)
Output(RW)
Output(CD)
Output(CE)
RD = 1
RW = 1
CD = 1
CE = 1
RST = 1
TRISData = $00
Data = $00
#if IsOption(GLCD_RST)
Output(RST)
RST = 0
DelayMS(100)
RST = 1
#endif
Pos.x = 0
Pos.y = 0
CommandWParam(T6963_SET_GRAPHIC_HOME_ADDRESS, GLCD_GRAPHIC_HOME)
CommandWParam(T6963_SET_GRAPHIC_AREA, GLCD_GRAPHIC_AREA)
CommandWParam(T6963_SET_TEXT_HOME_ADDRESS, GLCD_TEXT_HOME)
CommandWParam(T6963_SET_TEXT_AREA, GLCD_TEXT_AREA)
CommandWParam(T6963_SET_OFFSET_REGISTER, GLCD_OFFSET_REGISTER)
CommandWParam(T6963_SET_ADDRESS_POINTER, $00)
Command(T6963_DISPLAY_MODE Or T6963_GRAPHIC_DISPLAY_ON Or T6963_TEXT_DISPLAY_ON)
// Or T6963_CURSOR_DISPLAY_ON Or T6963_CURSOR_BLINK_ON
'Command(T6963_DISPLAY_MODE Or T6963_GRAPHIC_DISPLAY_ON )
Command(T6963_MODE_SET Or 0)
ClearGraphic()
ClearText()
End Sub
Initialize()
=]
!!Important Note:
The T6963c module contains a sub named xDelay().
=code [=
Sub xDelay()
'DelayUS(1)
ASM
Nop
Nop
Nop
End ASM
End Sub
=]
This sub introduces needed delays for the T6963c hardware driver. For my own hardware driver (display bought from MikroE shop), I needed for 1 NOP only at 20MHz clock. Feel free to add additional NOP if needed. For very slow displays, and high PIC clock frequencies, you can completely remove the NOP and replace it with DelayUS(nn) with needed nn delay value.
=code [=
{
*************************************************************************
* Name : T6963c.BAS *
* Author : Ahmed Lazreg ([email protected]) *
* http://www.pocketmt.com *
* Notice : Copyright (c) 2006 Pocket MicroTechnics *
* : All Rights Reserved *
* Date : 01/03/2008 *
* Version : 1.0 *
* Modified: *
* Notes : This module handles Toshiba T6963c GLCD drivera *
* *
*************************************************************************
}
Module T6963c
#define GLCD_PIXEL_08
#define GLCD_COLOR_01
#define GLCD_XY_16
Include "Graphics.bas"
Include "system.bas"
Include "utils.bas"
#option GLCD_DATA = PORTD // data port
#option GLCD_CE = PORTC.3 // chip Enable
#option GLCD_RD = PORTC.5 // RD pin
#option GLCD_RW = PORTC.4 // RW pin
#option GLCD_CD = PORTC.6 // Command/Data High=Cmd , Low=Data
#option GLCD_RST = PORTC.7 // reset pin
#option GLCD_ASPECT_RATIO = 100 // aspect ratio, smaller number will squeeze y for GLCD circles and box
#option GLCD_INIT_DELAY = 100 // initialisation delay (ms)
// validate data port...
#if IsOption(GLCD_DATA)
#if Not IsValidPort(GLCD_DATA)
#error GLCD_DATA, "Invalid option. DATA must be a valid port name."
#endif
#ifdef GLCD_DATA@ Then
#error GLCD_DATA@, "Invalid option. DATA port cannot be a single bit value."
#endif
#endif
// validate EN pin...
#if IsOption(GLCD_EN) And Not IsValidPortPin(GLCD_EN)
#error GLCD_EN, "Invalid option. EN must be a valid port pin."
#endif
// validate RD pin...
#if IsOption(GLCD_RD) And Not IsValidPortPin(GLCD_RD)
#error GLCD_RD, "Invalid option. RD must be a valid port pin."
#endif
// validate RW pin...
#if IsOption(GLCD_RW) And Not IsValidPortPin(GLCD_RW)
#error GLCD_RW, "Invalid option. RW must be a valid port pin."
#endif
// validate CD pin...
#if IsOption(GLCD_CD) And Not IsValidPortPin(GLCD_CD)
#error GLCD_CD, "Invalid option. CD must be a valid port pin."
#endif
// validate RST pin...
#if IsOption(GLCD_RST) And Not IsValidPortPin(GLCD_RST)
#error GLCD_RST, "Invalid option. RST must be a valid port pin."
#endif
// validate initialisation delay...
#if IsOption(GLCD_INIT_DELAY)
#if Not (GLCD_INIT_DELAY in (0 to 1000))
#error GLCD_INIT_DELAY, "Invalid option. GLCD initialize delay must be between 0 and 1000 (ms)."
#endif
#endif
// now create Data TRIS...
#option _GLCD_DATA_TRIS = GetTRIS(GLCD_DATA)
Public Const
GLCDWidth = 240,
GLCDHeight = 128
Const GLCD_NUMBER_OF_LINES = GLCDHeight
Const GLCD_PIXELS_PER_LINE= GLCDWidth
Const GLCD_FONT_WIDTH = 8
Const GLCD_GRAPHIC_AREA As Word=(GLCD_PIXELS_PER_LINE / GLCD_FONT_WIDTH)
Const GLCD_TEXT_AREA As Word = (GLCD_PIXELS_PER_LINE / GLCD_FONT_WIDTH)
Const GLCD_GRAPHIC_SIZE As Word = (GLCD_GRAPHIC_AREA * GLCD_NUMBER_OF_LINES)
Const GLCD_TEXT_SIZE As Word = (GLCD_TEXT_AREA * (GLCD_NUMBER_OF_LINES/8))
Const GLCD_TEXT_HOME As Word = 0
Const GLCD_GRAPHIC_HOME As Word = (GLCD_TEXT_HOME + GLCD_TEXT_SIZE)
Const GLCD_OFFSET_REGISTER = 2
Const GLCD_EXTERNAL_CG_HOME =(GLCD_OFFSET_REGISTER << 11)
Const GLCD_EXTERNAL_CG_SIZE = $FF
Const T6963_SET_CURSOR_POINTER = $21
Const T6963_SET_OFFSET_REGISTER = $22
Const T6963_SET_ADDRESS_POINTER = $24
Const T6963_SET_TEXT_HOME_ADDRESS = $40
Const T6963_SET_TEXT_AREA = $41
Const T6963_SET_GRAPHIC_HOME_ADDRESS =$42
Const T6963_SET_GRAPHIC_AREA = $43
Const T6963_MODE_SET = $80
Const T6963_DISPLAY_MODE = $90
Const T6963_CURSOR_BLINK_ON = $01
Const T6963_CURSOR_DISPLAY_ON = $02
Const T6963_TEXT_DISPLAY_ON = $04
Const T6963_GRAPHIC_DISPLAY_ON = $08
Const T6963_CURSOR_PATTERN_SELECT = $A0
Const T6963_CURSOR_1_LINE = $00
Const T6963_CURSOR_2_LINE = $01
Const T6963_CURSOR_3_LINE = $02
Const T6963_CURSOR_4_LINE = $03
Const T6963_CURSOR_5_LINE = $04
Const T6963_CURSOR_6_LINE = $05
Const T6963_CURSOR_7_LINE = $06
Const T6963_CURSOR_8_LINE = $07
Const T6963_SET_DATA_AUTO_WRITE = $B0
Const T6963_SET_DATA_AUTO_READ = $B1
Const T6963_AUTO_RESET = $B2
Const T6963_DATA_WRITE_AND_INCREMENT = $C0
Const T6963_DATA_READ_AND_INCREMENT = $C1
Const T6963_DATA_WRITE_AND_DECREMENT = $C2
Const T6963_DATA_READ_AND_DECREMENT = $C3
Const T6963_DATA_WRITE_AND_NONVARIALBE = $C4
Const T6963_DATA_READ_AND_NONVARIABLE = $C5
Const T6963_SCREEN_PEEK = $E0
Const T6963_SCREEN_COPY = $E8
Const T6963_CD_COMMAND = 1,
T6963_CD_Data = 0
// x, y position structure...
Public Structure TPositionT6963
x As TXY
y As Byte
End Structure
// x, y position...
Public Dim
Pos As TPositionT6963
Structure T6963Status_Struct
STATUS As Byte
blink As STATUS.7
error As STATUS.6
clr As STATUS.5
dummyFiller As STATUS.4
dawrdy As STATUS.3
darrdy As STATUS.2
busy2 As STATUS.1
busy1 As STATUS.0
End Structure
Dim
Data As GLCD_DATA, // data in (PORT)
TRISData As _GLCD_DATA_TRIS, // data TRIS
CE As GLCD_CE.GLCD_CE@, // EN pin - enable (serves as a strobe) - 6800 mode
RD As GLCD_RD.GLCD_RD@, // RD pin - read when L - 8080 mode
RW As GLCD_RW.GLCD_RW@, // RW pin - read or write (0 = write, 1 = read) - 6800 mode
CD As GLCD_CD.GLCD_CD@, // CD pin - write when L - 8080 mode
RST As GLCD_RST.GLCD_RST@ // RES pin - normally RES = 1 but pull to 0 for initialization
{Sub xDelay()
Dim i As Byte
For i = 1 To 4
ASM nop End ASM
Next}
inline Sub xDelay()
'DelayUS(1)
ASM
Nop
Nop
Nop
End ASM
End Sub
Sub WaitForIdle()
Dim Timeout As Byte
Dim tmp As Byte
Timeout = $FF
TRISData = $FF // set data bus to input
CD = 1
Repeat
ClrWDT
RD = 0
CE = 0
xDelay()
ClrWDT
tmp = Data
xDelay()
CE = 1
RD = 1
Dec(Timeout)
Until ((tmp And $03)= $03) Or (Timeout = 0)
End Sub
Sub WriteByte(pDataByte As Byte, pCD As Byte)
WaitForIdle()
TRISData = $00
CD = pCD
RD = 1
Data = pDataByte
xDelay()
RW = 0
CE = 0
xDelay()
CE = 1
RW = 1
End Sub
Sub SetData(pData As Byte)
WriteByte(pData, T6963_CD_Data)
End Sub
Function ReadData() As Byte
Dim tmp As Byte
WaitForIdle()
TRISData = $FF
CD = 0
RD = 0
CE = 0
xDelay()
result = Data
xDelay()
CE = 1
RD = 1
CD = 1
End Function
Sub Command(pCmd As Byte)
WriteByte(pCmd, T6963_CD_COMMAND)
End Sub
Sub CommandBParam(pCmd As Byte, pParam As Byte)
SetData(pParam)
Command(pCmd)
End Sub
Sub CommandWParam(pCmd As Byte, pParam As Word)
SetData(pParam.Byte0)
SetData(pParam.Byte1)
Command(pCmd)
End Sub
Sub FillMemRegion(pBaseAddr As Word, pSize As Word, pData As Byte = $00)
Dim i As Word
CommandWParam(T6963_SET_ADDRESS_POINTER, pBaseAddr)
For i = 0 To pSize-1
CommandBParam(T6963_DATA_WRITE_AND_INCREMENT, pData)
Next
End Sub
Public Sub ClearGraphic(pBytePattern As Byte = $00)
FillMemRegion(GLCD_GRAPHIC_HOME, GLCD_GRAPHIC_SIZE, pBytePattern)
End Sub
Public Sub ClearText(pChar As Byte = $00)
FillMemRegion(GLCD_TEXT_HOME, GLCD_TEXT_SIZE, pChar)
End Sub
Sub ClearCG(pChar As Byte = $00)
FillMemRegion(GLCD_EXTERNAL_CG_HOME, GLCD_EXTERNAL_CG_SIZE, pChar)
End Sub
Public Sub T6963WriteChar(pChar As Byte)
CommandBParam(T6963_DATA_WRITE_AND_INCREMENT, pChar-32)
End Sub
Public Sub T6963WriteStr(pStr As String)
FSR0 = @pStr
While INDF0 <> 0
T6963WriteChar(POSTINC0)
Wend
End Sub
Public Sub GoToXY(pX As Byte, pY As Byte)
Dim addr As Word
addr = GLCD_TEXT_HOME + pX + (GLCD_TEXT_AREA * pY)
CommandWParam(T6963_SET_ADDRESS_POINTER, addr)
End Sub
Public Sub Cls()
ClearGraphic()
ClearText()
End Sub
Public Sub SetPixel(pX, pY As TXY)
Dim tmp As Byte
Dim addr As Word
addr = GLCD_GRAPHIC_HOME + (pX / GLCD_FONT_WIDTH) + (GLCD_GRAPHIC_AREA * pY)
CommandWParam(T6963_SET_ADDRESS_POINTER, addr)
Command(T6963_DATA_READ_AND_NONVARIABLE)
tmp = ReadData()
If Pen.Color = 0 Then
tmp = tmp And (Not (1 << (GLCD_FONT_WIDTH - 1 - (pX Mod GLCD_FONT_WIDTH))))
Else
tmp = tmp Or (1 << (GLCD_FONT_WIDTH - 1 - (pX Mod GLCD_FONT_WIDTH)))
EndIf
CommandBParam(T6963_DATA_WRITE_AND_INCREMENT, tmp)
End Sub
Public Sub Initialize()
Dim i As Word
Output(RD)
Output(RW)
Output(CD)
Output(CE)
RD = 1
RW = 1
CD = 1
CE = 1
RST = 1
TRISData = $00
Data = $00
#if IsOption(GLCD_RST)
Output(RST)
RST = 0
DelayMS(100)
RST = 1
#endif
Pos.x = 0
Pos.y = 0
CommandWParam(T6963_SET_GRAPHIC_HOME_ADDRESS, GLCD_GRAPHIC_HOME)
CommandWParam(T6963_SET_GRAPHIC_AREA, GLCD_GRAPHIC_AREA)
CommandWParam(T6963_SET_TEXT_HOME_ADDRESS, GLCD_TEXT_HOME)
CommandWParam(T6963_SET_TEXT_AREA, GLCD_TEXT_AREA)
CommandWParam(T6963_SET_OFFSET_REGISTER, GLCD_OFFSET_REGISTER)
CommandWParam(T6963_SET_ADDRESS_POINTER, $00)
Command(T6963_DISPLAY_MODE Or T6963_GRAPHIC_DISPLAY_ON Or T6963_TEXT_DISPLAY_ON)
// Or T6963_CURSOR_DISPLAY_ON Or T6963_CURSOR_BLINK_ON
'Command(T6963_DISPLAY_MODE Or T6963_GRAPHIC_DISPLAY_ON )
Command(T6963_MODE_SET Or 0)
ClearGraphic()
ClearText()
End Sub
Initialize()
=]
Changed lines 1-95 from:
to:
Hello,
this is a pre-version of a Toshiba T6963c GLCD driver module.
'''What's not handled:'''
- Text mode of the T6963c hardware driver is not handled (in this preversion)
- this module does not take advantage of the large external RAM associated with T6963c chip to provide multipaging (full version provide this).
All these points are already implemented and will be provided in the full version (under test and will replace this one soon).
With actual pre-version, all Swordfish GLCD graphics primitives and fonts are rendered correctly.
I hope you can find this helpfull.
'''For any comment, or feedback (or bug report), please post to Swordfish Forum'''.
!!!VERY IMPORTANT NOTICE concerning Swordfish GLCD module:
In order to integrate the T6963c module in Swordfish Basic GLCD library, the GLCD.BAS file (\Library\GLCD\glcd.bas) has been modified. This modification is mandatory to register the T6963c driver.
'''The modified version of the GLCD.BAS module is also published at the END of this article.'''
!!!Example program
=code [=
{
*************************************************************************
* Name : Test_T6963c.BAS *
* Author : Ahmed Lazreg ([email protected]) *
* http://www.pocketmt.com *
* Notice : Copyright (c) 2006 Pocket MicroTechnics *
* : All Rights Reserved *
* Date : 01/03/2008 *
* Version : 1.0 *
* Modified: *
* *
*************************************************************************
}
Program Test_T6963c
Device = 18F452
Clock = 20
#option GLCD_MODEL = T6963c '<<<********* Select Toshiba driver
#option GLCD_DATA = PORTD // data port
#option GLCD_CE = PORTC.3 // chip Enable
#option GLCD_RD = PORTC.5 // RD pin
#option GLCD_RW = PORTC.4 // RW pin
#option GLCD_CD = PORTC.6 // Command/Data High=Cmd , Low=Data
#option GLCD_RST = PORTC.7 // reset pin
Include "utils.bas"
Include "Graphics.bas"
Include "GLCD.bas"
Include "FixedFont.bas"
Include "Arial.bas"
Include "Garamond.bas"
Include "Tahoma.bas"
Include "Verdana.bas"
Include "Times.bas"
Include "SimSunFont.bas"
SetAllDigital()
GLCD.Cls
GLCD.WriteAt(4,5,"System Font")
GLCD.SetFont(ArialBold)
GLCD.WriteAt(4,11,"Arial Font")
GLCD.SetFont(GaramondBold)
GLCD.WriteAt(4,20,"Garamond Font")
GLCD.SetFont(TahomaBold)
GLCD.WriteAt(4,30,"Tahoma Font")
GLCD.SetFont(VerdanaBold)
GLCD.WriteAt(4,40,"Verdana Font")
GLCD.SetFont(TimesNewRomanBold)
GLCD.WriteAt(4,50,"Times New Roman")
GLCD.WriteAt(4,68,"Full UNICODE Support in")
GLCD.WriteAt(4,78,"SWordFish BASIC with")
GLCD.SetFont(TahomaBold)
GLCD.WriteAt(4,88,"GLCD Font Creator 2")
Line(160,1,200,40)
Circle(200,60,38)
Rectangle(160,10,220,80)
=]
this is a pre-version of a Toshiba T6963c GLCD driver module.
'''What's not handled:'''
- Text mode of the T6963c hardware driver is not handled (in this preversion)
- this module does not take advantage of the large external RAM associated with T6963c chip to provide multipaging (full version provide this).
All these points are already implemented and will be provided in the full version (under test and will replace this one soon).
With actual pre-version, all Swordfish GLCD graphics primitives and fonts are rendered correctly.
I hope you can find this helpfull.
'''For any comment, or feedback (or bug report), please post to Swordfish Forum'''.
!!!VERY IMPORTANT NOTICE concerning Swordfish GLCD module:
In order to integrate the T6963c module in Swordfish Basic GLCD library, the GLCD.BAS file (\Library\GLCD\glcd.bas) has been modified. This modification is mandatory to register the T6963c driver.
'''The modified version of the GLCD.BAS module is also published at the END of this article.'''
!!!Example program
=code [=
{
*************************************************************************
* Name : Test_T6963c.BAS *
* Author : Ahmed Lazreg ([email protected]) *
* http://www.pocketmt.com *
* Notice : Copyright (c) 2006 Pocket MicroTechnics *
* : All Rights Reserved *
* Date : 01/03/2008 *
* Version : 1.0 *
* Modified: *
* *
*************************************************************************
}
Program Test_T6963c
Device = 18F452
Clock = 20
#option GLCD_MODEL = T6963c '<<<********* Select Toshiba driver
#option GLCD_DATA = PORTD // data port
#option GLCD_CE = PORTC.3 // chip Enable
#option GLCD_RD = PORTC.5 // RD pin
#option GLCD_RW = PORTC.4 // RW pin
#option GLCD_CD = PORTC.6 // Command/Data High=Cmd , Low=Data
#option GLCD_RST = PORTC.7 // reset pin
Include "utils.bas"
Include "Graphics.bas"
Include "GLCD.bas"
Include "FixedFont.bas"
Include "Arial.bas"
Include "Garamond.bas"
Include "Tahoma.bas"
Include "Verdana.bas"
Include "Times.bas"
Include "SimSunFont.bas"
SetAllDigital()
GLCD.Cls
GLCD.WriteAt(4,5,"System Font")
GLCD.SetFont(ArialBold)
GLCD.WriteAt(4,11,"Arial Font")
GLCD.SetFont(GaramondBold)
GLCD.WriteAt(4,20,"Garamond Font")
GLCD.SetFont(TahomaBold)
GLCD.WriteAt(4,30,"Tahoma Font")
GLCD.SetFont(VerdanaBold)
GLCD.WriteAt(4,40,"Verdana Font")
GLCD.SetFont(TimesNewRomanBold)
GLCD.WriteAt(4,50,"Times New Roman")
GLCD.WriteAt(4,68,"Full UNICODE Support in")
GLCD.WriteAt(4,78,"SWordFish BASIC with")
GLCD.SetFont(TahomaBold)
GLCD.WriteAt(4,88,"GLCD Font Creator 2")
Line(160,1,200,40)
Circle(200,60,38)
Rectangle(160,10,220,80)
=]