Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс. e-mail:jobsmp@pochta.ru |
Пишу программу в AVR Studio 4. Вот листинг:
/*Вывод ЖКИ МЭЛТ MT-10S1
Тактовая частота микроконтроллера ATtiny2313 8МГц-
-следовательно длительность одног такта 125ns*/
#include // задержка // передача байта команды в 4-х битном режиме // сдвигаем младшие 4 бита на PB4-PB7 // передача байта данных в 4-х битном режиме // сдвигаем младшие 4 бита на PB4-PB7 // Инициализация модуля ЖКИ PORTB &= 0x00F7; PORTB = 0x0030; PORTB |= 0x0008; // разрядность registr = 0x0006; } int registr; // установка адреса ячейки памяти, в кот. помещ. символ для отобр. в 7 разряде ЖКИ
void delay(int takt)
{
while(takt--);
}
void command(int reg)
{
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;
//удерживаем данные в течение Th=30ns
delay(800);
reg = reg << 4;
// работаем с младшими 4-мя битами
PORTB = reg;
// A=0(поразрядное И с 11111011)
PORTB &= 0x00FB;
//необходимо выдержать Tas=100ns
delay(1);
// E=1
PORTB |= 0x0008;
// удерживаем E=1 в течение PWeh=700ns
delay(6);
// строб E=0
PORTB &= 0x00F7;
//удерживаем данные в течение Th=30ns
delay(800);
}
void data(int reg)
{
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;
//удерживаем данные в течение Th=30ns
delay(800);
reg = reg << 4;
// работаем с младшими 4-мя битами
PORTB = reg;
// A=1(поразрядное И с 11111011)
PORTB |= 0x0004;
//необходимо выдержать Tas=100ns
delay(1);
// E=1
PORTB |= 0x0008;
// удерживаем E=1 в течение PWeh=700ns
delay(6);
// строб E=0
PORTB &= 0x00F7;
//удерживаем данные в течение Th=30ns
delay(800);
}
void init(void)
{
int registr, i;
for(i=0; i<=4; i++)
{
delay(40000);
}
for(i=0; i<=8; i++)
{
delay(40000);
}
delay(6);
PORTB &= 0x00F7;
delay(800);
PORTB |= 0x0008;
delay(6);
PORTB &= 0x00F7;
delay(800);
PORTB |= 0x0008;
delay(6);
PORTB &= 0x00F7;
delay(800);
PORTB = 0x0020;
PORTB |= 0x0008;
delay(6);
PORTB &= 0x00F7;
delay(3);
registr = 0x0028;
command(registr);
delay(800);
// включает индикатор
registr = 0x000E;
command(registr);
delay(800);
// очистка и в левую позицию
registr = 0x0001;
command(registr);
delay(32000);
command(registr);
delay(800);
void main(void)
{
// Инициализация портов процессора
DDRB = 0x00FF;
// инициализация модуля ЖКИ
init();
registr = 0x0086;
command(registr);
// вывод буквы A(eng)
registr = 0x005A;
data(registr);
while (1);
}
Ответы