Составители:
43
const key8segm: string =
#$F9+#$A4+#$B0+#$99+#$92+#$82+#$F8+#$80+#$90+#$7F+#$C0+#$B6;
{ Var Declarations } //== инверсные 8-ми сегментные коды клавиш/цифр
{$IDATA}
var sound :boolean;
s:string[5];//== для хранения 8-ми сегм. Цифр
maskind,j,key,kn,e2temp: byte;
adccode:word;
{--------------------------------------------------------------}
{ functions }
{--------------------------------------------------------------}
function ScanKeyOnce (var kn: byte):boolean;//== однокр. сканир. клав-ры
var row,col: byte; //== var kn: параметр-переменная № клавиши
var delay:word;
begin
for col:=0 to 3 do //== сканируем по столбцам матрицы клавиатуры
PORTD:=not(1 shl col);//== 11111110,11111101,11111011,11110111 бегущий
ноль)
for row:=0 to 2 do //== сканируем по строкам матрицы клавиатуры
if ((PIND and ($10 shl row))=0) then //== если обнаружен ноль, то
kn := col*3+row;//== вычисляем порядковый № клавиши (0..11)
for delay:=0 to 5000 do endfor;//== задержка на дребезг контактов
return (true); //== возвращаем бит "обнаружено нажатие клавиши"
endif;
endfor;
endfor;
return (false); //== возвращаем бит "ни одна из клавиш не нажата"
end;
procedure Init_Ports; //== задаем направления передачи данных через порты,
begin //== а также начальные значения
DDRD:=%10001111;//== PD0..PD3 выводим "бегущий 0", PD4..PD6
считываем код возврата
//== линия PORTD.7 подключена к пъезодинамику, поэтому настроим ее
на вывод
DDRC:=$FF; //== порт C на вывод 8-ми сегментного кода
DDRE:=%11110000;//== бит7 порта E (LED) на вывод(по RESET'у все
порты настроены на ввод)
//== 6,5,4 биты на базы транзисторов, коллекторы к общим анодам
индикаторов
PORTE:=%11111111;//== гасим индикаторы, подавая на их аноды нули
через инверторы
end;
procedure Init_Timer0Async;//== настройка Таймера0 для работы от кварца
32768Гц
begin
Страницы
- « первая
- ‹ предыдущая
- …
- 41
- 42
- 43
- 44
- 45
- …
- следующая ›
- последняя »