лабы. Laboratornye_raboty_1-5 Микропроцессорные системы. Методические указания к лабораторным работам 15 по дисциплине "Микропроцессорные системы" для студентов направления подготовкиспециальности
Скачать 1.97 Mb.
|
//ТАБЛИЦЫ МЕЛОДИЙ //В траве сидел кузнечик 7 flash unsigned char mell[] = {109, 104, 109, 104, 109, 108, 108, 96, 108, 104, 108, 104, 108, 109, 109, 96, 109, 104, 109, 104, 109, 108, 108, 96, 108, 104, 108, 104, 108, 141, 96, 109, 111, 79, 78, 111, 111, 112, 80, 80, 112, 112, 112, 111, 109, 108, 109, 109, 96, 111, 79, 79, 111, 111, 112, 80, 80, 112, 112, 112, 111, 109, 108, 141, 128, 96, 255}; //Улыбка 32 flash unsigned char mel7[] = {107, 104, 141, 139, 102, 105, 104, 102, 164, 128, 104, 107, 109, 109, 109, 111, 114, 112, 111, 109, 144, 139, 128, 109, 111, 144, 96, 111, 109, 104, 107, 105, 173, 128, 111, 109, 112, 107, 111, 109, 109, 107, 102, 104, 134, 132, 128, 100, 103, 107, 107, 107, 107, 139, 112, 100, 103, 102, 102, 102, 134, 102, 103, 107, 105, 107, 108, 108, 108, 108, 107, 105, 107, 108, 144, 142, 128, 112, 107, 110, 140, 112, 105, 108, 107, 107, 107, 105, 140, 139, 139, 112, 103, 102, 103, 105, 108, 107, 105, 103, 128, 112, 107, 110, 108, 108, 108, 140, 112, 105, 108, 107, 107, 107, 139, 112, 103, 102, 103, 105, 108, 107, 105, 103, 105, 139, 132, 128, 96, 96, 96, 255}; //ТАБЛИЦА АДРЕСОВ ВСЕХ МЕЛОДИЙ flash unsigned char *tabm[]={mel1,mel2,mel3,mel4,mel5,mel6,mel7}; void main(void){ unsigned char count; // Определяем переменную count-номер мелодии unsigned char temp; //Определяем переменную temp unsigned char fnota; //Код тона ноты unsigned char dnota; //Код длительности ноты flash unsigned char *nota; //Ссылка на текущую ноту PORTB=0x08; //Инициализация порта РВ DDRB=0x08; PORTD=0x7F; //Инициализация порта PD DDRD=0x00; ACSR=0x80; //Инициализация (отключение) компаратора TCCR1A=0x00; //Инициализация таймера счетчика Т1 TCCR1B=0x0 9; while (1) { m1: temp=PIND; for (count=0; count<7; count++){ //Цикл сканирования датчиков if ((temp&l)==0) goto m3; //Проверка младшего бита переменной temp temp >>= 1; // Сдвиг содержимого temp } m2: TCR1A = 0x00; //Выключение звука goto m1; //Переход на начало //Воспроизведение мелодии m3: nota = tabm[count]; //Устанавливаем указатель на первую ноту m4: if (PIND==0x7F) goto m2 //Если ни одна кнопка не нажата, закончить if (*nota==0xFF) goto m3; //Проверка на конец мелодии fnota =(*nota)&0x1F; //Определяем код тона dnota = ((*nota)>>5)&0x07; //Определяем код длит-ти if (fnota==0) goto m5; //Если пауза не воспр-м звук OCR1A=tabkd[fnota]; //Программируем частоту звука TCCR1A=0x40; // Включаем звук m5: delay_ms(tabz[dnota]); //Формируем задержку TCCR1A=0x00; //Выключаем звук delay_ms(tabz[0]); //Задержка между нотами nota++; //Перемещаем указатель на следующую ноту goto m4; //Переход к началу цикла } } |