Электронная записная книжка |
Страница 9 из 9
Приложение А #include <at89c51xd2.h> // подключение системной библиотеки #define EN P4_0 // резервирование имени для вывода порта «Enable» ЖКИ #define RS P4_1 // резервирование имени для вывода порта «Register Select» ЖКИ #define RW P4_2 // резервирование имени для вывода порта «Read/Write» ЖКИ #define BUSY P3_7 // резервирование имени для вывода порта «D7» ЖКИ //При занятом устройстве бит D7 установлен в «1» unsigned char STATE; // переменная состояния готовности ЖКИ wait_lcd() // функция готовности дисплея к приему следующей команды { do{ EN=1; //начало передачи данных RS=0; //режим интерпретации данных на линиях D0-D7 как комманда RW=1; //режим чтения данных с ЖКИ P3=0xFF; STATE=BUSY; // копирование состояния бита D7 в переменную STATE EN=0; //окончание передачи данных } while(STATE!=0); //цикл прекращает работу когда бит D7 равен «0» RW=0; } init_lcd() // функция инициализации дисплея { EN=1; RS=0; RW=0; P3=0x38; //начальные установки ЖКИ (разрядность шины интерфейса 8-бит, //количества строк на дисплее – две, и размера символов 5×8 точек). EN=0; wait_lcd(); //ожидание готовности ЖКИ EN=1; RS=0; RW=0; P3=0x0E; //включение дисплея и отображение курсора EN=0; wait_lcd(); EN=1; RS=0; RW=0; P3=0x04; //задание режима ввода: направление перемещения курсора вправо EN=0; wait_lcd(); } clr_lcd() //функция очистки дисплея { EN=1; RS=0; RW=0; P3=0x01; // команда очистки дисплея (записывает код 0x20 (пробел) во все ячейки DDRAM) EN=0; wait_lcd(); } write_char(unsigned char *c1) //функция записи байта на дисплей { EN=1; RS=1; RW=0; P3=*c1; EN=0; wait_lcd(); } main () { int flag_simv=1; //флаг раскладки клавиатуры (англ./рус.) init_lcd(); clr_lcd(); while(1) { if(P0==0xFE && P1==0xBF && P2==0xFF) { if(flag_simv) write_char("1"); else write_char("!"); } if(P0==0xFD && P1==0xBF && P2==0xFF) { if(flag_simv) write_char("2"); else write_char("@"); } if(P0==0xFB && P1==0xBF && P2==0xFF) { if(flag_simv) write_char("3"); else write_char("#"); } if(P0==0xF7 && P1==0xBF && P2==0xFF) { if(flag_simv) write_char("4"); else write_char("$"); } if(P0==0xEF && P1==0xBF && P2==0xFF) { if(flag_simv) write_char("5"); else write_char("%"); } if(P0==0xDF && P1==0xBF && P2==0xFF) { if(flag_simv) write_char("6"); else write_char("^"); } if(P0==0xBF && P1==0xBF && P2==0xFF) { if(flag_simv) write_char("7"); else write_char("&"); } if(P0==0x7F && P1==0xBF && P2==0xFF) write_char("8"); if(P0==0xFF && P1==0xBE && P2==0xFF) { if(flag_simv) write_char("9"); else write_char("("); } if(P0==0xFF && P1==0xBD && P2==0xFF) { if(flag_simv) write_char("0"); else write_char(")"); } if(P0==0xFF && P1==0xAF && P2==0xFF) write_char("/"); if(P0==0xBF && P1==0xBF && P2==0xFF) write_char(">"); if(P0==0x7F && P1==0xBF && P2==0xFF) { if(flag_simv) write_char("<"); else write_char("|"); } if(P0==0xFF && P1==0x6F && P2==0xFF) write_char("="); if(P0==0xFF && P1==0x5F && P2==0xFF) { if(flag_simv==0) flag_simv=1; else flag_simv=0; } if(P0==0xFE && P1==0xFF && P2==0xFE) { if(flag_simv) write_char("Q"); else write_char("Й"); } if(P0==0xFD && P1==0xFF && P2==0xFE) { if(flag_simv) write_char("W"); else write_char("Ц"); } if(P0==0xFB && P1==0xFF && P2==0xFE) { if(flag_simv) write_char("E"); else write_char("У"); } if(P0==0xF7 && P1==0xFF && P2==0xFE) { if(flag_simv) write_char("R"); else write_char("К"); } if(P0==0xEF && P1==0xFF && P2==0xFE) { if(flag_simv) write_char("T"); else write_char("Е"); } if(P0==0xDF && P1==0xFF && P2==0xFE) { if(flag_simv) write_char("Y"); else write_char("Н"); } if(P0==0xBF && P1==0xFF && P2==0xFE) { if(flag_simv) write_char("U"); else write_char("Г"); } if(P0==0x7F && P1==0xFF && P2==0xFE) { if(flag_simv) write_char("I"); else write_char("Ш"); } if(P0==0xFF && P1==0xFE && P2==0xFE) { if(flag_simv) write_char("O"); else write_char("Щ"); } if(P0==0xFF && P1==0xFD && P2==0xFE) { if(flag_simv) write_char("P"); else write_char("З"); } if(P0==0xFF && P1==0xFB && P2==0xFE) { if(flag_simv) write_char("["); else write_char("Х"); } if(P0==0xFF && P1==0xF7 && P2==0xFE) write_char("+"); if(P0==0xFF && P1==0xDF && P2==0xFE) write_char(" "); if(P0==0xFE && P1==0xFF && P2==0xFD) { if(flag_simv) write_char("A"); else write_char("Ф"); } if(P0==0xFD && P1==0xFF && P2==0xFD) { if(flag_simv) write_char("S"); else write_char("Ы"); } if(P0==0xFB && P1==0xFF && P2==0xFD) { if(flag_simv) write_char("D"); else write_char("В"); } if(P0==0xF7 && P1==0xFF && P2==0xFD) { if(flag_simv) write_char("F"); else write_char("А"); } if(P0==0xEF && P1==0xFF && P2==0xFD) { if(flag_simv) write_char("G"); else write_char("П"); } if(P0==0xDF && P1==0xFF && P2==0xFD) { if(flag_simv) write_char("H"); else write_char("Р"); } if(P0==0xBF && P1==0xFF && P2==0xFD) { if(flag_simv) write_char("J"); else write_char("О"); } if(P0==0x7F && P1==0xFF && P2==0xFD) { if(flag_simv) write_char("K"); else write_char("Л"); } if(P0==0xFF && P1==0xFE && P2==0xFD) { if(flag_simv) write_char("L"); else write_char("Д"); } if(P0==0xFF && P1==0xFD && P2==0xFD) { if(flag_simv) write_char(";"); else write_char("Ж"); } if(P0==0xFF && P1==0xFB && P2==0xFD) { if(flag_simv) write_char("'"); else write_char("Э"); } if(P0==0xFF && P1==0xF7 && P2==0xFD) write_char("-"); if(P0==0xFE && P1==0xFF && P2==0xFB) { if(flag_simv) write_char("~"); else write_char("Ё"); } if(P0==0xFD && P1==0xFF && P2==0xFB) { if(flag_simv) write_char("Z"); else write_char("Я"); } if(P0==0xFB && P1==0xFF && P2==0xFB) { if(flag_simv) write_char("X"); else write_char("Ч"); } if(P0==0xF7 && P1==0xFF && P2==0xFB) { if(flag_simv) write_char("C"); else write_char("С"); } if(P0==0xEF && P1==0xFF && P2==0xFB) { if(flag_simv) write_char("V"); else write_char("М"); } if(P0==0xDF && P1==0xFF && P2==0xFB) { if(flag_simv) write_char("B"); else write_char("И"); } if(P0==0xBF && P1==0xFF && P2==0xFB) { if(flag_simv) write_char("N"); else write_char("Т"); } if(P0==0x7F && P1==0xFF && P2==0xFB) { if(flag_simv) write_char("M"); else write_char("Ь"); } if(P0==0xFF && P1==0xFE && P2==0xFB) { if(flag_simv) write_char(","); else write_char("Б"); } if(P0==0xFF && P1==0xFD && P2==0xFB) { if(flag_simv) write_char("."); else write_char("Ю"); } if(P0==0xFF && P1==0xFB && P2==0xFB) { if(flag_simv) write_char(":"); else write_char("?"); } if(P0==0xFF && P1==0xF7 && P2==0xFB) write_char("*"); } } |