st = 2 then p2 = 11111011b; st = 3 then p2 = 11110111b; st = 4 then p2 = 11101111b; st = 5 then p2 = 11011111b; st = 6 then p2 = 10111111b; st = 7 then p2 = 01111111b; p0.2 = 0 then kl = st * 6 +1; p0.3 = 0 then kl = st * 6 +2; p0.4 = 0 then kl = st * 6 +3; p0.5 = 0 then kl = st * 6 +4; p0.6 = 0 then kl = st * 6 +5; p0.7 = 0 then kl = st * 6 +6; p0 .7 = 0 then kl = st * 6 +6; kl <> klp then do; klo = klp; klp = kl; end ;/ * натиснута інша клавіша */time_int;
/*************** основна програма ****************/
/* Ініціалізація */
stolbec = 11111110b ;/ * призначаємо 1 стовпець для сканування */
P2 = stolbec; = 11111100b ;/ * напрямок введення для ліній клавіатури */
Baz = 0; power = 36 ;/ * базове зміщення октав 0 сила натиснутий 36 */
flag = 0; dpp = 2; = 60h; ADCCON2 = 0;
/* ініціалізація таймерів та послідовного каналу */
et0 = 1;
tr0 = 1; tr1 = 1; tr2 = 1 ;/ * включаємо всі три таймера */
tf0 = 0; tf1 = 0; tf2 = 0;
Cnt2 = 0; Cap2 = 0 ;/ * робота як таймер з перезавантаженням дільника */
Tclk = 1 ;/ * использ Т1 для синхронізації послід порту */
Th0 = 0; Th1 = 0f4h; Tl0 = 0; Tl1 = 0f4h; 2h = 0ffh; rcap2l = 70h ;/ * установ. предільника для перезавантаження Т2 */
tmod = 00100001b ;/ * T0 14 розрядний T1 8 розрядів з перезавантаженням */
scon = 01000000h ;/ * синхронізувати послід порт по T1 */
do while 1 ;/ * нескінченний цикл сканування клавіш */
if (kl = 48) and (klp <> kl) then do;/* цикл установки зміщення октави */
do while kl <> 0; end;/* чекаємо, коли відпустять клавішу 48 */
do while kl = 0; end;/* чекаємо, коли натиснуть клавішу */
if kl <= 4 then baz = kl/* якщо натиснута одна з чотирьох перших клавіш, */
/* встановлюємо зміщення октави */
else baz = 0;
klp = kl;
p0 = baz;/* виводимо зрушення октави на індикатор */
end; = 1; flag = 0;/* запускаємо АЦП */while flag = 0;/* і чекаємо поки він відпрацює */
end;
if klo> 0 then do;/* якщо є відпущена клавіша */
sbuf = klo/12 + baz; call time (50) ;/ * передаємо номер октави відпущені. клавіші */
sbuf = (klo mod 12) or 80h; call time (50) ;/ * передаємо номер відпущений. клавіші */
klo = 0; end;/* з встановленим сьомим бітом */
if (kl> 0) and (klp <> kl) then do;/* якщо натиснута нова клавіша */= klp/12 + baz; call time (50) ;/ * передаємо номер октави...