Kód: Egész kijelölése
/*
* glcd_t6963c.c
*
* stm32f4_discovery Board to:
* PQG2412A SERIES (240 * 128 DOTS) * Graphic LCD_T6963C
*
* http://www.lcd-module.de/eng/pdf/zubehoer/t6963.pdf
*
* Created on: Aug 26, 2012
* Author: kapu48. kapu48@gmail(dot)com
*/
/* Includes ------------------------------------------------------------------*/
//#include "stm32f4_discovery.h"
#include "stm32f4xx.h"
#include "glcd_t6963c.h"
// #define GLCD_CHR_MODE8
/* GLCD constant ---------------------------------------------------------*/
const uint16_t glcd_dbp_mask = GLCD_DBP_MASK; //(uint16_t)(0x00FF << GLCD_DBN) // Port Data Byte Mask
const uint16_t glcd_dbp_extmask = GLCD_DBP_EXTMASK; //(uint16_t)(0xFFFF^GLCD_DBP_MASK) // Data EXT Byte Mask
const uint16_t glcd_controlp_mask = GLCD_CONTROLP_MASK; //(uint16_t)(0x003F << 6) // Control Mask (GPIO_Pin_6 ->)
/* pixel level bit masks for display */
/* this array is setup to map the order */
/* of bits in a byte to the vertical order */
/* of bits at the LCD controller */
const uint8_t glcd_bytemask_array[8] = {0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
/* GLCD variables ------------------------------------------------------------ */
int erorcode = 0;
int ichr;
uint8_t glcderor = 0;
uint16_t glcdaddress = 0;
uint8_t glcdbits = 0;
uint8_t glcdmode = 0;
uint8_t display_mode= 0; // Tároljuk Az aktuállis display_mode sorszám
uint16_t glcd_moderegiszter; // Tároljuk Az aktuállis Mode Regiszter értékét
uint16_t glcd_setregiszter; // Tároljuk Az aktuállis Set Regiszter értékét
uint16_t ui16temp =0; // uint16 temporary register
/* GLCD Text character generator variables -------------------------------------------------------- */
uint16_t text_ram_home = GLCD_TEXT_RAM_HOME;
uint16_t text_aktivram_page = GLCD_TEXT_RAM_HOME;
uint16_t text_address_pointer = GLCD_TEXT_RAM_HOME;
uint16_t cgram_home = GLCD_CG_ROM_OFFSET0;
uint16_t offset_register = 0; // DATA, 0x00H
uint16_t address_pointer = 0; // LOW ADDRES, HIGH ADDRES
uint16_t visible_textpage = GLCD_TEXT_RAMPAGE8_HOME0; /* selected visible text page */
uint16_t write_read_textpage = GLCD_TEXT_RAMPAGE8_HOME0; /* selected write |read text page */
uint8_t txtchr_pointerx = 0; /* Text Write/Read character pointer X */
uint16_t txtchr_pointery = 0; /* Text Write/Read character pointer Y */
uint8_t cursor_pointerx = 0; /* cursor pointer X */
uint8_t cursor_pointery = 0; /* cursor pointer Y */
uint16_t cursor_pointer_addr = 0; // X ADDRES, Y ADDRES
uint8_t activated_cursor_pointer = 0; /* No Cursor = 0, visible cursor = 1 */
uint8_t auto_cur_aktiv = 0; /* cursor does not move = 0, cursor moves = 1 */
uint8_t cursor_aktiv = 0; /* Aktuális cursor állapot */
/* * GLCD Graphic mode variables -------------------------------------------------------- */
uint16_t graphic_aktivram_page = GLCD_GRAPHIC_RAMPAGE8_HOME0;
uint16_t visible_graphicpage = GLCD_GRAPHIC_RAMPAGE8_HOME0; /* selected visible Graphic page */
uint16_t write_read_graphicpage = GLCD_GRAPHIC_RAMPAGE8_HOME0; /* selected write |read Graphic page */
uint8_t graphic_pointerx = 0; /* Text Write/Read Graphic pointer X */
uint16_t graphic_pointery = 0; /* Text Write/Read Graphic pointer Y */
#ifdef GLCD_CHR_MODE6 // Setup GLCD CHR columns 6 Dots Mode
/* the LCD display image memory */
/* buffer arranged so page memory is sequential in RAM */
/** GLCD Character font Horizontal dots 6 **/
const uint8_t glcd_chr_mode = 6; // Character horizontal mode 6 Dots
uint8_t l_display_array[GLCD_COLUMNS_6DOTS][GLCD_VERTICAL_DOTS]; // 40 * 128 = 5120 Bytes
const uint8_t glcd_columns = GLCD_COLUMNS_6DOTS; // Horizontal 30 CHR
uint16_t glcd_text_ram_page_area = GLCD_TEXT_RAMPAGE6_AREA; // TEXT Page 480 CHR
uint16_t glcd_text_rampage_home = GLCD_TEXT_RAMPAGE6_HOME0;
// GLCD Graphic mode variables
uint16_t glcd_graphic_ram_page_area = GLCD_GRAPHIC_RAMPAGE6_AREA; // 3840Byte 0xF00
uint16_t glcd_graphics_page_home = GLCD_GRAPHIC_RAMPAGE6_HOME0;
// Text columns defined
uint8_t glcd_mode = GLCD_CHR_HORIZONTAL_6DOTS; // Display Character format Line/ Columns
#else // Setup GLCD CHR columns 8 Dots Mode
/* the LCD display image memory */
/** GLCD Character font Horizontal dots 8 **/
const uint8_t glcd_chr_mode = 8; // Character horizontal mode 8 Dots
// Text columns defined
// uint8_t glcd_mode = GLCD_CHR_HORIZONTAL_8DOTS; // Display Character format Line/ Columns
/* buffer arranged so page memory is sequential in RAM */
const uint8_t glcd_columns = GLCD_COLUMNS_8DOTS; // Horizontal 30 CHR
uint8_t l_display_array[GLCD_COLUMNS_8DOTS][GLCD_VERTICAL_DOTS]; // 30 * 128 = 3840 Bytes
uint16_t glcd_text_ram_page_area = GLCD_TEXT_RAMPAGE8_AREA; // TEXT Page 480 CHR
uint16_t glcd_text_rampage_home = GLCD_TEXT_RAMPAGE8_HOME0;
// GLCD Graphic mode variables
uint16_t glcd_graphic_ram_page_area = GLCD_GRAPHIC_RAMPAGE8_AREA; // 3840Byte 0xF00
uint16_t glcd_graphics_page_home = GLCD_GRAPHIC_RAMPAGE8_HOME0;
uint16_t graphic_address_pointer = GLCD_GRAPHIC_RAMPAGE8_HOME0;
uint16_t graphic_home_address = GLCD_GRAPHIC_RAMPAGE8_HOME0; // Low address, High address
#endif
/*..................................................................................................*/
/******************* GLCD Initial Setup ******************************/
uint8_t GLCD_INIT(void){
/* GLCD Control PORT Configure output push pull mode */
GPIO_GLCDCStructure.GPIO_Pin = glcd_controlp_mask; //(GLCD_WR | GLCD_RD | GLCD_CE | GLCD_CD | GLCD_RST | GLCD_FS);
GPIO_GLCDCStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_GLCDCStructure.GPIO_OType = GPIO_OType_PP;
GPIO_GLCDCStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_GLCDCStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GLCD_CONTROL_PORT, &GPIO_GLCDCStructure);
// glcderor = 0; // Eror Code
// cursor_pointer_addr = 0;
// text_address_pointer = GLCD_TEXT_RAM_HOME; // 00
// GLCD Text character generator variables --------------------------------------------------------
//
// graphic_address_pointer = GLCD_GRAPHIC_RAM_HOME; // 8192 0x2000
/* all selected as outputs */
GPIO_SetBits(GLCD_CONTROL_PORT , GLCD_CE | GLCD_WR | GLCD_RD | GLCD_CD | GLCD_RST); // ChipEnable high
/* GLCD ADAT PORT Configure INput */
GLCD_SetDataPortIN(); //
/* out off font select Pin */
if (glcd_chr_mode == 8) {
GPIO_ResetBits(GLCD_CONTROL_PORT , GLCD_FS); // font select 0 for 8*8
}else{
GPIO_SetBits(GLCD_CONTROL_PORT , GLCD_FS); // font select 1 for 6*8
}
Delay1NS(20); // 20ns
/* reset the LCD controller chip */
GPIO_ResetBits(GLCD_CONTROL_PORT , GLCD_RST); // reset low
Delay1MS(100); // 100ms
GPIO_SetBits(GLCD_CONTROL_PORT , GLCD_RST); // reset high
Delay1MS(50); // 50ms
/* program the controller mode of operation to graphics only mode */
/* home address text ram.upperleft corner 0x0000, */
// GLCD_WriteData2(GLCD_TEXT_RAM_HOME, T6963CMD_SET_TEXT_HOME_ADDRESS); // 0x40 home address text ram.upperleft corner 0x0000, 0
/* GLCD OK? */
/* Set OFFSET_REGISTER 0x0000, */
GLCD_WriteData2(GLCD_CG_ROM_OFFSET0, T6963CMD_SET_OFFSET_REGISTER); // 0x22 Set OFFSET_REGISTER 0x0000, 2
if (!glcderor){
/* set number of text characters on row @8 bits */
GLCD_WriteData2((glcd_columns), T6963CMD_SET_TEXT_AREA); // 0x41 Text linewidth graphic (characters per line)
/* set graphics start */
GLCD_WriteData2(GLCD_GRAPHIC_RAM_HOME, T6963CMD_SET_GRAPHIC_HOME_ADDRESS); // 0x42 (0x2000)
/* set number of bytes in horz raster */
GLCD_WriteData2(glcd_graphic_ram_page_area, T6963CMD_SET_GRAPHIC_AREA); // 0x43
/* text, graph EXOR mode */
// GLCD_WriteC_D(T6963CMD_INT_EXORmode, GLCD_CMD, STATUSCHECK_MASK3); // 0x80 text, graph EXOR mode
// GLCD_WriteC_D(T6963CMD_INT_ANDmode, GLCD_CMD, STATUSCHECK_MASK3); // Text
/* text, graph, cursor , blink all on */
// GLCD_WriteC_D(T6963CMD_TEXTOnGRAPHICOnBlinkOn, GLCD_CMD, STATUSCHECK_MASK3); // 0x9F text, graph, cursor , blink all on
// GLCD_WriteC_D(T6963CMD_TEXTOnGRAPHICOffCursorOff, GLCD_CMD, STATUSCHECK_MASK3); // Text Be, Graphic Ki, Cursor off (ki)
GLCD_WriteC_D(T6963CMD_1_LineCursor, GLCD_CMD, STATUSCHECK_MASK3); // Cursor Line high 1
/* setup the AP to 0 */
// GLCD_WriteData2(text_address_pointer, T6963CMD_SET_ADDRESS_POINTER); // LOW ADDRES, HIGH ADDRES
/* CLEAR GLCD RAM! */
GLCD_Clear_GraphicPage(0, 1);
GLCD_Clear_TextPage(1);
GLCD_Clear_CG(GLCD_CG_RAM_HOME1);
GLCD_DisplayMode(1); // Text Be, Graphic Ki, Cursor off (ki)
GLCD_Set_CursorPointer(cursor_pointerx, cursor_pointery, 0); // Cursor Off
GLCD_CursorAktiv(0); /* Nem mozgatja a Cursort */
Text_Changing_Pages(1, 2); /* aktiv Text page: 0 visible | Write | Read */
}
return (glcderor); /* Return EROR code! (0x0F) or 0 */
}
/*..................................................................................................*/
/** Wait Status check
* Read Status - To check the Status of the T6963C controller -
* possible parameter values
* GLCD READY MASK STATUSCHECK_MASK, WRCHECK_MASK, RDCHECK_MASK
*/
void GLCD_StatusCheck(uint16_t st_checkmask){
/** Wait Status check
* Read Status - To check the Status of the T6963C controller -
* C/\D take high,
* /RD take low
* (/WR should be high)
* /CE take low
* After 150ns read the data on D0-7
* /CE take high
* The T6963C status word format is as follows:
*/
GPIO_SetBits(GLCD_CONTROL_PORT , GLCD_CD | GLCD_WR); // _set_display: command | WR high
uint16_t status;
uint16_t checktemp = 0;
GLCD_SetDataPortIN(); // Adat Port Bemenet
Delay100US(10); // Wait 20ns
GPIO_ResetBits(GLCD_CONTROL_PORT , GLCD_RD | GLCD_CE); // read low | ChipEnable low
Delay1NS(20); // Wait 40ns
do{
Delay100US(10); // Wait 20ns
status = GPIO_ReadInputData(GLCD_DATA_PORT); // Read Status
status &= st_checkmask;
if (++checktemp > 10) { // Idö tullépés miatt
glcderor = GLCD_EROR; // Hiba jelzés
Erors(glcderor);
break; // GLCD EROR! megszakittás
}
} while (status != st_checkmask);
GPIO_SetBits(GLCD_CONTROL_PORT , GLCD_RD | GLCD_CE); // Chip Disable high | RD High
}
/*..................................................................................................*/
/**
* http://www.lcd-module.de/eng/pdf/zubehoer/t6963.pdf
* MPU Interface Timing (MPU › T6963C)
*
* possible parameter values 1:
* GLCD Write Byte
* values 2:
* 0 = Data,/ 1 = Command
* values 3:
* GLCD READY check MASZK
*/
void GLCD_WriteC_D(uint8_t glcd_bytedat , uint8_t c_d, uint16_t check_maszk){
/**
* 2.3 Write Command -
* To Write a Command - The command should be set on D0 - 7 and
* C/\D taken high,
* /WR taken low
* (/RD should be high)
* /CE pulsed low for greater than 80ns
*
* 2.1 Write data -
* The data to be written should be set on D0 - 7 and
* C/\D taken low,
* /WR taken low (/RD should be high)
* /CE pulsed low for greater than 80ns
*/
GLCD_StatusCheck(check_maszk); // Varunk GLCD Kesz? jelre
// GLCD Vezerles
if (c_d){
GPIO_SetBits(GLCD_CONTROL_PORT , GLCD_CD); // ? 1 _set_display: command high
} else {
GPIO_ResetBits(GLCD_CONTROL_PORT , GLCD_CD); // ? 0 _Reset_display: data lov
}
Delay1NS(10); // Wait 20ns
GPIO_SetBits(GLCD_CONTROL_PORT , GLCD_RD); // read high
Delay1NS(10);
GPIO_ResetBits(GLCD_CONTROL_PORT , GLCD_CE); //
// Delay1NS(10); // Wait 10ns
GLCD_SetDataPortOUT(); // GLCD Adat Port kapcsolunk Kimenetre
uint16_t data = glcd_bytedat;
data <<= GLCD_DBN;
GPIO_ResetBits(GLCD_DATA_PORT,glcd_dbp_mask);
GPIO_SetBits(GLCD_DATA_PORT,data); // Ki küldi a Adatot/parancsot
Delay1NS(30); // Wait 40ns
GPIO_ResetBits(GLCD_CONTROL_PORT , GLCD_WR); // Write low Beirja GLCD-be
Delay100US(4); // Wait 400us
GPIO_SetBits(GLCD_CONTROL_PORT , GLCD_WR | GLCD_CE); // Write high | ChipDisable high
Delay1NS(10); // Wait 20ns
GLCD_SetDataPortIN(); // A vegen bemenetre valtunk
GPIO_ResetBits(GLCD_CONTROL_PORT , GLCD_CD); // ? 0 _Reset_display: data lov
}
/*..................................................................................................*/
/**
* possible parameter values 1:
* X ADDRES, Y ADDRES Bytes
* DATA, 0x00H
* LOW ADDRES, HIGH ADDRES
* Columns, 0x00
*
* parameter values 2:
* glcd_command
*/
void GLCD_WriteData2(uint16_t glcd_data2, uint8_t glcd_2cmmd){
GLCD_WriteC_D(glcd_data2, GLCD_DATA, STATUSCHECK_MASK3);
uint16_t datatemp = glcd_data2 >> 8; // H Byte >> L Byte
GLCD_WriteC_D(datatemp, GLCD_DATA, STATUSCHECK_MASK3);
GLCD_WriteC_D(glcd_2cmmd, GLCD_CMD, STATUSCHECK_MASK3);
}
/*..................................................................................................*/
/**
* possible parameter values 1:
* DATA
*
*possible parameter values 2:
* glcd_comand
*/
void GLCD_WriteData1(uint8_t glcd_data1, uint8_t glcd_cmmd){
GLCD_WriteC_D(glcd_data1, GLCD_DATA, STATUSCHECK_MASK3);
GLCD_WriteC_D(glcd_cmmd, GLCD_CMD, STATUSCHECK_MASK3);
}
/*..................................................................................................*/
/**
* possible parameter values
* Check the parameters
* STATUSCHECK_MASK data, command - read, write
* RDCHECK_MASK auto read
* WRCHECK_MASK auto write
*
*/
uint8_t GLCD_ReadData(uint16_t check_mask){
/**
* * 2.2 GLCD Read data -
* C/\D take low,
* /RD take low (/WR should be high)
* /CE take low
* After 150ns read the data on D0-7
* /CE take high
*/
assert_param(IS_GPIO_ALL_PERIPH(GLCD_DATA_PORT));
uint8_t databyte = 0;
uint16_t glcd_bitfield;
GLCD_StatusCheck(check_mask);
GPIO_SetBits(GLCD_CONTROL_PORT , GLCD_WR); // Write high
GLCD_SetDataPortIN(); // Adat Port Bemenet
GPIO_ResetBits(GLCD_CONTROL_PORT , GLCD_CD); // _set_display: command high
Delay1NS(20);
GPIO_ResetBits(GLCD_CONTROL_PORT , GLCD_RD | GLCD_CE); // read low | ChipEnable low
Delay1NS(50); // Wait 50ns
glcd_bitfield = GPIO_ReadInputData(GLCD_DATA_PORT); //->IDR;
Delay1MS(20);
GPIO_SetBits(GLCD_CONTROL_PORT , GLCD_CE | GLCD_RD); // Chip Disable high | read high
if (GLCD_DBN) {
databyte = (glcd_bitfield >> GLCD_DBN);
}else{
databyte = glcd_bitfield ;
}
return (databyte);
}
/*..................................................................................................*/
/*
* Write Character Code Text Ram Area.
* ascII: Dates (ASCII)
* set_mode: Auto Address: Set and Non variable, Or Increment, Or Decrement
*/
void GLCD_TWriteChr(uint8_t ascII, uint8_t set_mode){
uint8_t line = glcd_columns - 1;
switch (set_mode) {
case 1:
GLCD_WriteC_D((ascII -32), GLCD_DATA, STATUSCHECK_MASK3);
GLCD_WriteC_D(T6963CMD_DataWRITEAndIncrement, GLCD_CMD, STATUSCHECK_MASK3); // Increment
if ((++txtchr_pointerx) > line){ /* Text Write/Read character pointer X, Y */
txtchr_pointerx = 0;
if (txtchr_pointery < GLCD_CHR_LINES){
txtchr_pointery++;
}
}
if (activated_cursor_pointer){ // ? Auto move Cursor pointer
GLCD_CursorIncr();
}
break;
case 2:
GLCD_WriteC_D((ascII -32), GLCD_DATA, STATUSCHECK_MASK3);
GLCD_WriteC_D(T6963CMD_DataWRITEAndDecrement, GLCD_CMD, STATUSCHECK_MASK3); // Decrement
if (txtchr_pointerx > 0){ /* Text Write/Read character pointer X, Y */
txtchr_pointerx--;
}else{
txtchr_pointerx = glcd_columns - 1;
if (txtchr_pointery > 0){
txtchr_pointery--;
}
}
if (activated_cursor_pointer){ // ? Auto move Cursor pointer
GLCD_CursorDecr();
}
break;
default:
GLCD_WriteC_D((ascII -32), GLCD_DATA, STATUSCHECK_MASK3);
GLCD_WriteC_D(T6963CMD_DataWRITEAndNonvariable, GLCD_CMD, STATUSCHECK_MASK3); // Nonvariable
}
}
/*..................................................................................................*/
/*
* Write String Code Text Ram Area.
* ascII: Dates (ASCII)
* set_mode: Auto Address: Set and Non variable, Or Increment, Or Decrement
*/
void GLCD_TWriteString(char *String, uint8_t set_mode){
uint8_t is = 0;
uint8_t tca = 0;
if (cursor_aktiv == 2){
tca = cursor_aktiv;
GLCD_CursorAktiv(1); // Cursor move Off
}
while (String[is]){ // Nem 0
GLCD_TWriteChr(String[is++], set_mode);
}
if (tca){ // ? Auto move Cursor pointer
GLCD_CursorAktiv(tca); // Cursor move On
GLCD_Set_CursorPointer(cursor_pointerx, cursor_pointery, 1);
}
}
/*..................................................................................................*/
/** LCD Text Goto X, Y
* Pozicionálás a Text felületen
* sets memory location to screen location x, y
* Display location: 1,1 is upper left corner;
*/
void GLCD_TGotoXY(uint8_t textx, uint8_t texty){
uint16_t location, home;
uint8_t line = glcd_columns;
if (textx > line) textx = line;
textx--; // X = 0 < 1
texty--;
home = write_read_textpage; // Az aktuális Text lap cime
location = home + (((uint16_t)texty) * line) + textx; // Cim számítás
GLCD_WriteData2(location, T6963CMD_SET_ADDRESS_POINTER);
if (activated_cursor_pointer){ // ? Kel cursor_pointer
cursor_pointerx = textx;
cursor_pointery = texty;
GLCD_Set_CursorPointer(textx, texty, 1);
}
}
/*..................................................................................................*/
/**
* Set Cursor Pointer
* possible parameter values 1:
* CURSOR_POINTER X ADDRES, Y ADDRES
* Display location: 0,0 is upper left corner;
* cursor aktivated = 1, cursor Off = 0
*/
void GLCD_Set_CursorPointer(uint8_t cx, uint8_t cy, uint8_t cur_aktivated){
cursor_pointerx = cx;
cursor_pointery = cy;
cursor_pointer_addr = (cy << 8) + cx; // X ADDRES, Y ADDRES
if (cur_aktivated){
GLCD_WriteData2(cursor_pointer_addr, T6963CMD_SET_CURSOR_POINTER);
if (!activated_cursor_pointer){
GLCD_WriteC_D(T6963CMD_TEXTOnGRAPHICOffBlinkOn, GLCD_CMD, STATUSCHECK_MASK3); // Set Text Cursor Blink On
activated_cursor_pointer = 1;
}
}else{ // Inaktive Text Cursor
if (activated_cursor_pointer){
GLCD_WriteC_D(T6963CMD_TEXTOnGRAPHICOffCursorOff, GLCD_CMD, STATUSCHECK_MASK3); // Text Be, Graphic Ki, Cursor off (ki)
activated_cursor_pointer = 0;
}
}
}
/*..................................................................................................*/
/**
* Move cursor indicator switches
* No cursor indicator: curaktiv = 0,
* Cursor On, Blink On, auto_cursor_move Off. curaktiv = 1
* Cursor On, Blink On, auto_cursor_move On. curaktiv = 2
*
*/
void GLCD_CursorAktiv(uint8_t curaktiv){
cursor_aktiv = curaktiv;
switch (curaktiv) {
case 0:
activated_cursor_pointer = 0;
glcd_moderegiszter &= 0b11111100; // Reset Text Cursor Blink Off
auto_cur_aktiv = 0; // auto_cursor_move Off.
break;
case 1:
activated_cursor_pointer = 1;
glcd_moderegiszter |= 0b00000011; // Set Text Cursor On, Blink On
auto_cur_aktiv = 0; // auto_cursor_move Off.
break;
case 2:
activated_cursor_pointer = 1;
glcd_moderegiszter |= 0b00000011; // Set Text Cursor On, Blink On
auto_cur_aktiv = 1; // auto_cursor_move On.
}
GLCD_WriteC_D(glcd_moderegiszter, GLCD_CMD, STATUSCHECK_MASK3); // Write Text Cursor Blink
}
/*..................................................................................................*/
/** written character position calculation
* Cursor Pointer and CHR Pointer Increment >>
*/
void GLCD_CursorIncr(void){
uint8_t line = glcd_columns - 1;
if ((++cursor_pointerx) > line){ /* cursor pointer X, Y */
cursor_pointerx =0;
if (cursor_pointery < GLCD_CHR_LINES){
cursor_pointery++;
}
}
cursor_pointer_addr = (cursor_pointery << 8) + cursor_pointerx; // X ADDRES, Y ADDRES
if (auto_cur_aktiv){
GLCD_WriteData2(cursor_pointer_addr, T6963CMD_SET_CURSOR_POINTER);
}
}
/*..................................................................................................*/
/** delete character position calculation
* Cursor Pointer and CHR Pointer Decrement <<
*/
void GLCD_CursorDecr(void){
if (cursor_pointerx > 0){ /* cursor pointer X, Y */
cursor_pointery--;
}else{
cursor_pointerx = glcd_columns - 1;
if (cursor_pointery > 0){
cursor_pointery--;
}
}
cursor_pointer_addr = (cursor_pointerx << 8) + cursor_pointery; // X ADDRES, Y ADDRES
if (auto_cur_aktiv){
GLCD_WriteData2(cursor_pointer_addr, T6963CMD_SET_CURSOR_POINTER);
}
}
/*..................................................................................................*/
/*
* 1 Text Page Upload > data
*/
void GLCD_Clear_TextPage(uint8_t set_page){
int i;
uint16_t address;
switch (set_page) {
case 0:
address = text_aktivram_page;
break;
case 1:
address = GLCD_TEXT_RAMPAGE8_HOME0;
break;
case 2:
address = GLCD_TEXT_RAMPAGE8_HOME1;
break;
case 3:
address = GLCD_TEXT_RAMPAGE8_HOME2;
break;
case 4:
address = GLCD_TEXT_RAMPAGE8_HOME3;
break;
case 5:
address = GLCD_TEXT_RAMPAGE8_HOME4;
break;
case 6:
address = GLCD_TEXT_RAMPAGE8_HOME5;
break;
case 7:
address = GLCD_TEXT_RAMPAGE8_HOME6;
break;
case 8:
address = GLCD_TEXT_RAMPAGE8_HOME7;
break;
default:
address = text_aktivram_page;
}
GLCD_WriteData2(address, T6963CMD_SET_ADDRESS_POINTER);
GLCD_WriteC_D(T6963CMD_SETDataAutoWRITE, GLCD_CMD, STATUSCHECK_MASK3);
for(i = 0; i < glcd_text_ram_page_area; i++){
GLCD_WriteC_D(0x00, GLCD_DATA, WRCHECK_MASK8);
}
GLCD_WriteC_D(T6963CMD_AUTORESET, GLCD_CMD, STATUSCHECK_MASK3);
}
/*..................................................................................................*/
/*
* 1 Character Ram Page Upload > data
*/
void GLCD_Clear_CG(uint16_t cg_ram_home){
int i;
GLCD_WriteData2(cg_ram_home, T6963CMD_SET_ADDRESS_POINTER);
GLCD_WriteC_D(T6963CMD_SETDataAutoWRITE, GLCD_CMD, STATUSCHECK_MASK3);
for(i = 0; i < 256 * 8; i++){
GLCD_WriteC_D(0, GLCD_DATA, WRCHECK_MASK8);
}
GLCD_WriteC_D(T6963CMD_AUTORESET, GLCD_CMD, STATUSCHECK_MASK3);
}
/*..................................................................................................*/
/**
* Data Write and Cmmd Inc/Dec Address
* possible parameter values 1:
* Write data
* values 2:
* data block size
* values 3:
* Data Write and Non variable / Data Write and add Increment / Data Write and add Decrement
*/
void GLCD_DataWriteAndIncDecNon(uint8_t glcd_dataw, uint8_t glcd_do, uint8_t glcd_cmd){
do{
GLCD_WriteC_D(glcd_dataw, GLCD_DATA, STATUSCHECK_MASK3);
GLCD_WriteC_D(glcd_cmd, GLCD_CMD, STATUSCHECK_MASK3);
}while(glcd_do--);
}
/*..................................................................................................*/
/**
* Text Lap Váltás
* @param visible Aktiv Page =0, Page number of = 1 - 8
* @param i_o : visible = 0, write and read = 1, Write and read and visible = 2
*/
void Text_Changing_Pages(uint8_t pages, uint8_t w_i_o){
#ifdef GLCD_CHR_MODE6 // Setup GLCD CHR columns 6 Dots Mode
switch (pages) { /* select text page mode 6 dots */
case 0:
text_aktivram_page = text_aktivram_page;;
break;
case 1:
text_aktivram_page = GLCD_TEXT_RAMPAGE6_HOME0;
break;
case 2:
text_aktivram_page = GLCD_TEXT_RAMPAGE6_HOME1;
break;
case 3:
text_aktivram_page = GLCD_TEXT_RAMPAGE6_HOME2;
break;
case 4:
text_aktivram_page = GLCD_TEXT_RAMPAGE6_HOME3;
break;
case 5:
text_aktivram_page = GLCD_TEXT_RAMPAGE6_HOME4;
break;
case 6:
text_aktivram_page = GLCD_TEXT_RAMPAGE6_HOME5;
break;
case 7:
text_aktivram_page = GLCD_TEXT_RAMPAGE6_HOME6;
break;
case 8:
text_aktivram_page = GLCD_TEXT_RAMPAGE6_HOME7;
break;
default: /* 0 */
text_aktivram_page = GLCD_TEXT_RAMPAGE6_HOME0;
}
#else
if (pages < 10){
switch (pages) { /* select text page mode 8 dots */
// case 0:
// text_aktivram_page = text_aktivram_page;;
// break;
case 1:
text_aktivram_page = GLCD_TEXT_RAMPAGE8_HOME0;
break;
case 2:
text_aktivram_page = GLCD_TEXT_RAMPAGE8_HOME1;
break;
case 3:
text_aktivram_page = GLCD_TEXT_RAMPAGE8_HOME2;
break;
case 4:
text_aktivram_page = GLCD_TEXT_RAMPAGE8_HOME3;
break;
case 5:
text_aktivram_page = GLCD_TEXT_RAMPAGE8_HOME4;
break;
case 6:
text_aktivram_page = GLCD_TEXT_RAMPAGE8_HOME5;
break;
case 7:
text_aktivram_page = GLCD_TEXT_RAMPAGE8_HOME6;
break;
case 8:
text_aktivram_page = GLCD_TEXT_RAMPAGE8_HOME7;
break;
default: /* 0 */
text_aktivram_page = GLCD_TEXT_RAMPAGE8_HOME0;
}
#endif
if (activated_cursor_pointer){
cursor_pointerx = 0;
cursor_pointery = 0;
GLCD_Set_CursorPointer(cursor_pointerx, cursor_pointery, 1);
cursor_pointer_addr = 0;
}
switch (w_i_o) { /* select text page mode visible, Write | Read */
case 1: /* Write | Read */
write_read_textpage = text_aktivram_page;
GLCD_SetAddressPointer(write_read_textpage);
break;
case 2: /* visible | Write | Read */
visible_textpage = text_aktivram_page;
write_read_textpage = text_aktivram_page;
GLCD_SetTextHomeAddress(visible_textpage); // home address text ram.
GLCD_SetAddressPointer(write_read_textpage);
break;
default: /* 0 visible */
visible_textpage = text_aktivram_page;
GLCD_SetTextHomeAddress(visible_textpage); // home address text ram.
}
}else{ /* Scrol 1 lines */
switch (pages) {
case 10: // 1 lines down (fel)
text_aktivram_page -= glcd_columns;
break;
case 11: // 1 lines increase (le)
text_aktivram_page += glcd_columns;
break;
}
// switch (w_i_o) { /* select text page mode visible, Write | Read */
// case 1: /* Write | Read */
// write_read_textpage = text_aktivram_page;
// GLCD_SetAddressPointer(write_read_textpage);
// break;
// default: /* visible */
visible_textpage = text_aktivram_page;
GLCD_SetTextHomeAddress(visible_textpage); // visible home address text ram.
// }
}
}
/*..................................................................................................*/
/**
* Select Display Mode
* 0 = Display Off (Ki)
*
* Internal CG ROM mode
* 1 = Text On (Be), Graphic Off (Ki), Cursor Off (Ki)
* 2 = Text On (Be), Graphic Off (Ki), Cursor On (Be), Blink On (Be)
* 3 = Text On (Be), Graphic Off (Ki), Cursor On (Be), Blink Off (Ki)
* 4 = Text On (Be), Graphic On (Be), Cursor On, (Be), Blink Off (Ki)
* 5 = Text On (Be), Graphic On (Be), Cursor Off (Ki)
* 6 = Text On (Be), Graphic On (Be), Cursor On, (Be), Blink Off (Ki)
* 7 = Text Off (Ki), Graphic On (Be), Cursor Off (Ki)
* 8 = Text On (Be), Graphic On (Be), Cursor On, (Be), Blink On (Be)
*
* SET External CG RAM mode
* 11 - 18 -"-
*/
void GLCD_DisplayMode(uint8_t dmode){
// Globális változók
display_mode = dmode; // Tároljuk Az aktuállis display_mode sorszámot
// glcd_moderegiszter // Tároljuk Az aktuállis Mode Regiszter értékét
// glcd_setregiszter // Tároljuk Az aktuállis Set Regiszter értékét
switch (dmode) {
case 0: // Display Off (Ki)
glcd_moderegiszter = T6963CMD_DISPLAY_OFF; // 10010000 Display Off (Ki)
glcd_setregiszter = T6963CMD_INT_ORmode; // 10000000 Text
break;
/* MODE SET INTERNAL CG ROM mode */
case 1:
glcd_moderegiszter = T6963CMD_TEXTOnGRAPHICOffCursorOff; // 10010100 Text On (Be), Graphic Off (Ki), Cursor off (ki)
glcd_setregiszter = T6963CMD_INT_ORmode; // 10000000 Text
activated_cursor_pointer = 0; // Cursor no moves (ki)
break;
case 2:
glcd_moderegiszter = T6963CMD_TEXTOnGRAPHICOffBlinkOn; // 10010111 Text On (Be), Graphic Off (Ki), Cursor Blink On (Be)
glcd_setregiszter = T6963CMD_INT_ORmode; // 10000000 Text
activated_cursor_pointer = 1; // Cursor moves
break;
case 3:
glcd_moderegiszter = T6963CMD_TEXTOnGRAPHICOffBlinkOff; // 10010110 Text On (Be), Graphic Off (Ki), Cursor On (be), Cur blink off (ki)
glcd_setregiszter = T6963CMD_INT_ORmode; // 10000000 Text
activated_cursor_pointer = 1; // Cursor moves
break;
/* Cursor on (be), blink off (ki) b1001XX10 */
case 4:
glcd_moderegiszter = T6963CMD_TEXTOnGRAPHICOnBlinkOff; // 10011110 Text On (Be), Graphic On (Be), Cursor on, Blink Off
glcd_setregiszter = T6963CMD_INT_TEXT_Attributemode; // 10000100 Tex Attribute mode
activated_cursor_pointer = 1; // Cursor moves
break;
case 5:
glcd_moderegiszter = T6963CMD_TEXTOnGRAPHICOnCursorOff; // 10011100 Text On (Be), Graphic On (Be), Cursor Off (ki)
glcd_setregiszter = T6963CMD_INT_EXORmode; // 10000001 Graphic EXOR Text
activated_cursor_pointer = 0; // Cursor no moves
break;
case 6:
glcd_moderegiszter = T6963CMD_TEXTOnGRAPHICOnBlinkOff; // 10011110 Text On (Be), Graphic On (Be), Cursor On, Blink Off
glcd_setregiszter = T6963CMD_INT_EXORmode; // 10000001 Graphic EXOR Text
activated_cursor_pointer = 1; // Cursor moves
/* Cursor on, blink on b1001XX11 */
break;
case 7:
glcd_moderegiszter = T6963CMD_TEXTOffGRAPHICOnCursorOff; // 10011000 Text Off (Ki), Graphic On (Be), Cursor Off (ki)
glcd_setregiszter = T6963CMD_INT_ORmode; // 10000000 Text
activated_cursor_pointer = 0; // Cursor no moves
break;
case 8:
glcd_moderegiszter = T6963CMD_TEXTOnGRAPHICOnBlinkOn; // 10011111 Text On (Be), Graphic On (Be), Cursor On, Blink On (Be)
glcd_setregiszter = T6963CMD_INT_EXORmode; // 10000001 Graphic EXOR Text
activated_cursor_pointer = 1; // Cursor moves
break;
/* MODE SET EXTERNAL CG RAM mode */
case 11:
glcd_moderegiszter = T6963CMD_TEXTOnGRAPHICOffCursorOff; // 10010100 Text Be, Graphic Ki, Cursor off (ki)
glcd_setregiszter = T6963CMD_EXT_ORmode; // 10001000 Text
activated_cursor_pointer = 0; // Cursor no moves
break;
case 12:
glcd_moderegiszter = T6963CMD_TEXTOnGRAPHICOnCursorOff; // 10011100 Text Be, Graphic Be
glcd_setregiszter = T6963CMD_EXT_TEXT_Attributemode; // 10001100 Tex Attribute mode blink
activated_cursor_pointer = 0; // Cursor no moves
break;
case 13:
glcd_moderegiszter = T6963CMD_TEXTOnGRAPHICOffBlinkOff; // 10010110 Text Be, Graphic Ki Cursor on (be), blink off (ki)
glcd_setregiszter = T6963CMD_EXT_ORmode; // 10001000 Text
activated_cursor_pointer = 1; // Cursor moves
break;
/* Cursor on (be), blink off (ki) b1001XX10 */
case 14:
glcd_moderegiszter = T6963CMD_TEXTOnGRAPHICOnBlinkOff; // 10011110 Text Be, Graphic Be
glcd_setregiszter = T6963CMD_EXT_TEXT_Attributemode; // 10001100 Tex Attribute mode
activated_cursor_pointer = 0; // Cursor no moves
break;
case 15:
glcd_moderegiszter = T6963CMD_TEXTOnGRAPHICOnCursorOff; // 10011100 Text Be, Graphic Be
glcd_setregiszter = T6963CMD_EXT_EXORmode; // 10001001 Graphic EXOR Text
activated_cursor_pointer = 0; // Cursor no moves
break;
case 16:
glcd_moderegiszter = T6963CMD_TEXTOnGRAPHICOnBlinkOff; // 10011110 Text Be, Graphic Be, Cursor On
glcd_setregiszter = T6963CMD_EXT_EXORmode; // 10001001 Graphic EXOR Text
activated_cursor_pointer = 1; // Cursor moves
/* Cursor on, blink on b1001XX11 */
break;
case 17:
glcd_moderegiszter = T6963CMD_TEXTOffGRAPHICOnCursorOff; // 10011000 Text Ki, Graphic Be
glcd_setregiszter = T6963CMD_EXT_ORmode; // 10001000 Text
activated_cursor_pointer = 0; // Cursor no moves
break;
case 18:
glcd_moderegiszter = T6963CMD_TEXTOnGRAPHICOnBlinkOn; // 10011110 Text Be, Graphic Be
glcd_setregiszter = T6963CMD_EXT_EXORmode; // 10000001 Graphic EXOR Text
activated_cursor_pointer = 1; // Cursor moves
default:
glcd_moderegiszter = T6963CMD_TEXTOnGRAPHICOffCursorOff; // 10010100 Text Be, Graphic Ki, Cursor off (ki)
glcd_setregiszter = T6963CMD_INT_ORmode; // 10000000 Text
activated_cursor_pointer = 0; // Cursor no moves
}
GLCD_WriteC_D(glcd_moderegiszter, GLCD_CMD, STATUSCHECK_MASK3); // Write Display Mode Regiszter
GLCD_WriteC_D(glcd_setregiszter, GLCD_CMD, STATUSCHECK_MASK3); // Write Mode Set Regiszter
}
/*..................................................................................................*/
/**
* Graphic Lap Váltás
* @param visible Aktiv Page =0, Page number of = 1 - 8
* @param i_o : visible = 0, write and read = 1, Write and read and visible = 2
* @param number of 1 - 5 Mode 8, number of 1 - 4 Mode 6
*/
void Graphic_Changing_Pages(uint8_t pages, uint8_t w_i_o){
#ifdef GLCD_CHR_MODE6 // Setup GLCD CHR columns 6 Dots Mode
switch (pages) { /* select GRAPHIC page mode 6 dots */
case 2:
graphic_aktivram_page = GLCD_GRAPHIC_RAMPAGE6_HOME1;
break;
case 3:
graphic_aktivram_page = GLCD_GRAPHIC_RAMPAGE6_HOME2;
break;
case 4:
graphic_aktivram_page = GLCD_GRAPHIC_RAMPAGE6_HOME3;
break;
default: /* 0 */
graphic_aktivram_page = GLCD_GRAPHIC_RAMPAGE6_HOME0;
}
#else
switch (pages) { /* select GRAPHIC page mode 8 dots */
case 2:
graphic_aktivram_page = GLCD_GRAPHIC_RAMPAGE8_HOME1;
break;
case 3:
graphic_aktivram_page = GLCD_GRAPHIC_RAMPAGE8_HOME2;
break;
case 4:
graphic_aktivram_page = GLCD_GRAPHIC_RAMPAGE8_HOME3;
break;
case 5:
graphic_aktivram_page = GLCD_GRAPHIC_RAMPAGE8_HOME4;
break;
default: /* 1 */
graphic_aktivram_page = GLCD_GRAPHIC_RAMPAGE8_HOME0;
}
#endif
switch (w_i_o) { /* select text page mode visible, Write | Read */
case 1: /* Write | Read */
write_read_graphicpage = graphic_aktivram_page;
GLCD_SetAddressPointer(write_read_graphicpage);
break;
case 2: /* visible | Write | Read */
visible_graphicpage = graphic_aktivram_page;
write_read_graphicpage = graphic_aktivram_page;
GLCD_SetGraphicHomeAddress(visible_graphicpage); // home address text ram.
GLCD_SetAddressPointer(write_read_graphicpage);
break;
default: /* 0 visible */
visible_graphicpage = graphic_aktivram_page;
GLCD_SetGraphicHomeAddress(visible_textpage); // home address text ram.
}
}
/*..................................................................................................*/
/*
* 1 Graphic Ram Page Upload > 0
*/
void GLCD_Clear_GraphicPage(uint8_t sample, uint8_t grapich_page){
int ig;
Graphic_Changing_Pages(grapich_page, 1);
GLCD_WriteC_D(T6963CMD_SETDataAutoWRITE, GLCD_CMD, STATUSCHECK_MASK3);
for(ig = 0; ig < glcd_graphic_ram_page_area; ig++){
GLCD_WriteC_D(sample, GLCD_DATA, WRCHECK_MASK8);
}
GLCD_WriteC_D(T6963CMD_AUTORESET, GLCD_CMD, STATUSCHECK_MASK3);
}
/*..................................................................................................*/
/**
* Graphic Ram Upload
* by the sources array
* destination grapich_ram_home
* size Bytes
*/
void GLCD_Upload_Graphic(uint8_t sample[], uint16_t grapich_ram_home, uint16_t size){
uint16_t tsize;
GLCD_WriteData2(grapich_ram_home, T6963CMD_SET_ADDRESS_POINTER);
GLCD_WriteC_D(T6963CMD_SETDataAutoWRITE, GLCD_CMD, STATUSCHECK_MASK3);
for(tsize = 0; tsize < size; tsize++){
GLCD_WriteC_D(sample[tsize], GLCD_DATA, WRCHECK_MASK8);
}
GLCD_WriteC_D(T6963CMD_AUTORESET, GLCD_CMD, STATUSCHECK_MASK3);
}
/*.................................................................................................. l_display_array[x][y]
* X
* Graphic square Upload (X Byte Boundary! X Byte határra!) upper left X,Y -------------------------
* | | |
* by the sources/destination array : l_display_array[x][y] | sel=0,10 | |
* destination/sources grapich_page upper left X, Y (bal felső), | | |
* destination/sources grapich_page lower right X, Y (jobb alsó) | --------|------- |
* Y | | | | |
* gpaga: destination/sources Grapich page Number |------------ | |
* | | sel = 1,11 | |
* selector: | | | |
* sel = 0,10 Start sources array[0][0], sel = 1,11 Start sources array[upper_leftX][upper_leftY] | ---------------- |
* sel < 10 : WRITE Display sel > 9 : READ Display -------------------------
* lower right X, Y */
void GLCD_Graphic_Square(uint8_t upper_leftX, uint8_t upper_leftY,\
uint8_t lower_rightX, uint8_t lower_rightY, uint8_t gpage, uint8_t sel){
// control value?
if ((upper_leftX < lower_rightX) & (lower_rightX < glcd_columns) & (upper_leftY < lower_rightY)){
uint16_t paddres;
uint8_t h;
uint8_t v;
#ifdef GLCD_CHR_MODE6 // Setup GLCD CHR columns 6 Dots Mode
switch (gpage) { /* select GRAPHIC page mode CHR 6 dots */
case 2:
paddres = GLCD_GRAPHIC_RAMPAGE6_HOME1;
break;
case 3:
paddres = GLCD_GRAPHIC_RAMPAGE6_HOME2;
break;
case 4:
paddres = GLCD_GRAPHIC_RAMPAGE6_HOME3;
break;
default: /* 0 */
paddres = GLCD_GRAPHIC_RAMPAGE6_HOME0;
}
#else
switch (gpage) { /* select GRAPHIC page mode CHR 8 dots */
case 2:
paddres = GLCD_GRAPHIC_RAMPAGE8_HOME1;
break;
case 3:
paddres = GLCD_GRAPHIC_RAMPAGE8_HOME2;
break;
case 4:
paddres = GLCD_GRAPHIC_RAMPAGE8_HOME3;
break;
case 5:
paddres = GLCD_GRAPHIC_RAMPAGE8_HOME4;
break;
default: /* 0 */
paddres = GLCD_GRAPHIC_RAMPAGE8_HOME0;
}
#endif
uint16_t i;
uint8_t j;
paddres += (upper_leftY * glcd_columns) + upper_leftX; // Start point
switch (sel){
case 0: // Start lower_rightX-Y = 0
case 10:
h = lower_rightX - upper_leftX; // Horizontal Bytes
v = lower_rightY - upper_leftY; // Vertical Lines
for (i = 0; i < v; i++){ // Y Lines
GLCD_WriteData2(paddres, T6963CMD_SET_ADDRESS_POINTER);
if (sel < 10){ // WRITE
GLCD_WriteC_D(T6963CMD_SETDataAutoWRITE, GLCD_CMD, STATUSCHECK_MASK3);
}else{ // READ
GLCD_WriteC_D(T6963CMD_SETDataAutoREAD, GLCD_CMD, STATUSCHECK_MASK3);
}
for(j = 0; j < h; j++){ // X Bytes
if (sel < 10){ // WRITE
GLCD_WriteC_D(l_display_array[j][i], GLCD_DATA, WRCHECK_MASK8);
}else{ // READ
l_display_array[j][i] = GLCD_ReadData(RDCHECK_MASK4);
}
}
GLCD_WriteC_D(T6963CMD_AUTORESET, GLCD_CMD, STATUSCHECK_MASK3);
paddres += glcd_columns;
}
break;
case 1: // Start lower_rightX-Y
case 11:
for (i = upper_leftY; i < lower_rightY; i++){ // Y Lines
GLCD_WriteData2(paddres, T6963CMD_SET_ADDRESS_POINTER);
if (sel < 10){ // WRITE
GLCD_WriteC_D(T6963CMD_SETDataAutoWRITE, GLCD_CMD, STATUSCHECK_MASK3);
}else{ // READ
GLCD_WriteC_D(T6963CMD_SETDataAutoREAD, GLCD_CMD, STATUSCHECK_MASK3);
}
for(j = upper_leftX; j < lower_rightX; j++){ // X Bytes
if (sel < 10){ // WRITE
GLCD_WriteC_D(l_display_array[j][i], GLCD_DATA, WRCHECK_MASK8);
}else{ // READ
l_display_array[j][i] = GLCD_ReadData(RDCHECK_MASK4);
}
}
GLCD_WriteC_D(T6963CMD_AUTORESET, GLCD_CMD, STATUSCHECK_MASK3);
paddres += glcd_columns;
}
}
}
}
/*..................................................................................................*/
/*
* GLCD DATA PORT Configure output no push pull mode
* @param
*/
void GLCD_SetDataPortOUT(){
GPIO_GLCDStructure.GPIO_Pin = glcd_dbp_mask; // (GLCD_DB0 | GLCD_DB1| GLCD_DB2| GLCD_DB3| GLCD_DB4 | GLCD_DB5| GLCD_DB6| GLCD_DB7);
GPIO_GLCDStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_GLCDStructure.GPIO_OType = GPIO_OType_PP;
GPIO_GLCDStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_GLCDStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_Init(GLCD_DATA_PORT, &GPIO_GLCDStructure); // No Set GPIO_Speed
}
/*..................................................................................................*/
/*
* GLCD DATA PORT Configure INput push pull mode
*/
void GLCD_SetDataPortIN(){
GPIO_GLCDStructure.GPIO_Pin = glcd_dbp_mask; // (GLCD_DB0 | GLCD_DB1| GLCD_DB2| GLCD_DB3| GLCD_DB4 | GLCD_DB5| GLCD_DB6| GLCD_DB7);
GPIO_GLCDStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_GLCDStructure.GPIO_OType = GPIO_OType_PP;
GPIO_GLCDStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_GLCDStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_Init(GLCD_DATA_PORT, &GPIO_GLCDStructure); // No Set GPIO_Speed
}
/*..................................................................................................*/
/**
* Set CgRam Offset Register
* possible parameter values 1: CG RAM OFFSET // DATA Byte, 0x00H Byte
*/
inline void GLCD_SetOffsetRegister(uint16_t glcd_offset){
GLCD_WriteData2(glcd_offset, T6963CMD_SET_OFFSET_REGISTER);
}
/*..................................................................................................*/
/**
* Set Address Pointer
* possible parameter values 1:
* GLCD RAM/ROM ADDRESS Low address, High address
*/
inline void GLCD_SetAddressPointer(uint16_t glcd_addressp){
GLCD_WriteData2(glcd_addressp, T6963CMD_SET_ADDRESS_POINTER);
}
/*..................................................................................................*/
/**
* Set Text RAM beginning
* possible parameter values 1: Low address, High address
*/
inline void GLCD_SetTextHomeAddress(uint16_t glcd_text_home){
GLCD_WriteData2(glcd_text_home, T6963CMD_SET_TEXT_HOME_ADDRESS);
}
/*..................................................................................................*/
/**
* Set Text RAM area
* possible parameter values 1: Columns, 00H
*/
inline void GLCD_SetTextArea(uint16_t glcd_tcolumns){
GLCD_WriteData2(glcd_tcolumns, T6963CMD_SET_TEXT_AREA);
}
/*..................................................................................................*/
/**
* Set Graphic RAM beginning
* @param possible parameter values 1: Low address, High address
*/
inline void GLCD_SetGraphicHomeAddress(uint16_t glcd_graphic_home){
GLCD_WriteData2(glcd_graphic_home, T6963CMD_SET_GRAPHIC_HOME_ADDRESS);
}
/*..................................................................................................*/
/**
* Set Graphic RAM area
* @param possible parameter values 1: Columns, 00H
*/
inline void GLCD_SetGraphicArea(uint16_t glcd_gcolumns){
GLCD_WriteData2(glcd_gcolumns, T6963CMD_SET_GRAPHIC_AREA);
}
/*..................................................................................................*/
/*
* Bit Set
* @param Graphic RAM address
* @param bits number
*/
inline void GLCD_BitSet(uint16_t glcd_address, uint8_t glcd_bits){
GLCD_SetAddressPointer(glcd_address);
GLCD_WriteC_D(T6963CMD_Bit_Set & glcd_bits, GLCD_CMD, STATUSCHECK_MASK3);
}
/*..................................................................................................*/
/*
* Bit Reset
* @param Graphic RAM address
* @param bits number
*/
inline void GLCD_BitReset(uint16_t glcd_address, uint8_t glcd_bitr){
GLCD_SetAddressPointer(glcd_address);
GLCD_WriteC_D(T6963CMD_BIT_RESET & glcd_bitr, GLCD_CMD, STATUSCHECK_MASK3);
}
/*..................................................................................................*/
/** 1 cycles~: second/11.000.000 = 91 microsecond
* @brief Delay Function.
* @param n Count: specifies the Delay time length.
* @retval None
*/
inline void Delay100US(uint32_t nCount)
{
while(nCount--){
}
}
/*..................................................................................................*/
/*
* Delay nanoseconds
* @param ns the Delay time nanosecond
*/
inline void Delay1NS(uint32_t ns)
{
uint32_t i;
while(ns--){
for(i=0;i<12;i++){}
}
}
/*..................................................................................................*/
/*
* Delay miliseconds
* @param ns the Delay time milisecond
*/
inline void Delay1MS(uint32_t ms)
{
uint32_t i;
while(ms--){
for(i=0;i<13000;i++){}
}
}
/*..................................................................................................*/
void Erors(int hiba){
uint8_t if8;
switch(hiba){
case (GLCD_EROR) : // 0x0F GLCD EROR > 10 * 4 LED Blink
// printf("LCD EROR!!!");
for (if8 = 0; if8 < 10; if8++){
GPIO_SetBits(GPIOD, GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);
Delay1MS(100);
GPIO_ResetBits(GPIOD, GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);
Delay1MS(100);
}
break;
default : // EROR > 10 * 1 LED Blink
for (if8 = 0; if8 < 10; if8++){
GPIO_SetBits(GPIOD, GPIO_Pin_12);
Delay1MS(100);
GPIO_ResetBits(GPIOD, GPIO_Pin_12);
Delay1MS(100);
}
}
}
/*..................................................................................................*/
/* END GLCD_T6963C.c */
Frisítve 2012 Szept. 6.