ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
28 ноября
612740
Andrei_S (06.08.2015 12:22, просмотров: 4578)
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 //#####################################################################################