WO12864C2-TFH# Доброго всем дня. Пытаюсь запустить данный индикатор. Пока безрезультатно.
При подаче питания кратковременно выводится мусор в виде горизонтальных и вертикальных палок и дальше пусто...
Схема подключения - предложенная Winstar, код - оттуда же.
Интерфейс - параллельный, 6800.
Ну ткните, пожалуйста, носом, где я накосячил!!!
#include "LPC17xx.H" // LPC1768 definitions
// Индикатор WO12864C2-TFH
// параллельный интерфейс 6800 (P/S=1, C86=1)
// Шина индикатора
//#define PIN_D0 0x00040000 // Шина данных индикатора P1.18-P1.25
//#define PIN_D7 0x02000000 //
#define line_datalcd 18 //шина данных начинается с 18-й линии
//Выводы управления WO12864C2-TFH()
#define PIN_RST 0x00000001 // 0.0 Сброс
#define PIN_CS1 0x00000002 // 0.1 Выбор кристалла
#define PIN_A0 0x20000000 // 1.29
#define PIN_WR 0x10000000 // 1.28
#define PIN_RD 0x08000000 // 1.27
#define RESET(X) ((X)? (GPIO0 -> FIOSET = PIN_RST):(GPIO0 -> FIOCLR=PIN_RST));
#define CS1(X) ((X)? (GPIO0 -> FIOSET = PIN_CS1):(GPIO0 -> FIOCLR=PIN_CS1));
#define A0(X) ((X)? (GPIO1 -> FIOSET = PIN_A0):(GPIO1 -> FIOCLR=PIN_A0));
#define WR(X) ((X)? (GPIO1 -> FIOSET = PIN_WR):(GPIO1 -> FIOCLR=PIN_WR));
#define RD(X) ((X)? (GPIO1 -> FIOSET = PIN_RD):(GPIO1 -> FIOCLR=PIN_RD));
#define LCD_COLUM_SET_H 0x10
#define LCD_COLUM_SET_L 0x00
int main (void)
//#############################################################################
//#############################################################################
//#############################################################################
{
SystemInit();
TargetInit();
Display_Init(); //ST7565P init
LCD_Clear(); // Заливка черным экрана
while(1)
{
//......
}
}
//#####################################################################################
// Инициализация индикатора
//#####################################################################################
void Display_Init(void)
{
// параллельный интерфейс 6800
// P/S=1, C86=1
CS1(0) // Разрешаем работу с ST7565
BusOUT(); // Шина на вывод
SetBus(0x00); // Выставили нули на шине
RESET(0)
delay_ms(50);
RESET(1)
delay_ms(50);
RD(1) WR(0)
// Power Controller Set (Booster circuit | Voltage regulator circuit | Voltage follower circuit)
Write_Command(0x2F); // 00101111 - Все включено(1)
// Booster Ratio Select Mode Set
// + Register Set - устанавливаем 4x
Write_Command(0xF8); // 11111000
Write_Command(0x00);// младшие два нуля - 2x,3x,4x
// LCD Bias Set
Write_Command(0xA2);//10100010 - 1,9 bias
//The Electronic Volume Mode Set
Write_Command(0x81); //10000001
// Electronic Volume Register Set
Write_Command(0x24); //00100100 - Уровень36 из 64 возможных
Write_Command(0x40); // 01000000(0x40) Начинаем с нулевой линии
Write_Command(0xAF); // Включаем панель
}// End
//#####################################################################################
//#####################################################################################
// Вывод команды на индикатор
//#####################################################################################
void Write_Command(unsigned char code)
{
unsigned char SCH=8,tic=0;
BusOUT(); // Шина на вывод
RD(1) WR(0)
A0(0) // Идет команда
SetBus(code); // Выставили данные на шине
RD(1) // Строб E
delay_us(20);
RD(0)
}//End
//#####################################################################################
//#####################################################################################
//Вывод данных на индикатор
//#####################################################################################
void Write_Data(unsigned char code)
{
unsigned char SCH=8,tic=0;
BusOUT(); // Шина на вывод
RD(1) WR(0)
A0(1) // Идут данные
SetBus(code); // Выставили данные на шине
RD(1) // Строб E
delay_us(20);
RD(0)
}//End
//#####################################################################################
//#####################################################################################
// Очистка страниц LCD
//#####################################################################################
void LCD_Clear(void)
{
unsigned char i,j;
BusOUT();// Шина на вывод
for(i=0; i<9; i++) //clear page 0~8
{
Write_Command(0xB0+i); //set page
Write_Command(LCD_COLUM_SET_L); //set column
Write_Command(LCD_COLUM_SET_H); //set column
for(j=0; j<130; j++) //clear all columns upto 130
{
Write_Data(0xFF); // Заливаем экран
}
}
}
//#####################################################################################
//#####################################################################################
void BusOUT(void)// Шина данных индикатора на вывод
//#####################################################################################
{
GPIO1 -> FIODIR |= (0xFF << line_datalcd);
}//End
//#####################################################################################
//#####################################################################################
void SetBus(unsigned char _data) //Установка сигналов данных на шине данных индикатора
//#####################################################################################
{
unsigned long dta,dta1;
// Шина данных начинается с 18-й линии (line_datalcd=18)
// Порт шины данных - GPIO1
BusOUT();// Шина на вывод
dta = _data;
dta1 = _data ^ 255;
dta = dta << line_datalcd;
dta1 = dta1 << line_datalcd;
if(_data & 0x40) dta |= 0x01000000;
else dta1 |= 0x01000000;
GPIO1 -> FIOSET = dta;
GPIO1 -> FIOCLR = dta1;
}//End
//#####################################################################################
-
- 1) запись должна идти по восходящему фронту WR , DVV(106 знак., 06.08.2015 20:46)
- Установлен параллельный интерфейс 6800(P/S=1, C86=1) Andrei_S(92 знак., 06.08.2015 22:30)
- Едрить матрить! Тебе деньги за что платють? - _basile(06.08.2015 12:58, )
- Тот неловкий момент, когда в форуме присутствует начальник? :-))) - SciFi(06.08.2015 13:02)
- видимо, за точку с запятой не платють - экономит. От одного этого крышу сносит :) - VL(06.08.2015 13:01, )
- PROдефайнено ж - KLIM83(08.08.2015 21:11)
- 1) запись должна идти по восходящему фронту WR , DVV(106 знак., 06.08.2015 20:46)