//***************************************************************************
//
//  Author(s)...: Pashgan    ChipEnable.Ru   
//
//  Target(s)...: любая мега
//
//  Compiler....: IAR EWA 5.11A
//
//  Description.: драйвер графического индикатора МТ12232
//
//  Data........: 16.01.10 
//
//***************************************************************************
#ifndef LCD_GRAPH_LIB_H
#define LCD_GRAPH_LIB_H

#include <ioavr.h>
#include <intrinsics.h>
#include "bits_macros.h"

//****************************************************************************
//
//  ОБЯЗАТЕЛЬНЫЕ НАСТРОЙКИ
//
//частота тактирования мк
#define F_CPU 16000000

//порт к которому подключены управляющие сигналы
#define PORT_LCD_CON PORTB
#define PIN_LCD_CON  PINB
#define DDRX_LCD_CON DDRB

//порт к которому подключена шина данных 
#define PORT_LCD_BUS PORTC  
#define PIN_LCD_BUS  PINC
#define DDRX_LCD_BUS DDRC

//выводы к которым подключены управляющие сигналы жкд
#define RES     0
#define CS      1
#define AO      2
#define RD_WR   3
#define EN      4

//*****************************************************************************
//
//  МАКРООПРЕДЕЛЕНИЯ
//
//команды
#define COM_DISPLAY_ON       0xaf               //включает жкд
#define COM_DISPLAY_OFF      0xae               //выключает жкд
#define COM_START_LINE(x)    (0xc0&(0x1f&(x)))  //определяет верхнюю строку жкд
#define COM_ADC_SELECT_OFF   0xa0               //прямое соответствие адреса и позиции
#define COM_ADC_SELECT_ON    0xa1               //обратное соответствие адреса и позиции
#define COM_STATIC_DRIVE_ON  0xa5               //статический режим управления
#define COM_STATIC_DRIVE_OFF 0xa4               //обычное управление
#define COM_DUTY_SELECT_ON   0xa9               //выбор мультиплекса
#define COM_CLEAR_RMW        0xee               //снятие флага RMW
#define COM_SELECT_RMW       0xe0               //установка флага RMW
#define COM_RESET            0xe2               //строка и страница сбрасывается в 0

//методы вывода на экран
#define MET_AND  0
#define MET_OR   1
#define MET_XOR  2

#define FILL_OFF 0  //заполнения нет
#define FILL_ON  1  //заполнение есть

//******************************************************************************
//
//  ФУНКЦИИ
//
//низкоуровневые функции
unsigned char LCDG_ReadData(void);                       //чтение байта ОЗУ. перед использованием нужно установить адрес страницы и столбца
void LCDG_SendCom(unsigned char data);                   //запись команды
void LCDG_SendData(unsigned char data);                  //запись данных

//функции инициализации
void LCDG_InitPort(void);                                //инициализация порта вводавывода
void LCDG_InitLcd(void);                                 //инициализация lcd. подает последовательноть команд для обоих контроллеров модуля 
void LCDG_ClrDisp(unsigned char x1, unsigned char x2);   //очищает дисплей от x1 до x2
#define LCDG_ClrAllDisp() LCDG_ClrDisp(0, 122)            //полная очистка дисплея

//функции знакогенератора
void LCDG_SetInv(unsigned char flag);                                                //устанавливает флаг инверсии - текст будет белым, а фон темным 
void LCDG_SendSymbol(unsigned char xPos, unsigned char yPos, unsigned char data);   //выводит один символ в знакоместо
void LCDG_SendString(unsigned char xPos, unsigned char yPos, char * string);         //выводит строку из ОЗУ
void LCDG_SendStringFl(unsigned char xPos, unsigned char yPos, char __flash * string); //выводит строку из флэш

//графические функции
void LCDG_SetMethod(unsigned char met);                                                 //устанавливает метод вывода пикселов на экран - И, ИЛИ, Искл ИЛИ
void LCDG_PutPixel(unsigned char XPos, unsigned char YPos);                              //отображает один пиксел на дисплее
void LCDG_DrawLine(unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2);  //рисует линию. нужно задать 
void LCDG_DrawCircle(unsigned char x,unsigned char y,unsigned char r);                       //рисует окружность с координатами центра (x,y) 
void LCDG_DrawRect(unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, unsigned char fill); //рисует прямоугольник. нужно задать координаты двух вершин

#endif //LCD_GRAPH_LIB_H