ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
3 июля
89732
Maxxxxxxx (18.05.2007 17:25, просмотров: 2384)
Подключил ЖКИ MT-10S1(МЭЛТ) по 4-х битному интерфейсу. Но выводит какую-то ерунду... Помогите пожалуйста! Подключил ЖКИ. Для работы по 4-х битному интерфейсу. Написал программу, в кот. в 7 разряде дисплея должен выводиться симов Z(5Ah). Но у меня выводится какой-то квадратик, а иногда символ "e" в 3 разряде. ЧТо не так? Всю ночь сидел, но так и не разобрался пока... Пишу программу в AVR Studio 4. Вот листинг: /*Вывод ЖКИ МЭЛТ MT-10S1 Тактовая частота микроконтроллера ATtiny2313 8МГц- -следовательно длительность одног такта 125ns*/ #include <io2313v.h> // задержка void delay(int takt) { while(takt--); } // передача байта команды в 4-х битном режиме void command(int reg) { int i; PORTB = reg; // сначала старшие PB4-PB7 // A=0(поразрядное И с 11111011) PORTB &= 0x00FB; //необходимо выдержать Tas=100ns delay(1); // E=1 PORTB |= 0x0008; // удерживаем E=1 в течение PWeh=700ns delay(6); // строб E=0 PORTB &= 0x00F7; //удерживаем данные delay(40000); // сдвигаем младшие 4 бита на PB4-PB7 reg = reg << 4; // A=0(поразрядное И с 11111011) reg &= 0x00FB; // работаем с младшими 4-мя битами PORTB = reg; //необходимо выдержать Tas=100ns delay(1); // E=1 PORTB |= 0x0008; // удерживаем E=1 в течение PWeh=700ns delay(6); // строб E=0 PORTB &= 0x00F7; //удерживаем данные delay(40000); } // передача байта данных в 4-х битном режиме void data(int reg) { int i; PORTB = reg; // сначала старшие PB4-PB7 // A=1(поразрядное ИЛИ с 00000100) PORTB |= 0x0004; //необходимо выдержать Tas=100ns delay(1); // E=1 PORTB |= 0x0008; // удерживаем E=1 в течение PWeh=700ns delay(6); // строб E=0 PORTB &= 0x00F7; //удерживаем данные delay(40000); // сдвигаем младшие 4 бита на PB4-PB7 reg = reg << 4; // A=1(поразрядное И с 11111011) reg |= 0x0004; // работаем с младшими 4-мя битами PORTB = reg; //необходимо выдержать Tas=100ns delay(1); // E=1 PORTB |= 0x0008; // удерживаем E=1 в течение PWeh=700ns delay(6); // строб E=0 PORTB &= 0x00F7; //удерживаем данные delay(40000); } // Инициализация модуля ЖКИ void init(void) { int registr, i; PORTB &= 0x00F7; for(i=0; i<=3; i++) { delay(50000); } PORTB = 0x0030; delay(1); PORTB |= 0x0008; delay(2); PORTB &= 0x00F7; delay(320); PORTB |= 0x0008; delay(2); PORTB &= 0x00F7; delay(320); PORTB |= 0x0008; delay(2); PORTB &= 0x00F7; delay(320); PORTB = 0x0020; PORTB |= 0x0008; delay(2); PORTB &= 0x00F7; delay(3); // разрядность registr = 0x0028; command(registr); delay(320); // включает индикатор registr = 0x000C; command(registr); delay(320); // очистка и в левую позицию registr = 0x0001; command(registr); delay(40000); registr = 0x0006; command(registr); delay(320); } void main(void) { // Инициализация портов процессора DDRB = 0x00FF; PORTB = 0x0000; int registr; // инициализация модуля ЖКИ init(); // установка адреса ячейки памяти, в кот. помещ. символ для отобр. в 7 разряде ЖКИ registr = 0x0086; command(registr); //delay(800); // вывод буквы Z(eng) registr = 0x005A; data(registr); while (1); }