Главная Микроконтроллеры [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] [36] [37] [ 38 ] [39] [40] [41] [42] [43] [44] [45] [46] [47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [57] [58] [59] [60] [61] [62] [63] [64] [65] [66] [67] [68] [69] [70] [71] [72] [73] [74] [75] [76] [77] [78] [79] [80] [81] [82] [83] [84] [85] [86] [87] [88] [89] [90] [91] [92] [93] Использование встроенного EEPROM Материал взят из демонстрационной версии компилятора Code-VisionAVR С Compiler, автором которого является Pavel Haiduc, HP InfoTech S.R.L. Текст программы: Контроллер: AT90S2313 Модель памяти: TINY Размер стека данных: 64 bytes flash char f[]="This is a test"; Spragma warn-eeprom char e[16]; Spragma warn+ char r[16]; void main (void) « char flash -ptr.to.flash; char eeprom •ptr to eeprom; char •ptr to ran; Копировать строку f из FLASH в строку e в EEPROM ptr to flash=f; ptr to eeprom=e; while (-ptr.to.flash) «ptr to eeprom++=«ptr to flash++; Копировать строку e из EEPROM в строку г в оперативной памяти ptr to eeprom=e; ptr to ram=r; while (*ptr to eeprom) •ptr to ram++=:*ptr to eeprom++; Стоп (бесконечный цикл) while (1); Работа с клавиатурой 4x4 PDO PD1 PD2 РОЗ PD4 PD5 R1-R4 470 VD1-VD4flSE Рис. 4.11. Схема соединения клавиатуры 4x4 Для индикации использован 2 х 16 алфавитно-цифровой ЖКИ, подсоединенный к порту PORTC следующим образом:
Текст программы: ttasm • equ lcd port=0x15 #endasm Binclude <lcd.h> Binclude <stdio.h> Binclude <delay.h> Binclude <90sB515.h> Частота кварцевого резонатора [Гц] Bdefine F XTAL 4000000L Линии PINDO...3 будут входами строк Bdefine KEYIN PIND Линии P0RTD4..7 будут выходами столбцов Bdefine KEYOUT PORTD II Инициализация использованного таймера TIHERO ((define INIT TIHERO rCNr0=0x100L-F XTAL/64L/500L ((define FIRST.COLIHN 0x80 ((define LAST C0LlHN 0x10 typedef unsigned char byte; Здесь в виде бита сохраняется состояние каждой нажатой клавиши, бит О будет KEY0, бит 1 KEY1,... unsigned keys; Буфер ЖКИ-индикатора char buf[33]; Прерывание по таймеру TIMER О каждые 2 мс interrupt [TIH0 0VF] void timerO int(void) { static byte key pressed counter=20; static byte key released counter,column=FIRST COLUHN; static unsigned row data.crt key; Перезагрузить таймер TIHERO INIT TIHER0; row data«=4; Получить группу из 4 клавиш в переменной row data row data="KEYIN&Oxf; column»=1; if (column==(LAST C0LlHN»1)) { column=FIRST COLlHN; if (row data==0) goto new key; if (key released counter) --key released counter; else { if (--key pressed counter==9) crt key=row data; . else { if (row data!=crt key) { new key; key pressed counter=10; key released coijnter=0; goto end key; }; if (!key pressed coLnter) ( keys=row data; key released. count er =20; }; >; >; end key:; [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] [36] [37] [ 38 ] [39] [40] [41] [42] [43] [44] [45] [46] [47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [57] [58] [59] [60] [61] [62] [63] [64] [65] [66] [67] [68] [69] [70] [71] [72] [73] [74] [75] [76] [77] [78] [79] [80] [81] [82] [83] [84] [85] [86] [87] [88] [89] [90] [91] [92] [93] 0.001 |