/* TM1622 LCD controller */ // Порты для TM1622 #define CS PORTC.3 #define WR PORTC.4 #define DAT PORTC.5 /************************ 1 бит ******************************/ void data(char b) { if (b ==1) { WR=0; DAT=1; WR=1; } else { WR=0; DAT = 0; WR=1; } delay_us(10); } /************************ Команда ******************************/ void out_cmd(unsigned char cmd) { unsigned char maska=0b10000000; CS=0; data(1); data(0); data(0); do { WR = 0; if(cmd & maska) { DAT=1; } else { DAT=0; } maska >>= 1; WR = 1; delay_us(10); } while(maska); WR = 0; DAT=0; WR = 1; CS=1; } /*********************** Вывод символа на экран *******************************/ void out_data(unsigned char addr, unsigned char symbol) { CS=0; data(1); data(0); data(1); switch (addr) { case 0: data(0);data(0);data(0);data(0);data(0);data(0); break;//0x00 // Символы case 1: data(0);data(0);data(0);data(1);data(0);data(0); break;//0x04 case 2: data(0);data(0);data(1);data(0);data(0);data(0); break;//0x08 case 3: data(0);data(0);data(1);data(1);data(0);data(0); break;//0x0C case 4: data(0);data(1);data(0);data(0);data(0);data(0); break;//0x10 case 5: data(0);data(1);data(0);data(1);data(0);data(0); break;//0x14 case 6: data(0);data(1);data(1);data(0);data(0);data(0); break;//0x18 case 7: data(0);data(1);data(1);data(1);data(0);data(0); break;//0x1C case 8: data(1);data(0);data(0);data(0);data(0);data(0); break;//0x20 case 9: data(1);data(0);data(0);data(1);data(0);data(0); break;//0x24 case 10:data(1);data(0);data(1);data(0);data(1);data(1); break;//0x2B // Точки case 11:data(1);data(0);data(1);data(0);data(0);data(1); break;//0x29 1-3 case 12:data(1);data(0);data(1);data(1);data(0);data(1); break;//0x2D } switch (symbol) { case 0: data(1);data(0);data(1);data(0); // Цифры data(0);data(0);data(1);data(1); data(1);data(0);data(1);data(0); data(0);data(0);data(1);data(1); break; case 1: data(0);data(0);data(0);data(0); data(0);data(0);data(0);data(0); data(0);data(0);data(1);data(1); data(0);data(0);data(1);data(0); break; case 2 :data(1);data(0);data(0);data(1); data(0);data(0);data(1);data(1); data(1);data(0);data(1);data(0); data(1);data(0);data(0);data(1); break; case 3: data(1);data(0);data(0);data(0); data(0);data(0);data(0);data(1); data(1);data(0);data(1);data(0); data(1);data(0);data(1);data(1); break; case 4: data(0);data(0);data(1);data(1); data(0);data(0);data(0);data(0); data(0);data(0);data(1);data(0); data(1);data(0);data(1);data(0); break; case 5: data(1);data(0);data(1);data(1); data(0);data(0);data(0);data(1); data(1);data(0);data(0);data(0); data(1);data(0);data(1);data(1); break; case 6: data(1);data(0);data(1);data(1); data(0);data(0);data(1);data(1); data(1);data(0);data(0);data(0); data(1);data(0);data(1);data(1); break; case 7: data(1);data(0);data(0);data(0); data(0);data(0);data(0);data(0); data(1);data(0);data(1);data(0); data(0);data(0);data(1);data(0); break; case 8: data(1);data(0);data(1);data(1); data(0);data(0);data(1);data(1); data(1);data(0);data(1);data(0); data(1);data(0);data(1);data(1); break; case 9: data(1);data(0);data(1);data(1); data(0);data(0);data(0);data(1); data(1);data(0);data(1);data(0); data(1);data(0);data(1);data(1); break; case 12: data(1);data(0);data(1);data(1); // Б // Кириллица data(0);data(0);data(1);data(1); data(1);data(0);data(0);data(0); data(1);data(0);data(1);data(1); break; case 14: data(1);data(0);data(1);data(0); // Г data(0);data(0);data(1);data(0); data(1);data(0);data(0);data(0); data(0);data(0);data(0);data(0); break; case 15: data(0);data(0);data(0);data(1); // Д data(0);data(0);data(1);data(0); data(1);data(1);data(1);data(0); data(1);data(0);data(1);data(0); break; case 17: data(0);data(1);data(0);data(0); // Ж data(1);data(1);data(0);data(0); data(0);data(1);data(0);data(1); data(0);data(1);data(0);data(0); break; case 18: data(1);data(0);data(0);data(0); // З data(0);data(0);data(0);data(1); data(1);data(0);data(1);data(0); data(1);data(0);data(1);data(1); break; case 19: data(0);data(0);data(1);data(0); // И data(1);data(0);data(1);data(0); data(0);data(0);data(1);data(1); data(0);data(0);data(1);data(0); break; case 21: data(0);data(0);data(0);data(0); // Л data(1);data(0);data(0);data(0); data(0);data(0);data(1);data(1); data(0);data(0);data(1);data(0); break; case 25: data(1);data(0);data(1);data(0); // П data(0);data(0);data(1);data(0); data(1);data(0);data(1);data(0); data(0);data(0);data(1);data(0); break; case 29: data(0);data(0);data(1);data(1); // У data(0);data(0);data(0);data(1); data(0);data(0);data(1);data(0); data(1);data(0);data(1);data(1); break; case 30: data(1);data(0);data(1);data(1); // Ф data(0);data(1);data(0);data(0); data(1);data(1);data(1);data(0); data(1);data(0);data(0);data(0); break; case 33: data(0);data(0);data(0);data(0); // Ц data(0);data(0);data(0);data(0); data(0);data(0);data(0);data(0); data(0);data(0);data(0);data(0); break; case 34: data(0);data(0);data(1);data(1); // Ч data(0);data(0);data(0);data(0); data(0);data(0);data(1);data(0); data(1);data(0);data(1);data(0); break; case 35: data(0);data(0);data(1);data(0); // Ш data(0);data(1);data(1);data(1); data(0);data(1);data(1);data(0); data(0);data(0);data(1);data(1); break; case 36: data(0);data(0);data(0);data(0); // Щ data(0);data(0);data(0);data(0); data(0);data(0);data(0);data(0); data(0);data(0);data(0);data(0); break; case 37: data(0);data(0);data(0);data(0); // Ъ data(0);data(0);data(0);data(0); data(0);data(0);data(0);data(0); data(0);data(0);data(0);data(0); break; case 38: data(0);data(0);data(0);data(0); // Ы data(0);data(0);data(0);data(0); data(0);data(0);data(0);data(0); data(0);data(0);data(0);data(0); break; case 39: data(0);data(0);data(1);data(1); // Ь data(0);data(0);data(1);data(1); data(0);data(0);data(0);data(0); data(1);data(0);data(1);data(1); break; case 40: data(0);data(0);data(0);data(0); // Э data(0);data(0);data(0);data(0); data(0);data(0);data(0);data(0); data(0);data(0);data(0);data(0); break; case 41: data(0);data(0);data(1);data(1); // Ю data(0);data(1);data(1);data(0); data(1);data(1);data(1);data(0); data(0);data(0);data(1);data(1); break; case 42: data(1);data(0);data(1);data(1); // Я data(1);data(0);data(0);data(0); data(1);data(0);data(1);data(0); data(1);data(0);data(1);data(0); break; case 'A':data(1);data(0);data(1);data(1); // Латинница data(0);data(0);data(1);data(0); data(1);data(0);data(1);data(0); data(1);data(0);data(1);data(0); break; case 'B':data(1);data(0);data(0);data(0); data(0);data(1);data(0);data(1); data(1);data(1);data(1);data(0); data(1);data(0);data(1);data(1); break; case 'C':data(1);data(0);data(1);data(0); data(0);data(0);data(1);data(1); data(1);data(0);data(0);data(0); data(0);data(0);data(0);data(1); break; case 'D':data(1);data(0);data(0);data(0); data(0);data(1);data(0);data(1); data(1);data(1);data(1);data(0); data(0);data(0);data(1);data(1); break; case 'E':data(1);data(0);data(1);data(1); data(0);data(0);data(1);data(1); data(1);data(0);data(0);data(0); data(1);data(0);data(0);data(1); break; case 'F':data(1);data(0);data(1);data(1); data(0);data(0);data(1);data(0); data(1);data(0);data(0);data(0); data(0);data(0);data(0);data(0); break; case 'G':data(1);data(0);data(1);data(0); data(0);data(0);data(1);data(1); data(1);data(0);data(0);data(0); data(1);data(0);data(1);data(1); break; case 'H':data(0);data(0);data(1);data(1); data(0);data(0);data(1);data(0); data(0);data(0);data(1);data(0); data(1);data(0);data(1);data(0); break; case 'I':data(1);data(0);data(0);data(0); data(0);data(1);data(0);data(1); data(1);data(1);data(0);data(0); data(0);data(0);data(0);data(1); break; case 'J':data(0);data(0);data(0);data(0); data(0);data(0);data(0);data(0); data(0);data(0);data(0);data(0); data(0);data(0);data(0);data(0); break; case 'K':data(0);data(0);data(1);data(1); data(0);data(0);data(1);data(0); data(0);data(0);data(0);data(1); data(0);data(1);data(0);data(0); break; case 'L':data(0);data(0);data(1);data(0); data(0);data(0);data(1);data(1); data(0);data(0);data(0);data(0); data(0);data(0);data(0);data(1); break; case 'M':data(0);data(1);data(1);data(0); data(0);data(0);data(1);data(0); data(0);data(0);data(1);data(1); data(0);data(0);data(1);data(0); break; case 'N':data(0);data(1);data(1);data(0); data(0);data(0);data(1);data(0); data(0);data(0);data(1);data(0); data(0);data(1);data(1);data(0); break; case 'O':data(1);data(0);data(1);data(0); data(0);data(0);data(1);data(1); data(1);data(0);data(1);data(0); data(0);data(0);data(1);data(1); break; case 'P':data(1);data(0);data(1);data(1); data(0);data(0);data(1);data(0); data(1);data(0);data(1);data(0); data(1);data(0);data(0);data(0); break; case 'R':data(1);data(0);data(1);data(1); data(0);data(0);data(1);data(0); data(1);data(0);data(1);data(0); data(1);data(1);data(0);data(0); break; case 'S':data(1);data(0);data(1);data(1); data(0);data(0);data(0);data(1); data(1);data(0);data(0);data(0); data(1);data(0);data(1);data(1); break; case 'T':data(1);data(0);data(0);data(0); data(0);data(1);data(0);data(0); data(1);data(1);data(0);data(0); data(0);data(0);data(0);data(0); break; case 'U':data(0);data(0);data(1);data(0); data(0);data(0);data(1);data(1); data(0);data(0);data(1);data(0); data(0);data(0);data(1);data(1); break; case 'V':data(0);data(0);data(1);data(0); data(1);data(0);data(1);data(0); data(0);data(0);data(0);data(1); data(0);data(0);data(0);data(0); break; case 'W':data(0);data(0);data(0);data(0); data(0);data(0);data(0);data(0); data(0);data(0);data(0);data(0); data(0);data(0);data(0);data(0); break; case 'X':data(0);data(1);data(0);data(0); data(1);data(0);data(0);data(0); data(0);data(0);data(0);data(1); data(0);data(1);data(0);data(0); break; case 'Y':data(0);data(0);data(1);data(1); data(0);data(1);data(0);data(0); data(0);data(0);data(1);data(0); data(1);data(0);data(0);data(0); break; case 'Z':data(1);data(0);data(0);data(0); data(1);data(0);data(0);data(1); data(1);data(0);data(0);data(1); data(0);data(0);data(0);data(1); break; case '-':data(0);data(0);data(0);data(0); data(0);data(0);data(0);data(0); data(0);data(0);data(0);data(0); data(1);data(0);data(0);data(0); break; case ' ':data(0);data(0);data(0);data(0); data(0);data(0);data(0);data(0); data(0);data(0);data(0);data(0); data(0);data(0);data(0);data(0); break; case '+':data(0);data(0);data(0);data(1); data(0);data(1);data(0);data(0); data(0);data(1);data(0);data(0); data(1);data(0);data(0);data(0); break; case 51 :data(0);data(0);data(0);data(1); break; // Точки case 52 :data(0);data(0);data(1);data(0); break; case 53 :data(0);data(1);data(0);data(0); break; case 54 :data(0);data(0);data(0);data(0); break; } CS=1; } /********************** Очистка экрана *********************/ void clear() { unsigned char i; // Стираем все символы for (i=0;i<10;i++) { CS=0; data(1); data(0); data(1); switch (i) { case 0:data(0);data(0);data(0);data(0);data(0);data(0); break;//0x00 case 1:data(0);data(0);data(0);data(1);data(0);data(0); break;//0x04 case 2:data(0);data(0);data(1);data(0);data(0);data(0); break;//0x08 case 3:data(0);data(0);data(1);data(1);data(0);data(0); break;//0x0C case 4:data(0);data(1);data(0);data(0);data(0);data(0); break;//0x10 case 5:data(0);data(1);data(0);data(1);data(0);data(0); break;//0x14 case 6:data(0);data(1);data(1);data(0);data(0);data(0); break;//0x18 case 7:data(0);data(1);data(1);data(1);data(0);data(0); break;//0x1C case 8:data(1);data(0);data(0);data(0);data(0);data(0); break;//0x20 case 9:data(1);data(0);data(0);data(1);data(0);data(0); break;//0x24 } data(0);data(0);data(0);data(0); data(0);data(0);data(0);data(0); data(0);data(0);data(0);data(0); data(0);data(0);data(0);data(0); CS=1; } // Стираем все точки for (i=0;i<4;i++) { CS=0; data(1); data(0); data(1); switch (i) { case 0:data(1);data(0);data(1);data(0);data(0);data(1); break;//0x29 case 1:data(1);data(0);data(1);data(0);data(1);data(1); break;//0x2B case 2:data(1);data(0);data(1);data(1);data(0);data(1); break;//0x2D } data(0);data(0);data(0);data(0); CS=1; } }